20260827173205

This commit is contained in:
oneao committed 2026-08-27 17:32:05 +08:00
1 parent 60cacfa8fb
commit 3824af0f12
38 files changed
+2398 -3552

No files matched your search

@@ -1,7 +1,7 @@
<script setup>
import { computed, onBeforeUnmount, onMounted, ref } from 'vue'
import { RotateCcw } from '@lucide/vue'
import Button from '@/components/ui/button/button.vue'
import { Button } from '@/components/ui'
defineOptions({ inheritAttrs: false })
@@ -1,10 +1,7 @@
<script setup>
import { computed, h } from 'vue'
import { Trash2, Download, Eye, MoreHorizontal } from '@lucide/vue'
import Button from '@/components/ui/button/button.vue'
import Checkbox from '@/components/ui/checkbox/checkbox.vue'
import Tag from '@/components/ui/tag/tag.vue'
import Dropdown from '@/components/ui/dropdown/dropdown.vue'
import { Button, Checkbox, Tag, Dropdown } from '@/components/ui'
import { getPreviewUrl } from '@/services/fileService'
import {
extFromName,
@@ -1,7 +1,6 @@
<script setup>
import { computed } from 'vue'
import Tree from '@/components/ui/tree/tree.vue'
import Spin from '@/components/ui/spin/spin.vue'
import { Tree, Spin } from '@/components/ui'
const props = defineProps({
treeData: { type: Array, default: () => [] },
@@ -1,14 +1,16 @@
<script setup>
import { ref, computed, watch, onMounted, onUnmounted } from 'vue'
import { Message } from '@/components/ui/message/message-manager'
import Modal from '@/components/ui/modal/modal.vue'
import Button from '@/components/ui/button/button.vue'
import ButtonGroup from '@/components/ui/button-group/button-group.vue'
import Checkbox from '@/components/ui/checkbox/checkbox.vue'
import Spin from '@/components/ui/spin/spin.vue'
import Tag from '@/components/ui/tag/tag.vue'
import Tooltip from '@/components/ui/tooltip/tooltip.vue'
import Pagination from '@/components/ui/pagination/pagination.vue'
import {
Message,
Modal,
Button,
ButtonGroup,
Checkbox,
Spin,
Tag,
Tooltip,
Pagination,
} from '@/components/ui'
import {
Download,
Trash2,
@@ -1,7 +1,7 @@
<script setup>
import { computed } from 'vue'
import { ChevronLeft, ChevronRight, FileText } from '@lucide/vue'
import Button from '@/components/ui/button/button.vue'
import { Button } from '@/components/ui'
import { getPreviewUrl } from '@/services/fileService'
import { extColor, formatSize } from './fileVisual'
@@ -1,8 +1,6 @@
<script setup>
import { ref, computed, watch, onMounted } from 'vue'
import Splitter from '@/components/ui/splitter/splitter.vue'
import SplitterPanel from '@/components/ui/splitter/panel.vue'
import Spin from '@/components/ui/spin/spin.vue'
import { Splitter, SplitterPanel, Spin } from '@/components/ui'
import { loadDataApi } from '@/services/api'
import FileCategoryPanel from './FileCategoryPanel.vue'
import FileListPanel from './FileListPanel.vue'
@@ -1,5 +1,5 @@
<script setup>
import Modal from '@/components/ui/modal/modal.vue'
import { Modal } from '@/components/ui'
import { useFileModal } from './useFileModal'
import FmsFile from './FmsFile.vue'
@@ -23,6 +23,9 @@ const props = defineProps({
labelWidth: { type: [String, Number], default: undefined },
/** 每行字段列数(>1 时启用网格布局,字段按顺序从左到右自动换行) */
columns: { type: Number, default: 1 },
/** 仅影响 FormItem 的 span 计算,不让 Form 自身变 grid(grid 由外部容器控制):
* 用于「外部自定义栅格 + FormItem 跨列」的场景(如表单设计器预览) */
spanColumns: { type: Number, default: 0 },
/** 表单最大宽度(Number 按 px 处理;不传则不限制) */
maxWidth: { type: [String, Number], default: undefined },
/** 必填红星标记 */
@@ -99,7 +102,7 @@ provide('fms-form', {
layout: computed(() => props.layout),
labelAlign: computed(() => props.labelAlign),
labelWidth: computed(() => props.labelWidth),
columns: computed(() => props.columns),
columns: computed(() => props.spanColumns || props.columns),
requiredMark: computed(() => props.requiredMark),
validateTrigger: computed(() => props.validateTrigger),
registerField,
@@ -0,0 +1,64 @@
/**
* UI 组件库统一出口
* 用法:import { Button, Input, Modal, Message } from '@/components/ui'
*/
import Button from './button/button.vue'
import ButtonGroup from './button-group/button-group.vue'
import Checkbox from './checkbox/checkbox.vue'
import DatePicker from './date/date-picker.vue'
import RangePicker from './date/range-picker.vue'
import TimeSelect from './date/time-select.vue'
import Drawer from './drawer/drawer.vue'
import Dropdown from './dropdown/dropdown.vue'
import Form from './form/form.vue'
import FormItem from './form/form-item.vue'
import Input from './input/input.vue'
import Modal from './modal/modal.vue'
import Pagination from './pagination/pagination.vue'
import Popover from './popover/popover.vue'
import Radio from './radio/radio.vue'
import RadioGroup from './radio/radio-group.vue'
import Scrollbar from './scrollbar/scrollbar.vue'
import Select from './select/select.vue'
import Spin from './spin/spin.vue'
import Splitter from './splitter/splitter.vue'
import SplitterPanel from './splitter/panel.vue'
import Switch from './switch/switch.vue'
import Tabs from './tabs/tabs.vue'
import TabPane from './tabs/tab-pane.vue'
import Tag from './tag/tag.vue'
import Tooltip from './tooltip/tooltip.vue'
import Tree from './tree/tree.vue'
import { Message } from './message/message-manager'
export {
Button,
ButtonGroup,
Checkbox,
DatePicker,
RangePicker,
TimeSelect,
Drawer,
Dropdown,
Form,
FormItem,
Input,
Message,
Modal,
Pagination,
Popover,
Radio,
RadioGroup,
Scrollbar,
Select,
Spin,
Splitter,
SplitterPanel,
Switch,
Tabs,
TabPane,
Tag,
Tooltip,
Tree,
}
@@ -71,9 +71,12 @@ const isOpen = computed({
},
})
const panelWidth = computed(() =>
typeof props.width === 'number' ? `${props.width}px` : props.width,
)
// number 按 px,纯数字字符串补 px,其余(如 480px / 60%)按 CSS 原样
const panelWidth = computed(() => {
if (typeof props.width === 'number') return `${props.width}px`
const text = String(props.width).trim()
return /^\d+(\.\d+)?$/.test(text) ? `${text}px` : text
})
// 面板尺寸:缩放后使用实际宽高(px),否则用 width prop
const panelStyle = computed(() => {