es-plus-ui 1.0.0 → 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1040 -942
- package/dist/es-plus.js +938 -922
- package/dist/es-plus.js.map +1 -1
- package/dist/es-plus.umd.cjs +1 -1
- package/dist/es-plus.umd.cjs.map +1 -1
- package/dist/src/composables/use-form-request.d.ts +1 -1
- package/dist/style.css +1 -1
- package/package.json +70 -70
package/dist/es-plus.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"es-plus.js","sources":["../node_modules/element-plus/es/locale/lang/zh-cn.mjs","../src/components/es-dialog/src/render-jsx.vue","../src/components/es-table/src/column-item.vue","../src/components/es-table/src/table-btns.vue","../src/composables/use-table-resize.ts","../src/composables/use-table-selection.ts","../src/utils/shared.ts","../src/components/es-table/src/component.vue","../src/components/es-table/index.ts","../src/composables/use-form-inputs.ts","../src/composables/use-form-layout.ts","../src/composables/use-form-request.ts","../src/components/es-dialog/src/use-dialog.ts","../src/components/es-form/src/es-form.vue","../src/components/es-form/index.ts","../src/components/es-dialog/src/component.vue","../src/components/es-dialog/index.ts","../src/components/svg-icon/src/svg-icon.vue","../src/components/svg-icon/index.ts","../src/index.ts"],"sourcesContent":["//#region ../../packages/locale/lang/zh-cn.ts\nvar zh_cn_default = {\n\tname: \"zh-cn\",\n\tel: {\n\t\tbreadcrumb: { label: \"面包屑\" },\n\t\tcolorpicker: {\n\t\t\tconfirm: \"确定\",\n\t\t\tclear: \"清空\",\n\t\t\tdefaultLabel: \"颜色选择器\",\n\t\t\tdescription: \"当前颜色 {color},按 Enter 键选择新颜色\",\n\t\t\talphaLabel: \"选择透明度的值\",\n\t\t\talphaDescription: \"透明度 {alpha}, 当前颜色 {color}\",\n\t\t\thueLabel: \"选择色相值\",\n\t\t\thueDescription: \"色相 {hue}, 当前颜色 {color}\",\n\t\t\tsvLabel: \"选择饱和度与明度的值\",\n\t\t\tsvDescription: \"饱和度 {saturation}, 明度 {brightness}, 当前颜色 {color}\",\n\t\t\tpredefineDescription: \"选择 {value} 作为颜色\"\n\t\t},\n\t\tdatepicker: {\n\t\t\tnow: \"此刻\",\n\t\t\ttoday: \"今天\",\n\t\t\tcancel: \"取消\",\n\t\t\tclear: \"清空\",\n\t\t\tconfirm: \"确定\",\n\t\t\tdateTablePrompt: \"使用方向键与 Enter 键可选择日期\",\n\t\t\tmonthTablePrompt: \"使用方向键与 Enter 键可选择月份\",\n\t\t\tyearTablePrompt: \"使用方向键与 Enter 键可选择年份\",\n\t\t\tselectedDate: \"已选日期\",\n\t\t\tselectDate: \"选择日期\",\n\t\t\tselectTime: \"选择时间\",\n\t\t\tstartDate: \"开始日期\",\n\t\t\tstartTime: \"开始时间\",\n\t\t\tendDate: \"结束日期\",\n\t\t\tendTime: \"结束时间\",\n\t\t\tprevYear: \"前一年\",\n\t\t\tnextYear: \"后一年\",\n\t\t\tprevMonth: \"上个月\",\n\t\t\tnextMonth: \"下个月\",\n\t\t\tyear: \"年\",\n\t\t\tmonth1: \"1 月\",\n\t\t\tmonth2: \"2 月\",\n\t\t\tmonth3: \"3 月\",\n\t\t\tmonth4: \"4 月\",\n\t\t\tmonth5: \"5 月\",\n\t\t\tmonth6: \"6 月\",\n\t\t\tmonth7: \"7 月\",\n\t\t\tmonth8: \"8 月\",\n\t\t\tmonth9: \"9 月\",\n\t\t\tmonth10: \"10 月\",\n\t\t\tmonth11: \"11 月\",\n\t\t\tmonth12: \"12 月\",\n\t\t\tweeks: {\n\t\t\t\tsun: \"日\",\n\t\t\t\tmon: \"一\",\n\t\t\t\ttue: \"二\",\n\t\t\t\twed: \"三\",\n\t\t\t\tthu: \"四\",\n\t\t\t\tfri: \"五\",\n\t\t\t\tsat: \"六\"\n\t\t\t},\n\t\t\tweeksFull: {\n\t\t\t\tsun: \"星期日\",\n\t\t\t\tmon: \"星期一\",\n\t\t\t\ttue: \"星期二\",\n\t\t\t\twed: \"星期三\",\n\t\t\t\tthu: \"星期四\",\n\t\t\t\tfri: \"星期五\",\n\t\t\t\tsat: \"星期六\"\n\t\t\t},\n\t\t\tmonths: {\n\t\t\t\tjan: \"一月\",\n\t\t\t\tfeb: \"二月\",\n\t\t\t\tmar: \"三月\",\n\t\t\t\tapr: \"四月\",\n\t\t\t\tmay: \"五月\",\n\t\t\t\tjun: \"六月\",\n\t\t\t\tjul: \"七月\",\n\t\t\t\taug: \"八月\",\n\t\t\t\tsep: \"九月\",\n\t\t\t\toct: \"十月\",\n\t\t\t\tnov: \"十一月\",\n\t\t\t\tdec: \"十二月\"\n\t\t\t}\n\t\t},\n\t\tinputNumber: {\n\t\t\tdecrease: \"减少数值\",\n\t\t\tincrease: \"增加数值\"\n\t\t},\n\t\tselect: {\n\t\t\tloading: \"加载中\",\n\t\t\tnoMatch: \"无匹配数据\",\n\t\t\tnoData: \"无数据\",\n\t\t\tplaceholder: \"请选择\"\n\t\t},\n\t\tmention: { loading: \"加载中\" },\n\t\tdropdown: { toggleDropdown: \"切换下拉选项\" },\n\t\tcascader: {\n\t\t\tnoMatch: \"无匹配数据\",\n\t\t\tloading: \"加载中\",\n\t\t\tplaceholder: \"请选择\",\n\t\t\tnoData: \"暂无数据\"\n\t\t},\n\t\tpagination: {\n\t\t\tgoto: \"前往\",\n\t\t\tpagesize: \"条/页\",\n\t\t\ttotal: \"共 {total} 条\",\n\t\t\tpageClassifier: \"页\",\n\t\t\tpage: \"页\",\n\t\t\tprev: \"上一页\",\n\t\t\tnext: \"下一页\",\n\t\t\tcurrentPage: \"第 {pager} 页\",\n\t\t\tprevPages: \"向前 {pager} 页\",\n\t\t\tnextPages: \"向后 {pager} 页\",\n\t\t\tdeprecationWarning: \"你使用了一些已被废弃的用法,请参考 el-pagination 的官方文档\"\n\t\t},\n\t\tdialog: { close: \"关闭此对话框\" },\n\t\tdrawer: { close: \"关闭此对话框\" },\n\t\tmessagebox: {\n\t\t\ttitle: \"提示\",\n\t\t\tconfirm: \"确定\",\n\t\t\tcancel: \"取消\",\n\t\t\terror: \"输入的数据不合法!\",\n\t\t\tclose: \"关闭此对话框\"\n\t\t},\n\t\tupload: {\n\t\t\tdeleteTip: \"按 Delete 键可删除\",\n\t\t\tdelete: \"删除\",\n\t\t\tpreview: \"查看图片\",\n\t\t\tcontinue: \"继续上传\"\n\t\t},\n\t\tslider: {\n\t\t\tdefaultLabel: \"滑块介于 {min} 至 {max}\",\n\t\t\tdefaultRangeStartLabel: \"选择起始值\",\n\t\t\tdefaultRangeEndLabel: \"选择结束值\"\n\t\t},\n\t\ttable: {\n\t\t\temptyText: \"暂无数据\",\n\t\t\tconfirmFilter: \"筛选\",\n\t\t\tresetFilter: \"重置\",\n\t\t\tclearFilter: \"全部\",\n\t\t\tsumText: \"合计\",\n\t\t\tselectAllLabel: \"选择所有行\",\n\t\t\tselectRowLabel: \"选择当前行\",\n\t\t\texpandRowLabel: \"展开当前行\",\n\t\t\tcollapseRowLabel: \"收起当前行\",\n\t\t\tsortLabel: \"按 {column} 排序\",\n\t\t\tfilterLabel: \"按 {column} 过滤\"\n\t\t},\n\t\ttag: { close: \"关闭此标签\" },\n\t\ttour: {\n\t\t\tnext: \"下一步\",\n\t\t\tprevious: \"上一步\",\n\t\t\tfinish: \"结束导览\",\n\t\t\tclose: \"关闭此对话框\"\n\t\t},\n\t\ttree: { emptyText: \"暂无数据\" },\n\t\ttransfer: {\n\t\t\tnoMatch: \"无匹配数据\",\n\t\t\tnoData: \"无数据\",\n\t\t\ttitles: [\"列表 1\", \"列表 2\"],\n\t\t\tfilterPlaceholder: \"请输入搜索内容\",\n\t\t\tnoCheckedFormat: \"共 {total} 项\",\n\t\t\thasCheckedFormat: \"已选 {checked}/{total} 项\"\n\t\t},\n\t\timage: { error: \"加载失败\" },\n\t\tpageHeader: { title: \"返回\" },\n\t\tpopconfirm: {\n\t\t\tconfirmButtonText: \"确定\",\n\t\t\tcancelButtonText: \"取消\"\n\t\t},\n\t\tcarousel: {\n\t\t\tleftArrow: \"上一张幻灯片\",\n\t\t\trightArrow: \"下一张幻灯片\",\n\t\t\tindicator: \"幻灯片切换至索引 {index}\"\n\t\t}\n\t}\n};\n\n//#endregion\nexport { zh_cn_default as default };\n//# sourceMappingURL=zh-cn.mjs.map","<script >\nimport { defineComponent, h, reactive, isVNode, onMounted, onUpdated } from 'vue'\nimport { ElConfigProvider } from \"element-plus\"\nimport zhCn from 'element-plus/es/locale/lang/zh-cn'\n\nexport default defineComponent({\n name: 'RenderJsx',\n props: {\n refs: { type: [Function, Object], default: null },\n row: { type: Object, default: () => ({}) },\n render: { type: Function, default: () => {} },\n model: { type: Object, default: () => ({}) },\n instance: { type: Object, default: () => ({}) },\n components: { type: Object, default: () => ({}) },\n locale: { type: Object, default: null }\n },\n setup(props) {\n const refsObject = (props.refs && typeof props.refs === 'object') ? props.refs : reactive({})\n\n function getRawRef(vnodeRef) {\n if (!vnodeRef) return null\n if (typeof vnodeRef === 'function') return vnodeRef\n if (vnodeRef.r) {\n if (typeof vnodeRef.r === 'function') return vnodeRef.r\n if (vnodeRef.r && typeof vnodeRef.r === 'object' && 'value' in vnodeRef.r) {\n const refObj = vnodeRef.r\n return (val) => { refObj.value = val }\n }\n }\n return null\n }\n\n // Store the component VNode and user ref callback to use after mount\n let componentVNode = null\n let userRefCallback = null\n\n function flushRef() {\n if (!componentVNode) return\n const instance = componentVNode.component\n if (!instance) return\n // Use .exposed first — template refs on components with defineExpose\n // receive instance.exposed, not instance.proxy\n const comp = instance.exposed || instance.proxy\n if (!comp) return\n refsObject.currentRef = comp\n if (typeof userRefCallback === 'function') {\n userRefCallback(comp)\n }\n }\n\n onMounted(() => flushRef())\n onUpdated(() => flushRef())\n\n return () => {\n const { instance } = props\n const enhancedInstance = {\n ...instance,\n registerRef: (name, el) => {\n if (el !== null && el !== undefined) {\n refsObject[name] = el\n }\n },\n getRefs: () => refsObject\n }\n\n const renderContent = props.render(h, enhancedInstance, props.components || {}) || ''\n\n if (typeof renderContent === 'string') {\n componentVNode = null\n return h(ElConfigProvider, {\n locale: props.locale || zhCn\n }, () => h('span', {\n ref: (e) => { refsObject.currentRef = e }\n }, renderContent))\n }\n\n if (isVNode(renderContent)) {\n const isComponent = typeof renderContent.type !== 'string'\n if (isComponent) {\n componentVNode = renderContent\n userRefCallback = getRawRef(renderContent.ref) || getRawRef(renderContent.props?.ref)\n return renderContent\n }\n componentVNode = null\n return h(ElConfigProvider, {\n locale: props.locale || zhCn\n }, () => h('div', {\n ref: (e) => { refsObject.currentRef = e }\n }, [renderContent]))\n }\n\n componentVNode = null\n return h(ElConfigProvider, {\n locale: props.locale || zhCn\n }, () => h(renderContent, {\n ref: (e) => { refsObject.currentRef = e }\n }))\n }\n }\n})\n</script>\n","<template>\n <!-- 分组列处理 -->\n <el-table-column v-if=\"cols.groups && Array.isArray(cols.groups)\" v-bind=\"columnBindAttr(cols)\">\n <template v-for=\"(item, index) in cols.groups\" :key=\"item.prop || item.key || index\">\n <el-table-column v-if=\"item.render && typeof item.render === 'function'\" v-bind=\"columnBindAttr({ ...item, columnIndex: index })\">\n <template #default=\"scope\">\n <render-dom-tb\n v-if=\"scope && scope.row\"\n :row=\"scope.row\"\n :index=\"scope.$index\"\n :data-key=\"item.key\"\n :render=\"item.render\"\n />\n <span v-else>-</span>\n </template>\n </el-table-column>\n <el-table-column v-else-if=\"item.scopedSlots && item.scopedSlots.customRender\" v-bind=\"columnBindAttr({ ...item, columnIndex: index })\">\n <template #default=\"scope\">\n <slot\n v-if=\"scope && scope.row\"\n v-bind=\"{ ...item, row: scope.row, column: scope.column, scope: scope }\"\n :name=\"item.scopedSlots.customRender\"\n />\n <span v-else>-</span>\n </template>\n </el-table-column>\n <el-table-column v-else v-bind=\"columnBindAttr({ ...item, columnIndex: index })\" />\n </template>\n </el-table-column>\n\n <!-- 自定义渲染函数列 -->\n <el-table-column v-else-if=\"cols.render && typeof cols.render === 'function'\" v-bind=\"columnBindAttr(cols)\">\n <template #default=\"scope\">\n <render-dom-tb\n v-if=\"scope && scope.row\"\n :row=\"scope.row\"\n :index=\"scope.$index\"\n :data-key=\"cols.key\"\n :render=\"cols.render\"\n />\n <span v-else>-</span>\n </template>\n </el-table-column>\n\n <!-- 作用域插槽列 -->\n <el-table-column v-else-if=\"cols.scopedSlots && cols.scopedSlots.customRender\" v-bind=\"columnBindAttr(cols)\">\n <template #default=\"scope\">\n <slot\n v-if=\"scope && scope.row\"\n v-bind=\"{ ...cols, row: scope.row, column: scope.column, scope: scope }\"\n :name=\"cols.scopedSlots.customRender\"\n />\n <span v-else>-</span>\n </template>\n </el-table-column>\n\n <!-- 省略号工具提示列 -->\n <el-table-column v-else-if=\"cols.ellipsis && typeof cols.ellipsis === 'boolean'\" show-overflow-tooltip v-bind=\"columnBindAttr(cols)\" />\n\n <!-- 普通列 -->\n <el-table-column v-else v-bind=\"columnBindAttr(cols)\" />\n</template>\n\n<script setup lang=\"ts\">\nimport { h, defineComponent } from 'vue'\nimport { ElTableColumn } from 'element-plus'\nimport type { TableColumn } from '../../../types'\n\nconst props = defineProps<{\n cols: TableColumn\n}>()\n\n// 函数式组件定义\nconst RenderDomTb = defineComponent({\n props: {\n row: { type: Object, default: () => ({}) },\n index: { type: Number, default: 0 },\n dataKey: String,\n render: { type: Function, required: true }\n },\n setup(props) {\n return () => {\n const { row, index, dataKey, render } = props\n if (!row) return h('span', '-')\n const value = dataKey ? row[dataKey] : null\n try {\n const renderResult = render(h, { value, row, index })\n if (typeof renderResult === 'string') return h('span', renderResult)\n return renderResult\n } catch (error) {\n return h('span', '-')\n }\n }\n }\n})\n\nconst firstWordUpperCase = (str: string): string => {\n return str.charAt(0).toUpperCase() + str.slice(1).toLowerCase()\n}\n\nconst columnBindAttr = (cols: TableColumn) => {\n const options: Record<string, unknown> = {}\n\n for (const t in cols) {\n if (t === 'groups' || t === 'scopedSlots' || t === 'render') continue\n\n if (t.includes('-')) {\n const parts = t.split('-')\n let camelKey = parts[0]\n for (let i = 1; i < parts.length; i++) {\n camelKey += firstWordUpperCase(parts[i])\n }\n options[camelKey] = cols[t]\n } else if (t === 'key') {\n options.prop = cols[t]\n options[t] = cols[t]\n } else {\n options[t] = cols[t]\n }\n }\n\n if (!options.align) {\n options.align = 'center'\n }\n\n return options\n}\n</script>\n","<template>\n <div v-if=\"showContainer\" class=\"flex-float btns\">\n <div class=\"left-text\">\n {{ leftText }}\n </div>\n\n <div class=\"btn-container_block\">\n <!-- 左侧按钮组 -->\n <div class=\"btn-left\">\n <template v-for=\"(item, index) in processedBtnLeft\" :key=\"item.name\">\n <div v-if=\"!item.isHide\" :style=\"buttonContainerStyle(index)\">\n <render-dom v-if=\"item.render && typeof item.render === 'function'\" :render=\"item.render\" />\n <el-button v-else :type=\"item.type\" :size=\"item.size || 'small'\" :icon=\"item.icon\" :loading=\"item.loading || false\" v-bind=\"item\" :disabled=\"getDisabledState(item)\" @click=\"()=>item.click(instance)\">\n {{ item.name }}\n </el-button>\n </div>\n </template>\n </div>\n\n <!-- 右侧按钮组 -->\n <div class=\"btn-right\">\n <template v-for=\"(item, index) in processedBtnRight\" :key=\"item.name\">\n <div v-if=\"!item.isHide\" :style=\"buttonContainerStyle(index)\">\n <render-dom v-if=\"item.render && typeof item.render === 'function'\" :render=\"item.render\" />\n <el-button v-else :type=\"item.type\" :size=\"item.size || 'small'\" v-bind=\"item\" :icon=\"item.icon\" :loading=\"item.loading || false\" :disabled=\"getDisabledState(item)\" @click=\"() =>item.click(instance)\">\n {{ item.name }}\n </el-button>\n </div>\n </template>\n </div>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, h } from 'vue'\nimport { ElButton } from 'element-plus'\n\nconst props = defineProps<{\n leftText?: string\n btnConfig?: Array<Record<string, unknown>>\n instance?: Record<string, unknown>\n}>()\n\nconst RenderDom = (props: { render: () => unknown }) => {\n if (!props.render || typeof props.render !== 'function') return null\n try {\n return props.render()\n } catch {\n return null\n }\n}\n\nRenderDom.props = {\n render: { type: Function, required: true }\n}\n\nconst hasPermission = (_btnList: unknown[], pvalue?: string) => {\n if (!pvalue) return true\n return true\n}\n\nconst processButtonConfig = (config: Array<Record<string, unknown>>) => {\n return config.map((item) => {\n const processed = { ...item }\n const hasPerm = hasPermission([], item.permissionValue as string)\n\n if (!hasPerm) {\n processed.isHide = true\n } else if (typeof item.isHide === 'function') {\n processed.isHide = item.isHide()\n } else {\n processed.isHide = item.isHide || false\n }\n\n return processed\n })\n}\n\nconst processedBtnLeft = computed(() => {\n return processButtonConfig((props.btnConfig || []).filter((item) => item.code === 1)).filter((item) => !item.isHide)\n})\n\nconst processedBtnRight = computed(() => {\n return processButtonConfig((props.btnConfig || []).filter((item) => item.code === 2)).filter((item) => !item.isHide)\n})\n\nconst showContainer = computed(() => {\n return props.leftText || processedBtnLeft.value.length > 0 || processedBtnRight.value.length > 0\n})\n\nconst getDisabledState = (item: Record<string, unknown>) => {\n if (typeof item.disabled === 'function') {\n return item.disabled()\n }\n return item.disabled || false\n}\n\nconst buttonContainerStyle = (index: number) => {\n return {\n display: 'inline-block',\n marginLeft: index !== 0 ? '8px' : '0px'\n }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.btns {\n padding: 0;\n padding-bottom: 5px;\n display: flex;\n justify-content: space-between;\n align-items: center;\n}\n\n.left-text {\n color: rgb(125, 125, 125);\n font-size: 14px;\n // flex-grow: 1;\n}\n\n.btn-container_block {\n display: flex;\n justify-content: space-between;\n align-items: center;\n flex: 1;\n\n .btn-left {\n display: flex;\n justify-content: flex-start;\n align-items: center;\n flex-wrap: wrap;\n }\n\n .btn-right {\n display: flex;\n justify-content: flex-end;\n align-items: center;\n flex-wrap: wrap;\n }\n}\n\n@media (max-width: 768px) {\n .btns {\n flex-direction: column;\n align-items: flex-start;\n }\n\n .btn-container_block {\n flex-direction: column;\n align-items: flex-start;\n gap: 10px;\n\n .btn-left,\n .btn-right {\n width: 100%;\n justify-content: flex-start;\n }\n }\n}\n</style>\n","import { ref, nextTick, onMounted, onBeforeUnmount } from 'vue'\n\nexport function useTableResize(\n tableContainerRef: { value: HTMLElement | null },\n headBarRef: { value: HTMLElement | null },\n tbBtnRef: { value: { $el?: HTMLElement } | null },\n paginationRef: { value: HTMLElement | null },\n options: { heightType?: 'auto' | 'height'; tabHeight?: number | string }\n) {\n const tableHeight = ref(400)\n const observer = ref<ResizeObserver | null>(null)\n\n const isNegative = (num: number) => Math.sign(num) === -1\n\n const totalContainerNum = () => {\n const headBarHeight = headBarRef.value?.offsetHeight || 0\n const tbBtnHeight = tbBtnRef.value?.$el?.offsetHeight || 0\n const paginationHeight = paginationRef.value?.offsetHeight || 0\n return Math.round(paginationHeight + headBarHeight + tbBtnHeight)\n }\n\n const resizeObservers = () => {\n const element = tableContainerRef.value\n if (!element) return\n\n const containerHeight = typeof options.tabHeight === 'number'\n ? options.tabHeight\n : options.heightType === 'height'\n ? (element.parentElement?.offsetHeight || element.offsetHeight)\n : (parseInt(options.tabHeight as string, 10) || 450)\n\n const maxContainer = !isNaN(containerHeight) ? containerHeight : 450\n const minTableNum = maxContainer - totalContainerNum()\n const tabContainer = isNegative(minTableNum) ? totalContainerNum() + 300 : maxContainer\n\n const paginationHeight = paginationRef.value?.offsetHeight || 0\n const headBarHeight = headBarRef.value?.offsetHeight || 0\n const tbBtnHeight = tbBtnRef.value?.$el?.offsetHeight || 0\n\n const newHeight = Math.floor(tabContainer) - Math.round(paginationHeight + headBarHeight + tbBtnHeight)\n if (tableHeight.value !== newHeight) {\n tableHeight.value = newHeight\n }\n }\n\n const startObserver = () => {\n nextTick(() => {\n if (!tableContainerRef.value || typeof ResizeObserver === 'undefined') return\n\n observer.value = new ResizeObserver(() => {\n requestAnimationFrame(() => {\n if (tableContainerRef.value) resizeObservers()\n })\n })\n\n // Observe the main container\n const target = options.heightType === 'height'\n ? tableContainerRef.value.parentElement || tableContainerRef.value\n : tableContainerRef.value\n observer.value.observe(target)\n\n // Observe headBarRef to detect form expand/collapse height changes\n if (headBarRef.value) {\n observer.value.observe(headBarRef.value)\n }\n })\n }\n\n const stopObserver = () => {\n if (observer.value) {\n observer.value.disconnect()\n observer.value = null\n }\n }\n\n onMounted(() => startObserver())\n onBeforeUnmount(() => stopObserver())\n\n return {\n tableHeight,\n resizeObservers,\n startObserver,\n stopObserver\n }\n}\n","import { ref, nextTick } from 'vue'\n\nexport function useTableSelection(rowkey?: string) {\n const multipleSelection = ref<Record<string, unknown>[]>([])\n const selectionsByPage = ref<Record<number, Record<string, unknown>[]>>({})\n const isInitChange = ref(false)\n\n const handleSelectionChange = (val: Record<string, unknown>[], currentPage: number) => {\n if (rowkey) {\n if (isInitChange.value) return\n selectionsByPage.value[currentPage] = val\n let allSelections: Record<string, unknown>[] = []\n const uniqueMap: Record<string, boolean> = {}\n\n Object.values(selectionsByPage.value).forEach((pageSelections) => {\n pageSelections.forEach((item) => {\n const key = item[rowkey] as string\n if (key && !uniqueMap[key]) {\n allSelections.push(item)\n uniqueMap[key] = true\n }\n })\n })\n\n multipleSelection.value = allSelections\n } else {\n multipleSelection.value = val\n }\n }\n\n const handleSelectData = (dataList: Record<string, unknown>[], tableRef: { toggleRowSelection?: (row: Record<string, unknown>, selected: boolean) => void }) => {\n if (dataList?.length && rowkey && multipleSelection.value.length) {\n const pageSelecteds: Record<string, unknown>[] = []\n dataList.forEach((row) => {\n multipleSelection.value.forEach((selectedRow) => {\n if (row[rowkey] === selectedRow[rowkey]) {\n pageSelecteds.push(row)\n }\n })\n })\n\n pageSelecteds.forEach((row) => {\n tableRef.toggleRowSelection?.(row, true)\n })\n }\n }\n\n const clearAllSelection = (tableRef: { clearSelection?: () => void }) => {\n multipleSelection.value = []\n selectionsByPage.value = {}\n tableRef.clearSelection?.()\n }\n\n const initSelection = (dataList: Record<string, unknown>[], tableRef: { toggleRowSelection?: (row: Record<string, unknown>, selected: boolean) => void; clearSelection?: () => void } | null) => {\n isInitChange.value = true\n if (!tableRef) {\n isInitChange.value = false\n return\n }\n if (rowkey) {\n nextTick(() => {\n handleSelectData(dataList, tableRef)\n isInitChange.value = false\n })\n } else {\n nextTick(() => {\n tableRef.clearSelection?.()\n isInitChange.value = false\n })\n }\n }\n\n return {\n multipleSelection,\n selectionsByPage,\n isInitChange,\n handleSelectionChange,\n handleSelectData,\n clearAllSelection,\n initSelection\n }\n}\n","export const isObject = (value: unknown): value is Record<string, unknown> => {\n return typeof value === 'object' && value !== null && Object.prototype.toString.call(value) === '[object Object]'\n}\n\nexport const isArray = (value: unknown): value is unknown[] => {\n return Array.isArray(value)\n}\n\nexport const isFunction = (value: unknown): value is Function => {\n return typeof value === 'function'\n}\n\nexport const isString = (value: unknown): value is string => {\n return typeof value === 'string'\n}\n\nexport const isNumber = (value: unknown): value is number => {\n return typeof value === 'number' && !isNaN(value)\n}\n\nexport const isEmpty = (value: unknown): boolean => {\n if (value == null) return true\n if (isArray(value)) return value.length === 0\n if (isObject(value)) return Object.keys(value).length === 0\n return false\n}\n\nexport const firstWordUpperCase = (str: string): string => {\n return str.charAt(0).toUpperCase() + str.slice(1).toLowerCase()\n}\n\nexport const kebabToCamel = (str: string): string => {\n return str.replace(/-([a-z])/g, (_, letter) => letter.toUpperCase())\n}\n\nexport const toPascalCase = (str: string): string => {\n return str.replace(/(^|-)([a-z])/g, (_, __, letter) => letter.toUpperCase())\n}\n\nexport const findValueByKey = (obj: Record<string, unknown>, key: string, depth = 0): unknown => {\n if (depth > 3) return undefined\n if (!isObject(obj)) return undefined\n\n const currentValue = Object.prototype.hasOwnProperty.call(obj, key) ? obj[key] : undefined\n\n for (const prop in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, prop) && isObject(obj[prop])) {\n const deepValue = findValueByKey(obj[prop] as Record<string, unknown>, key, depth + 1)\n if (deepValue !== undefined) return deepValue\n }\n }\n return currentValue\n}\n\nexport const wrapPromise = <T>(promise: Promise<T>): Promise<{ status: 'fulfilled'; value: T } | { status: 'rejected'; reason: unknown }> => {\n return promise\n .then((value) => ({ status: 'fulfilled' as const, value }))\n .catch((reason) => ({ status: 'rejected' as const, reason }))\n}\n","<template>\n <el-config-provider :locale=\"locale\">\n <div :ref=\"setTableContainer\" class=\"table_component\" :style=\"{ [heightType]: tabHeight }\">\n <div class=\"table_containers\">\n <div\n v-if=\"showHeaderBar\"\n ref=\"headBarRef\"\n class=\"btn-slot\"\n :style=\"slotStyles.value && slotStyles.type === 'object' && slotStyles.value\"\n :class=\"slotStyles.type === 'string' ? slotStyles.value : { slotClass: slotState && slotStyles.type !== 'object' }\"\n >\n <div class=\"headerBar\" v-if=\"hasDefaultSlot\" :style=\"{ paddingBottom: hasDefaultSlot ? '10px' : '0px' }\">\n <slot />\n </div>\n </div>\n <div v-loading=\"loadStatus\" element-loading-background=\"rgba(0, 0, 0, 0.03)\" element-loading-text=\"努力加载中...\" class=\"page-loading-con tableContainer\">\n <div class=\"table_inner_containers\">\n <table-btns\n ref=\"tbBtnRef\"\n :instance=\"{ tableRef: instance, formInstance: formInstance }\"\n v-if=\"(options.configBtn && options.configBtn.length) || options.leftText\"\n :btn-config=\"options.configBtn\"\n :left-text=\"options.leftText\"\n />\n <el-table\n class=\"el-dp_tables\"\n :id=\"tableId\"\n :key=\"tableId\"\n ref=\"tableRef\"\n style=\"width: 100%\"\n v-bind=\"tableBindAttrs\"\n :data=\"dataSource\"\n @sort-change=\"changeTableSort\"\n @selection-change=\"handleTableSelectionChange\"\n >\n <template #empty>\n <div class=\"ant-empty ant-empty-normal\">\n <div class=\"ant-empty-image\">\n <svg class=\"ant-empty-img-simple\" width=\"64\" height=\"41\" viewBox=\"0 0 64 41\" xmlns=\"http://www.w3.org/2000/svg\">\n <g transform=\"translate(0 1)\" fill=\"none\" fill-rule=\"evenodd\">\n <ellipse class=\"ant-empty-img-simple-ellipse\" cx=\"32\" cy=\"33\" rx=\"32\" ry=\"7\" />\n <g class=\"ant-empty-img-simple-g\" fill-rule=\"nonzero\">\n <path d=\"M55 12.76L44.854 1.258C44.367.474 43.656 0 42.907 0H21.093c-.749 0-1.46.474-1.947 1.257L9 12.761V22h46v-9.24z\" />\n <path d=\"M41.613 15.931c0-1.605.994-2.93 2.227-2.931H55v18.137C55 33.26 53.68 35 52.05 35h-40.1C10.32 35 9 33.259 9 31.137V13h11.16c1.233 0 2.227 1.323 2.227 2.928v.022c0 1.605 1.005 2.901 2.237 2.901h14.752c1.232 0 2.237-1.308 2.237-2.913v-.007z\" class=\"ant-empty-img-simple-path\" />\n </g>\n </g>\n </svg>\n </div>\n <div class=\"ant-empty-description\">暂无数据</div>\n </div>\n </template>\n <column-item v-for=\"(cols, index) in filteredColumns\" :key=\"cols.prop || cols.key || index\" :cols=\"{ ...cols, columnIndex: index }\">\n <template v-if=\"cols.scopedSlots && cols.scopedSlots.customRender\" #[cols.scopedSlots.customRender]=\"{ scope }\">\n <slot v-bind=\"{ ...cols, columnIndex: index, row: scope.row, column: scope.column }\" :name=\"cols.scopedSlots.customRender\" :scope=\"scope\" />\n </template>\n </column-item>\n </el-table>\n </div>\n <div\n v-if=\"showPagination\"\n ref=\"paginationRef\"\n class=\"pagination_page\"\n :style=\"{\n position: heightType === 'height' ? 'absolute' : 'static',\n bottom: '0px',\n left: '0px',\n zIndex: 5,\n background: '#fff'\n }\"\n >\n <el-pagination\n background\n :size=\"paginationConfig.size\"\n :total=\"paginationConfig.total\"\n v-model:page-size=\"paginationConfig.pageSize\"\n :page-sizes=\"paginationConfig.pageSizes\"\n v-model:current-page=\"paginationConfig.current\"\n :layout=\"layout\"\n style=\"padding: 0; margin: 10px 0; text-align: center\"\n @size-change=\"handleSizeChange\"\n @current-change=\"handleIndexChange\"\n />\n </div>\n </div>\n </div>\n </div>\n </el-config-provider>\n</template>\n\n<script lang=\"ts\">\nimport type { TableOptions } from '../../../types'\n\nconst defaultOptions: TableOptions = {\n multiSelect: false,\n expand: false,\n snIndex: false,\n loading: false,\n border: false,\n size: 'small',\n headerCellStyle: { background: '#f5f7fa' },\n highlightCurrentRow: true,\n cachePageSelection: true\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { ref, computed, watch, inject, getCurrentInstance, provide, toRaw, unref, h, onMounted, useAttrs } from 'vue'\nimport { ElTable, ElConfigProvider, ElPagination, vLoading, ElButton } from 'element-plus'\nimport zhCn from 'element-plus/es/locale/lang/zh-cn'\nimport ColumnItem from './column-item.vue'\nimport TableBtns from './table-btns.vue'\nimport { useTableResize } from '../../../composables/use-table-resize'\nimport { useTableSelection } from '../../../composables/use-table-selection'\nimport { isObject, findValueByKey } from '../../../utils/shared'\nimport type { TableColumn, PaginationConfig } from '../../../types'\n\nconst props = withDefaults(\n defineProps<{\n initTabHeight?: number\n headBarClass?: string | Record<string, unknown>\n showHeaderBar?: boolean\n dataSource: Record<string, unknown>[]\n columns: TableColumn[]\n options?: TableOptions\n pagination?: PaginationConfig\n }>(),\n {\n initTabHeight: 400,\n showHeaderBar: true,\n dataSource: () => [],\n columns: () => [],\n options: () => ({ ...defaultOptions }),\n pagination: () => ({})\n }\n)\n\nconst emit = defineEmits<{\n 'update:dataSource': [data: Record<string, unknown>[]]\n 'update:pagination': [pagination: PaginationConfig]\n 'pagination-current-change': [pagination: PaginationConfig]\n 'size-change': [pagination: PaginationConfig, size: number]\n 'change-table-sort': [column: Record<string, unknown>]\n}>()\n\nconst slots = defineSlots<{\n default?: () => any\n}>()\n\nconst locale = ref(zhCn)\nconst injectedLocale = inject('elLocale', null)\nif (injectedLocale) {\n locale.value = injectedLocale as any\n}\n\nconst instance = getCurrentInstance() || {}\nconst $esPlusTable = inject<Record<string, unknown>>('$esPlusTable', {})\n\n// Refs\nconst tableRef = ref<any>(null)\nconst tbBtnRef = ref<any>(null)\nconst headBarRef = ref<HTMLElement | null>(null)\nconst paginationRef = ref<HTMLElement | null>(null)\nconst tableContainerRef = ref<HTMLElement | null>(null)\nconst tableId = ref(`table_${Math.random().toString(36).substring(2, 12)}`)\nconst tableData = ref<Record<string, unknown>[]>([])\nconst columnRowList = ref<TableColumn[]>([...props.columns])\n\nwatch(\n () => props.columns,\n (val) => {\n columnRowList.value = [...val]\n },\n { deep: true }\n)\nconst loadingStatus = ref(false)\nconst slotState = ref(false)\nconst showPagination = ref(false)\n\nconst setTableContainer = (el: HTMLElement | null) => {\n if (el) tableContainerRef.value = el\n}\n\n// 保留与 Form 的耦合\nconst bodyFormInstance = inject<(inst: unknown) => void>('bodyFormInstance', () => {})\nconst getVisibleShow = inject<(() => boolean) | boolean>('getVisibleShow', false)\n\nconst visibleShow = computed(() => (typeof getVisibleShow === 'function' ? getVisibleShow() : getVisibleShow))\n\nconst paginationConfig = ref<PaginationConfig>({\n pageSize: 10,\n current: 1,\n total: 0,\n pageSizes: [],\n size: 'small',\n isSmall: true,\n ...props.pagination\n})\n\nconst formInstance = ref<unknown>(null)\n\n// 计算属性\nconst getListEntry = computed(() => {\n if (props.options.entryQuery && isObject(props.options.entryQuery) && Object.keys(props.options.entryQuery).length) {\n return props.options.entryQuery\n }\n return {}\n})\n\nconst configTableField = computed(() => {\n if (\n props.options.configTableOut &&\n isObject(props.options.configTableOut) &&\n Object.keys(props.options.configTableOut).length &&\n checkQueryFields(props.options.configTableOut)\n ) {\n return props.options.configTableOut\n }\n\n if ($esPlusTable?.configQueryFieldOutput && typeof $esPlusTable.configQueryFieldOutput === 'function') {\n const configFields = ($esPlusTable.configQueryFieldOutput as Function)({\n total: 'records',\n pageSize: 'pageSize',\n current: 'pageNo',\n tableData: 'rows'\n })\n if (checkQueryFields(configFields)) return configFields\n }\n\n return {\n total: 'records',\n pageSize: 'pageSize',\n current: 'pageNo',\n tableData: 'rows'\n }\n})\n\nconst isFormInstance = computed(() => {\n const defaultSlots = instance?.slots?.default?.() || []\n const formVNode = defaultSlots.find((vnode: any) => {\n const type = vnode.type\n return type?.name === 'EsForm' || type?.displayName === 'EsForm'\n })\n if (formVNode && formVNode.props?.ref) {\n formInstance.value = formVNode.ctx?.refs[formVNode.props.ref]\n bodyFormInstance(formInstance.value)\n }\n return formVNode || {}\n})\n\nconst hasDefaultSlot = computed(() => !!slots.default?.())\nconst heightType = computed(() => props.options.heightType || 'auto')\nconst tabHeight = computed(() => {\n if (typeof props.options.tabHeight === 'number') {\n return `${props.options.tabHeight}px`\n }\n if (heightType.value === 'height' && typeof props.options.height === 'number') {\n return `${props.options.height}px`\n }\n return '100%'\n})\n\nconst slotStyles = computed(() => {\n if (props.headBarClass) {\n return {\n type: typeof props.headBarClass === 'string' ? 'string' : 'object',\n value: props.headBarClass\n }\n }\n return { type: 'string', value: '' }\n})\n\nconst layout = computed(() => 'prev, pager, next, jumper, sizes, ->, total')\nconst loadStatus = computed(() => props.options.loading || loadingStatus.value)\nconst isRequestConf = computed(() => !!props.options.actionUrl || (props.options.apiParams && isObject(props.options.apiParams) && Object.keys(props.options.apiParams).length > 0))\nconst isHttpRequest = computed(() => !!props.options?.httpRequest && typeof props.options.httpRequest === 'function')\n\nconst filteredColumns = computed(() => {\n const list = columnRowList.value.filter((item) => !item.hidCol)\n list.forEach((el) => {\n if (el.prop !== 'operate' && el.key !== 'operate' && (el.prop || el.key) && !el.formatter) {\n el.formatter = (row: Record<string, unknown>) => {\n const value = row[el.prop as string] || row[el.key as string]\n if (value == null || value === '') {\n return el.emptyPlaceholder || '-'\n }\n return value\n }\n }\n\n if ((el.prop === 'operate' || el.key === 'operate') && el.btns && !el.render) {\n el.render = (_h: any, { row }: { row: Record<string, unknown> }) => {\n return h('div', [\n el.btns?.map((btn: any) =>\n h(ElButton, {\n onClick: () => btn.clickEvent?.(row),\n text: true,\n type: btn.type || 'primary'\n }, () => btn.name)\n )\n ])\n }\n }\n })\n return list\n})\n\n// es-table 内部选项键,不应传递给 el-table\nconst TABLE_INTERNAL_KEYS = new Set([\n 'multiSelect', 'expand', 'snIndex', 'loading', 'cachePageSelection',\n 'httpRequest', 'configTableOut', 'listenToCallBack',\n 'apiParams', 'actionUrl', 'heightType', 'tabHeight',\n 'isInitRun', 'entryQuery', 'configBtn', 'leftText', 'rowkey'\n])\n\nconst tableAttrs = computed(() => {\n const merged = columnBindAttr({ ...defaultOptions, ...props.options })\n const { align, ...rest } = merged\n const result: Record<string, unknown> = {}\n for (const key in rest) {\n if (!TABLE_INTERNAL_KEYS.has(key)) {\n result[key] = rest[key]\n }\n }\n return result\n})\n\n// 合并 options attrs 和父级 fallthrough attrs,供 el-table 使用\nconst fallthroughAttrs = useAttrs()\nconst tableBindAttrs = computed(() => {\n const result: Record<string, unknown> = { ...tableAttrs.value, ...fallthroughAttrs }\n if (props.options.rowkey) {\n result.rowKey = props.options.rowkey\n }\n if (heightType.value === 'height') {\n result.height = tableHeight.value\n } else if (heightType.value === 'maxHeight') {\n result.maxHeight = tableHeight.value\n }\n return result\n})\n\n// 使用原生 ResizeObserver\nconst { tableHeight, resizeObservers } = useTableResize(\n tableContainerRef,\n headBarRef,\n tbBtnRef,\n paginationRef,\n { heightType: heightType.value, tabHeight: props.options.tabHeight }\n)\n\nwatch(\n visibleShow,\n async (val, oldVal) => {\n if (val && val !== oldVal) {\n if (props.options.actionUrl) {\n await httpRequestInstance()\n }\n tableRef.value?.doLayout?.()\n }\n }\n)\n\nwatch(\n () => props.pagination,\n (val) => {\n paginationConfig.value = { ...paginationConfig.value, ...val }\n showPagination.value = val.total !== undefined\n },\n { deep: true, immediate: true }\n)\n\nwatch(\n () => props.dataSource,\n (val) => {\n initSelection(val, tableRef.value)\n },\n { deep: true }\n)\n\nwatch(\n tableData,\n (val) => {\n if (Array.isArray(val)) {\n emit('update:dataSource', val)\n }\n },\n { deep: true }\n)\n\n// 配置化接口请求时,挂载自动加载数据\nonMounted(() => {\n if (isRequestConf.value && props.options.isInitRun !== false) {\n httpRequestInstance()\n }\n})\n\n// 表格选择逻辑\nconst { multipleSelection, handleSelectionChange, initSelection, clearAllSelection } = useTableSelection(props.options.rowkey)\n\nconst handleTableSelectionChange = (val: Record<string, unknown>[]) => {\n handleSelectionChange(val, paginationConfig.value.current || 1)\n}\n\n// 请求逻辑\nconst checkQueryFields = (obj: Record<string, unknown>): boolean => {\n const checkListKey = ['total', 'pageSize', 'current', 'tableData']\n if (isObject(obj)) {\n return Object.keys(obj).every((it) => {\n return checkListKey.find((its) => its === it) && obj[it] && typeof obj[it] === 'string'\n })\n }\n return false\n}\n\nconst getListenToCallBack = (eventName: string, params: unknown) => {\n const eventNameList = [\n { eventName: 'brcb', isReturn: true },\n { eventName: 'qrcb', isReturn: true }\n ]\n const hasEventNameIndex = eventNameList.findIndex((it) => it.eventName === eventName)\n if (props.options.listenToCallBack && props.options.listenToCallBack[eventName] && hasEventNameIndex !== -1) {\n const callObj = eventNameList[hasEventNameIndex]\n if (callObj.isReturn) {\n return props.options.listenToCallBack[eventName](params)\n }\n }\n}\n\nconst formatConfigOut = (row: Record<string, unknown>, keyList: string[]) => {\n if (isObject(configTableField.value) && Object.keys(configTableField.value).length) {\n Object.entries(configTableField.value).forEach(([key, value]) => {\n const isKeyUsed = keyList.includes(key)\n if (!isKeyUsed) return\n\n const rowData = row[value as string] ?? findValueByKey(row, value as string)\n if (key === 'tableData') {\n tableData.value = Array.isArray(rowData) ? rowData : []\n } else {\n paginationConfig.value[key as keyof PaginationConfig] = typeof rowData === 'number' ? rowData : parseInt(rowData as string, 10) || 0\n }\n })\n }\n}\n\nconst queryTableListMethod = (params: Record<string, unknown>, options: { success?: (res: Record<string, unknown>) => void; fail?: (err: unknown) => void } = {}) => {\n const { success, fail } = options\n const apiParams = props.options?.apiParams || {}\n const url = props.options?.actionUrl || apiParams.url || ''\n\n if (!url || !Object.keys(apiParams).length) return\n\n const formData = Object.keys(isFormInstance.value).length\n ? toRaw(unref((isFormInstance.value as any).props.model))\n : getListEntry.value || {}\n\n\n const fnParams = getListenToCallBack('brcb', { ...formData, ...params, ...toRaw(unref(apiParams.model || {})) })\n const finalParams = isObject(fnParams) ? fnParams : { ...formData, ...toRaw(unref(apiParams.model || {})), ...params }\n const requestOption = { ...toRaw(unref(apiParams.options || {})) }\n if (apiParams?.method) {\n requestOption.method = apiParams?.method\n }\n\n const requestHandler = async (requestFn: Function) => {\n if (loadingStatus.value) return\n loadingStatus.value = true\n console.log('formData///', finalParams)\n try {\n const res = await requestFn({\n url,\n formParams: finalParams,\n headers: apiParams.headers || {},\n ...requestOption,\n ...params\n })\n const responseData = getListenToCallBack('qrcb', res) || res\n if (isObject(res) && Object.keys(res).length && typeof success === 'function') {\n success(responseData as Record<string, unknown>)\n }\n } catch (e) {\n if (typeof fail === 'function') {\n fail(e)\n }\n } finally {\n loadingStatus.value = false\n }\n }\n\n if (props.options.httpRequest) {\n requestHandler(props.options.httpRequest)\n } else if ($esPlusTable.$httpRequest) {\n requestHandler($esPlusTable.$httpRequest as Function)\n }\n}\n\nconst httpRequestInstance = (model?: Record<string, unknown>) => {\n return new Promise((resolve, reject) => {\n paginationConfig.value.current = 1\n queryTableListMethod(\n { ...(model || {}), pageIndex: paginationConfig.value.current, pageSize: paginationConfig.value.pageSize },\n {\n success: (res) => {\n formatConfigOut(res, ['total', 'tableData'])\n if (Object.keys(props.pagination).length) {\n emit('update:pagination', paginationConfig.value)\n }\n resolve(res)\n },\n fail: (err) => {\n reject(err)\n }\n }\n )\n })\n}\n\nconst changePageIndexRequest = () => {\n queryTableListMethod(\n { pageIndex: paginationConfig.value.current, pageSize: paginationConfig.value.pageSize },\n {\n success: (res) => {\n formatConfigOut(res, ['total', 'tableData'])\n emit('update:pagination', paginationConfig.value)\n emit('pagination-current-change', paginationConfig.value)\n }\n }\n )\n}\n\nconst changePageSizeRequest = () => {\n queryTableListMethod(\n { pageIndex: paginationConfig.value.current, pageSize: paginationConfig.value.pageSize },\n {\n success: (res) => {\n formatConfigOut(res, ['total', 'tableData'])\n emit('update:pagination', paginationConfig.value)\n }\n }\n )\n}\n\nconst handleSizeChange = (size: number) => {\n paginationConfig.value.pageSize = size\n paginationConfig.value.current = 1\n if (isRequestConf.value) {\n changePageSizeRequest()\n } else {\n emit('update:pagination', paginationConfig.value)\n emit('size-change', paginationConfig.value, size)\n }\n}\n\nconst handleIndexChange = (val: number) => {\n paginationConfig.value.current = val\n if (isRequestConf.value) {\n console.log('indexPages//', val)\n changePageIndexRequest()\n } else {\n emit('update:pagination', paginationConfig.value)\n emit('pagination-current-change', paginationConfig.value)\n }\n}\n\nconst changeTableSort = (column: Record<string, unknown>) => {\n emit('change-table-sort', column)\n}\n\nconst firstWordUpperCase = (str: string): string => {\n return str.toLowerCase().replace(/(\\s|^)[a-z]/g, (char) => char.toUpperCase())\n}\n\nconst columnBindAttr = (cols: Record<string, unknown>) => {\n const options: Record<string, unknown> = {}\n for (const t in cols) {\n if (t === 'groups' || t === 'scopedSlots' || t === 'render') continue\n\n if (t.includes('-')) {\n const parts = t.split('-')\n let newkey = parts[0]\n for (let j = 1; j < parts.length; j++) {\n newkey += firstWordUpperCase(parts[j])\n }\n options[newkey] = cols[t]\n } else if (t === 'key') {\n options.prop = cols[t]\n options[t] = cols[t]\n } else {\n options[t] = cols[t]\n }\n }\n\n if (!options.align) {\n options.align = 'center'\n }\n\n return options\n}\n\n// 提供表格实例给子组件(保留与 Form 的耦合)\nprovide('getTableInstantce', () => ({\n ...(instance?.setupState || {}),\n tableRef,\n toggleSelection: (rows: Record<string, unknown>[]) => {\n if (rows) {\n rows.forEach((row) => {\n tableRef.value?.toggleRowSelection(row)\n })\n } else {\n tableRef.value?.clearSelection()\n }\n },\n clearAllSelection: () => clearAllSelection(tableRef.value),\n refsInstance: () => tableRef.value,\n httpRequestInstance\n}))\n\n// 暴露方法\ndefineExpose({\n httpRequestInstance,\n getSelectionRows: () => multipleSelection.value,\n clearSelection: () => tableRef.value?.clearSelection?.(),\n clearAllSelection: () => clearAllSelection(tableRef.value),\n refresh: () => tableRef.value?.doLayout?.()\n})\n</script>\n\n<style lang=\"scss\" scoped>\n.el-dp_tables {\n height: auto;\n :deep(.el-table__body-wrapper) {\n height: auto;\n }\n}\n\n.table_component {\n width: 100%;\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n align-items: flex-start;\n overflow: hidden;\n}\n\n.table_containers {\n flex: 1;\n width: 100%;\n height: 100%;\n display: flex;\n justify-content: space-between;\n flex-direction: column;\n align-items: flex-start;\n position: relative;\n}\n\n.pagination_page {\n width: 100%;\n display: flex;\n justify-content: center;\n align-items: center;\n}\n\n.btn-slot {\n width: 100%;\n\n .headerBar {\n box-sizing: border-box;\n background-color: #fff;\n border-radius: 6px;\n\n :deep(.el-form-item--small .el-form-item__label) {\n box-sizing: border-box;\n }\n }\n}\n\n.tableContainer {\n border-radius: 0px;\n transition: all 1.5s;\n flex: 1;\n width: 100%;\n display: flex;\n justify-content: space-between;\n flex-direction: column;\n align-items: flex-start;\n\n .table_inner_containers {\n width: 100%;\n }\n\n :deep(.el-table__empty-block) {\n width: 100% !important;\n margin: 32px 0;\n font-size: 14px;\n line-height: 1.5715;\n\n .el-table__empty-text {\n width: auto !important;\n }\n\n .ant-empty-image {\n height: 40px;\n margin-bottom: 8px;\n\n .ant-empty-img-simple-ellipse {\n fill: #f5f5f5;\n }\n\n .ant-empty-img-simple-g {\n stroke: #d9d9d9;\n }\n\n .ant-empty-img-simple-path {\n fill: #fafafa;\n }\n }\n\n .ant-empty-description {\n line-height: 1.5715;\n color: rgba(0, 0, 0, 0.25);\n }\n }\n\n :deep(.el-tag) {\n height: 20px;\n padding: 0 7px;\n line-height: 20px;\n background: #fafafa;\n border: none;\n border-radius: 4px;\n\n &.el-tag--info {\n color: rgba(0, 0, 0, 0.85);\n }\n\n &.el-tag--success {\n color: #52c41a;\n background: #f6ffed;\n border-color: #b7eb8f;\n }\n }\n}\n</style>\n","import EsTable from './src/component.vue'\n\nEsTable.install = function (app: any) {\n app.component(EsTable.name, EsTable)\n}\nEsTable.isPlugin = true\nEsTable.Plugin = {\n install(app: any, options: any = {}) {\n app.provide('$esPlusTable', {\n ...(options.methods || {})\n })\n app.component(EsTable.name, { ...EsTable, methods: { ...EsTable.methods, ...(options.methods || {}) } })\n }\n}\nexport default EsTable\n","import { h } from 'vue'\nimport {\n ElInput,\n ElSelect,\n ElOption,\n ElDatePicker,\n ElTimePicker,\n ElSlider,\n ElColorPicker,\n ElTransfer,\n ElCascader,\n ElRadioGroup,\n ElRadio,\n ElCheckboxGroup,\n ElCheckbox,\n ElSwitch,\n ElRate,\n ElUpload\n} from 'element-plus'\nimport type { FormItemOption } from '../types'\n\n// 支持嵌套属性路径的取值和赋值\nconst getNestedValue = (obj: Record<string, unknown>, path: string): unknown => {\n const keys = path.split(/\\.|\\[|\\]/).filter(Boolean)\n let result = obj\n for (const key of keys) {\n if (result == null) return undefined\n result = result[key] as Record<string, unknown>\n }\n return result\n}\n\nconst setNestedValue = (obj: Record<string, unknown>, path: string, value: unknown): void => {\n const keys = path.split(/\\.|\\[|\\]/).filter(Boolean)\n const lastKey = keys.pop()\n let current: Record<string, unknown> = obj\n for (const key of keys) {\n if (current[key] == null) {\n current[key] = {}\n }\n current = current[key] as Record<string, unknown>\n }\n if (lastKey) {\n current[lastKey] = value\n }\n}\n\nexport function useFormInputs() {\n const formInputComponents = (item: FormItemOption) => {\n const formPutList = new Map([\n [\n 'Input',\n (hFn: typeof h, model: Record<string, unknown>, { row }: { row: FormItemOption }) => {\n return hFn(ElInput, {\n modelValue: getNestedValue(model, row.prop),\n ...row.attrs,\n ...row.on,\n 'onUpdate:modelValue': (val: unknown) => {\n setNestedValue(model, row.prop, val)\n }\n })\n }\n ],\n [\n 'Select',\n (hFn: typeof h, model: Record<string, unknown>, { row }: { row: FormItemOption }) => {\n return hFn(\n ElSelect,\n {\n modelValue: getNestedValue(model, row.prop),\n ...row.attrs,\n ...row.on,\n 'onUpdate:modelValue': (val: unknown) => {\n setNestedValue(model, row.prop, val)\n }\n },\n () =>\n row.dataOptions?.map((opt, idx) =>\n hFn(ElOption, { key: idx, value: opt.value, label: opt.label })\n )\n )\n }\n ],\n [\n 'datePicker',\n (hFn: typeof h, model: Record<string, unknown>, { row }: { row: FormItemOption }) => {\n return hFn(ElDatePicker, {\n modelValue: getNestedValue(model, row.prop),\n ...row.attrs,\n ...row.on,\n 'onUpdate:modelValue': (val: unknown) => {\n setNestedValue(model, row.prop, val)\n }\n })\n }\n ],\n [\n 'timePicker',\n (hFn: typeof h, model: Record<string, unknown>, { row }: { row: FormItemOption }) => {\n return hFn(ElTimePicker, {\n modelValue: getNestedValue(model, row.prop),\n ...row.attrs,\n ...row.on,\n 'onUpdate:modelValue': (val: unknown) => {\n setNestedValue(model, row.prop, val)\n }\n })\n }\n ],\n [\n 'Slider',\n (hFn: typeof h, model: Record<string, unknown>, { row }: { row: FormItemOption }) => {\n return hFn(ElSlider, {\n modelValue: getNestedValue(model, row.prop) as number,\n ...row.attrs,\n ...row.on,\n 'onUpdate:modelValue': (val: unknown) => {\n setNestedValue(model, row.prop, val)\n }\n })\n }\n ],\n [\n 'ColorPicker',\n (hFn: typeof h, model: Record<string, unknown>, { row }: { row: FormItemOption }) => {\n return hFn(ElColorPicker, {\n modelValue: getNestedValue(model, row.prop) as string,\n ...row.attrs,\n ...row.on,\n 'onUpdate:modelValue': (val: unknown) => {\n setNestedValue(model, row.prop, val)\n }\n })\n }\n ],\n [\n 'Transfer',\n (hFn: typeof h, model: Record<string, unknown>, { row }: { row: FormItemOption }) => {\n return hFn(ElTransfer, {\n modelValue: getNestedValue(model, row.prop) as unknown[],\n ...row.attrs,\n ...row.on,\n 'onUpdate:modelValue': (val: unknown) => {\n setNestedValue(model, row.prop, val)\n }\n })\n }\n ],\n [\n 'Cascader',\n (hFn: typeof h, model: Record<string, unknown>, { row }: { row: FormItemOption }) => {\n return hFn(ElCascader, {\n modelValue: getNestedValue(model, row.prop) as unknown[],\n options: row.dataOptions,\n ...row.attrs,\n ...row.on,\n 'onUpdate:modelValue': (val: unknown) => {\n setNestedValue(model, row.prop, val)\n }\n })\n }\n ],\n [\n 'Radio',\n (hFn: typeof h, model: Record<string, unknown>, { row }: { row: FormItemOption }) => {\n return hFn(\n ElRadioGroup,\n {\n modelValue: getNestedValue(model, row.prop),\n ...row.attrs,\n ...row.on,\n 'onUpdate:modelValue': (val: unknown) => {\n setNestedValue(model, row.prop, val)\n }\n },\n () =>\n row.dataOptions?.map((opt, idx) =>\n hFn(ElRadio, { key: idx, value: opt.value }, () => opt.label)\n )\n )\n }\n ],\n [\n 'Checkbox',\n (hFn: typeof h, model: Record<string, unknown>, { row }: { row: FormItemOption }) => {\n return hFn(\n ElCheckboxGroup,\n {\n modelValue: getNestedValue(model, row.prop) as unknown[],\n ...row.attrs,\n ...row.on,\n 'onUpdate:modelValue': (val: unknown) => {\n setNestedValue(model, row.prop, val)\n }\n },\n () =>\n row.dataOptions?.map((opt, idx) =>\n hFn(ElCheckbox, { key: idx, value: opt.value }, () => opt.label)\n )\n )\n }\n ],\n [\n 'Switch',\n (hFn: typeof h, model: Record<string, unknown>, { row }: { row: FormItemOption }) => {\n return hFn(ElSwitch, {\n modelValue: getNestedValue(model, row.prop) as boolean,\n ...row.attrs,\n ...row.on,\n 'onUpdate:modelValue': (val: unknown) => {\n setNestedValue(model, row.prop, val)\n }\n })\n }\n ],\n [\n 'Rate',\n (hFn: typeof h, model: Record<string, unknown>, { row }: { row: FormItemOption }) => {\n return hFn(ElRate, {\n modelValue: getNestedValue(model, row.prop) as number,\n ...row.attrs,\n ...row.on,\n 'onUpdate:modelValue': (val: unknown) => {\n setNestedValue(model, row.prop, val)\n }\n })\n }\n ],\n [\n 'Upload',\n (hFn: typeof h, _model: Record<string, unknown>, { row }: { row: FormItemOption }) => {\n const { props: uploadProps, httpRequest, triggerRender, fileRender, ...restRow } = row as FormItemOption & {\n props?: Record<string, unknown>\n httpRequest?: (options: Record<string, unknown>) => Promise<unknown>\n triggerRender?: (h: typeof hFn) => ReturnType<typeof hFn>\n fileRender?: (h: typeof hFn, file: Record<string, unknown>, onRemove: () => void) => ReturnType<typeof hFn>\n }\n\n let uploadInstance: { handleRemove: (file: Record<string, unknown>) => void } | null = null\n\n // 构建 ElUpload 属性\n const elUploadProps: Record<string, unknown> = {\n ...uploadProps, // props 中的配置:action, accept, listType, limit, multiple 等\n ...restRow.attrs, // attrs 中的配置(兼容两种方式)\n ref: (el: { handleRemove: (file: Record<string, unknown>) => void } | null) => {\n uploadInstance = el\n }\n }\n\n // 将 on 中的事件转换为 Vue 3 h() 需要的 onXxx 格式\n if (restRow.on) {\n for (const [key, handler] of Object.entries(restRow.on)) {\n elUploadProps[`on${key.charAt(0).toUpperCase()}${key.slice(1)}`] = handler\n }\n }\n\n // 合并 httpRequest(优先用表单项配置的,其次用 props 中的)\n if (httpRequest) {\n elUploadProps['http-request'] = httpRequest\n }\n\n // Vue 3 h() 的 slots 参数:通过第三个参数传递命名插槽\n const slots: Record<string, (...args: unknown[]) => ReturnType<typeof hFn>> = {}\n\n // #trigger / #default 插槽\n if (triggerRender) {\n const listType = elUploadProps['listType'] || elUploadProps['list-type']\n if (listType === 'picture-card') {\n slots.trigger = () => triggerRender(hFn)\n } else {\n slots.default = () => triggerRender(hFn)\n }\n }\n\n // #file 插槽:自定义文件列表项渲染\n if (fileRender) {\n slots.file = ({ file }: { file: Record<string, unknown> }) => {\n return fileRender(hFn, file, () => {\n uploadInstance?.handleRemove(file)\n })\n }\n }\n\n return hFn(ElUpload, elUploadProps, slots)\n }\n ]\n ])\n return formPutList.get(item.formtype) || (() => null)\n }\n\n return { formInputComponents }\n}\n","import { computed, ref, watch } from 'vue'\nimport type { FormItemOption, LayoutFormProps } from '../types'\n\nexport function useFormLayout(props: { layoutFormProps?: LayoutFormProps; formItemList: FormItemOption[] }) {\n const folded = ref(false)\n\n const isBtnHidden = computed(() => props.layoutFormProps?.fromLayProps?.isBtnHidden ?? false)\n\n const rowLayout = computed(() => props.layoutFormProps?.rowLayProps || { gutter: 20 })\n\n const formLayout = computed(() => props.layoutFormProps?.fromLayProps || {})\n\n const getSetOptionsStatus = computed(() => props.layoutFormProps?.setOptions)\n\n const getRowColsAlgorithm = computed(() => {\n let pre = 0\n const groupArrayList: FormItemOption[][] = []\n const columnRows: { statIndex: number; endIndex: number }[] = []\n const formItems = props.formItemList\n\n for (let i = 0; i < formItems.length; i++) {\n const item = formItems[i]\n pre += item.span || 6\n if (pre > 24) {\n const statIndex = columnRows.length ? columnRows[columnRows.length - 1].endIndex : 0\n columnRows.push({ statIndex, endIndex: i })\n pre = item.span || 6\n if (i === formItems.length - 1) {\n columnRows.push({ statIndex: i, endIndex: i + 1 })\n }\n } else {\n if (i === formItems.length - 1) {\n const statIndex = columnRows.length ? columnRows[columnRows.length - 1].endIndex : 0\n columnRows.push({ statIndex, endIndex: i + 1 })\n } else if (pre === 24) {\n const statIndex = columnRows.length ? columnRows[columnRows.length - 1].endIndex : 0\n columnRows.push({ statIndex, endIndex: i + 1 })\n pre = 0\n }\n }\n }\n\n columnRows.forEach((it) => {\n groupArrayList.push(formItems.slice(it.statIndex, it.endIndex))\n })\n\n const columRowIndexs = groupArrayList.map((it) => {\n return it.map(() => 0)\n })\n\n let rowColIndex = -1\n columRowIndexs.forEach((row) => {\n row.forEach((_, idx) => {\n row[idx] = (rowColIndex += 1)\n })\n })\n\n return {\n columnRow: columRowIndexs,\n rowNum: columRowIndexs.length,\n columnNodeIndex: columRowIndexs.map((it) => it[it.length - 1])\n }\n })\n\n const isFold = computed(() => {\n const minFoldRow = props.layoutFormProps?.fromLayProps?.minFoldRows || 0\n return minFoldRow > 0 && minFoldRow < getRowColsAlgorithm.value.rowNum\n })\n\n const getBtnColSpan = computed(() => {\n const { rowNum, columnRow } = getRowColsAlgorithm.value\n const lastColumn = columnRow[rowNum - 1] || []\n const btnColSpan = props.layoutFormProps?.fromLayProps?.btnColSpan || 0\n const totalSpan = lastColumn.reduce((sum, idx) => sum + (props.formItemList[idx]?.span || 6), 0)\n const hasSpan = 24 - totalSpan\n\n return !folded.value && btnColSpan <= hasSpan ? hasSpan : 24\n })\n\n const formItem = computed(() => {\n const minFoldRow = props.layoutFormProps?.fromLayProps?.minFoldRows || 0\n const { columnNodeIndex } = getRowColsAlgorithm.value\n\n if (folded.value) {\n const lastFoldIndex = columnNodeIndex[minFoldRow - 1] ?? columnNodeIndex[columnNodeIndex.length - 1] ?? 9999\n return props.formItemList.map((it, index) => ({\n ...it,\n isFold: index > lastFoldIndex\n }))\n }\n return props.formItemList.map((it) => ({ ...it, isFold: false }))\n })\n\n watch(\n isFold,\n (val) => {\n folded.value = val\n },\n { immediate: true }\n )\n\n const changeFolded = () => {\n folded.value = !folded.value\n }\n\n return {\n folded,\n isBtnHidden,\n rowLayout,\n formLayout,\n getSetOptionsStatus,\n getRowColsAlgorithm,\n isFold,\n getBtnColSpan,\n formItem,\n changeFolded\n }\n}\n","import { nextTick, toRaw, unref } from 'vue'\nimport { isObject, findValueByKey, wrapPromise } from '../utils/shared'\nimport type { FormItemOption, ApiParams } from '../types'\n\nexport interface RequestConfig {\n httpRequest?: (params: Record<string, unknown>) => Promise<unknown>\n apiParams?: ApiParams\n success?: (res: Record<string, unknown>) => void\n fail?: (err: unknown) => void\n [key: string]: unknown\n}\n\nexport function useFormRequest(httpRequestGlobal?: (params: Record<string, unknown>) => Promise<unknown>) {\n const queryTableListMethod = (params: Record<string, unknown>, options: RequestConfig = {}, option?: FormItemOption) => {\n const { success, fail, ..._params } = options || {}\n if (isObject(options.apiParams) && Object.keys(options.apiParams).length && options.apiParams.url) {\n const initFormParams = { ...params, ...toRaw(unref(options.apiParams.model || {})) }\n const requestOption = { ...toRaw(unref(options.apiParams.options || {})) }\n if (options.apiParams.method) {\n requestOption.method = options.apiParams.method\n }\n\n const requestPayload = {\n url: options.apiParams.url,\n headers: { ...(options.apiParams.headers || {}) },\n formParams: initFormParams,\n ...requestOption\n }\n\n const requestFn = options.httpRequest || httpRequestGlobal\n if (!requestFn) return\n\n requestFn(requestPayload)\n .then((res) => {\n // 支持对象和数组两种响应格式(兼容直接返回数组的接口)\n if (typeof success === 'function' && res && (isObject(res) || Array.isArray(res))) {\n success(res as Record<string, unknown>)\n }\n })\n .catch((e) => {\n if (typeof fail === 'function') {\n fail(e)\n }\n })\n }\n }\n\n const checkQueryFields = (obj: Record<string, unknown>): boolean => {\n const checkListKey = ['total', 'pageSize', 'current', 'listData']\n if (isObject(obj)) {\n return Object.keys(obj).every((it) => {\n return checkListKey.find((its) => its === it) && obj[it] && typeof obj[it] === 'string'\n })\n }\n return false\n }\n\n const configFormField = (options: Record<string, unknown> = {}, fieldFieldOutput?: (defaults: Record<string, string>) => Record<string, string>) => {\n if (isObject(options.configFormOut) && Object.keys(options.configFormOut).length && checkQueryFields(options.configFormOut as Record<string, unknown>)) {\n return options.configFormOut as Record<string, string>\n }\n\n if (typeof fieldFieldOutput === 'function') {\n const configFields = fieldFieldOutput({\n total: 'records',\n pageSize: 'pageSize',\n current: 'pageNo',\n listData: 'rows'\n })\n if (checkQueryFields(configFields)) {\n return configFields\n }\n }\n\n return {\n total: 'records',\n pageSize: 'pageSize',\n current: 'pageNo',\n listData: 'rows'\n }\n }\n\n const formatConfigOut = (row: Record<string, unknown>, keyList: string[], options: Record<string, unknown> = {}, fieldFieldOutput?: (defaults: Record<string, string>) => Record<string, string>) => {\n const configFieldOut = configFormField(options, fieldFieldOutput)\n const configDataOption: Record<string, unknown> = {}\n\n // 如果 API 响应本身就是数组,直接作为 listData 使用(兼容直接返回数组的接口)\n if (keyList.includes('listData') && Array.isArray(row)) {\n configDataOption['listData'] = row\n return configDataOption\n }\n\n if (isObject(configFieldOut) && Object.keys(configFieldOut).length) {\n for (const [key, value] of Object.entries(configFieldOut)) {\n const isKeyUsed = keyList.findIndex((it) => it === key)\n if (isKeyUsed === -1) continue\n\n const rowValue = row[value as string]\n if (rowValue !== undefined && rowValue !== null) {\n if (key === 'listData') {\n configDataOption[key] = Array.isArray(rowValue) ? rowValue : []\n } else {\n configDataOption[key] = typeof rowValue === 'number' ? rowValue : parseInt(rowValue as string, 10) || 0\n }\n } else {\n const resultData = findValueByKey(row, value as string)\n if (key === 'listData') {\n configDataOption[key] = Array.isArray(resultData) ? resultData : []\n } else {\n configDataOption[key] = typeof resultData === 'number' ? resultData : parseInt(resultData as string, 10) || 0\n }\n }\n }\n }\n return configDataOption\n }\n\n const httpRequestFormInstance = (model: Record<string, unknown>, options: RequestConfig, rows: FormItemOption, fieldFieldOutput?: (defaults: Record<string, string>) => Record<string, string>) => {\n return new Promise<{ data: Record<string, unknown>; configRows: Record<string, unknown> }>((resolve, reject) => {\n nextTick(() => {\n queryTableListMethod(\n { pageIndex: 1, pageSize: 1000, ...(model || {}) },\n {\n ...(options || {}),\n success: (res) => {\n const configRows = formatConfigOut(res, ['total', 'listData'], rows as unknown as Record<string, unknown>, fieldFieldOutput)\n resolve({ data: res, configRows })\n },\n fail: (err) => {\n reject(err)\n }\n },\n rows\n )\n })\n })\n }\n\n const getEveryFormQueryField = async (rowsList: FormItemOption[]) => {\n try {\n if (!Array.isArray(rowsList)) return []\n const apiUrlList = rowsList.filter((it) => it && it.apiParams && isObject(it.apiParams) && it.apiParams.url)\n const apiResult: { prop: string; listData: unknown[] }[] = []\n\n const wrappedPromises = apiUrlList.map((option) => {\n const { httpRequest } = option\n const promiseThen = httpRequestFormInstance(\n { ...(option.apiParams?.model || {}) },\n { httpRequest, apiParams: option.apiParams, ...(option.apiParams?.options || {}) },\n option\n )\n return wrapPromise(promiseThen)\n })\n\n const results = await Promise.all(wrappedPromises)\n\n results.forEach((item, index) => {\n if (item.status === 'fulfilled') {\n const { configRows, data } = item.value\n const option = apiUrlList[index]\n const listenToCallBack = option?.listenToCallBack as Record<string, (params: unknown) => unknown> | undefined\n\n /**\n * 优先使用 listenToCallBack.crtn 格式化数据\n * crtn 接收 API 原始响应 data,返回 [{ label, value }] 格式的选项数据\n * data 是 httpRequest 返回的 { data: any } 中的 data 字段\n */\n let listData: unknown[] = []\n if (listenToCallBack?.crtn) {\n listData = listenToCallBack.crtn(data) as unknown[]\n }\n\n // 如果 crtn 未配置或返回空,则降级使用 callOptionListFormat 或格式化后的数据\n const newListOptions =\n Array.isArray(listData) && listData.length > 0\n ? listData\n : typeof option?.callOptionListFormat === 'function'\n ? option.callOptionListFormat(configRows?.listData as unknown[] || option?.dataOptions || [])\n : undefined\n\n apiResult.push({\n prop: apiUrlList[index].prop,\n listData: Array.isArray(newListOptions) ? newListOptions : (configRows?.listData as unknown[] || apiUrlList[index]?.dataOptions || [])\n })\n }\n })\n return apiResult\n } catch (e) {\n return []\n }\n }\n\n return {\n queryTableListMethod,\n getEveryFormQueryField,\n formatConfigOut,\n configFormField\n }\n}\n","import { createVNode, getCurrentInstance, render } from 'vue'\nimport EsDialog from './component.vue'\nimport type { DialogOptions } from '../../../types'\n\nconst getAppendToElement = (appendTo?: string | HTMLElement) => {\n if (typeof appendTo === 'string') {\n return document.querySelector(appendTo) || document.body\n }\n return appendTo instanceof HTMLElement ? appendTo : document.body\n}\n\nconst initInstance = (Component: any, props: DialogOptions, container: HTMLElement, appContext: any) => {\n const vNode = createVNode(Component, props)\n\n if (appContext) {\n vNode.appContext = appContext\n\n if (!vNode.appContext.provides) {\n vNode.appContext.provides = {}\n }\n\n // 注入语言环境(如果父应用有提供)\n const injectedLocale = appContext.provides?.elLocale\n if (injectedLocale) {\n vNode.appContext.provides['elLocale'] = injectedLocale\n }\n\n if (!vNode.appContext.config) {\n vNode.appContext.config = {}\n }\n if (!vNode.appContext.config.globalProperties) {\n vNode.appContext.config.globalProperties = {}\n }\n }\n\n render(vNode, container)\n\n const target = getAppendToElement(props.appendTo)\n target.appendChild(container)\n return vNode\n}\n\nexport const useDialog = (Component?: any, opt: { onlyInstance?: boolean } = {}) => {\n Component = Component || EsDialog\n const options = Object.assign({ onlyInstance: false }, opt)\n\n if (options.onlyInstance) {\n const instance = getCurrentInstance()\n const appContext = instance?.appContext || null\n const container = document.createElement('div')\n\n const close = () => {\n render(null, container)\n container.remove()\n }\n\n const DialogComponent = (dialogOptions: DialogOptions) => {\n if (dialogOptions.visible === undefined) {\n dialogOptions.visible = true\n }\n\n const originalOnClosed = dialogOptions.onClosed\n const originalOnSubmit = dialogOptions.onSubmit\n\n dialogOptions.onClosed = (...args: any[]) => {\n originalOnClosed?.(...args)\n close()\n }\n\n dialogOptions.onSubmit = (closeFn = close) => {\n originalOnSubmit?.(closeFn)\n }\n\n return initInstance(Component, dialogOptions, container, appContext)\n }\n\n DialogComponent.close = close\n return DialogComponent\n } else {\n const container = document.createElement('div')\n container.className = 'dialog-containers'\n const instance = getCurrentInstance()\n const appContext = instance?.appContext || null\n let vNode: any = null\n\n const close = () => {\n if (vNode && vNode.component) {\n vNode.component.props.visible = false\n }\n }\n\n const destroy = () => {\n if (vNode) {\n render(null, container)\n container.remove()\n vNode = null\n }\n }\n\n const DialogComponent = (dialogOptions: DialogOptions) => {\n if (vNode && vNode.component) {\n Object.assign(vNode.component.props, dialogOptions)\n vNode.component.props.visible = true\n return vNode\n }\n\n const mergedOptions: DialogOptions = {\n visible: true,\n width: '50%',\n destroyOnClose: true,\n ...dialogOptions\n }\n\n const { onClosed: originalOnClosed, onSubmit: originalOnSubmit } = mergedOptions\n\n mergedOptions.onClosed = () => {\n originalOnClosed?.()\n close()\n }\n\n mergedOptions.onSubmit = (closeFn = close) => {\n originalOnSubmit?.(closeFn)\n }\n\n vNode = initInstance(Component, mergedOptions, container, appContext)\n return vNode\n }\n\n DialogComponent.close = close\n DialogComponent.destroy = destroy\n return DialogComponent\n }\n}\n\nexport default useDialog\n","<template>\n <el-form :ref=\"setFormRef\" v-bind=\"formProps\" class=\"es-form\">\n <div class=\"flex-center\">\n <el-row v-bind=\"rowLayout\">\n <template v-for=\"(item, index) in formItem\" :key=\"item.prop\">\n <el-col v-show=\"!item?.isFold\" :span=\"item.span || 6\">\n <el-form-item\n :label=\"item.label\"\n v-bind=\"initFormItemOptions(item.formItemOptions || {})\"\n :prop=\"item.prop\"\n @click.stop=\"() => {}\"\n >\n <template v-if=\"item.formtype\">\n <RenderDomForm :row=\"item\" :render=\"formInputComponents(item)\" :index=\"index\" :model=\"model\" />\n </template>\n <template v-else>\n <RenderDomForm :row=\"item\" :render=\"item.render\" :index=\"index\" :model=\"model\" />\n </template>\n </el-form-item>\n </el-col>\n </template>\n\n <template v-if=\"!isBtnHidden\">\n <template v-if=\"isRenderBtn\">\n <RenderBtn\n :row=\"{ isFold: isFold, folded, getBtnColSpan, getRowColsAlgorithm, changeFolded, refsForm: formInstance }\"\n :form-model=\"model\"\n :form-item-list=\"formItem\"\n :render=\"renderBtn\"\n />\n </template>\n <el-col v-else :span=\"btnColSpanRow ? 24 : getBtnColSpan\">\n <div v-if=\"btnColSpanRow && configBtn.length\" class=\"buttonOperate leftRightBtn\">\n <div class=\"btn-left\">\n <el-form-item label-width=\"0px\" class=\"btn-formItem\">\n <el-button\n v-for=\"(it, inx) in colRightLeftList.colLeftBtn\"\n v-bind=\"filterOptions(it)\"\n :icon=\"getCompIcon(it.icon)\"\n :disabled=\"typeof it.disabled === 'function' ? it.disabled() || false : it.disabled || false\"\n @click=\"() => it.click(model, refs, getTableInstant?.httpRequestInstance)\"\n :key=\"it.key || inx\"\n >\n {{ it.name }}\n </el-button>\n </el-form-item>\n </div>\n <div class=\"btn-right\">\n <el-form-item label-width=\"0px\" class=\"btn-formItem\">\n <el-button\n v-for=\"(it, inx) in colRightLeftList.colRightBtn\"\n v-bind=\"filterOptions(it)\"\n :icon=\"getCompIcon(it.icon)\"\n :disabled=\"typeof it.disabled === 'function' ? it.disabled() || false : it.disabled || false\"\n @click=\"() => clickBtn(it)\"\n :key=\"it.key || inx\"\n >\n {{ it.name }}\n </el-button>\n <el-button\n v-if=\"isFold\"\n link\n type=\"primary\"\n :icon=\"getCompIcon(folded ? 'ArrowDown' : 'ArrowUp')\"\n style=\"padding-left: 0; border: none\"\n @click=\"changeFolded\"\n >\n {{ folded ? '展开' : '收起' }}\n </el-button>\n <el-dropdown placement=\"bottom-start\" v-if=\"getSetOptionsStatus\">\n <el-button\n link\n type=\"primary\"\n style=\"margin-left: 2px; margin-right: 5px; outline: none\"\n :icon=\"getCompIcon('Tools')\"\n />\n <template #dropdown>\n <el-dropdown-menu>\n <el-dropdown-item @click=\"handleCustomerForm\">自定义查询</el-dropdown-item>\n <el-dropdown-item @click=\"handleTableItemOption\">自定义表格</el-dropdown-item>\n <el-dropdown-item @click=\"handleRefresh\">重置(刷新)</el-dropdown-item>\n </el-dropdown-menu>\n </template>\n </el-dropdown>\n </el-form-item>\n </div>\n </div>\n <el-form-item\n v-if=\"!btnColSpanRow && configBtn.length\"\n :label=\"' '\"\n :label-width=\"formProps.labelBtnWidth ? formProps.labelBtnWidth : formProps.labelWidth\"\n :class=\"{ formItemCols: btnColSpanRow ? true : getBtnColSpan === 24 }\"\n class=\"btn-formItem\"\n >\n <div class=\"buttonOperate\" :style=\"{ 'text-align': getBtnColSpan === 24 ? 'right' : 'left' }\">\n <template v-if=\"configBtn.length\">\n <el-button\n v-for=\"(it, inx) in configBtn\"\n v-bind=\"filterOptions(it)\"\n :icon=\"getCompIcon(it.icon)\"\n :disabled=\"typeof it.disabled === 'function' ? it.disabled() || false : it.disabled || false\"\n @click=\"() => it.click(model, refs, getTableInstant?.httpRequestInstance)\"\n :key=\"it.key || inx\"\n >\n {{ it.name }}\n </el-button>\n </template>\n <el-button\n v-if=\"isFold\"\n type=\"primary\"\n link\n :icon=\"getCompIcon(folded ? 'ArrowDown' : 'ArrowUp')\"\n style=\"padding-left: 0; border: none\"\n @click=\"changeFolded\"\n >\n {{ folded ? '展开' : '收起' }}\n </el-button>\n <el-dropdown placement=\"bottom-start\" v-if=\"getSetOptionsStatus\">\n <el-button\n link\n type=\"primary\"\n style=\"margin-left: 2px; margin-right: 5px; outline: none\"\n :icon=\"getCompIcon('Tools')\"\n />\n <template #dropdown>\n <el-dropdown-menu>\n <el-dropdown-item @click=\"handleCustomerForm\">自定义查询</el-dropdown-item>\n <el-dropdown-item @click=\"handleTableItemOption\">自定义表格</el-dropdown-item>\n <el-dropdown-item @click=\"handleRefresh\">重置(刷新)</el-dropdown-item>\n </el-dropdown-menu>\n </template>\n </el-dropdown>\n </div>\n </el-form-item>\n </el-col>\n </template>\n </el-row>\n </div>\n </el-form>\n</template>\n\n<script lang=\"ts\">\nexport default { name: 'EsForm' }\n</script>\n\n<script setup lang=\"ts\">\nimport { ref, computed, watch, inject, getCurrentInstance, nextTick, h, defineComponent } from 'vue'\nimport {\n ElRow,\n ElCol,\n ElFormItem,\n ElForm,\n ElButton,\n ElDropdownMenu,\n ElDropdownItem,\n ElDropdown,\n ElInput\n} from 'element-plus'\nimport * as ElementPlusIconsVue from '@element-plus/icons-vue'\nimport { useFormInputs } from '../../../composables/use-form-inputs'\nimport { useFormLayout } from '../../../composables/use-form-layout'\nimport { useFormRequest } from '../../../composables/use-form-request'\nimport { isObject } from '../../../utils/shared'\nimport useDialog from '../../es-dialog/src/use-dialog'\nimport EsTable from '../../es-table'\nimport type { FormItemOption, BtnConfig, LayoutFormProps } from '../../../types'\n\nconst props = withDefaults(\n defineProps<{\n model: Record<string, unknown>\n formItemList: FormItemOption[]\n layoutFormProps?: LayoutFormProps\n configBtn?: BtnConfig[]\n renderBtn?: Function | boolean\n btnColSpanRow?: boolean\n rules?: Record<string, unknown>\n fieldFieldOutput?: (defaults: Record<string, string>) => Record<string, string>\n }>(),\n {\n model: () => ({}),\n formItemList: () => [],\n layoutFormProps: () => ({}),\n configBtn: () => [],\n renderBtn: false,\n btnColSpanRow: true,\n rules: () => ({})\n }\n)\n\nconst emit = defineEmits<{\n confirm: [formRef: unknown, model: Record<string, unknown>]\n reset: [formRef: unknown, model: Record<string, unknown>]\n}>()\n\nconst instance = getCurrentInstance()\nconst $esPlusForm = inject<Record<string, unknown>>('$esPlusForm', {})\n\n// 保留与 Table 的耦合(同时支持 inject 和 instance.ctx 两种获取方式)\nconst injectedTableInstant = inject<(() => any) | null>('getTableInstantce', null)\nconst getTableInstant = computed(() => {\n if (injectedTableInstant) {\n return typeof injectedTableInstant === 'function' ? injectedTableInstant() : injectedTableInstant\n }\n const ctx = instance?.ctx as Record<string, unknown>\n return typeof ctx?.getTableInstantce === 'function' ? ctx?.getTableInstantce() : ctx?.getTableInstantce\n})\n\nconst isParentTable = computed(() => {\n return !!(getTableInstant.value && Object.keys(getTableInstant.value).length)\n})\n\n// 图标扩展\nconst extendedIcon = Object.fromEntries(Object.entries(ElementPlusIconsVue))\nconst getCompIcon = (key?: string) => (key ? extendedIcon[key] || key : undefined)\nconst filterOptions = (it: BtnConfig) => {\n const { icon, ...opt } = it as Record<string, unknown>\n return opt\n}\n\n// Refs\nconst refs = ref<unknown>(null)\nconst formInstance = ref<Record<string, unknown>>({})\nconst formItemRowsList = ref<FormItemOption[]>(props.formItemList)\n\nconst setFormRef = (el: unknown) => {\n if (el) refs.value = el\n}\n\n// Composables\nconst { formInputComponents } = useFormInputs()\nconst httpRequestGlobal = ($esPlusForm?.$httpRequest as (params: Record<string, unknown>) => Promise<unknown>) || undefined\nconst { getEveryFormQueryField } = useFormRequest(httpRequestGlobal)\n\n// Break circular dependency: formLayoutRef is populated after useFormLayout\nconst formLayoutRef = ref<Record<string, unknown>>(props.layoutFormProps?.fromLayProps || {})\nconst formProps = computed(() => ({\n ...formLayoutRef.value,\n model: props.model,\n rules: props.rules,\n validateOnRuleChange: false\n}))\n\n// 缓存已加载数据的表单项 prop,避免 computed 重新计算时重复调用接口\nconst loadedApiProps = ref<Set<string>>(new Set())\n\nwatch(\n () => props.formItemList,\n async (val) => {\n const list = Array.isArray(val) ? val : []\n // 只加载 isInitRun !== false 且尚未加载过数据的表单项\n const needLoadList = list.filter((it) => it && it.isInitRun !== false && !loadedApiProps.value.has(it.prop))\n if (!needLoadList.length) {\n // 无新表单项需要加载,保留已有的 dataOptions\n formItemRowsList.value = list.map((it) => {\n if (!it) return null\n const existing = formItemRowsList.value.find((old) => old && old.prop === it.prop)\n return existing?.dataOptions?.length ? { ...it, dataOptions: existing.dataOptions } : it\n }).filter((it): it is FormItemOption => !!it)\n return\n }\n const rows = await getEveryFormQueryField(needLoadList)\n // 标记已加载的 prop\n needLoadList.forEach((it) => loadedApiProps.value.add(it.prop))\n formItemRowsList.value = list\n .map((it) => {\n if (!it) return null\n const resultApiOption = rows.find((item) => item && item.prop === it.prop)\n const existing = formItemRowsList.value.find((old) => old && old.prop === it.prop)\n // 优先使用新加载的数据,其次保留已有数据\n if (resultApiOption) return { ...it, dataOptions: resultApiOption.listData }\n if (existing?.dataOptions?.length) return { ...it, dataOptions: existing.dataOptions }\n return it\n })\n .filter((it): it is FormItemOption => !!it)\n },\n { immediate: true, deep: true }\n)\n\nconst formItemListFilter = computed(() => {\n const list = formItemRowsList.value || []\n return list\n .map((it) => (it ? { ...it, span: it.span || 6, dataOptions: it.dataOptions || [] } : null))\n .filter((it): it is FormItemOption => {\n if (!it) return false\n if (it.isHidden && typeof it.isHidden === 'function') {\n return !it.isHidden(props.model, it, formProps.value)\n }\n return true\n })\n})\n\nconst {\n folded,\n isBtnHidden,\n rowLayout,\n formLayout,\n getSetOptionsStatus,\n getRowColsAlgorithm,\n isFold,\n getBtnColSpan,\n formItem,\n changeFolded\n} = useFormLayout({\n layoutFormProps: props.layoutFormProps,\n get formItemList() { return formItemListFilter.value }\n})\n\nwatch(\n formLayout,\n (val) => {\n formLayoutRef.value = val\n },\n { immediate: true }\n)\n\nconst colRightLeftList = computed(() => ({\n colRightBtn: props.configBtn.filter((it) => it.direction === 'right' || !it.direction),\n colLeftBtn: props.configBtn.filter((it) => it.direction === 'left')\n}))\n\nconst isRenderBtn = computed(() => typeof props.renderBtn === 'function')\n\nconst clickBtn = async (it: BtnConfig) => {\n if (it.triggerEvent && ['query', 'rest'].includes(it.key || '')) {\n queryTableRequest(props.model, refs.value as { resetFields: () => void }, it.key)\n } else {\n\n // await refs.value.validate()\n if (it.key === 'rest' && refs.value) {\n refs.value.resetFields()\n }\n it.click?.(props.model, refs.value, getTableInstant.value?.httpRequestInstance)\n }\n}\n\nconst queryTableRequest = async (model: Record<string, unknown>, formRef: { resetFields: () => void; validate: () => Promise<boolean> } | null, key?: string) => {\n if (key === 'query') {\n if (isParentTable.value) {\n getTableInstant.value?.httpRequestInstance?.(model)\n }\n // else if (formRef) {\n // await formRef.validate()\n // }\n } else if (key === 'rest' && formRef) {\n if (isParentTable.value) {\n getTableInstant.value?.httpRequestInstance?.(model)\n }\n formRef.resetFields()\n }\n}\n\nconst initFormItemOptions = (opts: Record<string, unknown>) => {\n if (isParentTable.value) {\n const { style, ...rest } = opts\n return { style: { marginBottom: '10px', ...(style as Record<string, unknown>) }, ...rest }\n }\n return opts\n}\n\nconst confirm = () => emit('confirm', refs.value, props.model)\nconst reset = () => emit('reset', refs.value, props.model)\n\n// 自定义弹窗\nconst createDialogInstance = (() =>\n instance?.ctx?.dialogInstance ? instance.ctx.dialogInstance() : useDialog)()\nconst customerForm = createDialogInstance()\nconst customerTable = createDialogInstance()\n\nconst handleRefresh = () => {\n // 保留原有逻辑\n}\n\nconst getFormRowsFun = () => {\n return {\n data: formItemRowsList.value.map((it) => ({\n ...it,\n label: it.label,\n prop: it.prop,\n isHidden: !!it.isHidden,\n width: it.width\n })),\n columns: [\n { type: 'selection', width: 50 },\n { label: '名称(列)', key: 'label' },\n { label: '属性(Key)', key: 'prop' },\n {\n label: '列宽',\n width: 180,\n render: (_text: unknown, row: Record<string, unknown>) => {\n return h('div', [\n h(ElInput, {\n size: 'small',\n maxlength: 3,\n formatter: (value: string) => value.replace(/^0|[^0-9]/g, ''),\n modelValue: row.width,\n 'onUpdate:modelValue': (val: unknown) => {\n row.width = val\n }\n }, {\n prepend: () => '宽度',\n append: () => 'px'\n })\n ])\n }\n }\n ]\n }\n}\n\nconst getCustomerTableInfo = () => {\n return {\n dataSource: [],\n columns: [\n { type: 'selection', width: 50 },\n { label: '名称(列)', key: 'label' },\n { label: '属性(Key)', key: 'tableProp' },\n {\n label: '列宽',\n width: 180,\n render: (_text: unknown, row: Record<string, unknown>) => {\n return h('div', [\n h(ElInput, {\n size: 'small',\n maxlength: 3,\n formatter: (value: string) => value.replace(/^0|[^0-9]/g, ''),\n modelValue: row.width,\n 'onUpdate:modelValue': (val: unknown) => {\n row.width = val\n }\n }, {\n prepend: () => '宽度',\n append: () => 'px'\n })\n ])\n }\n }\n ]\n }\n}\n\nconst handleCustomerForm = () => {\n const formRows = getFormRowsFun()\n customerForm({\n title: '自定义查询',\n width: '800px',\n isDraggable: true,\n render: () =>\n h(EsTable, {\n dataSource: formRows.data,\n columns: formRows.columns,\n options: {\n multiSelect: true,\n expand: false,\n snIndex: false,\n loading: false,\n border: true,\n size: 'small'\n },\n pagination: {\n pageSize: 10,\n current: 1,\n total: formRows.data?.length || 0\n }\n }),\n configBtn: [\n {\n name: '取消',\n icon: 'Close',\n click: (_instance: unknown, { close }: { close: () => void }) => close()\n },\n {\n name: '确认',\n type: 'primary',\n icon: 'Check',\n click: (_instance: unknown, { close }: { close: () => void }) => close()\n }\n ]\n })\n}\n\nconst handleTableItemOption = () => {\n const formRows = getCustomerTableInfo()\n customerTable({\n title: '自定义表格',\n width: '800px',\n render: () =>\n h(EsTable, {\n dataSource: formRows.dataSource,\n columns: formRows.columns\n })\n })\n}\n\n// 生命周期\nnextTick(() => {\n formInstance.value = refs.value as Record<string, unknown>\n ;(instance?.ctx as Record<string, unknown>)?.bodyFormInstance?.(formInstance.value)\n})\n\n// 子组件定义\nconst RenderBtn = defineComponent({\n props: {\n row: Object,\n formItemList: Array,\n formModel: Object,\n render: Function,\n ellipsis: Boolean\n },\n setup(props) {\n return () => {\n const { formItemList, formModel, row } = props\n const renderContent = props.render?.(row, formModel, formItemList, h) || ''\n return typeof renderContent === 'string' ? h('span', renderContent) : renderContent\n }\n }\n})\n\nconst RenderDomForm = defineComponent({\n props: {\n row: Object,\n index: Number,\n datakey: String,\n render: Function,\n model: Object,\n ellipsis: Boolean\n },\n setup(props) {\n return () => {\n const { row, index, model } = props\n const renderContent = props.render?.(h, model, { row, index }) || ''\n return typeof renderContent === 'string' ? h('span', renderContent) : renderContent\n }\n }\n})\n\n// 暴露给外部的方法,用于手动触发指定表单项的请求\nconst formItmeRequestInstance = async (propsList: string[]) => {\n const list = formItemListFilter.value\n const targetItems = list.filter((it) => it && propsList.includes(it.prop))\n if (!targetItems.length) return\n\n const rows = await getEveryFormQueryField(targetItems)\n rows.forEach((resultApiOption) => {\n if (!resultApiOption) return\n const itemIndex = formItemRowsList.value.findIndex((it) => it && it.prop === resultApiOption.prop)\n if (itemIndex !== -1) {\n formItemRowsList.value[itemIndex] = {\n ...formItemRowsList.value[itemIndex],\n dataOptions: resultApiOption.listData as Array<{ label: string; value: unknown }>\n }\n }\n })\n}\n\n// 暴露组件实例方法\nconst getFormRef = () => refs.value as { validate: () => Promise<boolean>; resetFields: () => void; clearValidate: (props?: string | string[]) => void; validateField: (props: string | string[]) => Promise<boolean>; scrollToField: (prop: string) => void }\n\ndefineExpose({\n formItmeRequestInstance,\n getFormRef,\n validate: () => getFormRef()?.validate(),\n resetFields: () => getFormRef()?.resetFields(),\n clearValidate: (props?: string | string[]) => getFormRef()?.clearValidate(props),\n validateField: (props: string | string[]) => getFormRef()?.validateField(props),\n scrollToField: (prop: string) => getFormRef()?.scrollToField(prop)\n})\n</script>\n\n<style lang=\"scss\" scoped>\n.es-form {\n :deep(.el-form-item) {\n margin-bottom: 18px;\n }\n\n :deep(.el-form-item__label) {\n font-weight: 500;\n }\n\n .buttonOperate {\n display: flex;\n align-items: center;\n flex-wrap: wrap;\n gap: 8px;\n }\n\n .leftRightBtn {\n display: flex;\n justify-content: space-between;\n align-items: center;\n width: 100%;\n\n .btn-left,\n .btn-right {\n display: flex;\n align-items: center;\n }\n }\n\n .btn-formItem {\n margin-bottom: 0;\n }\n\n .formItemCols {\n width: 100%;\n }\n}\n</style>\n","import EsForm from './src/es-form.vue'\nimport useDialog from '../es-dialog/src/use-dialog'\n\nEsForm.install = function (app: any) {\n app.component(EsForm.name, EsForm)\n}\n\nEsForm.isPlugin = true\nEsForm.Plugin = {\n install(app: any, options: any = {}) {\n app.provide('$esPlusForm', {\n ...options.methods,\n useDialog: () => useDialog()\n })\n app.component(EsForm.name, { ...EsForm, methods: { ...EsForm.methods, ...(options.methods || {}), useDialog: () => useDialog() } })\n }\n}\n\nexport default EsForm\n","<template>\n <div class=\"dp-dialog_wrapper\">\n <el-dialog\n :class=\"['dg-dialog', initDialogCls]\"\n v-bind=\"filteredAttrs\"\n v-model=\"dialogVisible\"\n :draggable=\"props.isDraggable\"\n :width=\"props.width\"\n :show-close=\"false\"\n @close=\"beforeClose\"\n :fullscreen=\"filteredAttrs?.fullscreen ?? isFullscreen\"\n >\n <template #header>\n <template v-if=\"props.renderHeader\">\n <RenderJsx :render=\"props.renderHeader\" :instance=\"getCurrentInstanceModel\" />\n </template>\n <template v-else>\n <div>\n <span class=\"dialog-title\">{{ props.title }}</span>\n </div>\n <div class=\"btns\">\n <el-icon @click=\"handleFullscreen\" v-show=\"!props.hiddenFullBtn\">\n <FullScreen v-if=\"!isFullscreen\" />\n <CopyDocument v-else />\n </el-icon>\n <el-icon @click=\"handleClose\"><Close /></el-icon>\n </div>\n </template>\n </template>\n\n <div class=\"dialog_body_layouts\" :style=\"initDialogHeight\">\n <template v-if=\"props.render && typeof props.render === 'function'\">\n <RenderJsx\n :refs=\"renderBodyRefsObject\"\n :instance=\"getCurrentInstanceModel\"\n :render=\"props.render\"\n :components=\"{ EsTable, EsForm }\"\n :locale=\"locale\"\n />\n </template>\n </div>\n\n <template #footer v-if=\"!attrs.isHiddenFooter\">\n <span v-if=\"!slots.footer\" class=\"dialog-footer\">\n <template v-if=\"props.renderFooter && typeof props.renderFooter === 'function'\">\n <RenderJsx :render=\"props.renderFooter\" :instance=\"getCurrentInstanceModel\" />\n </template>\n <template v-else-if=\"props.configBtn && props.configBtn.length\">\n <el-button\n v-for=\"(it, inx) in configBtn\"\n size=\"small\"\n v-bind=\"filterOptions(it)\"\n :icon=\"getCompIcon(it.icon)\"\n :disabled=\"typeof it.disabled === 'function' ? it.disabled() : it.disabled || false\"\n @click=\"() => {\n it.click?.(renderBodyRefsObject.currentRef, {\n close: handleClose,\n getRefs: (name?: string) => {\n if (name) return renderBodyRefsObject[name] || null\n return renderBodyRefsObject\n },\n dialogInstance\n })\n }\"\n :key=\"it.key || inx\"\n >\n {{ it.name }}\n </el-button>\n </template>\n </span>\n <slot v-else name=\"footer\" />\n </template>\n </el-dialog>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref, reactive, getCurrentInstance, provide, inject, useAttrs } from 'vue'\nimport { ElConfigProvider, ElDialog, ElButton, ElIcon } from 'element-plus'\nimport { FullScreen, Close, CopyDocument } from '@element-plus/icons-vue'\nimport RenderJsx from './render-jsx.vue'\nimport EsTable from '../../es-table'\nimport EsForm from '../../es-form'\nimport * as ElementPlusIconsVue from '@element-plus/icons-vue'\nimport zhCn from 'element-plus/es/locale/lang/zh-cn'\nimport type { BtnConfig } from '../../../types'\n\nconst props = defineProps<{\n title?: string\n visible?: boolean\n appendTo?: object | string\n hiddenFullBtn?: boolean\n width?: string | number\n isDraggable?: boolean\n confirmText?: string\n cancelText?: string\n configBtn?: BtnConfig[]\n maxHeight?: string | number\n isHiddenFooter?: boolean\n renderHeader?: Function\n renderFooter?: Function\n render?: Function\n fullscreen?: boolean\n}>()\n\nconst emit = defineEmits<{\n 'update:visible': [val: boolean]\n closed: [val: boolean]\n submit: [payload: any]\n}>()\n\nconst slots = defineSlots()\n\nconst instance = getCurrentInstance()\nconst attrs = useAttrs()\n\nconst extended = Object.fromEntries(Object.entries(ElementPlusIconsVue).map(([key]) => [key, ElementPlusIconsVue[key]]))\n\nconst lyFormInstance = ref(null)\nconst renderBodyRefsObject = reactive<Record<string, any>>({})\nconst isFullscreen = ref(false)\nconst dialogInstance = instance\nconst locale = ref(zhCn)\n\nconst injectedLocale = inject('elLocale', null)\nif (injectedLocale) {\n locale.value = injectedLocale as any\n}\n\nprovide('elLocale', locale.value)\n\nconst getCompIcon = (key?: string) => {\n return key ? extended[key] || key : undefined\n}\n\nconst filterOptions = (it: BtnConfig) => {\n const { icon, ...opt } = it as Record<string, unknown>\n return opt\n}\n\nconst closeFullscreen = () => {\n setTimeout(() => {\n if (isFullscreen.value) {\n isFullscreen.value = false\n }\n }, 500)\n}\n\nconst handleFullscreen = () => {\n if (attrs?.fullscreen) return\n isFullscreen.value = !isFullscreen.value\n}\n\nconst handleClose = () => {\n emit('closed', false)\n closeFullscreen()\n}\n\nconst handleConfirm = () => {\n emit('submit', { renderBodyRefs: renderBodyRefsObject.currentRef, lyFormInstance, dialogInstance })\n}\n\nconst beforeClose = () => {\n emit('closed', false)\n closeFullscreen()\n}\n\nconst filteredAttrs = computed(() => {\n const { ...rest } = attrs\n return rest\n})\n\nconst initDialogCls = computed(() => {\n if (!isFullscreen.value) {\n if (props.maxHeight) return 'dialogShadow'\n return 'dialogAuto'\n }\n return 'dialogFull'\n})\n\nconst getMaxContentHeight = () => {\n const viewH = window.innerHeight\n return Math.max(viewH - 135, 200)\n}\n\nconst initDialogHeight = computed(() => {\n const viewH = getMaxContentHeight()\n if (!isFullscreen.value) {\n if (props.maxHeight) {\n return { maxHeight: typeof props.maxHeight === 'number' ? `${props.maxHeight}px` : props.maxHeight }\n }\n return { maxHeight: viewH + 'px' }\n }\n return { height: viewH + 'px' }\n})\n\nconst dialogVisible = computed({\n get: () => props.visible || false,\n set: (val) => {\n emit('update:visible', val)\n if (!val) {\n emit('closed', val)\n closeFullscreen()\n }\n }\n})\n\nconst getCurrentInstanceModel = computed(() => ({\n renderBodyRefs: renderBodyRefsObject.currentRef,\n renderBodyRefsObject,\n lyFormInstance,\n dialogInstance,\n getRefs: () => renderBodyRefsObject\n}))\n\nprovide('bodyFormInstance', (e: any) => {\n lyFormInstance.value = e\n})\n\nif (instance) {\n instance.exposed = {\n closed: handleClose\n }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.dp-dialog_wrapper {\n :deep(.dialogAuto) {\n margin: 0px !important;\n }\n :deep(.el-overlay-dialog) {\n display: flex;\n justify-content: center;\n align-items: center;\n }\n :deep(.el-dialog) {\n padding: 10px;\n\n .el-dialog__footer {\n padding-top: 0px;\n }\n\n .el-dialog__body {\n padding: 10px 0px;\n }\n\n .el-dialog__header {\n border-bottom: 1px solid #eee;\n display: flex;\n padding: 0px 0px 10px 0px;\n align-items: center;\n justify-content: space-between;\n margin: 0;\n }\n }\n}\n\n.dialog-title {\n line-height: 24px;\n font-size: 14px;\n color: #303133;\n font-weight: bold;\n}\n\n.btns {\n display: flex;\n align-items: center;\n\n i {\n margin-right: 8px;\n font-size: 14px;\n cursor: pointer;\n\n &:last-child {\n margin-right: 0;\n }\n }\n}\n\n.dialog_body_layouts {\n overflow-y: auto;\n overflow-x: hidden;\n scrollbar-width: thin;\n scrollbar-color: #87a2bd26 #c8d5e147;\n}\n\n/* 滚动条样式 */\n*::-webkit-scrollbar {\n width: 14px;\n height: 14px;\n}\n\n*::-webkit-scrollbar-button {\n width: 0;\n height: 0;\n display: none;\n}\n\n*::-webkit-scrollbar-corner {\n background-color: transparent;\n}\n\n*::-webkit-scrollbar-thumb {\n min-height: 12px;\n border: 4px solid transparent;\n background-clip: content-box;\n border-radius: 7px;\n background-color: #c8d5e1;\n\n &:hover {\n background-color: #a8bbcf;\n }\n\n &:active {\n background-color: #87a2bd;\n }\n}\n\n*::-webkit-scrollbar-track {\n background-color: transparent;\n}\n\n*::-webkit-scrollbar-track-piece {\n background-color: transparent;\n}\n</style>\n","import EsDialog from './src/component.vue'\n\nEsDialog.install = function (app: any) {\n app.component(EsDialog.name, EsDialog)\n}\n\nexport default EsDialog\n","<template>\n <div v-if=\"isExternal\" :style=\"styleExternalIcon\" class=\"svg-external-icon svg-icon\" />\n <svg v-else :class=\"svgClass\" aria-hidden=\"true\">\n <use :xlink:href=\"iconName\" />\n </svg>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\n\nconst props = defineProps<{\n iconClass: string\n className?: string\n}>()\n\nconst isExternal = computed(() => isExternals(props.iconClass))\nconst iconName = computed(() => `#icon-${props.iconClass}`)\nconst svgClass = computed(() => {\n if (props.className) {\n return 'svg-icon ' + props.className\n }\n return 'svg-icon'\n})\nconst styleExternalIcon = computed(() => {\n return {\n mask: `url(${props.iconClass}) no-repeat 50% 50%`,\n '-webkit-mask': `url(${props.iconClass}) no-repeat 50% 50%`\n }\n})\n\nconst isExternals = (path: string) => {\n return /^(https?:|mailto:|tel:|open)/.test(path)\n}\n</script>\n\n<style scoped>\n.svg-icon {\n width: 1em;\n height: 1em;\n vertical-align: -0.15em;\n fill: currentColor;\n overflow: hidden;\n}\n\n.svg-external-icon {\n background-color: currentColor;\n mask-size: cover !important;\n display: inline-block;\n}\n</style>\n","import SvgIcon from './src/svg-icon.vue'\n\nSvgIcon.install = function (app: any) {\n app.component(SvgIcon.name, SvgIcon)\n}\n\nexport default SvgIcon","import { version } from '../package.json'\nimport EsDialog from './components/es-dialog'\nimport useDialog from './components/es-dialog/src/use-dialog'\nimport EsForm from './components/es-form'\nimport EsTable from './components/es-table'\nimport SvgIcon from './components/svg-icon'\n\n// 组件列表\nconst components = [EsDialog, EsForm, EsTable, SvgIcon]\n\n// Vue 3 插件安装函数\nconst install = (app: any, options: Record<string, unknown> = {}) => {\n components.forEach((component) => {\n if (component.name) {\n app.component(component.name, component)\n }\n })\n\n if (options.globalProperties !== false) {\n app.config.globalProperties.$useDialog = useDialog\n\n components.forEach((component: any) => {\n if (component.isPlugin && component.Plugin) {\n app.use(component.Plugin, options[component.name] || {})\n }\n })\n }\n\n app.provide('$EsPlus', {\n useDialog,\n ...options\n })\n}\n\n// 按需导出\nexport {\n EsDialog,\n EsForm,\n EsTable,\n SvgIcon,\n useDialog,\n install\n}\n\n// 默认导出\nexport default {\n version,\n install\n}"],"names":["zh_cn_default","_sfc_main","defineComponent","props","refsObject","reactive","getRawRef","vnodeRef","refObj","val","componentVNode","userRefCallback","flushRef","instance","comp","onMounted","onUpdated","enhancedInstance","name","el","renderContent","h","ElConfigProvider","zhCn","e","isVNode","_a","RenderDomTb","row","index","dataKey","render","value","renderResult","firstWordUpperCase","str","columnBindAttr","cols","options","parts","camelKey","i","__props","_createBlock","_unref","ElTableColumn","_normalizeProps","_mergeProps","_openBlock","_createElementBlock","_Fragment","item","_withCtx","scope","_renderSlot","_ctx","RenderDom","hasPermission","_btnList","pvalue","processButtonConfig","config","processed","processedBtnLeft","computed","processedBtnRight","showContainer","getDisabledState","buttonContainerStyle","_hoisted_1","_createElementVNode","_hoisted_2","_toDisplayString","_hoisted_3","_hoisted_4","_renderList","_normalizeStyle","_createTextVNode","_hoisted_5","useTableResize","tableContainerRef","headBarRef","tbBtnRef","paginationRef","tableHeight","ref","observer","isNegative","num","totalContainerNum","headBarHeight","tbBtnHeight","_c","_b","paginationHeight","_d","resizeObservers","element","containerHeight","maxContainer","minTableNum","tabContainer","_e","newHeight","startObserver","nextTick","target","stopObserver","onBeforeUnmount","useTableSelection","rowkey","multipleSelection","selectionsByPage","isInitChange","handleSelectionChange","currentPage","allSelections","uniqueMap","pageSelections","key","handleSelectData","dataList","tableRef","pageSelecteds","selectedRow","isObject","findValueByKey","obj","depth","currentValue","prop","deepValue","wrapPromise","promise","reason","defaultOptions","emit","__emit","slots","_useSlots","locale","injectedLocale","inject","getCurrentInstance","$esPlusTable","tableId","tableData","columnRowList","watch","loadingStatus","slotState","showPagination","setTableContainer","bodyFormInstance","getVisibleShow","visibleShow","paginationConfig","formInstance","getListEntry","configTableField","checkQueryFields","configFields","isFormInstance","formVNode","vnode","type","hasDefaultSlot","heightType","tabHeight","slotStyles","layout","loadStatus","isRequestConf","filteredColumns","list","_h","btn","ElButton","TABLE_INTERNAL_KEYS","tableAttrs","merged","align","rest","result","fallthroughAttrs","useAttrs","tableBindAttrs","oldVal","httpRequestInstance","initSelection","clearAllSelection","handleTableSelectionChange","checkListKey","it","its","getListenToCallBack","eventName","params","eventNameList","hasEventNameIndex","formatConfigOut","keyList","rowData","queryTableListMethod","success","fail","apiParams","url","formData","toRaw","unref","fnParams","finalParams","requestOption","requestHandler","requestFn","res","responseData","model","resolve","reject","err","changePageIndexRequest","changePageSizeRequest","handleSizeChange","size","handleIndexChange","changeTableSort","column","char","t","newkey","j","provide","rows","__expose","_normalizeClass","_withDirectives","TableBtns","_cache","ColumnItem","_createVNode","ElPagination","$event","EsTable","app","getNestedValue","path","keys","setNestedValue","lastKey","current","useFormInputs","hFn","ElInput","ElSelect","opt","idx","ElOption","ElDatePicker","ElTimePicker","ElSlider","ElColorPicker","ElTransfer","ElCascader","ElRadioGroup","ElRadio","ElCheckboxGroup","ElCheckbox","ElSwitch","ElRate","_model","uploadProps","httpRequest","triggerRender","fileRender","restRow","uploadInstance","elUploadProps","handler","file","ElUpload","useFormLayout","folded","isBtnHidden","rowLayout","formLayout","getSetOptionsStatus","getRowColsAlgorithm","pre","groupArrayList","columnRows","formItems","statIndex","columRowIndexs","rowColIndex","_","isFold","minFoldRow","getBtnColSpan","rowNum","columnRow","lastColumn","btnColSpan","hasSpan","sum","formItem","columnNodeIndex","lastFoldIndex","useFormRequest","httpRequestGlobal","option","_params","initFormParams","requestPayload","configFormField","fieldFieldOutput","configFieldOut","configDataOption","rowValue","resultData","httpRequestFormInstance","configRows","rowsList","apiUrlList","apiResult","wrappedPromises","promiseThen","data","listenToCallBack","listData","newListOptions","getAppendToElement","appendTo","initInstance","Component","container","appContext","vNode","createVNode","useDialog","EsDialog","close","DialogComponent","dialogOptions","originalOnClosed","originalOnSubmit","args","closeFn","destroy","mergedOptions","__default__","$esPlusForm","injectedTableInstant","getTableInstant","ctx","isParentTable","extendedIcon","ElementPlusIconsVue","getCompIcon","filterOptions","icon","refs","formItemRowsList","setFormRef","formInputComponents","getEveryFormQueryField","formLayoutRef","formProps","loadedApiProps","needLoadList","existing","old","resultApiOption","formItemListFilter","changeFolded","colRightLeftList","isRenderBtn","clickBtn","queryTableRequest","formRef","initFormItemOptions","opts","style","createDialogInstance","customerForm","customerTable","handleRefresh","getFormRowsFun","_text","getCustomerTableInfo","handleCustomerForm","formRows","_instance","handleTableItemOption","RenderBtn","formItemList","formModel","RenderDomForm","formItmeRequestInstance","propsList","targetItems","itemIndex","getFormRef","ElForm","ElCol","_vShow","ElFormItem","inx","ElDropdown","ElDropdownMenu","ElDropdownItem","EsForm","attrs","extended","lyFormInstance","renderBodyRefsObject","isFullscreen","dialogInstance","closeFullscreen","handleFullscreen","handleClose","beforeClose","filteredAttrs","initDialogCls","getMaxContentHeight","viewH","initDialogHeight","dialogVisible","getCurrentInstanceModel","RenderJsx","ElIcon","CopyDocument","FullScreen","Close","isExternal","isExternals","iconName","svgClass","styleExternalIcon","SvgIcon","components","install","component","version"],"mappings":"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","x_google_ignoreList":[0]}
|
|
1
|
+
{"version":3,"file":"es-plus.js","sources":["../node_modules/element-plus/es/locale/lang/zh-cn.mjs","../src/components/es-dialog/src/render-jsx.vue","../src/components/es-table/src/column-item.vue","../src/components/es-table/src/table-btns.vue","../src/composables/use-table-resize.ts","../src/composables/use-table-selection.ts","../src/utils/shared.ts","../src/components/es-table/src/component.vue","../src/components/es-table/index.ts","../src/composables/use-form-inputs.ts","../src/composables/use-form-layout.ts","../src/composables/use-form-request.ts","../src/components/es-dialog/src/use-dialog.ts","../src/components/es-form/src/es-form.vue","../src/components/es-form/index.ts","../src/components/es-dialog/src/component.vue","../src/components/es-dialog/index.ts","../src/components/svg-icon/src/svg-icon.vue","../src/components/svg-icon/index.ts","../src/index.ts"],"sourcesContent":["//#region ../../packages/locale/lang/zh-cn.ts\nvar zh_cn_default = {\n\tname: \"zh-cn\",\n\tel: {\n\t\tbreadcrumb: { label: \"面包屑\" },\n\t\tcolorpicker: {\n\t\t\tconfirm: \"确定\",\n\t\t\tclear: \"清空\",\n\t\t\tdefaultLabel: \"颜色选择器\",\n\t\t\tdescription: \"当前颜色 {color},按 Enter 键选择新颜色\",\n\t\t\talphaLabel: \"选择透明度的值\",\n\t\t\talphaDescription: \"透明度 {alpha}, 当前颜色 {color}\",\n\t\t\thueLabel: \"选择色相值\",\n\t\t\thueDescription: \"色相 {hue}, 当前颜色 {color}\",\n\t\t\tsvLabel: \"选择饱和度与明度的值\",\n\t\t\tsvDescription: \"饱和度 {saturation}, 明度 {brightness}, 当前颜色 {color}\",\n\t\t\tpredefineDescription: \"选择 {value} 作为颜色\"\n\t\t},\n\t\tdatepicker: {\n\t\t\tnow: \"此刻\",\n\t\t\ttoday: \"今天\",\n\t\t\tcancel: \"取消\",\n\t\t\tclear: \"清空\",\n\t\t\tconfirm: \"确定\",\n\t\t\tdateTablePrompt: \"使用方向键与 Enter 键可选择日期\",\n\t\t\tmonthTablePrompt: \"使用方向键与 Enter 键可选择月份\",\n\t\t\tyearTablePrompt: \"使用方向键与 Enter 键可选择年份\",\n\t\t\tselectedDate: \"已选日期\",\n\t\t\tselectDate: \"选择日期\",\n\t\t\tselectTime: \"选择时间\",\n\t\t\tstartDate: \"开始日期\",\n\t\t\tstartTime: \"开始时间\",\n\t\t\tendDate: \"结束日期\",\n\t\t\tendTime: \"结束时间\",\n\t\t\tprevYear: \"前一年\",\n\t\t\tnextYear: \"后一年\",\n\t\t\tprevMonth: \"上个月\",\n\t\t\tnextMonth: \"下个月\",\n\t\t\tyear: \"年\",\n\t\t\tmonth1: \"1 月\",\n\t\t\tmonth2: \"2 月\",\n\t\t\tmonth3: \"3 月\",\n\t\t\tmonth4: \"4 月\",\n\t\t\tmonth5: \"5 月\",\n\t\t\tmonth6: \"6 月\",\n\t\t\tmonth7: \"7 月\",\n\t\t\tmonth8: \"8 月\",\n\t\t\tmonth9: \"9 月\",\n\t\t\tmonth10: \"10 月\",\n\t\t\tmonth11: \"11 月\",\n\t\t\tmonth12: \"12 月\",\n\t\t\tweeks: {\n\t\t\t\tsun: \"日\",\n\t\t\t\tmon: \"一\",\n\t\t\t\ttue: \"二\",\n\t\t\t\twed: \"三\",\n\t\t\t\tthu: \"四\",\n\t\t\t\tfri: \"五\",\n\t\t\t\tsat: \"六\"\n\t\t\t},\n\t\t\tweeksFull: {\n\t\t\t\tsun: \"星期日\",\n\t\t\t\tmon: \"星期一\",\n\t\t\t\ttue: \"星期二\",\n\t\t\t\twed: \"星期三\",\n\t\t\t\tthu: \"星期四\",\n\t\t\t\tfri: \"星期五\",\n\t\t\t\tsat: \"星期六\"\n\t\t\t},\n\t\t\tmonths: {\n\t\t\t\tjan: \"一月\",\n\t\t\t\tfeb: \"二月\",\n\t\t\t\tmar: \"三月\",\n\t\t\t\tapr: \"四月\",\n\t\t\t\tmay: \"五月\",\n\t\t\t\tjun: \"六月\",\n\t\t\t\tjul: \"七月\",\n\t\t\t\taug: \"八月\",\n\t\t\t\tsep: \"九月\",\n\t\t\t\toct: \"十月\",\n\t\t\t\tnov: \"十一月\",\n\t\t\t\tdec: \"十二月\"\n\t\t\t}\n\t\t},\n\t\tinputNumber: {\n\t\t\tdecrease: \"减少数值\",\n\t\t\tincrease: \"增加数值\"\n\t\t},\n\t\tselect: {\n\t\t\tloading: \"加载中\",\n\t\t\tnoMatch: \"无匹配数据\",\n\t\t\tnoData: \"无数据\",\n\t\t\tplaceholder: \"请选择\"\n\t\t},\n\t\tmention: { loading: \"加载中\" },\n\t\tdropdown: { toggleDropdown: \"切换下拉选项\" },\n\t\tcascader: {\n\t\t\tnoMatch: \"无匹配数据\",\n\t\t\tloading: \"加载中\",\n\t\t\tplaceholder: \"请选择\",\n\t\t\tnoData: \"暂无数据\"\n\t\t},\n\t\tpagination: {\n\t\t\tgoto: \"前往\",\n\t\t\tpagesize: \"条/页\",\n\t\t\ttotal: \"共 {total} 条\",\n\t\t\tpageClassifier: \"页\",\n\t\t\tpage: \"页\",\n\t\t\tprev: \"上一页\",\n\t\t\tnext: \"下一页\",\n\t\t\tcurrentPage: \"第 {pager} 页\",\n\t\t\tprevPages: \"向前 {pager} 页\",\n\t\t\tnextPages: \"向后 {pager} 页\",\n\t\t\tdeprecationWarning: \"你使用了一些已被废弃的用法,请参考 el-pagination 的官方文档\"\n\t\t},\n\t\tdialog: { close: \"关闭此对话框\" },\n\t\tdrawer: { close: \"关闭此对话框\" },\n\t\tmessagebox: {\n\t\t\ttitle: \"提示\",\n\t\t\tconfirm: \"确定\",\n\t\t\tcancel: \"取消\",\n\t\t\terror: \"输入的数据不合法!\",\n\t\t\tclose: \"关闭此对话框\"\n\t\t},\n\t\tupload: {\n\t\t\tdeleteTip: \"按 Delete 键可删除\",\n\t\t\tdelete: \"删除\",\n\t\t\tpreview: \"查看图片\",\n\t\t\tcontinue: \"继续上传\"\n\t\t},\n\t\tslider: {\n\t\t\tdefaultLabel: \"滑块介于 {min} 至 {max}\",\n\t\t\tdefaultRangeStartLabel: \"选择起始值\",\n\t\t\tdefaultRangeEndLabel: \"选择结束值\"\n\t\t},\n\t\ttable: {\n\t\t\temptyText: \"暂无数据\",\n\t\t\tconfirmFilter: \"筛选\",\n\t\t\tresetFilter: \"重置\",\n\t\t\tclearFilter: \"全部\",\n\t\t\tsumText: \"合计\",\n\t\t\tselectAllLabel: \"选择所有行\",\n\t\t\tselectRowLabel: \"选择当前行\",\n\t\t\texpandRowLabel: \"展开当前行\",\n\t\t\tcollapseRowLabel: \"收起当前行\",\n\t\t\tsortLabel: \"按 {column} 排序\",\n\t\t\tfilterLabel: \"按 {column} 过滤\"\n\t\t},\n\t\ttag: { close: \"关闭此标签\" },\n\t\ttour: {\n\t\t\tnext: \"下一步\",\n\t\t\tprevious: \"上一步\",\n\t\t\tfinish: \"结束导览\",\n\t\t\tclose: \"关闭此对话框\"\n\t\t},\n\t\ttree: { emptyText: \"暂无数据\" },\n\t\ttransfer: {\n\t\t\tnoMatch: \"无匹配数据\",\n\t\t\tnoData: \"无数据\",\n\t\t\ttitles: [\"列表 1\", \"列表 2\"],\n\t\t\tfilterPlaceholder: \"请输入搜索内容\",\n\t\t\tnoCheckedFormat: \"共 {total} 项\",\n\t\t\thasCheckedFormat: \"已选 {checked}/{total} 项\"\n\t\t},\n\t\timage: { error: \"加载失败\" },\n\t\tpageHeader: { title: \"返回\" },\n\t\tpopconfirm: {\n\t\t\tconfirmButtonText: \"确定\",\n\t\t\tcancelButtonText: \"取消\"\n\t\t},\n\t\tcarousel: {\n\t\t\tleftArrow: \"上一张幻灯片\",\n\t\t\trightArrow: \"下一张幻灯片\",\n\t\t\tindicator: \"幻灯片切换至索引 {index}\"\n\t\t}\n\t}\n};\n\n//#endregion\nexport { zh_cn_default as default };\n//# sourceMappingURL=zh-cn.mjs.map","<script >\nimport { defineComponent, h, reactive, isVNode, onMounted, onUpdated } from 'vue'\nimport { ElConfigProvider } from \"element-plus\"\nimport zhCn from 'element-plus/es/locale/lang/zh-cn'\n\nexport default defineComponent({\n name: 'RenderJsx',\n props: {\n refs: { type: [Function, Object], default: null },\n row: { type: Object, default: () => ({}) },\n render: { type: Function, default: () => {} },\n model: { type: Object, default: () => ({}) },\n instance: { type: Object, default: () => ({}) },\n components: { type: Object, default: () => ({}) },\n locale: { type: Object, default: null }\n },\n setup(props) {\n const refsObject = (props.refs && typeof props.refs === 'object') ? props.refs : reactive({})\n\n function getRawRef(vnodeRef) {\n if (!vnodeRef) return null\n if (typeof vnodeRef === 'function') return vnodeRef\n if (vnodeRef.r) {\n if (typeof vnodeRef.r === 'function') return vnodeRef.r\n if (vnodeRef.r && typeof vnodeRef.r === 'object' && 'value' in vnodeRef.r) {\n const refObj = vnodeRef.r\n return (val) => { refObj.value = val }\n }\n }\n return null\n }\n\n // Store the component VNode and user ref callback to use after mount\n let componentVNode = null\n let userRefCallback = null\n\n function flushRef() {\n if (!componentVNode) return\n const instance = componentVNode.component\n if (!instance) return\n // Use .exposed first — template refs on components with defineExpose\n // receive instance.exposed, not instance.proxy\n const comp = instance.exposed || instance.proxy\n if (!comp) return\n refsObject.currentRef = comp\n if (typeof userRefCallback === 'function') {\n userRefCallback(comp)\n }\n }\n\n onMounted(() => flushRef())\n onUpdated(() => flushRef())\n\n return () => {\n const { instance } = props\n const enhancedInstance = {\n ...instance,\n registerRef: (name, el) => {\n if (el !== null && el !== undefined) {\n refsObject[name] = el\n }\n },\n getRefs: () => refsObject\n }\n\n const renderContent = props.render(h, enhancedInstance, props.components || {}) || ''\n\n if (typeof renderContent === 'string') {\n componentVNode = null\n return h(ElConfigProvider, {\n locale: props.locale || zhCn\n }, () => h('span', {\n ref: (e) => { refsObject.currentRef = e }\n }, renderContent))\n }\n\n if (isVNode(renderContent)) {\n const isComponent = typeof renderContent.type !== 'string'\n if (isComponent) {\n componentVNode = renderContent\n userRefCallback = getRawRef(renderContent.ref) || getRawRef(renderContent.props?.ref)\n return renderContent\n }\n componentVNode = null\n return h(ElConfigProvider, {\n locale: props.locale || zhCn\n }, () => h('div', {\n ref: (e) => { refsObject.currentRef = e }\n }, [renderContent]))\n }\n\n componentVNode = null\n return h(ElConfigProvider, {\n locale: props.locale || zhCn\n }, () => h(renderContent, {\n ref: (e) => { refsObject.currentRef = e }\n }))\n }\n }\n})\n</script>\n","<template>\n <!-- 分组列处理 -->\n <el-table-column v-if=\"cols.groups && Array.isArray(cols.groups)\" v-bind=\"columnBindAttr(cols)\">\n <template v-for=\"(item, index) in cols.groups\" :key=\"item.prop || item.key || index\">\n <el-table-column v-if=\"item.render && typeof item.render === 'function'\" v-bind=\"columnBindAttr({ ...item, columnIndex: index })\">\n <template #default=\"scope\">\n <render-dom-tb\n v-if=\"scope && scope.row\"\n :row=\"scope.row\"\n :index=\"scope.$index\"\n :data-key=\"item.key\"\n :render=\"item.render\"\n />\n <span v-else>-</span>\n </template>\n </el-table-column>\n <el-table-column v-else-if=\"item.scopedSlots && item.scopedSlots.customRender\" v-bind=\"columnBindAttr({ ...item, columnIndex: index })\">\n <template #default=\"scope\">\n <slot\n v-if=\"scope && scope.row\"\n v-bind=\"{ ...item, row: scope.row, column: scope.column, scope: scope }\"\n :name=\"item.scopedSlots.customRender\"\n />\n <span v-else>-</span>\n </template>\n </el-table-column>\n <el-table-column v-else v-bind=\"columnBindAttr({ ...item, columnIndex: index })\" />\n </template>\n </el-table-column>\n\n <!-- 自定义渲染函数列 -->\n <el-table-column v-else-if=\"cols.render && typeof cols.render === 'function'\" v-bind=\"columnBindAttr(cols)\">\n <template #default=\"scope\">\n <render-dom-tb\n v-if=\"scope && scope.row\"\n :row=\"scope.row\"\n :index=\"scope.$index\"\n :data-key=\"cols.key\"\n :render=\"cols.render\"\n />\n <span v-else>-</span>\n </template>\n </el-table-column>\n\n <!-- 作用域插槽列 -->\n <el-table-column v-else-if=\"cols.scopedSlots && cols.scopedSlots.customRender\" v-bind=\"columnBindAttr(cols)\">\n <template #default=\"scope\">\n <slot\n v-if=\"scope && scope.row\"\n v-bind=\"{ ...cols, row: scope.row, column: scope.column, scope: scope }\"\n :name=\"cols.scopedSlots.customRender\"\n />\n <span v-else>-</span>\n </template>\n </el-table-column>\n\n <!-- 省略号工具提示列 -->\n <el-table-column v-else-if=\"cols.ellipsis && typeof cols.ellipsis === 'boolean'\" show-overflow-tooltip v-bind=\"columnBindAttr(cols)\" />\n\n <!-- 普通列 -->\n <el-table-column v-else v-bind=\"columnBindAttr(cols)\" />\n</template>\n\n<script setup lang=\"ts\">\nimport { h, defineComponent } from 'vue'\nimport { ElTableColumn } from 'element-plus'\nimport type { TableColumn } from '../../../types'\n\nconst props = defineProps<{\n cols: TableColumn\n}>()\n\n// 函数式组件定义\nconst RenderDomTb = defineComponent({\n props: {\n row: { type: Object, default: () => ({}) },\n index: { type: Number, default: 0 },\n dataKey: String,\n render: { type: Function, required: true }\n },\n setup(props) {\n return () => {\n const { row, index, dataKey, render } = props\n if (!row) return h('span', '-')\n const value = dataKey ? row[dataKey] : null\n try {\n const renderResult = render(h, { value, row, index })\n if (typeof renderResult === 'string') return h('span', renderResult)\n return renderResult\n } catch (error) {\n return h('span', '-')\n }\n }\n }\n})\n\nconst firstWordUpperCase = (str: string): string => {\n return str.charAt(0).toUpperCase() + str.slice(1).toLowerCase()\n}\n\nconst columnBindAttr = (cols: TableColumn) => {\n const options: Record<string, unknown> = {}\n\n for (const t in cols) {\n if (t === 'groups' || t === 'scopedSlots' || t === 'render') continue\n\n if (t.includes('-')) {\n const parts = t.split('-')\n let camelKey = parts[0]\n for (let i = 1; i < parts.length; i++) {\n camelKey += firstWordUpperCase(parts[i])\n }\n options[camelKey] = cols[t]\n } else if (t === 'key') {\n options.prop = cols[t]\n options[t] = cols[t]\n } else {\n options[t] = cols[t]\n }\n }\n\n if (!options.align) {\n options.align = 'center'\n }\n\n return options\n}\n</script>\n","<template>\n <div v-if=\"showContainer\" class=\"flex-float btns\">\n <div class=\"left-text\">\n {{ leftText }}\n </div>\n\n <div class=\"btn-container_block\">\n <!-- 左侧按钮组 -->\n <div class=\"btn-left\">\n <template v-for=\"(item, index) in processedBtnLeft\" :key=\"item.name\">\n <div v-if=\"!item.isHide\" :style=\"buttonContainerStyle(index)\">\n <render-dom v-if=\"item.render && typeof item.render === 'function'\" :render=\"item.render\" />\n <el-button v-else :type=\"item.type\" :size=\"item.size || 'small'\" :icon=\"item.icon\" :loading=\"item.loading || false\" v-bind=\"item\" :disabled=\"getDisabledState(item)\" @click=\"()=>item.click(instance)\">\n {{ item.name }}\n </el-button>\n </div>\n </template>\n </div>\n\n <!-- 右侧按钮组 -->\n <div class=\"btn-right\">\n <template v-for=\"(item, index) in processedBtnRight\" :key=\"item.name\">\n <div v-if=\"!item.isHide\" :style=\"buttonContainerStyle(index)\">\n <render-dom v-if=\"item.render && typeof item.render === 'function'\" :render=\"item.render\" />\n <el-button v-else :type=\"item.type\" :size=\"item.size || 'small'\" v-bind=\"item\" :icon=\"item.icon\" :loading=\"item.loading || false\" :disabled=\"getDisabledState(item)\" @click=\"() =>item.click(instance)\">\n {{ item.name }}\n </el-button>\n </div>\n </template>\n </div>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, h } from 'vue'\nimport { ElButton } from 'element-plus'\n\nconst props = defineProps<{\n leftText?: string\n btnConfig?: Array<Record<string, unknown>>\n instance?: Record<string, unknown>\n}>()\n\nconst RenderDom = (props: { render: () => unknown }) => {\n if (!props.render || typeof props.render !== 'function') return null\n try {\n return props.render()\n } catch {\n return null\n }\n}\n\nRenderDom.props = {\n render: { type: Function, required: true }\n}\n\nconst hasPermission = (_btnList: unknown[], pvalue?: string) => {\n if (!pvalue) return true\n return true\n}\n\nconst processButtonConfig = (config: Array<Record<string, unknown>>) => {\n return config.map((item) => {\n const processed = { ...item }\n const hasPerm = hasPermission([], item.permissionValue as string)\n\n if (!hasPerm) {\n processed.isHide = true\n } else if (typeof item.isHide === 'function') {\n processed.isHide = item.isHide()\n } else {\n processed.isHide = item.isHide || false\n }\n\n return processed\n })\n}\n\nconst processedBtnLeft = computed(() => {\n return processButtonConfig((props.btnConfig || []).filter((item) => item.code === 1)).filter((item) => !item.isHide)\n})\n\nconst processedBtnRight = computed(() => {\n return processButtonConfig((props.btnConfig || []).filter((item) => item.code === 2)).filter((item) => !item.isHide)\n})\n\nconst showContainer = computed(() => {\n return props.leftText || processedBtnLeft.value.length > 0 || processedBtnRight.value.length > 0\n})\n\nconst getDisabledState = (item: Record<string, unknown>) => {\n if (typeof item.disabled === 'function') {\n return item.disabled()\n }\n return item.disabled || false\n}\n\nconst buttonContainerStyle = (index: number) => {\n return {\n display: 'inline-block',\n marginLeft: index !== 0 ? '8px' : '0px'\n }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.btns {\n padding: 0;\n padding-bottom: 5px;\n display: flex;\n justify-content: space-between;\n align-items: center;\n}\n\n.left-text {\n color: rgb(125, 125, 125);\n font-size: 14px;\n // flex-grow: 1;\n}\n\n.btn-container_block {\n display: flex;\n justify-content: space-between;\n align-items: center;\n flex: 1;\n\n .btn-left {\n display: flex;\n justify-content: flex-start;\n align-items: center;\n flex-wrap: wrap;\n }\n\n .btn-right {\n display: flex;\n justify-content: flex-end;\n align-items: center;\n flex-wrap: wrap;\n }\n}\n\n@media (max-width: 768px) {\n .btns {\n flex-direction: column;\n align-items: flex-start;\n }\n\n .btn-container_block {\n flex-direction: column;\n align-items: flex-start;\n gap: 10px;\n\n .btn-left,\n .btn-right {\n width: 100%;\n justify-content: flex-start;\n }\n }\n}\n</style>\n","import { ref, nextTick, onMounted, onBeforeUnmount } from 'vue'\n\nexport function useTableResize(\n tableContainerRef: { value: HTMLElement | null },\n headBarRef: { value: HTMLElement | null },\n tbBtnRef: { value: { $el?: HTMLElement } | null },\n paginationRef: { value: HTMLElement | null },\n options: { heightType?: 'auto' | 'height'; tabHeight?: number | string }\n) {\n const tableHeight = ref(400)\n const observer = ref<ResizeObserver | null>(null)\n\n const isNegative = (num: number) => Math.sign(num) === -1\n\n const totalContainerNum = () => {\n const headBarHeight = headBarRef.value?.offsetHeight || 0\n const tbBtnHeight = tbBtnRef.value?.$el?.offsetHeight || 0\n const paginationHeight = paginationRef.value?.offsetHeight || 0\n return Math.round(paginationHeight + headBarHeight + tbBtnHeight)\n }\n\n const resizeObservers = () => {\n const element = tableContainerRef.value\n if (!element) return\n\n const containerHeight = typeof options.tabHeight === 'number'\n ? options.tabHeight\n : options.heightType === 'height'\n ? (element.parentElement?.offsetHeight || element.offsetHeight)\n : (parseInt(options.tabHeight as string, 10) || 450)\n\n const maxContainer = !isNaN(containerHeight) ? containerHeight : 450\n const minTableNum = maxContainer - totalContainerNum()\n const tabContainer = isNegative(minTableNum) ? totalContainerNum() + 300 : maxContainer\n\n const paginationHeight = paginationRef.value?.offsetHeight || 0\n const headBarHeight = headBarRef.value?.offsetHeight || 0\n const tbBtnHeight = tbBtnRef.value?.$el?.offsetHeight || 0\n\n const newHeight = Math.floor(tabContainer) - Math.round(paginationHeight + headBarHeight + tbBtnHeight)\n if (tableHeight.value !== newHeight) {\n tableHeight.value = newHeight\n }\n }\n\n const startObserver = () => {\n nextTick(() => {\n if (!tableContainerRef.value || typeof ResizeObserver === 'undefined') return\n\n observer.value = new ResizeObserver(() => {\n requestAnimationFrame(() => {\n if (tableContainerRef.value) resizeObservers()\n })\n })\n\n // Observe the main container\n const target = options.heightType === 'height'\n ? tableContainerRef.value.parentElement || tableContainerRef.value\n : tableContainerRef.value\n observer.value.observe(target)\n\n // Observe headBarRef to detect form expand/collapse height changes\n if (headBarRef.value) {\n observer.value.observe(headBarRef.value)\n }\n })\n }\n\n const stopObserver = () => {\n if (observer.value) {\n observer.value.disconnect()\n observer.value = null\n }\n }\n\n onMounted(() => startObserver())\n onBeforeUnmount(() => stopObserver())\n\n return {\n tableHeight,\n resizeObservers,\n startObserver,\n stopObserver\n }\n}\n","import { ref, nextTick } from 'vue'\n\nexport function useTableSelection(rowkey?: string) {\n const multipleSelection = ref<Record<string, unknown>[]>([])\n const selectionsByPage = ref<Record<number, Record<string, unknown>[]>>({})\n const isInitChange = ref(false)\n\n const handleSelectionChange = (val: Record<string, unknown>[], currentPage: number) => {\n if (rowkey) {\n if (isInitChange.value) return\n selectionsByPage.value[currentPage] = val\n let allSelections: Record<string, unknown>[] = []\n const uniqueMap: Record<string, boolean> = {}\n\n Object.values(selectionsByPage.value).forEach((pageSelections) => {\n pageSelections.forEach((item) => {\n const key = item[rowkey] as string\n if (key && !uniqueMap[key]) {\n allSelections.push(item)\n uniqueMap[key] = true\n }\n })\n })\n\n multipleSelection.value = allSelections\n } else {\n multipleSelection.value = val\n }\n }\n\n const handleSelectData = (dataList: Record<string, unknown>[], tableRef: { toggleRowSelection?: (row: Record<string, unknown>, selected: boolean) => void }) => {\n if (dataList?.length && rowkey && multipleSelection.value.length) {\n const pageSelecteds: Record<string, unknown>[] = []\n dataList.forEach((row) => {\n multipleSelection.value.forEach((selectedRow) => {\n if (row[rowkey] === selectedRow[rowkey]) {\n pageSelecteds.push(row)\n }\n })\n })\n\n pageSelecteds.forEach((row) => {\n tableRef.toggleRowSelection?.(row, true)\n })\n }\n }\n\n const clearAllSelection = (tableRef: { clearSelection?: () => void }) => {\n multipleSelection.value = []\n selectionsByPage.value = {}\n tableRef.clearSelection?.()\n }\n\n const initSelection = (dataList: Record<string, unknown>[], tableRef: { toggleRowSelection?: (row: Record<string, unknown>, selected: boolean) => void; clearSelection?: () => void } | null) => {\n isInitChange.value = true\n if (!tableRef) {\n isInitChange.value = false\n return\n }\n if (rowkey) {\n nextTick(() => {\n handleSelectData(dataList, tableRef)\n isInitChange.value = false\n })\n } else {\n nextTick(() => {\n tableRef.clearSelection?.()\n isInitChange.value = false\n })\n }\n }\n\n return {\n multipleSelection,\n selectionsByPage,\n isInitChange,\n handleSelectionChange,\n handleSelectData,\n clearAllSelection,\n initSelection\n }\n}\n","export const isObject = (value: unknown): value is Record<string, unknown> => {\n return typeof value === 'object' && value !== null && Object.prototype.toString.call(value) === '[object Object]'\n}\n\nexport const isArray = (value: unknown): value is unknown[] => {\n return Array.isArray(value)\n}\n\nexport const isFunction = (value: unknown): value is Function => {\n return typeof value === 'function'\n}\n\nexport const isString = (value: unknown): value is string => {\n return typeof value === 'string'\n}\n\nexport const isNumber = (value: unknown): value is number => {\n return typeof value === 'number' && !isNaN(value)\n}\n\nexport const isEmpty = (value: unknown): boolean => {\n if (value == null) return true\n if (isArray(value)) return value.length === 0\n if (isObject(value)) return Object.keys(value).length === 0\n return false\n}\n\nexport const firstWordUpperCase = (str: string): string => {\n return str.charAt(0).toUpperCase() + str.slice(1).toLowerCase()\n}\n\nexport const kebabToCamel = (str: string): string => {\n return str.replace(/-([a-z])/g, (_, letter) => letter.toUpperCase())\n}\n\nexport const toPascalCase = (str: string): string => {\n return str.replace(/(^|-)([a-z])/g, (_, __, letter) => letter.toUpperCase())\n}\n\nexport const findValueByKey = (obj: Record<string, unknown>, key: string, depth = 0): unknown => {\n if (depth > 3) return undefined\n if (!isObject(obj)) return undefined\n\n const currentValue = Object.prototype.hasOwnProperty.call(obj, key) ? obj[key] : undefined\n\n for (const prop in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, prop) && isObject(obj[prop])) {\n const deepValue = findValueByKey(obj[prop] as Record<string, unknown>, key, depth + 1)\n if (deepValue !== undefined) return deepValue\n }\n }\n return currentValue\n}\n\nexport const wrapPromise = <T>(promise: Promise<T>): Promise<{ status: 'fulfilled'; value: T } | { status: 'rejected'; reason: unknown }> => {\n return promise\n .then((value) => ({ status: 'fulfilled' as const, value }))\n .catch((reason) => ({ status: 'rejected' as const, reason }))\n}\n","<template>\n <el-config-provider :locale=\"locale\">\n <div :ref=\"setTableContainer\" class=\"table_component\" :style=\"{ [heightType]: tabHeight }\">\n <div class=\"table_containers\">\n <div\n v-if=\"showHeaderBar\"\n ref=\"headBarRef\"\n class=\"btn-slot\"\n :style=\"slotStyles.value && slotStyles.type === 'object' && slotStyles.value\"\n :class=\"slotStyles.type === 'string' ? slotStyles.value : { slotClass: slotState && slotStyles.type !== 'object' }\"\n >\n <div class=\"headerBar\" v-if=\"hasDefaultSlot\" :style=\"{ paddingBottom: hasDefaultSlot ? '10px' : '0px' }\">\n <slot />\n </div>\n </div>\n <div v-loading=\"loadStatus\" element-loading-background=\"rgba(0, 0, 0, 0.03)\" element-loading-text=\"努力加载中...\" class=\"page-loading-con tableContainer\">\n <div class=\"table_inner_containers\">\n <table-btns\n ref=\"tbBtnRef\"\n :instance=\"{ tableRef: instance, formInstance: formInstance }\"\n v-if=\"(options.configBtn && options.configBtn.length) || options.leftText\"\n :btn-config=\"options.configBtn\"\n :left-text=\"options.leftText\"\n />\n <el-table\n class=\"el-dp_tables\"\n :id=\"tableId\"\n :key=\"tableId\"\n ref=\"tableRef\"\n style=\"width: 100%\"\n v-bind=\"tableBindAttrs\"\n :data=\"dataSource\"\n @sort-change=\"changeTableSort\"\n @selection-change=\"handleTableSelectionChange\"\n >\n <template #empty>\n <div class=\"ant-empty ant-empty-normal\">\n <div class=\"ant-empty-image\">\n <svg class=\"ant-empty-img-simple\" width=\"64\" height=\"41\" viewBox=\"0 0 64 41\" xmlns=\"http://www.w3.org/2000/svg\">\n <g transform=\"translate(0 1)\" fill=\"none\" fill-rule=\"evenodd\">\n <ellipse class=\"ant-empty-img-simple-ellipse\" cx=\"32\" cy=\"33\" rx=\"32\" ry=\"7\" />\n <g class=\"ant-empty-img-simple-g\" fill-rule=\"nonzero\">\n <path d=\"M55 12.76L44.854 1.258C44.367.474 43.656 0 42.907 0H21.093c-.749 0-1.46.474-1.947 1.257L9 12.761V22h46v-9.24z\" />\n <path d=\"M41.613 15.931c0-1.605.994-2.93 2.227-2.931H55v18.137C55 33.26 53.68 35 52.05 35h-40.1C10.32 35 9 33.259 9 31.137V13h11.16c1.233 0 2.227 1.323 2.227 2.928v.022c0 1.605 1.005 2.901 2.237 2.901h14.752c1.232 0 2.237-1.308 2.237-2.913v-.007z\" class=\"ant-empty-img-simple-path\" />\n </g>\n </g>\n </svg>\n </div>\n <div class=\"ant-empty-description\">暂无数据</div>\n </div>\n </template>\n <column-item v-for=\"(cols, index) in filteredColumns\" :key=\"cols.prop || cols.key || index\" :cols=\"{ ...cols, columnIndex: index }\">\n <template v-if=\"cols.scopedSlots && cols.scopedSlots.customRender\" #[cols.scopedSlots.customRender]=\"{ scope }\">\n <slot v-bind=\"{ ...cols, columnIndex: index, row: scope.row, column: scope.column }\" :name=\"cols.scopedSlots.customRender\" :scope=\"scope\" />\n </template>\n </column-item>\n </el-table>\n </div>\n <div\n v-if=\"showPagination\"\n ref=\"paginationRef\"\n class=\"pagination_page\"\n :style=\"{\n position: heightType === 'height' ? 'absolute' : 'static',\n bottom: '0px',\n left: '0px',\n zIndex: 5,\n background: '#fff'\n }\"\n >\n <el-pagination\n :background=\"paginationBackground\"\n :size=\"paginationIsSmall ? 'small' : paginationConfig.size\"\n :total=\"paginationConfig.total\"\n v-model:page-size=\"paginationConfig.pageSize\"\n :page-sizes=\"paginationPageSizes\"\n v-model:current-page=\"paginationConfig.current\"\n :layout=\"layout\"\n style=\"padding: 0; margin: 10px 0; text-align: center\"\n @size-change=\"handleSizeChange\"\n @current-change=\"handleIndexChange\"\n />\n </div>\n </div>\n </div>\n </div>\n </el-config-provider>\n</template>\n\n<script lang=\"ts\">\nimport type { TableOptions } from '../../../types'\n\nconst defaultOptions: TableOptions = {\n multiSelect: false,\n expand: false,\n snIndex: false,\n loading: false,\n border: false,\n size: 'small',\n headerCellStyle: { background: '#f5f7fa' },\n highlightCurrentRow: true,\n cachePageSelection: true\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { ref, computed, watch, inject, getCurrentInstance, provide, toRaw, unref, h, onMounted, useAttrs } from 'vue'\nimport { ElTable, ElConfigProvider, ElPagination, vLoading, ElButton } from 'element-plus'\nimport zhCn from 'element-plus/es/locale/lang/zh-cn'\nimport ColumnItem from './column-item.vue'\nimport TableBtns from './table-btns.vue'\nimport { useTableResize } from '../../../composables/use-table-resize'\nimport { useTableSelection } from '../../../composables/use-table-selection'\nimport { isObject, findValueByKey } from '../../../utils/shared'\nimport type { TableColumn, PaginationConfig } from '../../../types'\n\nconst props = withDefaults(\n defineProps<{\n initTabHeight?: number\n headBarClass?: string | Record<string, unknown>\n showHeaderBar?: boolean\n dataSource: Record<string, unknown>[]\n columns: TableColumn[]\n options?: TableOptions\n pagination?: PaginationConfig\n }>(),\n {\n initTabHeight: 400,\n showHeaderBar: true,\n dataSource: () => [],\n columns: () => [],\n options: () => ({ ...defaultOptions }),\n pagination: () => ({})\n }\n)\n\nconst emit = defineEmits<{\n 'update:dataSource': [data: Record<string, unknown>[]]\n 'update:pagination': [pagination: PaginationConfig]\n 'pagination-current-change': [pagination: PaginationConfig]\n 'size-change': [pagination: PaginationConfig, size: number]\n 'change-table-sort': [column: Record<string, unknown>]\n}>()\n\nconst slots = defineSlots<{\n default?: () => any\n}>()\n\nconst locale = ref(zhCn)\nconst injectedLocale = inject('elLocale', null)\nif (injectedLocale) {\n locale.value = injectedLocale as any\n}\n\nconst instance = getCurrentInstance() || {}\nconst $esPlusTable = inject<Record<string, unknown>>('$esPlusTable', {})\n\n// Refs\nconst tableRef = ref<any>(null)\nconst tbBtnRef = ref<any>(null)\nconst headBarRef = ref<HTMLElement | null>(null)\nconst paginationRef = ref<HTMLElement | null>(null)\nconst tableContainerRef = ref<HTMLElement | null>(null)\nconst tableId = ref(`table_${Math.random().toString(36).substring(2, 12)}`)\nconst tableData = ref<Record<string, unknown>[]>([])\nconst columnRowList = ref<TableColumn[]>([...props.columns])\n\nwatch(\n () => props.columns,\n (val) => {\n columnRowList.value = [...val]\n },\n { deep: true }\n)\nconst loadingStatus = ref(false)\nconst slotState = ref(false)\nconst showPagination = ref(false)\n\nconst setTableContainer = (el: HTMLElement | null) => {\n if (el) tableContainerRef.value = el\n}\n\n// 保留与 Form 的耦合\nconst bodyFormInstance = inject<(inst: unknown) => void>('bodyFormInstance', () => {})\nconst getVisibleShow = inject<(() => boolean) | boolean>('getVisibleShow', false)\n\nconst visibleShow = computed(() => (typeof getVisibleShow === 'function' ? getVisibleShow() : getVisibleShow))\n\nconst paginationConfig = ref<PaginationConfig>({\n pageSize: 10,\n current: 1,\n total: 0,\n pageSizes: [],\n size: 'small',\n isSmall: true,\n ...props.pagination\n})\n\nconst formInstance = ref<unknown>(null)\n\n// 计算属性\nconst getListEntry = computed(() => {\n if (props.options.entryQuery && isObject(props.options.entryQuery) && Object.keys(props.options.entryQuery).length) {\n return props.options.entryQuery\n }\n return {}\n})\n\nconst configTableField = computed(() => {\n if (\n props.options.configTableOut &&\n isObject(props.options.configTableOut) &&\n Object.keys(props.options.configTableOut).length &&\n checkQueryFields(props.options.configTableOut)\n ) {\n return props.options.configTableOut\n }\n\n if ($esPlusTable?.configQueryFieldOutput && typeof $esPlusTable.configQueryFieldOutput === 'function') {\n const configFields = ($esPlusTable.configQueryFieldOutput as Function)({\n total: 'records',\n pageSize: 'pageSize',\n current: 'pageNo',\n tableData: 'rows'\n })\n if (checkQueryFields(configFields)) return configFields\n }\n\n return {\n total: 'records',\n pageSize: 'pageSize',\n current: 'pageNo',\n tableData: 'rows'\n }\n})\n\nconst isFormInstance = computed(() => {\n const defaultSlots = instance?.slots?.default?.() || []\n const formVNode = defaultSlots.find((vnode: any) => {\n const type = vnode.type\n return type?.name === 'EsForm' || type?.displayName === 'EsForm'\n })\n if (formVNode && formVNode.props?.ref) {\n formInstance.value = formVNode.ctx?.refs[formVNode.props.ref]\n bodyFormInstance(formInstance.value)\n }\n return formVNode || {}\n})\n\nconst hasDefaultSlot = computed(() => !!slots.default?.())\nconst heightType = computed(() => props.options.heightType || 'auto')\nconst tabHeight = computed(() => {\n if (typeof props.options.tabHeight === 'number') {\n return `${props.options.tabHeight}px`\n }\n if (heightType.value === 'height' && typeof props.options.height === 'number') {\n return `${props.options.height}px`\n }\n return '100%'\n})\n\nconst slotStyles = computed(() => {\n if (props.headBarClass) {\n return {\n type: typeof props.headBarClass === 'string' ? 'string' : 'object',\n value: props.headBarClass\n }\n }\n return { type: 'string', value: '' }\n})\n\nconst paginationLayoutConfig = computed(() => {\n const cfg = $esPlusTable?.paginationLayout\n if (!cfg) return null\n return typeof cfg === 'function' ? cfg() : cfg\n})\nconst layout = computed(() => paginationLayoutConfig.value?.layout || 'prev, pager, next, jumper, sizes, ->, total')\nconst paginationPageSizes = computed(() => paginationLayoutConfig.value?.pageSizes || paginationConfig.value.pageSizes)\nconst paginationIsSmall = computed(() => paginationLayoutConfig.value?.isSmall ?? paginationConfig.value.isSmall)\nconst paginationBackground = computed(() => paginationLayoutConfig.value?.background ?? true)\nconst loadStatus = computed(() => props.options.loading || loadingStatus.value)\nconst isRequestConf = computed(() => !!props.options.actionUrl || (props.options.apiParams && isObject(props.options.apiParams) && Object.keys(props.options.apiParams).length > 0))\nconst isHttpRequest = computed(() => !!props.options?.httpRequest && typeof props.options.httpRequest === 'function')\n\nconst filteredColumns = computed(() => {\n const list = columnRowList.value.filter((item) => !item.hidCol)\n list.forEach((el) => {\n if (el.prop !== 'operate' && el.key !== 'operate' && (el.prop || el.key) && !el.formatter) {\n el.formatter = (row: Record<string, unknown>) => {\n const value = row[el.prop as string] || row[el.key as string]\n if (value == null || value === '') {\n return el.emptyPlaceholder || '-'\n }\n return value\n }\n }\n\n if ((el.prop === 'operate' || el.key === 'operate') && el.btns && !el.render) {\n el.render = (_h: any, { row }: { row: Record<string, unknown> }) => {\n return h('div', [\n el.btns?.map((btn: any) =>\n h(ElButton, {\n onClick: () => btn.clickEvent?.(row),\n text: true,\n type: btn.type || 'primary'\n }, () => btn.name)\n )\n ])\n }\n }\n })\n return list\n})\n\n// es-table 内部选项键,不应传递给 el-table\nconst TABLE_INTERNAL_KEYS = new Set([\n 'multiSelect', 'expand', 'snIndex', 'loading', 'cachePageSelection',\n 'httpRequest', 'configTableOut', 'listenToCallBack',\n 'apiParams', 'actionUrl', 'heightType', 'tabHeight',\n 'isInitRun', 'entryQuery', 'configBtn', 'leftText', 'rowkey'\n])\n\nconst tableAttrs = computed(() => {\n const merged = columnBindAttr({ ...defaultOptions, ...props.options })\n const { align, ...rest } = merged\n const result: Record<string, unknown> = {}\n for (const key in rest) {\n if (!TABLE_INTERNAL_KEYS.has(key)) {\n result[key] = rest[key]\n }\n }\n return result\n})\n\n// 合并 options attrs 和父级 fallthrough attrs,供 el-table 使用\nconst fallthroughAttrs = useAttrs()\nconst tableBindAttrs = computed(() => {\n const result: Record<string, unknown> = { ...tableAttrs.value, ...fallthroughAttrs }\n if (props.options.rowkey) {\n result.rowKey = props.options.rowkey\n }\n if (heightType.value === 'height') {\n result.height = tableHeight.value\n } else if (heightType.value === 'maxHeight') {\n result.maxHeight = tableHeight.value\n }\n return result\n})\n\n// 使用原生 ResizeObserver\nconst { tableHeight, resizeObservers } = useTableResize(\n tableContainerRef,\n headBarRef,\n tbBtnRef,\n paginationRef,\n { heightType: heightType.value, tabHeight: props.options.tabHeight }\n)\n\nwatch(\n visibleShow,\n async (val, oldVal) => {\n if (val && val !== oldVal) {\n if (props.options.actionUrl) {\n await httpRequestInstance()\n }\n tableRef.value?.doLayout?.()\n }\n }\n)\n\nwatch(\n () => props.pagination,\n (val) => {\n paginationConfig.value = { ...paginationConfig.value, ...val }\n showPagination.value = val.total !== undefined\n },\n { deep: true, immediate: true }\n)\n\nwatch(\n () => props.dataSource,\n (val) => {\n initSelection(val, tableRef.value)\n },\n { deep: true }\n)\n\nwatch(\n tableData,\n (val) => {\n if (Array.isArray(val)) {\n emit('update:dataSource', val)\n }\n },\n { deep: true }\n)\n\n// 配置化接口请求时,挂载自动加载数据\nonMounted(() => {\n if (isRequestConf.value && props.options.isInitRun !== false) {\n httpRequestInstance()\n }\n})\n\n// 表格选择逻辑\nconst { multipleSelection, handleSelectionChange, initSelection, clearAllSelection } = useTableSelection(props.options.rowkey)\n\nconst handleTableSelectionChange = (val: Record<string, unknown>[]) => {\n handleSelectionChange(val, paginationConfig.value.current || 1)\n}\n\n// 请求逻辑\nconst checkQueryFields = (obj: Record<string, unknown>): boolean => {\n const checkListKey = ['total', 'pageSize', 'current', 'tableData']\n if (isObject(obj)) {\n return Object.keys(obj).every((it) => {\n return checkListKey.find((its) => its === it) && obj[it] && typeof obj[it] === 'string'\n })\n }\n return false\n}\n\nconst getListenToCallBack = (eventName: string, params: unknown) => {\n const eventNameList = [\n { eventName: 'brcb', isReturn: true },\n { eventName: 'qrcb', isReturn: true }\n ]\n const hasEventNameIndex = eventNameList.findIndex((it) => it.eventName === eventName)\n if (props.options.listenToCallBack && props.options.listenToCallBack[eventName] && hasEventNameIndex !== -1) {\n const callObj = eventNameList[hasEventNameIndex]\n if (callObj.isReturn) {\n return props.options.listenToCallBack[eventName](params)\n }\n }\n}\n\nconst formatConfigOut = (row: Record<string, unknown>, keyList: string[]) => {\n if (isObject(configTableField.value) && Object.keys(configTableField.value).length) {\n Object.entries(configTableField.value).forEach(([key, value]) => {\n const isKeyUsed = keyList.includes(key)\n if (!isKeyUsed) return\n\n const rowData = row[value as string] ?? findValueByKey(row, value as string)\n if (key === 'tableData') {\n tableData.value = Array.isArray(rowData) ? rowData : []\n } else {\n paginationConfig.value[key as keyof PaginationConfig] = typeof rowData === 'number' ? rowData : parseInt(rowData as string, 10) || 0\n }\n })\n }\n}\n\nconst queryTableListMethod = (params: Record<string, unknown>, options: { success?: (res: Record<string, unknown>) => void; fail?: (err: unknown) => void } = {}) => {\n const { success, fail } = options\n const apiParams = props.options?.apiParams || {}\n const url = props.options?.actionUrl || apiParams.url || ''\n\n if (!url || !Object.keys(apiParams).length) return\n\n const formData = Object.keys(isFormInstance.value).length\n ? toRaw(unref((isFormInstance.value as any).props.model))\n : getListEntry.value || {}\n\n\n const fnParams = getListenToCallBack('brcb', { ...formData, ...params, ...toRaw(unref(apiParams.model || {})) })\n const finalParams = isObject(fnParams) ? fnParams : { ...formData, ...toRaw(unref(apiParams.model || {})), ...params }\n const requestOption = { ...toRaw(unref(apiParams.options || {})) }\n if (apiParams?.method) {\n requestOption.method = apiParams?.method\n }\n\n const requestHandler = async (requestFn: Function) => {\n if (loadingStatus.value) return\n loadingStatus.value = true\n console.log('formData///', finalParams)\n try {\n const res = await requestFn({\n url,\n formParams: finalParams,\n headers: apiParams.headers || {},\n ...requestOption,\n ...params\n })\n const responseData = getListenToCallBack('qrcb', res) || res\n if (isObject(res) && Object.keys(res).length && typeof success === 'function') {\n success(responseData as Record<string, unknown>)\n }\n } catch (e) {\n if (typeof fail === 'function') {\n fail(e)\n }\n } finally {\n loadingStatus.value = false\n }\n }\n\n if (props.options.httpRequest) {\n requestHandler(props.options.httpRequest)\n } else if ($esPlusTable.$httpRequest) {\n requestHandler($esPlusTable.$httpRequest as Function)\n }\n}\n\nconst httpRequestInstance = (model?: Record<string, unknown>) => {\n return new Promise((resolve, reject) => {\n paginationConfig.value.current = 1\n queryTableListMethod(\n { ...(model || {}), pageIndex: paginationConfig.value.current, pageSize: paginationConfig.value.pageSize },\n {\n success: (res) => {\n formatConfigOut(res, ['total', 'tableData'])\n if (Object.keys(props.pagination).length) {\n emit('update:pagination', paginationConfig.value)\n }\n resolve(res)\n },\n fail: (err) => {\n reject(err)\n }\n }\n )\n })\n}\n\nconst changePageIndexRequest = () => {\n queryTableListMethod(\n { pageIndex: paginationConfig.value.current, pageSize: paginationConfig.value.pageSize },\n {\n success: (res) => {\n formatConfigOut(res, ['total', 'tableData'])\n emit('update:pagination', paginationConfig.value)\n emit('pagination-current-change', paginationConfig.value)\n }\n }\n )\n}\n\nconst changePageSizeRequest = () => {\n queryTableListMethod(\n { pageIndex: paginationConfig.value.current, pageSize: paginationConfig.value.pageSize },\n {\n success: (res) => {\n formatConfigOut(res, ['total', 'tableData'])\n emit('update:pagination', paginationConfig.value)\n }\n }\n )\n}\n\nconst handleSizeChange = (size: number) => {\n paginationConfig.value.pageSize = size\n paginationConfig.value.current = 1\n if (isRequestConf.value) {\n changePageSizeRequest()\n } else {\n emit('update:pagination', paginationConfig.value)\n emit('size-change', paginationConfig.value, size)\n }\n}\n\nconst handleIndexChange = (val: number) => {\n paginationConfig.value.current = val\n if (isRequestConf.value) {\n console.log('indexPages//', val)\n changePageIndexRequest()\n } else {\n emit('update:pagination', paginationConfig.value)\n emit('pagination-current-change', paginationConfig.value)\n }\n}\n\nconst changeTableSort = (column: Record<string, unknown>) => {\n emit('change-table-sort', column)\n}\n\nconst firstWordUpperCase = (str: string): string => {\n return str.toLowerCase().replace(/(\\s|^)[a-z]/g, (char) => char.toUpperCase())\n}\n\nconst columnBindAttr = (cols: Record<string, unknown>) => {\n const options: Record<string, unknown> = {}\n for (const t in cols) {\n if (t === 'groups' || t === 'scopedSlots' || t === 'render') continue\n\n if (t.includes('-')) {\n const parts = t.split('-')\n let newkey = parts[0]\n for (let j = 1; j < parts.length; j++) {\n newkey += firstWordUpperCase(parts[j])\n }\n options[newkey] = cols[t]\n } else if (t === 'key') {\n options.prop = cols[t]\n options[t] = cols[t]\n } else {\n options[t] = cols[t]\n }\n }\n\n if (!options.align) {\n options.align = 'center'\n }\n\n return options\n}\n\n// 提供表格实例给子组件(保留与 Form 的耦合)\nprovide('getTableInstantce', () => ({\n ...(instance?.setupState || {}),\n tableRef,\n toggleSelection: (rows: Record<string, unknown>[]) => {\n if (rows) {\n rows.forEach((row) => {\n tableRef.value?.toggleRowSelection(row)\n })\n } else {\n tableRef.value?.clearSelection()\n }\n },\n clearAllSelection: () => clearAllSelection(tableRef.value),\n refsInstance: () => tableRef.value,\n httpRequestInstance\n}))\n\n// 暴露方法\ndefineExpose({\n httpRequestInstance,\n getSelectionRows: () => multipleSelection.value,\n clearSelection: () => tableRef.value?.clearSelection?.(),\n clearAllSelection: () => clearAllSelection(tableRef.value),\n refresh: () => tableRef.value?.doLayout?.()\n})\n</script>\n\n<style lang=\"scss\" scoped>\n.el-dp_tables {\n height: auto;\n :deep(.el-table__body-wrapper) {\n height: auto;\n }\n}\n\n.table_component {\n width: 100%;\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n align-items: flex-start;\n overflow: hidden;\n}\n\n.table_containers {\n flex: 1;\n width: 100%;\n height: 100%;\n display: flex;\n justify-content: space-between;\n flex-direction: column;\n align-items: flex-start;\n position: relative;\n}\n\n.pagination_page {\n width: 100%;\n display: flex;\n justify-content: center;\n align-items: center;\n}\n\n.btn-slot {\n width: 100%;\n\n .headerBar {\n box-sizing: border-box;\n background-color: #fff;\n border-radius: 6px;\n\n :deep(.el-form-item--small .el-form-item__label) {\n box-sizing: border-box;\n }\n }\n}\n\n.tableContainer {\n border-radius: 0px;\n transition: all 1.5s;\n flex: 1;\n width: 100%;\n display: flex;\n justify-content: space-between;\n flex-direction: column;\n align-items: flex-start;\n\n .table_inner_containers {\n width: 100%;\n }\n\n :deep(.el-table__empty-block) {\n width: 100% !important;\n margin: 32px 0;\n font-size: 14px;\n line-height: 1.5715;\n\n .el-table__empty-text {\n width: auto !important;\n }\n\n .ant-empty-image {\n height: 40px;\n margin-bottom: 8px;\n\n .ant-empty-img-simple-ellipse {\n fill: #f5f5f5;\n }\n\n .ant-empty-img-simple-g {\n stroke: #d9d9d9;\n }\n\n .ant-empty-img-simple-path {\n fill: #fafafa;\n }\n }\n\n .ant-empty-description {\n line-height: 1.5715;\n color: rgba(0, 0, 0, 0.25);\n }\n }\n\n :deep(.el-tag) {\n height: 20px;\n padding: 0 7px;\n line-height: 20px;\n background: #fafafa;\n border: none;\n border-radius: 4px;\n\n &.el-tag--info {\n color: rgba(0, 0, 0, 0.85);\n }\n\n &.el-tag--success {\n color: #52c41a;\n background: #f6ffed;\n border-color: #b7eb8f;\n }\n }\n}\n</style>\n","import EsTable from './src/component.vue'\n\nEsTable.install = function (app: any) {\n app.component(EsTable.name, EsTable)\n}\nEsTable.isPlugin = true\nEsTable.Plugin = {\n install(app: any, options: any = {}) {\n app.provide('$esPlusTable', {\n ...(options.methods || {})\n })\n app.component(EsTable.name, { ...EsTable, methods: { ...EsTable.methods, ...(options.methods || {}) } })\n }\n}\nexport default EsTable\n","import { h } from 'vue'\nimport {\n ElInput,\n ElSelect,\n ElOption,\n ElDatePicker,\n ElTimePicker,\n ElSlider,\n ElColorPicker,\n ElTransfer,\n ElCascader,\n ElRadioGroup,\n ElRadio,\n ElCheckboxGroup,\n ElCheckbox,\n ElSwitch,\n ElRate,\n ElUpload\n} from 'element-plus'\nimport type { FormItemOption } from '../types'\n\n// 支持嵌套属性路径的取值和赋值\nconst getNestedValue = (obj: Record<string, unknown>, path: string): unknown => {\n const keys = path.split(/\\.|\\[|\\]/).filter(Boolean)\n let result = obj\n for (const key of keys) {\n if (result == null) return undefined\n result = result[key] as Record<string, unknown>\n }\n return result\n}\n\nconst setNestedValue = (obj: Record<string, unknown>, path: string, value: unknown): void => {\n const keys = path.split(/\\.|\\[|\\]/).filter(Boolean)\n const lastKey = keys.pop()\n let current: Record<string, unknown> = obj\n for (const key of keys) {\n if (current[key] == null) {\n current[key] = {}\n }\n current = current[key] as Record<string, unknown>\n }\n if (lastKey) {\n current[lastKey] = value\n }\n}\n\nexport function useFormInputs() {\n const formInputComponents = (item: FormItemOption) => {\n const formPutList = new Map([\n [\n 'Input',\n (hFn: typeof h, model: Record<string, unknown>, { row }: { row: FormItemOption }) => {\n return hFn(ElInput, {\n modelValue: getNestedValue(model, row.prop),\n ...row.attrs,\n ...row.on,\n 'onUpdate:modelValue': (val: unknown) => {\n setNestedValue(model, row.prop, val)\n }\n })\n }\n ],\n [\n 'Select',\n (hFn: typeof h, model: Record<string, unknown>, { row }: { row: FormItemOption }) => {\n return hFn(\n ElSelect,\n {\n modelValue: getNestedValue(model, row.prop),\n ...row.attrs,\n ...row.on,\n 'onUpdate:modelValue': (val: unknown) => {\n setNestedValue(model, row.prop, val)\n }\n },\n () =>\n row.dataOptions?.map((opt, idx) =>\n hFn(ElOption, { key: idx, value: opt.value, label: opt.label })\n )\n )\n }\n ],\n [\n 'datePicker',\n (hFn: typeof h, model: Record<string, unknown>, { row }: { row: FormItemOption }) => {\n return hFn(ElDatePicker, {\n modelValue: getNestedValue(model, row.prop),\n ...row.attrs,\n ...row.on,\n 'onUpdate:modelValue': (val: unknown) => {\n setNestedValue(model, row.prop, val)\n }\n })\n }\n ],\n [\n 'timePicker',\n (hFn: typeof h, model: Record<string, unknown>, { row }: { row: FormItemOption }) => {\n return hFn(ElTimePicker, {\n modelValue: getNestedValue(model, row.prop),\n ...row.attrs,\n ...row.on,\n 'onUpdate:modelValue': (val: unknown) => {\n setNestedValue(model, row.prop, val)\n }\n })\n }\n ],\n [\n 'Slider',\n (hFn: typeof h, model: Record<string, unknown>, { row }: { row: FormItemOption }) => {\n return hFn(ElSlider, {\n modelValue: getNestedValue(model, row.prop) as number,\n ...row.attrs,\n ...row.on,\n 'onUpdate:modelValue': (val: unknown) => {\n setNestedValue(model, row.prop, val)\n }\n })\n }\n ],\n [\n 'ColorPicker',\n (hFn: typeof h, model: Record<string, unknown>, { row }: { row: FormItemOption }) => {\n return hFn(ElColorPicker, {\n modelValue: getNestedValue(model, row.prop) as string,\n ...row.attrs,\n ...row.on,\n 'onUpdate:modelValue': (val: unknown) => {\n setNestedValue(model, row.prop, val)\n }\n })\n }\n ],\n [\n 'Transfer',\n (hFn: typeof h, model: Record<string, unknown>, { row }: { row: FormItemOption }) => {\n return hFn(ElTransfer, {\n modelValue: getNestedValue(model, row.prop) as unknown[],\n ...row.attrs,\n ...row.on,\n 'onUpdate:modelValue': (val: unknown) => {\n setNestedValue(model, row.prop, val)\n }\n })\n }\n ],\n [\n 'Cascader',\n (hFn: typeof h, model: Record<string, unknown>, { row }: { row: FormItemOption }) => {\n return hFn(ElCascader, {\n modelValue: getNestedValue(model, row.prop) as unknown[],\n options: row.dataOptions,\n ...row.attrs,\n ...row.on,\n 'onUpdate:modelValue': (val: unknown) => {\n setNestedValue(model, row.prop, val)\n }\n })\n }\n ],\n [\n 'Radio',\n (hFn: typeof h, model: Record<string, unknown>, { row }: { row: FormItemOption }) => {\n return hFn(\n ElRadioGroup,\n {\n modelValue: getNestedValue(model, row.prop),\n ...row.attrs,\n ...row.on,\n 'onUpdate:modelValue': (val: unknown) => {\n setNestedValue(model, row.prop, val)\n }\n },\n () =>\n row.dataOptions?.map((opt, idx) =>\n hFn(ElRadio, { key: idx, value: opt.value }, () => opt.label)\n )\n )\n }\n ],\n [\n 'Checkbox',\n (hFn: typeof h, model: Record<string, unknown>, { row }: { row: FormItemOption }) => {\n return hFn(\n ElCheckboxGroup,\n {\n modelValue: getNestedValue(model, row.prop) as unknown[],\n ...row.attrs,\n ...row.on,\n 'onUpdate:modelValue': (val: unknown) => {\n setNestedValue(model, row.prop, val)\n }\n },\n () =>\n row.dataOptions?.map((opt, idx) =>\n hFn(ElCheckbox, { key: idx, value: opt.value }, () => opt.label)\n )\n )\n }\n ],\n [\n 'Switch',\n (hFn: typeof h, model: Record<string, unknown>, { row }: { row: FormItemOption }) => {\n return hFn(ElSwitch, {\n modelValue: getNestedValue(model, row.prop) as boolean,\n ...row.attrs,\n ...row.on,\n 'onUpdate:modelValue': (val: unknown) => {\n setNestedValue(model, row.prop, val)\n }\n })\n }\n ],\n [\n 'Rate',\n (hFn: typeof h, model: Record<string, unknown>, { row }: { row: FormItemOption }) => {\n return hFn(ElRate, {\n modelValue: getNestedValue(model, row.prop) as number,\n ...row.attrs,\n ...row.on,\n 'onUpdate:modelValue': (val: unknown) => {\n setNestedValue(model, row.prop, val)\n }\n })\n }\n ],\n [\n 'Upload',\n (hFn: typeof h, _model: Record<string, unknown>, { row }: { row: FormItemOption }) => {\n const { props: uploadProps, httpRequest, triggerRender, fileRender, ...restRow } = row as FormItemOption & {\n props?: Record<string, unknown>\n httpRequest?: (options: Record<string, unknown>) => Promise<unknown>\n triggerRender?: (h: typeof hFn) => ReturnType<typeof hFn>\n fileRender?: (h: typeof hFn, file: Record<string, unknown>, onRemove: () => void) => ReturnType<typeof hFn>\n }\n\n let uploadInstance: { handleRemove: (file: Record<string, unknown>) => void } | null = null\n\n // 构建 ElUpload 属性\n const elUploadProps: Record<string, unknown> = {\n ...uploadProps, // props 中的配置:action, accept, listType, limit, multiple 等\n ...restRow.attrs, // attrs 中的配置(兼容两种方式)\n ref: (el: { handleRemove: (file: Record<string, unknown>) => void } | null) => {\n uploadInstance = el\n }\n }\n\n // 将 on 中的事件转换为 Vue 3 h() 需要的 onXxx 格式\n if (restRow.on) {\n for (const [key, handler] of Object.entries(restRow.on)) {\n elUploadProps[`on${key.charAt(0).toUpperCase()}${key.slice(1)}`] = handler\n }\n }\n\n // 合并 httpRequest(优先用表单项配置的,其次用 props 中的)\n if (httpRequest) {\n elUploadProps['http-request'] = httpRequest\n }\n\n // Vue 3 h() 的 slots 参数:通过第三个参数传递命名插槽\n const slots: Record<string, (...args: unknown[]) => ReturnType<typeof hFn>> = {}\n\n // #trigger / #default 插槽\n if (triggerRender) {\n const listType = elUploadProps['listType'] || elUploadProps['list-type']\n if (listType === 'picture-card') {\n slots.trigger = () => triggerRender(hFn)\n } else {\n slots.default = () => triggerRender(hFn)\n }\n }\n\n // #file 插槽:自定义文件列表项渲染\n if (fileRender) {\n slots.file = ({ file }: { file: Record<string, unknown> }) => {\n return fileRender(hFn, file, () => {\n uploadInstance?.handleRemove(file)\n })\n }\n }\n\n return hFn(ElUpload, elUploadProps, slots)\n }\n ]\n ])\n return formPutList.get(item.formtype) || (() => null)\n }\n\n return { formInputComponents }\n}\n","import { computed, ref, watch } from 'vue'\nimport type { FormItemOption, LayoutFormProps } from '../types'\n\nexport function useFormLayout(props: { layoutFormProps?: LayoutFormProps; formItemList: FormItemOption[] }) {\n const folded = ref(false)\n\n const isBtnHidden = computed(() => props.layoutFormProps?.fromLayProps?.isBtnHidden ?? false)\n\n const rowLayout = computed(() => props.layoutFormProps?.rowLayProps || { gutter: 20 })\n\n const formLayout = computed(() => props.layoutFormProps?.fromLayProps || {})\n\n const getSetOptionsStatus = computed(() => props.layoutFormProps?.setOptions)\n\n const getRowColsAlgorithm = computed(() => {\n let pre = 0\n const groupArrayList: FormItemOption[][] = []\n const columnRows: { statIndex: number; endIndex: number }[] = []\n const formItems = props.formItemList\n\n for (let i = 0; i < formItems.length; i++) {\n const item = formItems[i]\n pre += item.span || 6\n if (pre > 24) {\n const statIndex = columnRows.length ? columnRows[columnRows.length - 1].endIndex : 0\n columnRows.push({ statIndex, endIndex: i })\n pre = item.span || 6\n if (i === formItems.length - 1) {\n columnRows.push({ statIndex: i, endIndex: i + 1 })\n }\n } else {\n if (i === formItems.length - 1) {\n const statIndex = columnRows.length ? columnRows[columnRows.length - 1].endIndex : 0\n columnRows.push({ statIndex, endIndex: i + 1 })\n } else if (pre === 24) {\n const statIndex = columnRows.length ? columnRows[columnRows.length - 1].endIndex : 0\n columnRows.push({ statIndex, endIndex: i + 1 })\n pre = 0\n }\n }\n }\n\n columnRows.forEach((it) => {\n groupArrayList.push(formItems.slice(it.statIndex, it.endIndex))\n })\n\n const columRowIndexs = groupArrayList.map((it) => {\n return it.map(() => 0)\n })\n\n let rowColIndex = -1\n columRowIndexs.forEach((row) => {\n row.forEach((_, idx) => {\n row[idx] = (rowColIndex += 1)\n })\n })\n\n return {\n columnRow: columRowIndexs,\n rowNum: columRowIndexs.length,\n columnNodeIndex: columRowIndexs.map((it) => it[it.length - 1])\n }\n })\n\n const isFold = computed(() => {\n const minFoldRow = props.layoutFormProps?.fromLayProps?.minFoldRows || 0\n return minFoldRow > 0 && minFoldRow < getRowColsAlgorithm.value.rowNum\n })\n\n const getBtnColSpan = computed(() => {\n const { rowNum, columnRow } = getRowColsAlgorithm.value\n const lastColumn = columnRow[rowNum - 1] || []\n const btnColSpan = props.layoutFormProps?.fromLayProps?.btnColSpan || 0\n const totalSpan = lastColumn.reduce((sum, idx) => sum + (props.formItemList[idx]?.span || 6), 0)\n const hasSpan = 24 - totalSpan\n\n return !folded.value && btnColSpan <= hasSpan ? hasSpan : 24\n })\n\n const formItem = computed(() => {\n const minFoldRow = props.layoutFormProps?.fromLayProps?.minFoldRows || 0\n const { columnNodeIndex } = getRowColsAlgorithm.value\n\n if (folded.value) {\n const lastFoldIndex = columnNodeIndex[minFoldRow - 1] ?? columnNodeIndex[columnNodeIndex.length - 1] ?? 9999\n return props.formItemList.map((it, index) => ({\n ...it,\n isFold: index > lastFoldIndex\n }))\n }\n return props.formItemList.map((it) => ({ ...it, isFold: false }))\n })\n\n watch(\n isFold,\n (val) => {\n folded.value = val\n },\n { immediate: true }\n )\n\n const changeFolded = () => {\n folded.value = !folded.value\n }\n\n return {\n folded,\n isBtnHidden,\n rowLayout,\n formLayout,\n getSetOptionsStatus,\n getRowColsAlgorithm,\n isFold,\n getBtnColSpan,\n formItem,\n changeFolded\n }\n}\n","import { nextTick, toRaw, unref } from 'vue'\nimport { isObject, findValueByKey, wrapPromise } from '../utils/shared'\nimport type { FormItemOption, ApiParams } from '../types'\n\nexport interface RequestConfig {\n httpRequest?: (params: Record<string, unknown>) => Promise<unknown>\n apiParams?: ApiParams\n success?: (res: Record<string, unknown>) => void\n fail?: (err: unknown) => void\n [key: string]: unknown\n}\n\nexport function useFormRequest(httpRequestGlobal?: (params: Record<string, unknown>) => Promise<unknown>) {\n const queryTableListMethod = (params: Record<string, unknown>, options: RequestConfig = {}, option?: FormItemOption) => {\n const { success, fail, ..._params } = options || {}\n if (isObject(options.apiParams) && Object.keys(options.apiParams).length && options.apiParams.url) {\n const initFormParams = { ...params, ...toRaw(unref(options.apiParams.model || {})) }\n const requestOption = { ...toRaw(unref(options.apiParams.options || {})) }\n if (options.apiParams.method) {\n requestOption.method = options.apiParams.method\n }\n\n const requestPayload = {\n url: options.apiParams.url,\n headers: { ...(options.apiParams.headers || {}) },\n formParams: initFormParams,\n ...requestOption\n }\n\n const requestFn = options.httpRequest || httpRequestGlobal\n if (!requestFn) return\n\n requestFn(requestPayload)\n .then((res) => {\n // 支持对象和数组两种响应格式(兼容直接返回数组的接口)\n if (typeof success === 'function' && res && (isObject(res) || Array.isArray(res))) {\n success(res as Record<string, unknown>)\n }\n })\n .catch((e) => {\n if (typeof fail === 'function') {\n fail(e)\n }\n })\n }\n }\n\n const checkQueryFields = (obj: Record<string, unknown>): boolean => {\n const checkListKey = ['total', 'pageSize', 'current', 'listData']\n if (isObject(obj)) {\n return Object.keys(obj).every((it) => {\n return checkListKey.find((its) => its === it) && obj[it] && typeof obj[it] === 'string'\n })\n }\n return false\n }\n\n const configFormField = (options: Record<string, unknown> = {}, fieldFieldOutput?: (defaults: Record<string, string>) => Record<string, string>) => {\n if (isObject(options.configFormOut) && Object.keys(options.configFormOut).length && checkQueryFields(options.configFormOut as Record<string, unknown>)) {\n return options.configFormOut as Record<string, string>\n }\n\n if (typeof fieldFieldOutput === 'function') {\n const configFields = fieldFieldOutput({\n total: 'records',\n pageSize: 'pageSize',\n current: 'pageNo',\n listData: 'rows'\n })\n if (checkQueryFields(configFields)) {\n return configFields\n }\n }\n\n return {\n total: 'records',\n pageSize: 'pageSize',\n current: 'pageNo',\n listData: 'rows'\n }\n }\n\n const formatConfigOut = (row: Record<string, unknown>, keyList: string[], options: Record<string, unknown> = {}, fieldFieldOutput?: (defaults: Record<string, string>) => Record<string, string>) => {\n const configFieldOut = configFormField(options, fieldFieldOutput)\n const configDataOption: Record<string, unknown> = {}\n\n // 如果 API 响应本身就是数组,直接作为 listData 使用(兼容直接返回数组的接口)\n if (keyList.includes('listData') && Array.isArray(row)) {\n configDataOption['listData'] = row\n return configDataOption\n }\n\n if (isObject(configFieldOut) && Object.keys(configFieldOut).length) {\n for (const [key, value] of Object.entries(configFieldOut)) {\n const isKeyUsed = keyList.findIndex((it) => it === key)\n if (isKeyUsed === -1) continue\n\n const rowValue = row[value as string]\n if (rowValue !== undefined && rowValue !== null) {\n if (key === 'listData') {\n configDataOption[key] = Array.isArray(rowValue) ? rowValue : []\n } else {\n configDataOption[key] = typeof rowValue === 'number' ? rowValue : parseInt(rowValue as string, 10) || 0\n }\n } else {\n const resultData = findValueByKey(row, value as string)\n if (key === 'listData') {\n configDataOption[key] = Array.isArray(resultData) ? resultData : []\n } else {\n configDataOption[key] = typeof resultData === 'number' ? resultData : parseInt(resultData as string, 10) || 0\n }\n }\n }\n }\n return configDataOption\n }\n\n const httpRequestFormInstance = (model: Record<string, unknown>, options: RequestConfig, rows: FormItemOption, fieldFieldOutput?: (defaults: Record<string, string>) => Record<string, string>) => {\n return new Promise<{ data: Record<string, unknown>; configRows: Record<string, unknown> }>((resolve, reject) => {\n nextTick(() => {\n queryTableListMethod(\n { pageIndex: 1, pageSize: 1000, ...(model || {}) },\n {\n ...(options || {}),\n success: (res) => {\n const configRows = formatConfigOut(res, ['total', 'listData'], rows as unknown as Record<string, unknown>, fieldFieldOutput)\n resolve({ data: res, configRows })\n },\n fail: (err) => {\n reject(err)\n }\n },\n rows\n )\n })\n })\n }\n\n const getEveryFormQueryField = async (rowsList: FormItemOption[], fieldFieldOutput?: (defaults: Record<string, string>) => Record<string, string>) => {\n try {\n if (!Array.isArray(rowsList)) return []\n const apiUrlList = rowsList.filter((it) => it && it.apiParams && isObject(it.apiParams) && it.apiParams.url)\n const apiResult: { prop: string; listData: unknown[] }[] = []\n\n const wrappedPromises = apiUrlList.map((option) => {\n const { httpRequest } = option\n const promiseThen = httpRequestFormInstance(\n { ...(option.apiParams?.model || {}) },\n { httpRequest, apiParams: option.apiParams, ...(option.apiParams?.options || {}) },\n option,\n fieldFieldOutput\n )\n return wrapPromise(promiseThen)\n })\n\n const results = await Promise.all(wrappedPromises)\n\n results.forEach((item, index) => {\n if (item.status === 'fulfilled') {\n const { configRows, data } = item.value\n const option = apiUrlList[index]\n const listenToCallBack = option?.listenToCallBack as Record<string, (params: unknown) => unknown> | undefined\n\n /**\n * 优先使用 listenToCallBack.crtn 格式化数据\n * crtn 接收 API 原始响应 data,返回 [{ label, value }] 格式的选项数据\n * data 是 httpRequest 返回的 { data: any } 中的 data 字段\n */\n let listData: unknown[] = []\n if (listenToCallBack?.crtn) {\n listData = listenToCallBack.crtn(data) as unknown[]\n }\n\n // 如果 crtn 未配置或返回空,则降级使用 callOptionListFormat 或格式化后的数据\n const newListOptions =\n Array.isArray(listData) && listData.length > 0\n ? listData\n : typeof option?.callOptionListFormat === 'function'\n ? option.callOptionListFormat(configRows?.listData as unknown[] || option?.dataOptions || [])\n : undefined\n\n apiResult.push({\n prop: apiUrlList[index].prop,\n listData: Array.isArray(newListOptions) ? newListOptions : (configRows?.listData as unknown[] || apiUrlList[index]?.dataOptions || [])\n })\n }\n })\n return apiResult\n } catch (e) {\n return []\n }\n }\n\n return {\n queryTableListMethod,\n getEveryFormQueryField,\n formatConfigOut,\n configFormField\n }\n}\n","import { createVNode, getCurrentInstance, render } from 'vue'\nimport EsDialog from './component.vue'\nimport type { DialogOptions } from '../../../types'\n\nconst getAppendToElement = (appendTo?: string | HTMLElement) => {\n if (typeof appendTo === 'string') {\n return document.querySelector(appendTo) || document.body\n }\n return appendTo instanceof HTMLElement ? appendTo : document.body\n}\n\nconst initInstance = (Component: any, props: DialogOptions, container: HTMLElement, appContext: any) => {\n const vNode = createVNode(Component, props)\n\n if (appContext) {\n vNode.appContext = appContext\n\n if (!vNode.appContext.provides) {\n vNode.appContext.provides = {}\n }\n\n // 注入语言环境(如果父应用有提供)\n const injectedLocale = appContext.provides?.elLocale\n if (injectedLocale) {\n vNode.appContext.provides['elLocale'] = injectedLocale\n }\n\n if (!vNode.appContext.config) {\n vNode.appContext.config = {}\n }\n if (!vNode.appContext.config.globalProperties) {\n vNode.appContext.config.globalProperties = {}\n }\n }\n\n render(vNode, container)\n\n const target = getAppendToElement(props.appendTo)\n target.appendChild(container)\n return vNode\n}\n\nexport const useDialog = (Component?: any, opt: { onlyInstance?: boolean } = {}) => {\n Component = Component || EsDialog\n const options = Object.assign({ onlyInstance: false }, opt)\n\n if (options.onlyInstance) {\n const instance = getCurrentInstance()\n const appContext = instance?.appContext || null\n const container = document.createElement('div')\n\n const close = () => {\n render(null, container)\n container.remove()\n }\n\n const DialogComponent = (dialogOptions: DialogOptions) => {\n if (dialogOptions.visible === undefined) {\n dialogOptions.visible = true\n }\n\n const originalOnClosed = dialogOptions.onClosed\n const originalOnSubmit = dialogOptions.onSubmit\n\n dialogOptions.onClosed = (...args: any[]) => {\n originalOnClosed?.(...args)\n close()\n }\n\n dialogOptions.onSubmit = (closeFn = close) => {\n originalOnSubmit?.(closeFn)\n }\n\n return initInstance(Component, dialogOptions, container, appContext)\n }\n\n DialogComponent.close = close\n return DialogComponent\n } else {\n const container = document.createElement('div')\n container.className = 'dialog-containers'\n const instance = getCurrentInstance()\n const appContext = instance?.appContext || null\n let vNode: any = null\n\n const close = () => {\n if (vNode && vNode.component) {\n vNode.component.props.visible = false\n }\n }\n\n const destroy = () => {\n if (vNode) {\n render(null, container)\n container.remove()\n vNode = null\n }\n }\n\n const DialogComponent = (dialogOptions: DialogOptions) => {\n if (vNode && vNode.component) {\n Object.assign(vNode.component.props, dialogOptions)\n vNode.component.props.visible = true\n return vNode\n }\n\n const mergedOptions: DialogOptions = {\n visible: true,\n width: '50%',\n destroyOnClose: true,\n ...dialogOptions\n }\n\n const { onClosed: originalOnClosed, onSubmit: originalOnSubmit } = mergedOptions\n\n mergedOptions.onClosed = () => {\n originalOnClosed?.()\n close()\n }\n\n mergedOptions.onSubmit = (closeFn = close) => {\n originalOnSubmit?.(closeFn)\n }\n\n vNode = initInstance(Component, mergedOptions, container, appContext)\n return vNode\n }\n\n DialogComponent.close = close\n DialogComponent.destroy = destroy\n return DialogComponent\n }\n}\n\nexport default useDialog\n","<template>\n <el-form :ref=\"setFormRef\" v-bind=\"formProps\" class=\"es-form\">\n <div class=\"flex-center\">\n <el-row v-bind=\"rowLayout\">\n <template v-for=\"(item, index) in formItem\" :key=\"item.prop\">\n <el-col v-show=\"!item?.isFold\" :span=\"item.span || 6\">\n <el-form-item\n :label=\"item.label\"\n v-bind=\"initFormItemOptions(item.formItemOptions || {})\"\n :prop=\"item.prop\"\n @click.stop=\"() => {}\"\n >\n <template v-if=\"item.formtype\">\n <RenderDomForm :row=\"item\" :render=\"formInputComponents(item)\" :index=\"index\" :model=\"model\" />\n </template>\n <template v-else>\n <RenderDomForm :row=\"item\" :render=\"item.render\" :index=\"index\" :model=\"model\" />\n </template>\n </el-form-item>\n </el-col>\n </template>\n\n <template v-if=\"!isBtnHidden\">\n <template v-if=\"isRenderBtn\">\n <RenderBtn\n :row=\"{ isFold: isFold, folded, getBtnColSpan, getRowColsAlgorithm, changeFolded, refsForm: formInstance }\"\n :form-model=\"model\"\n :form-item-list=\"formItem\"\n :render=\"renderBtn\"\n />\n </template>\n <el-col v-else :span=\"btnColSpanRow ? 24 : getBtnColSpan\">\n <div v-if=\"btnColSpanRow && configBtn.length\" class=\"buttonOperate leftRightBtn\">\n <div class=\"btn-left\">\n <el-form-item label-width=\"0px\" class=\"btn-formItem\">\n <el-button\n v-for=\"(it, inx) in colRightLeftList.colLeftBtn\"\n v-bind=\"filterOptions(it)\"\n :icon=\"getCompIcon(it.icon)\"\n :disabled=\"typeof it.disabled === 'function' ? it.disabled() || false : it.disabled || false\"\n @click=\"() => it.click(model, refs, getTableInstant?.httpRequestInstance)\"\n :key=\"it.key || inx\"\n >\n {{ it.name }}\n </el-button>\n </el-form-item>\n </div>\n <div class=\"btn-right\">\n <el-form-item label-width=\"0px\" class=\"btn-formItem\">\n <el-button\n v-for=\"(it, inx) in colRightLeftList.colRightBtn\"\n v-bind=\"filterOptions(it)\"\n :icon=\"getCompIcon(it.icon)\"\n :disabled=\"typeof it.disabled === 'function' ? it.disabled() || false : it.disabled || false\"\n @click=\"() => clickBtn(it)\"\n :key=\"it.key || inx\"\n >\n {{ it.name }}\n </el-button>\n <el-button\n v-if=\"isFold\"\n link\n type=\"primary\"\n :icon=\"getCompIcon(folded ? 'ArrowDown' : 'ArrowUp')\"\n style=\"padding-left: 0; border: none\"\n @click=\"changeFolded\"\n >\n {{ folded ? '展开' : '收起' }}\n </el-button>\n <el-dropdown placement=\"bottom-start\" v-if=\"getSetOptionsStatus\">\n <el-button\n link\n type=\"primary\"\n style=\"margin-left: 2px; margin-right: 5px; outline: none\"\n :icon=\"getCompIcon('Tools')\"\n />\n <template #dropdown>\n <el-dropdown-menu>\n <el-dropdown-item @click=\"handleCustomerForm\">自定义查询</el-dropdown-item>\n <el-dropdown-item @click=\"handleTableItemOption\">自定义表格</el-dropdown-item>\n <el-dropdown-item @click=\"handleRefresh\">重置(刷新)</el-dropdown-item>\n </el-dropdown-menu>\n </template>\n </el-dropdown>\n </el-form-item>\n </div>\n </div>\n <el-form-item\n v-if=\"!btnColSpanRow && configBtn.length\"\n :label=\"' '\"\n :label-width=\"formProps.labelBtnWidth ? formProps.labelBtnWidth : formProps.labelWidth\"\n :class=\"{ formItemCols: btnColSpanRow ? true : getBtnColSpan === 24 }\"\n class=\"btn-formItem\"\n >\n <div class=\"buttonOperate\" :style=\"{ 'text-align': getBtnColSpan === 24 ? 'right' : 'left' }\">\n <template v-if=\"configBtn.length\">\n <el-button\n v-for=\"(it, inx) in configBtn\"\n v-bind=\"filterOptions(it)\"\n :icon=\"getCompIcon(it.icon)\"\n :disabled=\"typeof it.disabled === 'function' ? it.disabled() || false : it.disabled || false\"\n @click=\"() => it.click(model, refs, getTableInstant?.httpRequestInstance)\"\n :key=\"it.key || inx\"\n >\n {{ it.name }}\n </el-button>\n </template>\n <el-button\n v-if=\"isFold\"\n type=\"primary\"\n link\n :icon=\"getCompIcon(folded ? 'ArrowDown' : 'ArrowUp')\"\n style=\"padding-left: 0; border: none\"\n @click=\"changeFolded\"\n >\n {{ folded ? '展开' : '收起' }}\n </el-button>\n <el-dropdown placement=\"bottom-start\" v-if=\"getSetOptionsStatus\">\n <el-button\n link\n type=\"primary\"\n style=\"margin-left: 2px; margin-right: 5px; outline: none\"\n :icon=\"getCompIcon('Tools')\"\n />\n <template #dropdown>\n <el-dropdown-menu>\n <el-dropdown-item @click=\"handleCustomerForm\">自定义查询</el-dropdown-item>\n <el-dropdown-item @click=\"handleTableItemOption\">自定义表格</el-dropdown-item>\n <el-dropdown-item @click=\"handleRefresh\">重置(刷新)</el-dropdown-item>\n </el-dropdown-menu>\n </template>\n </el-dropdown>\n </div>\n </el-form-item>\n </el-col>\n </template>\n </el-row>\n </div>\n </el-form>\n</template>\n\n<script lang=\"ts\">\nexport default { name: 'EsForm' }\n</script>\n\n<script setup lang=\"ts\">\nimport { ref, computed, watch, inject, getCurrentInstance, nextTick, h, defineComponent } from 'vue'\nimport {\n ElRow,\n ElCol,\n ElFormItem,\n ElForm,\n ElButton,\n ElDropdownMenu,\n ElDropdownItem,\n ElDropdown,\n ElInput\n} from 'element-plus'\nimport * as ElementPlusIconsVue from '@element-plus/icons-vue'\nimport { useFormInputs } from '../../../composables/use-form-inputs'\nimport { useFormLayout } from '../../../composables/use-form-layout'\nimport { useFormRequest } from '../../../composables/use-form-request'\nimport { isObject } from '../../../utils/shared'\nimport useDialog from '../../es-dialog/src/use-dialog'\nimport EsTable from '../../es-table'\nimport type { FormItemOption, BtnConfig, LayoutFormProps } from '../../../types'\n\nconst props = withDefaults(\n defineProps<{\n model: Record<string, unknown>\n formItemList: FormItemOption[]\n layoutFormProps?: LayoutFormProps\n configBtn?: BtnConfig[]\n renderBtn?: Function | boolean\n btnColSpanRow?: boolean\n rules?: Record<string, unknown>\n fieldFieldOutput?: (defaults: Record<string, string>) => Record<string, string>\n }>(),\n {\n model: () => ({}),\n formItemList: () => [],\n layoutFormProps: () => ({}),\n configBtn: () => [],\n renderBtn: false,\n btnColSpanRow: true,\n rules: () => ({})\n }\n)\n\nconst emit = defineEmits<{\n confirm: [formRef: unknown, model: Record<string, unknown>]\n reset: [formRef: unknown, model: Record<string, unknown>]\n}>()\n\nconst instance = getCurrentInstance()\nconst $esPlusForm = inject<Record<string, unknown>>('$esPlusForm', {})\n\n// 保留与 Table 的耦合(同时支持 inject 和 instance.ctx 两种获取方式)\nconst injectedTableInstant = inject<(() => any) | null>('getTableInstantce', null)\nconst getTableInstant = computed(() => {\n if (injectedTableInstant) {\n return typeof injectedTableInstant === 'function' ? injectedTableInstant() : injectedTableInstant\n }\n const ctx = instance?.ctx as Record<string, unknown>\n return typeof ctx?.getTableInstantce === 'function' ? ctx?.getTableInstantce() : ctx?.getTableInstantce\n})\n\nconst isParentTable = computed(() => {\n return !!(getTableInstant.value && Object.keys(getTableInstant.value).length)\n})\n\n// 图标扩展\nconst extendedIcon = Object.fromEntries(Object.entries(ElementPlusIconsVue))\nconst getCompIcon = (key?: string) => (key ? extendedIcon[key] || key : undefined)\nconst filterOptions = (it: BtnConfig) => {\n const { icon, ...opt } = it as Record<string, unknown>\n return opt\n}\n\n// Refs\nconst refs = ref<unknown>(null)\nconst formInstance = ref<Record<string, unknown>>({})\nconst formItemRowsList = ref<FormItemOption[]>(props.formItemList)\n\nconst setFormRef = (el: unknown) => {\n if (el) refs.value = el\n}\n\n// Composables\nconst { formInputComponents } = useFormInputs()\nconst httpRequestGlobal = ($esPlusForm?.$httpRequest as (params: Record<string, unknown>) => Promise<unknown>) || undefined\nconst fieldFieldOutputGlobal = (props.fieldFieldOutput || $esPlusForm?.fieldFieldOutput) as ((defaults: Record<string, string>) => Record<string, string>) | undefined\nconst { getEveryFormQueryField } = useFormRequest(httpRequestGlobal)\n\n// Break circular dependency: formLayoutRef is populated after useFormLayout\nconst formLayoutRef = ref<Record<string, unknown>>(props.layoutFormProps?.fromLayProps || {})\nconst formProps = computed(() => ({\n ...formLayoutRef.value,\n model: props.model,\n rules: props.rules,\n validateOnRuleChange: false\n}))\n\n// 缓存已加载数据的表单项 prop,避免 computed 重新计算时重复调用接口\nconst loadedApiProps = ref<Set<string>>(new Set())\n\nwatch(\n () => props.formItemList,\n async (val) => {\n const list = Array.isArray(val) ? val : []\n // 只加载 isInitRun !== false 且尚未加载过数据的表单项\n const needLoadList = list.filter((it) => it && it.isInitRun !== false && !loadedApiProps.value.has(it.prop))\n if (!needLoadList.length) {\n // 无新表单项需要加载,保留已有的 dataOptions\n formItemRowsList.value = list.map((it) => {\n if (!it) return null\n const existing = formItemRowsList.value.find((old) => old && old.prop === it.prop)\n return existing?.dataOptions?.length ? { ...it, dataOptions: existing.dataOptions } : it\n }).filter((it): it is FormItemOption => !!it)\n return\n }\n const rows = await getEveryFormQueryField(needLoadList, fieldFieldOutputGlobal)\n // 标记已加载的 prop\n needLoadList.forEach((it) => loadedApiProps.value.add(it.prop))\n formItemRowsList.value = list\n .map((it) => {\n if (!it) return null\n const resultApiOption = rows.find((item) => item && item.prop === it.prop)\n const existing = formItemRowsList.value.find((old) => old && old.prop === it.prop)\n // 优先使用新加载的数据,其次保留已有数据\n if (resultApiOption) return { ...it, dataOptions: resultApiOption.listData }\n if (existing?.dataOptions?.length) return { ...it, dataOptions: existing.dataOptions }\n return it\n })\n .filter((it): it is FormItemOption => !!it)\n },\n { immediate: true, deep: true }\n)\n\nconst formItemListFilter = computed(() => {\n const list = formItemRowsList.value || []\n return list\n .map((it) => (it ? { ...it, span: it.span || 6, dataOptions: it.dataOptions || [] } : null))\n .filter((it): it is FormItemOption => {\n if (!it) return false\n if (it.isHidden && typeof it.isHidden === 'function') {\n return !it.isHidden(props.model, it, formProps.value)\n }\n return true\n })\n})\n\nconst {\n folded,\n isBtnHidden,\n rowLayout,\n formLayout,\n getSetOptionsStatus,\n getRowColsAlgorithm,\n isFold,\n getBtnColSpan,\n formItem,\n changeFolded\n} = useFormLayout({\n layoutFormProps: props.layoutFormProps,\n get formItemList() { return formItemListFilter.value }\n})\n\nwatch(\n formLayout,\n (val) => {\n formLayoutRef.value = val\n },\n { immediate: true }\n)\n\nconst colRightLeftList = computed(() => ({\n colRightBtn: props.configBtn.filter((it) => it.direction === 'right' || !it.direction),\n colLeftBtn: props.configBtn.filter((it) => it.direction === 'left')\n}))\n\nconst isRenderBtn = computed(() => typeof props.renderBtn === 'function')\n\nconst clickBtn = async (it: BtnConfig) => {\n if (it.triggerEvent && ['query', 'rest'].includes(it.key || '')) {\n queryTableRequest(props.model, refs.value as { resetFields: () => void }, it.key)\n } else {\n\n // await refs.value.validate()\n if (it.key === 'rest' && refs.value) {\n refs.value.resetFields()\n }\n it.click?.(props.model, refs.value, getTableInstant.value?.httpRequestInstance)\n }\n}\n\nconst queryTableRequest = async (model: Record<string, unknown>, formRef: { resetFields: () => void; validate: () => Promise<boolean> } | null, key?: string) => {\n if (key === 'query') {\n if (isParentTable.value) {\n getTableInstant.value?.httpRequestInstance?.(model)\n }\n // else if (formRef) {\n // await formRef.validate()\n // }\n } else if (key === 'rest' && formRef) {\n if (isParentTable.value) {\n getTableInstant.value?.httpRequestInstance?.(model)\n }\n formRef.resetFields()\n }\n}\n\nconst initFormItemOptions = (opts: Record<string, unknown>) => {\n if (isParentTable.value) {\n const { style, ...rest } = opts\n return { style: { marginBottom: '10px', ...(style as Record<string, unknown>) }, ...rest }\n }\n return opts\n}\n\nconst confirm = () => emit('confirm', refs.value, props.model)\nconst reset = () => emit('reset', refs.value, props.model)\n\n// 自定义弹窗\nconst createDialogInstance = (() =>\n instance?.ctx?.dialogInstance ? instance.ctx.dialogInstance() : useDialog)()\nconst customerForm = createDialogInstance()\nconst customerTable = createDialogInstance()\n\nconst handleRefresh = () => {\n // 保留原有逻辑\n}\n\nconst getFormRowsFun = () => {\n return {\n data: formItemRowsList.value.map((it) => ({\n ...it,\n label: it.label,\n prop: it.prop,\n isHidden: !!it.isHidden,\n width: it.width\n })),\n columns: [\n { type: 'selection', width: 50 },\n { label: '名称(列)', key: 'label' },\n { label: '属性(Key)', key: 'prop' },\n {\n label: '列宽',\n width: 180,\n render: (_text: unknown, row: Record<string, unknown>) => {\n return h('div', [\n h(ElInput, {\n size: 'small',\n maxlength: 3,\n formatter: (value: string) => value.replace(/^0|[^0-9]/g, ''),\n modelValue: row.width,\n 'onUpdate:modelValue': (val: unknown) => {\n row.width = val\n }\n }, {\n prepend: () => '宽度',\n append: () => 'px'\n })\n ])\n }\n }\n ]\n }\n}\n\nconst getCustomerTableInfo = () => {\n return {\n dataSource: [],\n columns: [\n { type: 'selection', width: 50 },\n { label: '名称(列)', key: 'label' },\n { label: '属性(Key)', key: 'tableProp' },\n {\n label: '列宽',\n width: 180,\n render: (_text: unknown, row: Record<string, unknown>) => {\n return h('div', [\n h(ElInput, {\n size: 'small',\n maxlength: 3,\n formatter: (value: string) => value.replace(/^0|[^0-9]/g, ''),\n modelValue: row.width,\n 'onUpdate:modelValue': (val: unknown) => {\n row.width = val\n }\n }, {\n prepend: () => '宽度',\n append: () => 'px'\n })\n ])\n }\n }\n ]\n }\n}\n\nconst handleCustomerForm = () => {\n const formRows = getFormRowsFun()\n customerForm({\n title: '自定义查询',\n width: '800px',\n isDraggable: true,\n render: () =>\n h(EsTable, {\n dataSource: formRows.data,\n columns: formRows.columns,\n options: {\n multiSelect: true,\n expand: false,\n snIndex: false,\n loading: false,\n border: true,\n size: 'small'\n },\n pagination: {\n pageSize: 10,\n current: 1,\n total: formRows.data?.length || 0\n }\n }),\n configBtn: [\n {\n name: '取消',\n icon: 'Close',\n click: (_instance: unknown, { close }: { close: () => void }) => close()\n },\n {\n name: '确认',\n type: 'primary',\n icon: 'Check',\n click: (_instance: unknown, { close }: { close: () => void }) => close()\n }\n ]\n })\n}\n\nconst handleTableItemOption = () => {\n const formRows = getCustomerTableInfo()\n customerTable({\n title: '自定义表格',\n width: '800px',\n render: () =>\n h(EsTable, {\n dataSource: formRows.dataSource,\n columns: formRows.columns\n })\n })\n}\n\n// 生命周期\nnextTick(() => {\n formInstance.value = refs.value as Record<string, unknown>\n ;(instance?.ctx as Record<string, unknown>)?.bodyFormInstance?.(formInstance.value)\n})\n\n// 子组件定义\nconst RenderBtn = defineComponent({\n props: {\n row: Object,\n formItemList: Array,\n formModel: Object,\n render: Function,\n ellipsis: Boolean\n },\n setup(props) {\n return () => {\n const { formItemList, formModel, row } = props\n const renderContent = props.render?.(row, formModel, formItemList, h) || ''\n return typeof renderContent === 'string' ? h('span', renderContent) : renderContent\n }\n }\n})\n\nconst RenderDomForm = defineComponent({\n props: {\n row: Object,\n index: Number,\n datakey: String,\n render: Function,\n model: Object,\n ellipsis: Boolean\n },\n setup(props) {\n return () => {\n const { row, index, model } = props\n const renderContent = props.render?.(h, model, { row, index }) || ''\n return typeof renderContent === 'string' ? h('span', renderContent) : renderContent\n }\n }\n})\n\n// 暴露给外部的方法,用于手动触发指定表单项的请求\nconst formItmeRequestInstance = async (propsList: string[]) => {\n const list = formItemListFilter.value\n const targetItems = list.filter((it) => it && propsList.includes(it.prop))\n if (!targetItems.length) return\n\n const rows = await getEveryFormQueryField(targetItems, fieldFieldOutputGlobal)\n rows.forEach((resultApiOption) => {\n if (!resultApiOption) return\n const itemIndex = formItemRowsList.value.findIndex((it) => it && it.prop === resultApiOption.prop)\n if (itemIndex !== -1) {\n formItemRowsList.value[itemIndex] = {\n ...formItemRowsList.value[itemIndex],\n dataOptions: resultApiOption.listData as Array<{ label: string; value: unknown }>\n }\n }\n })\n}\n\n// 暴露组件实例方法\nconst getFormRef = () => refs.value as { validate: () => Promise<boolean>; resetFields: () => void; clearValidate: (props?: string | string[]) => void; validateField: (props: string | string[]) => Promise<boolean>; scrollToField: (prop: string) => void }\n\ndefineExpose({\n formItmeRequestInstance,\n getFormRef,\n validate: () => getFormRef()?.validate(),\n resetFields: () => getFormRef()?.resetFields(),\n clearValidate: (props?: string | string[]) => getFormRef()?.clearValidate(props),\n validateField: (props: string | string[]) => getFormRef()?.validateField(props),\n scrollToField: (prop: string) => getFormRef()?.scrollToField(prop)\n})\n</script>\n\n<style lang=\"scss\" scoped>\n.es-form {\n :deep(.el-form-item) {\n margin-bottom: 18px;\n }\n\n :deep(.el-form-item__label) {\n font-weight: 500;\n }\n\n .buttonOperate {\n display: flex;\n align-items: center;\n flex-wrap: wrap;\n gap: 8px;\n }\n\n .leftRightBtn {\n display: flex;\n justify-content: space-between;\n align-items: center;\n width: 100%;\n\n .btn-left,\n .btn-right {\n display: flex;\n align-items: center;\n }\n }\n\n .btn-formItem {\n margin-bottom: 0;\n }\n\n .formItemCols {\n width: 100%;\n }\n}\n</style>\n","import EsForm from './src/es-form.vue'\nimport useDialog from '../es-dialog/src/use-dialog'\n\nEsForm.install = function (app: any) {\n app.component(EsForm.name, EsForm)\n}\n\nEsForm.isPlugin = true\nEsForm.Plugin = {\n install(app: any, options: any = {}) {\n app.provide('$esPlusForm', {\n ...options.methods,\n useDialog: () => useDialog()\n })\n app.component(EsForm.name, { ...EsForm, methods: { ...EsForm.methods, ...(options.methods || {}), useDialog: () => useDialog() } })\n }\n}\n\nexport default EsForm\n","<template>\n <div class=\"dp-dialog_wrapper\">\n <el-dialog\n :class=\"['dg-dialog', initDialogCls]\"\n v-bind=\"filteredAttrs\"\n v-model=\"dialogVisible\"\n :draggable=\"props.isDraggable\"\n :width=\"props.width\"\n :show-close=\"false\"\n @close=\"beforeClose\"\n :fullscreen=\"filteredAttrs?.fullscreen ?? isFullscreen\"\n >\n <template #header>\n <template v-if=\"props.renderHeader\">\n <RenderJsx :render=\"props.renderHeader\" :instance=\"getCurrentInstanceModel\" />\n </template>\n <template v-else>\n <div>\n <span class=\"dialog-title\">{{ props.title }}</span>\n </div>\n <div class=\"btns\">\n <el-icon @click=\"handleFullscreen\" v-show=\"!props.hiddenFullBtn\">\n <FullScreen v-if=\"!isFullscreen\" />\n <CopyDocument v-else />\n </el-icon>\n <el-icon @click=\"handleClose\"><Close /></el-icon>\n </div>\n </template>\n </template>\n\n <div class=\"dialog_body_layouts\" :style=\"initDialogHeight\">\n <template v-if=\"props.render && typeof props.render === 'function'\">\n <RenderJsx\n :refs=\"renderBodyRefsObject\"\n :instance=\"getCurrentInstanceModel\"\n :render=\"props.render\"\n :components=\"{ EsTable, EsForm }\"\n :locale=\"locale\"\n />\n </template>\n </div>\n\n <template #footer v-if=\"!attrs.isHiddenFooter\">\n <span v-if=\"!slots.footer\" class=\"dialog-footer\">\n <template v-if=\"props.renderFooter && typeof props.renderFooter === 'function'\">\n <RenderJsx :render=\"props.renderFooter\" :instance=\"getCurrentInstanceModel\" />\n </template>\n <template v-else-if=\"props.configBtn && props.configBtn.length\">\n <el-button\n v-for=\"(it, inx) in configBtn\"\n size=\"small\"\n v-bind=\"filterOptions(it)\"\n :icon=\"getCompIcon(it.icon)\"\n :disabled=\"typeof it.disabled === 'function' ? it.disabled() : it.disabled || false\"\n @click=\"() => {\n it.click?.(renderBodyRefsObject.currentRef, {\n close: handleClose,\n getRefs: (name?: string) => {\n if (name) return renderBodyRefsObject[name] || null\n return renderBodyRefsObject\n },\n dialogInstance\n })\n }\"\n :key=\"it.key || inx\"\n >\n {{ it.name }}\n </el-button>\n </template>\n </span>\n <slot v-else name=\"footer\" />\n </template>\n </el-dialog>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref, reactive, getCurrentInstance, provide, inject, useAttrs } from 'vue'\nimport { ElConfigProvider, ElDialog, ElButton, ElIcon } from 'element-plus'\nimport { FullScreen, Close, CopyDocument } from '@element-plus/icons-vue'\nimport RenderJsx from './render-jsx.vue'\nimport EsTable from '../../es-table'\nimport EsForm from '../../es-form'\nimport * as ElementPlusIconsVue from '@element-plus/icons-vue'\nimport zhCn from 'element-plus/es/locale/lang/zh-cn'\nimport type { BtnConfig } from '../../../types'\n\nconst props = defineProps<{\n title?: string\n visible?: boolean\n appendTo?: object | string\n hiddenFullBtn?: boolean\n width?: string | number\n isDraggable?: boolean\n confirmText?: string\n cancelText?: string\n configBtn?: BtnConfig[]\n maxHeight?: string | number\n isHiddenFooter?: boolean\n renderHeader?: Function\n renderFooter?: Function\n render?: Function\n fullscreen?: boolean\n}>()\n\nconst emit = defineEmits<{\n 'update:visible': [val: boolean]\n closed: [val: boolean]\n submit: [payload: any]\n}>()\n\nconst slots = defineSlots()\n\nconst instance = getCurrentInstance()\nconst attrs = useAttrs()\n\nconst extended = Object.fromEntries(Object.entries(ElementPlusIconsVue).map(([key]) => [key, ElementPlusIconsVue[key]]))\n\nconst lyFormInstance = ref(null)\nconst renderBodyRefsObject = reactive<Record<string, any>>({})\nconst isFullscreen = ref(false)\nconst dialogInstance = instance\nconst locale = ref(zhCn)\n\nconst injectedLocale = inject('elLocale', null)\nif (injectedLocale) {\n locale.value = injectedLocale as any\n}\n\nprovide('elLocale', locale.value)\n\nconst getCompIcon = (key?: string) => {\n return key ? extended[key] || key : undefined\n}\n\nconst filterOptions = (it: BtnConfig) => {\n const { icon, ...opt } = it as Record<string, unknown>\n return opt\n}\n\nconst closeFullscreen = () => {\n setTimeout(() => {\n if (isFullscreen.value) {\n isFullscreen.value = false\n }\n }, 500)\n}\n\nconst handleFullscreen = () => {\n if (attrs?.fullscreen) return\n isFullscreen.value = !isFullscreen.value\n}\n\nconst handleClose = () => {\n emit('closed', false)\n closeFullscreen()\n}\n\nconst handleConfirm = () => {\n emit('submit', { renderBodyRefs: renderBodyRefsObject.currentRef, lyFormInstance, dialogInstance })\n}\n\nconst beforeClose = () => {\n emit('closed', false)\n closeFullscreen()\n}\n\nconst filteredAttrs = computed(() => {\n const { ...rest } = attrs\n return rest\n})\n\nconst initDialogCls = computed(() => {\n if (!isFullscreen.value) {\n if (props.maxHeight) return 'dialogShadow'\n return 'dialogAuto'\n }\n return 'dialogFull'\n})\n\nconst getMaxContentHeight = () => {\n const viewH = window.innerHeight\n return Math.max(viewH - 135, 200)\n}\n\nconst initDialogHeight = computed(() => {\n const viewH = getMaxContentHeight()\n if (!isFullscreen.value) {\n if (props.maxHeight) {\n return { maxHeight: typeof props.maxHeight === 'number' ? `${props.maxHeight}px` : props.maxHeight }\n }\n return { maxHeight: viewH + 'px' }\n }\n return { height: viewH + 'px' }\n})\n\nconst dialogVisible = computed({\n get: () => props.visible || false,\n set: (val) => {\n emit('update:visible', val)\n if (!val) {\n emit('closed', val)\n closeFullscreen()\n }\n }\n})\n\nconst getCurrentInstanceModel = computed(() => ({\n renderBodyRefs: renderBodyRefsObject.currentRef,\n renderBodyRefsObject,\n lyFormInstance,\n dialogInstance,\n getRefs: () => renderBodyRefsObject\n}))\n\nprovide('bodyFormInstance', (e: any) => {\n lyFormInstance.value = e\n})\n\nif (instance) {\n instance.exposed = {\n closed: handleClose\n }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.dp-dialog_wrapper {\n :deep(.dialogAuto) {\n margin: 0px !important;\n }\n :deep(.el-overlay-dialog) {\n display: flex;\n justify-content: center;\n align-items: center;\n }\n :deep(.el-dialog) {\n padding: 10px;\n\n .el-dialog__footer {\n padding-top: 0px;\n }\n\n .el-dialog__body {\n padding: 10px 0px;\n }\n\n .el-dialog__header {\n border-bottom: 1px solid #eee;\n display: flex;\n padding: 0px 0px 10px 0px;\n align-items: center;\n justify-content: space-between;\n margin: 0;\n }\n }\n}\n\n.dialog-title {\n line-height: 24px;\n font-size: 14px;\n color: #303133;\n font-weight: bold;\n}\n\n.btns {\n display: flex;\n align-items: center;\n\n i {\n margin-right: 8px;\n font-size: 14px;\n cursor: pointer;\n\n &:last-child {\n margin-right: 0;\n }\n }\n}\n\n.dialog_body_layouts {\n overflow-y: auto;\n overflow-x: hidden;\n scrollbar-width: thin;\n scrollbar-color: #87a2bd26 #c8d5e147;\n}\n\n/* 滚动条样式 */\n*::-webkit-scrollbar {\n width: 14px;\n height: 14px;\n}\n\n*::-webkit-scrollbar-button {\n width: 0;\n height: 0;\n display: none;\n}\n\n*::-webkit-scrollbar-corner {\n background-color: transparent;\n}\n\n*::-webkit-scrollbar-thumb {\n min-height: 12px;\n border: 4px solid transparent;\n background-clip: content-box;\n border-radius: 7px;\n background-color: #c8d5e1;\n\n &:hover {\n background-color: #a8bbcf;\n }\n\n &:active {\n background-color: #87a2bd;\n }\n}\n\n*::-webkit-scrollbar-track {\n background-color: transparent;\n}\n\n*::-webkit-scrollbar-track-piece {\n background-color: transparent;\n}\n</style>\n","import EsDialog from './src/component.vue'\n\nEsDialog.install = function (app: any) {\n app.component(EsDialog.name, EsDialog)\n}\n\nexport default EsDialog\n","<template>\n <div v-if=\"isExternal\" :style=\"styleExternalIcon\" class=\"svg-external-icon svg-icon\" />\n <svg v-else :class=\"svgClass\" aria-hidden=\"true\">\n <use :xlink:href=\"iconName\" />\n </svg>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\n\nconst props = defineProps<{\n iconClass: string\n className?: string\n}>()\n\nconst isExternal = computed(() => isExternals(props.iconClass))\nconst iconName = computed(() => `#icon-${props.iconClass}`)\nconst svgClass = computed(() => {\n if (props.className) {\n return 'svg-icon ' + props.className\n }\n return 'svg-icon'\n})\nconst styleExternalIcon = computed(() => {\n return {\n mask: `url(${props.iconClass}) no-repeat 50% 50%`,\n '-webkit-mask': `url(${props.iconClass}) no-repeat 50% 50%`\n }\n})\n\nconst isExternals = (path: string) => {\n return /^(https?:|mailto:|tel:|open)/.test(path)\n}\n</script>\n\n<style scoped>\n.svg-icon {\n width: 1em;\n height: 1em;\n vertical-align: -0.15em;\n fill: currentColor;\n overflow: hidden;\n}\n\n.svg-external-icon {\n background-color: currentColor;\n mask-size: cover !important;\n display: inline-block;\n}\n</style>\n","import SvgIcon from './src/svg-icon.vue'\n\nSvgIcon.install = function (app: any) {\n app.component(SvgIcon.name, SvgIcon)\n}\n\nexport default SvgIcon","import { version } from '../package.json'\nimport EsDialog from './components/es-dialog'\nimport useDialog from './components/es-dialog/src/use-dialog'\nimport EsForm from './components/es-form'\nimport EsTable from './components/es-table'\nimport SvgIcon from './components/svg-icon'\n\n// 组件列表\nconst components = [EsDialog, EsForm, EsTable, SvgIcon]\n\n// Vue 3 插件安装函数\nconst install = (app: any, options: Record<string, unknown> = {}) => {\n components.forEach((component) => {\n if (component.name) {\n app.component(component.name, component)\n }\n })\n\n if (options.globalProperties !== false) {\n app.config.globalProperties.$useDialog = useDialog\n\n components.forEach((component: any) => {\n if (component.isPlugin && component.Plugin) {\n app.use(component.Plugin, options[component.name] || {})\n }\n })\n }\n\n app.provide('$EsPlus', {\n useDialog,\n ...options\n })\n}\n\n// 按需导出\nexport {\n EsDialog,\n EsForm,\n EsTable,\n SvgIcon,\n useDialog,\n install\n}\n\n// 默认导出\nexport default {\n version,\n install\n}"],"names":["zh_cn_default","_sfc_main","defineComponent","props","refsObject","reactive","getRawRef","vnodeRef","refObj","val","componentVNode","userRefCallback","flushRef","instance","comp","onMounted","onUpdated","enhancedInstance","name","el","renderContent","h","ElConfigProvider","zhCn","e","isVNode","_a","RenderDomTb","row","index","dataKey","render","value","renderResult","firstWordUpperCase","str","columnBindAttr","cols","options","parts","camelKey","i","__props","_createBlock","_unref","ElTableColumn","_normalizeProps","_mergeProps","_openBlock","_createElementBlock","_Fragment","item","_withCtx","scope","_renderSlot","_ctx","RenderDom","hasPermission","_btnList","pvalue","processButtonConfig","config","processed","processedBtnLeft","computed","processedBtnRight","showContainer","getDisabledState","buttonContainerStyle","_hoisted_1","_createElementVNode","_hoisted_2","_toDisplayString","_hoisted_3","_hoisted_4","_renderList","_normalizeStyle","_createTextVNode","_hoisted_5","useTableResize","tableContainerRef","headBarRef","tbBtnRef","paginationRef","tableHeight","ref","observer","isNegative","num","totalContainerNum","headBarHeight","tbBtnHeight","_c","_b","paginationHeight","_d","resizeObservers","element","containerHeight","maxContainer","minTableNum","tabContainer","_e","newHeight","startObserver","nextTick","target","stopObserver","onBeforeUnmount","useTableSelection","rowkey","multipleSelection","selectionsByPage","isInitChange","handleSelectionChange","currentPage","allSelections","uniqueMap","pageSelections","key","handleSelectData","dataList","tableRef","pageSelecteds","selectedRow","isObject","findValueByKey","obj","depth","currentValue","prop","deepValue","wrapPromise","promise","reason","defaultOptions","emit","__emit","slots","_useSlots","locale","injectedLocale","inject","getCurrentInstance","$esPlusTable","tableId","tableData","columnRowList","watch","loadingStatus","slotState","showPagination","setTableContainer","bodyFormInstance","getVisibleShow","visibleShow","paginationConfig","formInstance","getListEntry","configTableField","checkQueryFields","configFields","isFormInstance","formVNode","vnode","type","hasDefaultSlot","heightType","tabHeight","slotStyles","paginationLayoutConfig","cfg","layout","paginationPageSizes","paginationIsSmall","paginationBackground","loadStatus","isRequestConf","filteredColumns","list","_h","btn","ElButton","TABLE_INTERNAL_KEYS","tableAttrs","merged","align","rest","result","fallthroughAttrs","useAttrs","tableBindAttrs","oldVal","httpRequestInstance","initSelection","clearAllSelection","handleTableSelectionChange","checkListKey","it","its","getListenToCallBack","eventName","params","eventNameList","hasEventNameIndex","formatConfigOut","keyList","rowData","queryTableListMethod","success","fail","apiParams","url","formData","toRaw","unref","fnParams","finalParams","requestOption","requestHandler","requestFn","res","responseData","model","resolve","reject","err","changePageIndexRequest","changePageSizeRequest","handleSizeChange","size","handleIndexChange","changeTableSort","column","char","t","newkey","j","provide","rows","__expose","_normalizeClass","_withDirectives","TableBtns","_cache","ColumnItem","_createVNode","ElPagination","$event","EsTable","app","getNestedValue","path","keys","setNestedValue","lastKey","current","useFormInputs","hFn","ElInput","ElSelect","opt","idx","ElOption","ElDatePicker","ElTimePicker","ElSlider","ElColorPicker","ElTransfer","ElCascader","ElRadioGroup","ElRadio","ElCheckboxGroup","ElCheckbox","ElSwitch","ElRate","_model","uploadProps","httpRequest","triggerRender","fileRender","restRow","uploadInstance","elUploadProps","handler","file","ElUpload","useFormLayout","folded","isBtnHidden","rowLayout","formLayout","getSetOptionsStatus","getRowColsAlgorithm","pre","groupArrayList","columnRows","formItems","statIndex","columRowIndexs","rowColIndex","_","isFold","minFoldRow","getBtnColSpan","rowNum","columnRow","lastColumn","btnColSpan","hasSpan","sum","formItem","columnNodeIndex","lastFoldIndex","useFormRequest","httpRequestGlobal","option","_params","initFormParams","requestPayload","configFormField","fieldFieldOutput","configFieldOut","configDataOption","rowValue","resultData","httpRequestFormInstance","configRows","rowsList","apiUrlList","apiResult","wrappedPromises","promiseThen","data","listenToCallBack","listData","newListOptions","getAppendToElement","appendTo","initInstance","Component","container","appContext","vNode","createVNode","useDialog","EsDialog","close","DialogComponent","dialogOptions","originalOnClosed","originalOnSubmit","args","closeFn","destroy","mergedOptions","__default__","$esPlusForm","injectedTableInstant","getTableInstant","ctx","isParentTable","extendedIcon","ElementPlusIconsVue","getCompIcon","filterOptions","icon","refs","formItemRowsList","setFormRef","formInputComponents","fieldFieldOutputGlobal","getEveryFormQueryField","formLayoutRef","formProps","loadedApiProps","needLoadList","existing","old","resultApiOption","formItemListFilter","changeFolded","colRightLeftList","isRenderBtn","clickBtn","queryTableRequest","formRef","initFormItemOptions","opts","style","createDialogInstance","customerForm","customerTable","handleRefresh","getFormRowsFun","_text","getCustomerTableInfo","handleCustomerForm","formRows","_instance","handleTableItemOption","RenderBtn","formItemList","formModel","RenderDomForm","formItmeRequestInstance","propsList","targetItems","itemIndex","getFormRef","ElForm","ElCol","_vShow","ElFormItem","inx","ElDropdown","ElDropdownMenu","ElDropdownItem","EsForm","attrs","extended","lyFormInstance","renderBodyRefsObject","isFullscreen","dialogInstance","closeFullscreen","handleFullscreen","handleClose","beforeClose","filteredAttrs","initDialogCls","getMaxContentHeight","viewH","initDialogHeight","dialogVisible","getCurrentInstanceModel","RenderJsx","ElIcon","CopyDocument","FullScreen","Close","isExternal","isExternals","iconName","svgClass","styleExternalIcon","SvgIcon","components","install","component","version"],"mappings":"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","x_google_ignoreList":[0]}
|