es-plus-ui 1.0.3 → 1.0.4
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/dist/es-plus.js +383 -390
- 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/package.json +1 -1
package/dist/es-plus.umd.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"es-plus.umd.cjs","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>\r\n <el-config-provider :locale=\"locale\">\r\n <div :ref=\"setTableContainer\" class=\"table_component\" :style=\"{ [heightType]: tabHeight }\">\r\n <div class=\"table_containers\">\r\n <div\r\n v-if=\"showHeaderBar\"\r\n ref=\"headBarRef\"\r\n class=\"btn-slot\"\r\n :style=\"slotStyles.value && slotStyles.type === 'object' && slotStyles.value\"\r\n :class=\"slotStyles.type === 'string' ? slotStyles.value : { slotClass: slotState && slotStyles.type !== 'object' }\"\r\n >\r\n <div class=\"headerBar\" v-if=\"hasDefaultSlot\" :style=\"{ paddingBottom: hasDefaultSlot ? '10px' : '0px' }\">\r\n <slot />\r\n </div>\r\n </div>\r\n <div v-loading=\"loadStatus\" element-loading-background=\"rgba(0, 0, 0, 0.03)\" element-loading-text=\"努力加载中...\" class=\"page-loading-con tableContainer\">\r\n <div class=\"table_inner_containers\">\r\n <table-btns\r\n ref=\"tbBtnRef\"\r\n :instance=\"{ tableRef: instance, formInstance: formInstance }\"\r\n v-if=\"(options.configBtn && options.configBtn.length) || options.leftText\"\r\n :btn-config=\"options.configBtn\"\r\n :left-text=\"options.leftText\"\r\n />\r\n <el-table\r\n class=\"el-dp_tables\"\r\n :id=\"tableId\"\r\n :key=\"tableId\"\r\n ref=\"tableRef\"\r\n style=\"width: 100%\"\r\n v-bind=\"tableBindAttrs\"\r\n :data=\"dataSource\"\r\n @sort-change=\"changeTableSort\"\r\n @selection-change=\"handleTableSelectionChange\"\r\n >\r\n <template #empty>\r\n <div class=\"ant-empty ant-empty-normal\">\r\n <div class=\"ant-empty-image\">\r\n <svg class=\"ant-empty-img-simple\" width=\"64\" height=\"41\" viewBox=\"0 0 64 41\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <g transform=\"translate(0 1)\" fill=\"none\" fill-rule=\"evenodd\">\r\n <ellipse class=\"ant-empty-img-simple-ellipse\" cx=\"32\" cy=\"33\" rx=\"32\" ry=\"7\" />\r\n <g class=\"ant-empty-img-simple-g\" fill-rule=\"nonzero\">\r\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\" />\r\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\" />\r\n </g>\r\n </g>\r\n </svg>\r\n </div>\r\n <div class=\"ant-empty-description\">暂无数据</div>\r\n </div>\r\n </template>\r\n <column-item v-for=\"(cols, index) in filteredColumns\" :key=\"cols.prop || cols.key || index\" :cols=\"{ ...cols, columnIndex: index }\">\r\n <template v-if=\"cols.scopedSlots && cols.scopedSlots.customRender\" #[cols.scopedSlots.customRender]=\"{ scope }\">\r\n <slot v-bind=\"{ ...cols, columnIndex: index, row: scope.row, column: scope.column }\" :name=\"cols.scopedSlots.customRender\" :scope=\"scope\" />\r\n </template>\r\n </column-item>\r\n </el-table>\r\n </div>\r\n <div\r\n v-if=\"showPagination\"\r\n ref=\"paginationRef\"\r\n class=\"pagination_page\"\r\n :style=\"{\r\n position: heightType === 'height' ? 'absolute' : 'static',\r\n bottom: '0px',\r\n left: '0px',\r\n zIndex: 5,\r\n background: '#fff'\r\n }\"\r\n >\r\n <el-pagination\r\n :background=\"paginationBackground\"\r\n :size=\"paginationIsSmall ? 'small' : paginationConfig.size\"\r\n :total=\"paginationConfig.total\"\r\n v-model:page-size=\"paginationConfig.pageSize\"\r\n :page-sizes=\"paginationPageSizes\"\r\n v-model:current-page=\"paginationConfig.current\"\r\n :layout=\"layout\"\r\n style=\"padding: 0; margin: 10px 0; text-align: center\"\r\n @size-change=\"handleSizeChange\"\r\n @current-change=\"handleIndexChange\"\r\n />\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </el-config-provider>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nimport type { TableOptions } from '../../../types'\r\n\r\nconst defaultOptions: TableOptions = {\r\n multiSelect: false,\r\n expand: false,\r\n snIndex: false,\r\n loading: false,\r\n border: false,\r\n size: 'small',\r\n headerCellStyle: { background: '#f5f7fa' },\r\n highlightCurrentRow: true,\r\n cachePageSelection: true\r\n}\r\n</script>\r\n\r\n<script setup lang=\"ts\">\r\nimport { ref, computed, watch, inject, getCurrentInstance, provide, toRaw, unref, h, onMounted, useAttrs } from 'vue'\r\nimport { ElTable, ElConfigProvider, ElPagination, vLoading, ElButton } from 'element-plus'\r\nimport zhCn from 'element-plus/es/locale/lang/zh-cn'\r\nimport ColumnItem from './column-item.vue'\r\nimport TableBtns from './table-btns.vue'\r\nimport { useTableResize } from '../../../composables/use-table-resize'\r\nimport { useTableSelection } from '../../../composables/use-table-selection'\r\nimport { isObject, findValueByKey } from '../../../utils/shared'\r\nimport type { TableColumn, PaginationConfig } from '../../../types'\r\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n initTabHeight?: number\r\n headBarClass?: string | Record<string, unknown>\r\n showHeaderBar?: boolean\r\n dataSource: Record<string, unknown>[]\r\n columns: TableColumn[]\r\n options?: TableOptions\r\n pagination?: PaginationConfig\r\n }>(),\r\n {\r\n initTabHeight: 400,\r\n showHeaderBar: true,\r\n dataSource: () => [],\r\n columns: () => [],\r\n options: () => ({ ...defaultOptions }),\r\n pagination: () => ({})\r\n }\r\n)\r\n\r\nconst emit = defineEmits<{\r\n 'update:dataSource': [data: Record<string, unknown>[]]\r\n 'update:pagination': [pagination: PaginationConfig]\r\n 'pagination-current-change': [pagination: PaginationConfig]\r\n 'size-change': [pagination: PaginationConfig, size: number]\r\n 'change-table-sort': [column: Record<string, unknown>]\r\n}>()\r\n\r\nconst slots = defineSlots<{\r\n default?: () => any\r\n}>()\r\n\r\nconst locale = ref(zhCn)\r\nconst injectedLocale = inject('elLocale', null)\r\nif (injectedLocale) {\r\n locale.value = injectedLocale as any\r\n}\r\n\r\nconst instance = getCurrentInstance() || {}\r\nconst $esPlusTable = inject<Record<string, unknown>>('$esPlusTable', {})\r\n\r\n// Refs\r\nconst tableRef = ref<any>(null)\r\nconst tbBtnRef = ref<any>(null)\r\nconst headBarRef = ref<HTMLElement | null>(null)\r\nconst paginationRef = ref<HTMLElement | null>(null)\r\nconst tableContainerRef = ref<HTMLElement | null>(null)\r\nconst tableId = ref(`table_${Math.random().toString(36).substring(2, 12)}`)\r\nconst tableData = ref<Record<string, unknown>[]>([])\r\nconst columnRowList = ref<TableColumn[]>([...props.columns])\r\n\r\nwatch(\r\n () => props.columns,\r\n (val) => {\r\n columnRowList.value = [...val]\r\n },\r\n { deep: true }\r\n)\r\nconst loadingStatus = ref(false)\r\nconst slotState = ref(false)\r\nconst showPagination = ref(false)\r\n\r\nconst setTableContainer = (el: HTMLElement | null) => {\r\n if (el) tableContainerRef.value = el\r\n}\r\n\r\n// 保留与 Form 的耦合\r\nconst bodyFormInstance = inject<(inst: unknown) => void>('bodyFormInstance', () => {})\r\nconst getVisibleShow = inject<(() => boolean) | boolean>('getVisibleShow', false)\r\n\r\nconst visibleShow = computed(() => (typeof getVisibleShow === 'function' ? getVisibleShow() : getVisibleShow))\r\n\r\nconst paginationConfig = ref<PaginationConfig>({\r\n pageSize: 10,\r\n current: 1,\r\n total: 0,\r\n pageSizes: [],\r\n size: 'small',\r\n isSmall: true,\r\n ...props.pagination\r\n})\r\n\r\nconst formInstance = ref<unknown>(null)\r\n\r\n// 计算属性\r\nconst getListEntry = computed(() => {\r\n if (props.options.entryQuery && isObject(props.options.entryQuery) && Object.keys(props.options.entryQuery).length) {\r\n return props.options.entryQuery\r\n }\r\n return {}\r\n})\r\n\r\nconst configTableField = computed(() => {\r\n if (\r\n props.options.configTableOut &&\r\n isObject(props.options.configTableOut) &&\r\n Object.keys(props.options.configTableOut).length &&\r\n checkQueryFields(props.options.configTableOut)\r\n ) {\r\n return props.options.configTableOut\r\n }\r\n\r\n if ($esPlusTable?.configQueryFieldOutput && typeof $esPlusTable.configQueryFieldOutput === 'function') {\r\n const configFields = ($esPlusTable.configQueryFieldOutput as Function)({\r\n total: 'records',\r\n pageSize: 'pageSize',\r\n current: 'pageNo',\r\n tableData: 'rows'\r\n })\r\n if (checkQueryFields(configFields)) return configFields\r\n }\r\n\r\n return {\r\n total: 'records',\r\n pageSize: 'pageSize',\r\n current: 'pageNo',\r\n tableData: 'rows'\r\n }\r\n})\r\n\r\nconst isFormInstance = computed(() => {\r\n const defaultSlots = instance?.slots?.default?.() || []\r\n const formVNode = defaultSlots.find((vnode: any) => {\r\n const type = vnode.type\r\n return type?.name === 'EsForm' || type?.displayName === 'EsForm'\r\n })\r\n if (formVNode && formVNode.props?.ref) {\r\n formInstance.value = formVNode.ctx?.refs[formVNode.props.ref]\r\n bodyFormInstance(formInstance.value)\r\n }\r\n return formVNode || {}\r\n})\r\n\r\nconst hasDefaultSlot = computed(() => !!slots.default?.())\r\nconst heightType = computed(() => props.options.heightType || 'auto')\r\nconst tabHeight = computed(() => {\r\n if (typeof props.options.tabHeight === 'number') {\r\n return `${props.options.tabHeight}px`\r\n }\r\n if (heightType.value === 'height' && typeof props.options.height === 'number') {\r\n return `${props.options.height}px`\r\n }\r\n return '100%'\r\n})\r\n\r\nconst slotStyles = computed(() => {\r\n if (props.headBarClass) {\r\n return {\r\n type: typeof props.headBarClass === 'string' ? 'string' : 'object',\r\n value: props.headBarClass\r\n }\r\n }\r\n return { type: 'string', value: '' }\r\n})\r\n\r\nconst paginationLayoutConfig = computed(() => {\r\n const cfg = $esPlusTable?.paginationLayout\r\n if (!cfg) return null\r\n return typeof cfg === 'function' ? cfg() : cfg\r\n})\r\nconst layout = computed(() => paginationLayoutConfig.value?.layout || 'prev, pager, next, jumper, sizes, ->, total')\r\nconst paginationPageSizes = computed(() => paginationLayoutConfig.value?.pageSizes || paginationConfig.value.pageSizes)\r\nconst paginationIsSmall = computed(() => paginationLayoutConfig.value?.isSmall ?? paginationConfig.value.isSmall)\r\nconst paginationBackground = computed(() => paginationLayoutConfig.value?.background ?? true)\r\nconst loadStatus = computed(() => props.options.loading || loadingStatus.value)\r\nconst isRequestConf = computed(() => !!props.options.actionUrl || (props.options.apiParams && isObject(props.options.apiParams) && Object.keys(props.options.apiParams).length > 0))\r\nconst isHttpRequest = computed(() => !!props.options?.httpRequest && typeof props.options.httpRequest === 'function')\r\n\r\nconst filteredColumns = computed(() => {\r\n const list = columnRowList.value.filter((item) => !item.hidCol)\r\n list.forEach((el) => {\r\n if (el.prop !== 'operate' && el.key !== 'operate' && (el.prop || el.key) && !el.formatter) {\r\n el.formatter = (row: Record<string, unknown>) => {\r\n const value = row[el.prop as string] || row[el.key as string]\r\n if (value == null || value === '') {\r\n return el.emptyPlaceholder || '-'\r\n }\r\n return value\r\n }\r\n }\r\n\r\n if ((el.prop === 'operate' || el.key === 'operate') && el.btns && !el.render) {\r\n el.render = (_h: any, { row }: { row: Record<string, unknown> }) => {\r\n return h('div', [\r\n el.btns?.map((btn: any) =>\r\n h(ElButton, {\r\n onClick: () => btn.clickEvent?.(row),\r\n text: true,\r\n type: btn.type || 'primary'\r\n }, () => btn.name)\r\n )\r\n ])\r\n }\r\n }\r\n })\r\n return list\r\n})\r\n\r\n// es-table 内部选项键,不应传递给 el-table\r\nconst TABLE_INTERNAL_KEYS = new Set([\r\n 'multiSelect', 'expand', 'snIndex', 'loading', 'cachePageSelection',\r\n 'httpRequest', 'configTableOut', 'listenToCallBack',\r\n 'apiParams', 'actionUrl', 'heightType', 'tabHeight',\r\n 'isInitRun', 'entryQuery', 'configBtn', 'leftText', 'rowkey'\r\n])\r\n\r\nconst tableAttrs = computed(() => {\r\n const merged = columnBindAttr({ ...defaultOptions, ...props.options })\r\n const { align, ...rest } = merged\r\n const result: Record<string, unknown> = {}\r\n for (const key in rest) {\r\n if (!TABLE_INTERNAL_KEYS.has(key)) {\r\n result[key] = rest[key]\r\n }\r\n }\r\n return result\r\n})\r\n\r\n// 合并 options attrs 和父级 fallthrough attrs,供 el-table 使用\r\nconst fallthroughAttrs = useAttrs()\r\nconst tableBindAttrs = computed(() => {\r\n const result: Record<string, unknown> = { ...tableAttrs.value, ...fallthroughAttrs }\r\n if (props.options.rowkey) {\r\n result.rowKey = props.options.rowkey\r\n }\r\n if (heightType.value === 'height') {\r\n result.height = tableHeight.value\r\n } else if (heightType.value === 'maxHeight') {\r\n result.maxHeight = tableHeight.value\r\n }\r\n return result\r\n})\r\n\r\n// 使用原生 ResizeObserver\r\nconst { tableHeight, resizeObservers } = useTableResize(\r\n tableContainerRef,\r\n headBarRef,\r\n tbBtnRef,\r\n paginationRef,\r\n { heightType: heightType.value, tabHeight: props.options.tabHeight }\r\n)\r\n\r\nwatch(\r\n visibleShow,\r\n async (val, oldVal) => {\r\n if (val && val !== oldVal) {\r\n if (props.options.actionUrl) {\r\n await httpRequestInstance()\r\n }\r\n tableRef.value?.doLayout?.()\r\n }\r\n }\r\n)\r\n\r\nwatch(\r\n () => props.pagination,\r\n (val) => {\r\n paginationConfig.value = { ...paginationConfig.value, ...val }\r\n showPagination.value = val.total !== undefined\r\n },\r\n { deep: true, immediate: true }\r\n)\r\n\r\nwatch(\r\n () => props.dataSource,\r\n (val) => {\r\n initSelection(val, tableRef.value)\r\n },\r\n { deep: true }\r\n)\r\n\r\nwatch(\r\n tableData,\r\n (val) => {\r\n if (Array.isArray(val)) {\r\n emit('update:dataSource', val)\r\n }\r\n },\r\n { deep: true }\r\n)\r\n\r\n// 配置化接口请求时,挂载自动加载数据\r\nonMounted(() => {\r\n if (isRequestConf.value && props.options.isInitRun !== false) {\r\n httpRequestInstance()\r\n }\r\n})\r\n\r\n// 表格选择逻辑\r\nconst { multipleSelection, handleSelectionChange, initSelection, clearAllSelection } = useTableSelection(props.options.rowkey)\r\n\r\nconst handleTableSelectionChange = (val: Record<string, unknown>[]) => {\r\n handleSelectionChange(val, paginationConfig.value.current || 1)\r\n}\r\n\r\n// 请求逻辑\r\nconst checkQueryFields = (obj: Record<string, unknown>): boolean => {\r\n const checkListKey = ['total', 'pageSize', 'current', 'tableData']\r\n if (isObject(obj)) {\r\n return Object.keys(obj).every((it) => {\r\n return checkListKey.find((its) => its === it) && obj[it] && typeof obj[it] === 'string'\r\n })\r\n }\r\n return false\r\n}\r\n\r\nconst getListenToCallBack = (eventName: string, params: unknown) => {\r\n const eventNameList = [\r\n { eventName: 'brcb', isReturn: true },\r\n { eventName: 'qrcb', isReturn: true }\r\n ]\r\n const hasEventNameIndex = eventNameList.findIndex((it) => it.eventName === eventName)\r\n if (props.options.listenToCallBack && props.options.listenToCallBack[eventName] && hasEventNameIndex !== -1) {\r\n const callObj = eventNameList[hasEventNameIndex]\r\n if (callObj.isReturn) {\r\n return props.options.listenToCallBack[eventName](params)\r\n }\r\n }\r\n}\r\n\r\nconst formatConfigOut = (row: Record<string, unknown>, keyList: string[]) => {\r\n if (isObject(configTableField.value) && Object.keys(configTableField.value).length) {\r\n Object.entries(configTableField.value).forEach(([key, value]) => {\r\n const isKeyUsed = keyList.includes(key)\r\n if (!isKeyUsed) return\r\n\r\n const rowData = row[value as string] ?? findValueByKey(row, value as string)\r\n if (key === 'tableData') {\r\n tableData.value = Array.isArray(rowData) ? rowData : []\r\n } else {\r\n paginationConfig.value[key as keyof PaginationConfig] = typeof rowData === 'number' ? rowData : parseInt(rowData as string, 10) || 0\r\n }\r\n })\r\n }\r\n}\r\n\r\nconst queryTableListMethod = (params: Record<string, unknown>, options: { success?: (res: Record<string, unknown>) => void; fail?: (err: unknown) => void } = {}) => {\r\n const { success, fail } = options\r\n const apiParams = props.options?.apiParams || {}\r\n const url = props.options?.actionUrl || apiParams.url || ''\r\n\r\n if (!url || !Object.keys(apiParams).length) return\r\n\r\n const formData = Object.keys(isFormInstance.value).length\r\n ? toRaw(unref((isFormInstance.value as any).props.model))\r\n : getListEntry.value || {}\r\n\r\n\r\n const fnParams = getListenToCallBack('brcb', { ...formData, ...params, ...toRaw(unref(apiParams.model || {})) })\r\n const finalParams = isObject(fnParams) ? fnParams : { ...formData, ...toRaw(unref(apiParams.model || {})), ...params }\r\n const requestOption = { ...toRaw(unref(apiParams.options || {})) }\r\n if (apiParams?.method) {\r\n requestOption.method = apiParams?.method\r\n }\r\n\r\n const requestHandler = async (requestFn: Function) => {\r\n if (loadingStatus.value) return\r\n loadingStatus.value = true\r\n console.log('formData///', finalParams)\r\n try {\r\n const res = await requestFn({\r\n url,\r\n formParams: finalParams,\r\n headers: apiParams.headers || {},\r\n ...requestOption,\r\n ...params\r\n })\r\n const responseData = getListenToCallBack('qrcb', res) || res\r\n if (isObject(res) && Object.keys(res).length && typeof success === 'function') {\r\n success(responseData as Record<string, unknown>)\r\n }\r\n } catch (e) {\r\n if (typeof fail === 'function') {\r\n fail(e)\r\n }\r\n } finally {\r\n loadingStatus.value = false\r\n }\r\n }\r\n\r\n if (props.options.httpRequest) {\r\n requestHandler(props.options.httpRequest)\r\n } else if ($esPlusTable.$httpRequest) {\r\n requestHandler($esPlusTable.$httpRequest as Function)\r\n }\r\n}\r\n\r\nconst httpRequestInstance = (model?: Record<string, unknown>) => {\r\n return new Promise((resolve, reject) => {\r\n paginationConfig.value.current = 1\r\n queryTableListMethod(\r\n { ...(model || {}), pageIndex: paginationConfig.value.current, pageSize: paginationConfig.value.pageSize },\r\n {\r\n success: (res) => {\r\n formatConfigOut(res, ['total', 'tableData'])\r\n if (Object.keys(props.pagination).length) {\r\n emit('update:pagination', paginationConfig.value)\r\n }\r\n resolve(res)\r\n },\r\n fail: (err) => {\r\n reject(err)\r\n }\r\n }\r\n )\r\n })\r\n}\r\n\r\nconst changePageIndexRequest = () => {\r\n queryTableListMethod(\r\n { pageIndex: paginationConfig.value.current, pageSize: paginationConfig.value.pageSize },\r\n {\r\n success: (res) => {\r\n formatConfigOut(res, ['total', 'tableData'])\r\n emit('update:pagination', paginationConfig.value)\r\n emit('pagination-current-change', paginationConfig.value)\r\n }\r\n }\r\n )\r\n}\r\n\r\nconst changePageSizeRequest = () => {\r\n queryTableListMethod(\r\n { pageIndex: paginationConfig.value.current, pageSize: paginationConfig.value.pageSize },\r\n {\r\n success: (res) => {\r\n formatConfigOut(res, ['total', 'tableData'])\r\n emit('update:pagination', paginationConfig.value)\r\n }\r\n }\r\n )\r\n}\r\n\r\nconst handleSizeChange = (size: number) => {\r\n paginationConfig.value.pageSize = size\r\n paginationConfig.value.current = 1\r\n if (isRequestConf.value) {\r\n changePageSizeRequest()\r\n } else {\r\n emit('update:pagination', paginationConfig.value)\r\n emit('size-change', paginationConfig.value, size)\r\n }\r\n}\r\n\r\nconst handleIndexChange = (val: number) => {\r\n paginationConfig.value.current = val\r\n if (isRequestConf.value) {\r\n console.log('indexPages//', val)\r\n changePageIndexRequest()\r\n } else {\r\n emit('update:pagination', paginationConfig.value)\r\n emit('pagination-current-change', paginationConfig.value)\r\n }\r\n}\r\n\r\nconst changeTableSort = (column: Record<string, unknown>) => {\r\n emit('change-table-sort', column)\r\n}\r\n\r\nconst firstWordUpperCase = (str: string): string => {\r\n return str.toLowerCase().replace(/(\\s|^)[a-z]/g, (char) => char.toUpperCase())\r\n}\r\n\r\nconst columnBindAttr = (cols: Record<string, unknown>) => {\r\n const options: Record<string, unknown> = {}\r\n for (const t in cols) {\r\n if (t === 'groups' || t === 'scopedSlots' || t === 'render') continue\r\n\r\n if (t.includes('-')) {\r\n const parts = t.split('-')\r\n let newkey = parts[0]\r\n for (let j = 1; j < parts.length; j++) {\r\n newkey += firstWordUpperCase(parts[j])\r\n }\r\n options[newkey] = cols[t]\r\n } else if (t === 'key') {\r\n options.prop = cols[t]\r\n options[t] = cols[t]\r\n } else {\r\n options[t] = cols[t]\r\n }\r\n }\r\n\r\n if (!options.align) {\r\n options.align = 'center'\r\n }\r\n\r\n return options\r\n}\r\n\r\n// 提供表格实例给子组件(保留与 Form 的耦合)\r\nprovide('getTableInstantce', () => ({\r\n ...(instance?.setupState || {}),\r\n tableRef,\r\n toggleSelection: (rows: Record<string, unknown>[]) => {\r\n if (rows) {\r\n rows.forEach((row) => {\r\n tableRef.value?.toggleRowSelection(row)\r\n })\r\n } else {\r\n tableRef.value?.clearSelection()\r\n }\r\n },\r\n clearAllSelection: () => clearAllSelection(tableRef.value),\r\n refsInstance: () => tableRef.value,\r\n httpRequestInstance\r\n}))\r\n\r\n// 暴露方法\r\ndefineExpose({\r\n httpRequestInstance,\r\n getSelectionRows: () => multipleSelection.value,\r\n clearSelection: () => tableRef.value?.clearSelection?.(),\r\n clearAllSelection: () => clearAllSelection(tableRef.value),\r\n refresh: () => tableRef.value?.doLayout?.()\r\n})\r\n</script>\r\n\r\n<style lang=\"scss\" scoped>\r\n.el-dp_tables {\r\n height: auto;\r\n :deep(.el-table__body-wrapper) {\r\n height: auto;\r\n }\r\n}\r\n\r\n.table_component {\r\n width: 100%;\r\n display: flex;\r\n flex-direction: column;\r\n justify-content: space-between;\r\n align-items: flex-start;\r\n overflow: hidden;\r\n}\r\n\r\n.table_containers {\r\n flex: 1;\r\n width: 100%;\r\n height: 100%;\r\n display: flex;\r\n justify-content: space-between;\r\n flex-direction: column;\r\n align-items: flex-start;\r\n position: relative;\r\n}\r\n\r\n.pagination_page {\r\n width: 100%;\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n}\r\n\r\n.btn-slot {\r\n width: 100%;\r\n\r\n .headerBar {\r\n box-sizing: border-box;\r\n background-color: #fff;\r\n border-radius: 6px;\r\n\r\n :deep(.el-form-item--small .el-form-item__label) {\r\n box-sizing: border-box;\r\n }\r\n }\r\n}\r\n\r\n.tableContainer {\r\n border-radius: 0px;\r\n transition: all 1.5s;\r\n flex: 1;\r\n width: 100%;\r\n display: flex;\r\n justify-content: space-between;\r\n flex-direction: column;\r\n align-items: flex-start;\r\n\r\n .table_inner_containers {\r\n width: 100%;\r\n }\r\n\r\n :deep(.el-table__empty-block) {\r\n width: 100% !important;\r\n margin: 32px 0;\r\n font-size: 14px;\r\n line-height: 1.5715;\r\n\r\n .el-table__empty-text {\r\n width: auto !important;\r\n }\r\n\r\n .ant-empty-image {\r\n height: 40px;\r\n margin-bottom: 8px;\r\n\r\n .ant-empty-img-simple-ellipse {\r\n fill: #f5f5f5;\r\n }\r\n\r\n .ant-empty-img-simple-g {\r\n stroke: #d9d9d9;\r\n }\r\n\r\n .ant-empty-img-simple-path {\r\n fill: #fafafa;\r\n }\r\n }\r\n\r\n .ant-empty-description {\r\n line-height: 1.5715;\r\n color: rgba(0, 0, 0, 0.25);\r\n }\r\n }\r\n\r\n :deep(.el-tag) {\r\n height: 20px;\r\n padding: 0 7px;\r\n line-height: 20px;\r\n background: #fafafa;\r\n border: none;\r\n border-radius: 4px;\r\n\r\n &.el-tag--info {\r\n color: rgba(0, 0, 0, 0.85);\r\n }\r\n\r\n &.el-tag--success {\r\n color: #52c41a;\r\n background: #f6ffed;\r\n border-color: #b7eb8f;\r\n }\r\n }\r\n}\r\n</style>\r\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'\r\nimport { isObject, findValueByKey, wrapPromise } from '../utils/shared'\r\nimport type { FormItemOption, ApiParams } from '../types'\r\n\r\nexport interface RequestConfig {\r\n httpRequest?: (params: Record<string, unknown>) => Promise<unknown>\r\n apiParams?: ApiParams\r\n success?: (res: Record<string, unknown>) => void\r\n fail?: (err: unknown) => void\r\n [key: string]: unknown\r\n}\r\n\r\nexport function useFormRequest(httpRequestGlobal?: (params: Record<string, unknown>) => Promise<unknown>) {\r\n const queryTableListMethod = (params: Record<string, unknown>, options: RequestConfig = {}, option?: FormItemOption) => {\r\n const { success, fail, ..._params } = options || {}\r\n if (isObject(options.apiParams) && Object.keys(options.apiParams).length && options.apiParams.url) {\r\n const initFormParams = { ...params, ...toRaw(unref(options.apiParams.model || {})) }\r\n const requestOption = { ...toRaw(unref(options.apiParams.options || {})) }\r\n if (options.apiParams.method) {\r\n requestOption.method = options.apiParams.method\r\n }\r\n\r\n const requestPayload = {\r\n url: options.apiParams.url,\r\n headers: { ...(options.apiParams.headers || {}) },\r\n formParams: initFormParams,\r\n ...requestOption\r\n }\r\n\r\n const requestFn = options.httpRequest || httpRequestGlobal\r\n if (!requestFn) return\r\n\r\n requestFn(requestPayload)\r\n .then((res) => {\r\n // 支持对象和数组两种响应格式(兼容直接返回数组的接口)\r\n if (typeof success === 'function' && res && (isObject(res) || Array.isArray(res))) {\r\n success(res as Record<string, unknown>)\r\n }\r\n })\r\n .catch((e) => {\r\n if (typeof fail === 'function') {\r\n fail(e)\r\n }\r\n })\r\n }\r\n }\r\n\r\n const checkQueryFields = (obj: Record<string, unknown>): boolean => {\r\n const checkListKey = ['total', 'pageSize', 'current', 'listData']\r\n if (isObject(obj)) {\r\n return Object.keys(obj).every((it) => {\r\n return checkListKey.find((its) => its === it) && obj[it] && typeof obj[it] === 'string'\r\n })\r\n }\r\n return false\r\n }\r\n\r\n const configFormField = (options: Record<string, unknown> = {}, fieldFieldOutput?: (defaults: Record<string, string>) => Record<string, string>) => {\r\n if (isObject(options.configFormOut) && Object.keys(options.configFormOut).length && checkQueryFields(options.configFormOut as Record<string, unknown>)) {\r\n return options.configFormOut as Record<string, string>\r\n }\r\n\r\n if (typeof fieldFieldOutput === 'function') {\r\n const configFields = fieldFieldOutput({\r\n total: 'records',\r\n pageSize: 'pageSize',\r\n current: 'pageNo',\r\n listData: 'rows'\r\n })\r\n if (checkQueryFields(configFields)) {\r\n return configFields\r\n }\r\n }\r\n\r\n return {\r\n total: 'records',\r\n pageSize: 'pageSize',\r\n current: 'pageNo',\r\n listData: 'rows'\r\n }\r\n }\r\n\r\n const formatConfigOut = (row: Record<string, unknown>, keyList: string[], options: Record<string, unknown> = {}, fieldFieldOutput?: (defaults: Record<string, string>) => Record<string, string>) => {\r\n const configFieldOut = configFormField(options, fieldFieldOutput)\r\n const configDataOption: Record<string, unknown> = {}\r\n\r\n // 如果 API 响应本身就是数组,直接作为 listData 使用(兼容直接返回数组的接口)\r\n if (keyList.includes('listData') && Array.isArray(row)) {\r\n configDataOption['listData'] = row\r\n return configDataOption\r\n }\r\n\r\n if (isObject(configFieldOut) && Object.keys(configFieldOut).length) {\r\n for (const [key, value] of Object.entries(configFieldOut)) {\r\n const isKeyUsed = keyList.findIndex((it) => it === key)\r\n if (isKeyUsed === -1) continue\r\n\r\n const rowValue = row[value as string]\r\n if (rowValue !== undefined && rowValue !== null) {\r\n if (key === 'listData') {\r\n configDataOption[key] = Array.isArray(rowValue) ? rowValue : []\r\n } else {\r\n configDataOption[key] = typeof rowValue === 'number' ? rowValue : parseInt(rowValue as string, 10) || 0\r\n }\r\n } else {\r\n const resultData = findValueByKey(row, value as string)\r\n if (key === 'listData') {\r\n configDataOption[key] = Array.isArray(resultData) ? resultData : []\r\n } else {\r\n configDataOption[key] = typeof resultData === 'number' ? resultData : parseInt(resultData as string, 10) || 0\r\n }\r\n }\r\n }\r\n }\r\n return configDataOption\r\n }\r\n\r\n const httpRequestFormInstance = (model: Record<string, unknown>, options: RequestConfig, rows: FormItemOption, fieldFieldOutput?: (defaults: Record<string, string>) => Record<string, string>) => {\r\n return new Promise<{ data: Record<string, unknown>; configRows: Record<string, unknown> }>((resolve, reject) => {\r\n nextTick(() => {\r\n queryTableListMethod(\r\n { pageIndex: 1, pageSize: 1000, ...(model || {}) },\r\n {\r\n ...(options || {}),\r\n success: (res) => {\r\n const configRows = formatConfigOut(res, ['total', 'listData'], rows as unknown as Record<string, unknown>, fieldFieldOutput)\r\n resolve({ data: res, configRows })\r\n },\r\n fail: (err) => {\r\n reject(err)\r\n }\r\n },\r\n rows\r\n )\r\n })\r\n })\r\n }\r\n\r\n const getEveryFormQueryField = async (rowsList: FormItemOption[], fieldFieldOutput?: (defaults: Record<string, string>) => Record<string, string>) => {\r\n try {\r\n if (!Array.isArray(rowsList)) return []\r\n const apiUrlList = rowsList.filter((it) => it && it.apiParams && isObject(it.apiParams) && it.apiParams.url)\r\n const apiResult: { prop: string; listData: unknown[] }[] = []\r\n\r\n const wrappedPromises = apiUrlList.map((option) => {\r\n const { httpRequest } = option\r\n const promiseThen = httpRequestFormInstance(\r\n { ...(option.apiParams?.model || {}) },\r\n { httpRequest, apiParams: option.apiParams, ...(option.apiParams?.options || {}) },\r\n option,\r\n fieldFieldOutput\r\n )\r\n return wrapPromise(promiseThen)\r\n })\r\n\r\n const results = await Promise.all(wrappedPromises)\r\n\r\n results.forEach((item, index) => {\r\n if (item.status === 'fulfilled') {\r\n const { configRows, data } = item.value\r\n const option = apiUrlList[index]\r\n const listenToCallBack = option?.listenToCallBack as Record<string, (params: unknown) => unknown> | undefined\r\n\r\n /**\r\n * 优先使用 listenToCallBack.crtn 格式化数据\r\n * crtn 接收 API 原始响应 data,返回 [{ label, value }] 格式的选项数据\r\n * data 是 httpRequest 返回的 { data: any } 中的 data 字段\r\n */\r\n let listData: unknown[] = []\r\n if (listenToCallBack?.crtn) {\r\n listData = listenToCallBack.crtn(data) as unknown[]\r\n }\r\n\r\n // 如果 crtn 未配置或返回空,则降级使用 callOptionListFormat 或格式化后的数据\r\n const newListOptions =\r\n Array.isArray(listData) && listData.length > 0\r\n ? listData\r\n : typeof option?.callOptionListFormat === 'function'\r\n ? option.callOptionListFormat(configRows?.listData as unknown[] || option?.dataOptions || [])\r\n : undefined\r\n\r\n apiResult.push({\r\n prop: apiUrlList[index].prop,\r\n listData: Array.isArray(newListOptions) ? newListOptions : (configRows?.listData as unknown[] || apiUrlList[index]?.dataOptions || [])\r\n })\r\n }\r\n })\r\n return apiResult\r\n } catch (e) {\r\n return []\r\n }\r\n }\r\n\r\n return {\r\n queryTableListMethod,\r\n getEveryFormQueryField,\r\n formatConfigOut,\r\n configFormField\r\n }\r\n}\r\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>\r\n <el-form :ref=\"setFormRef\" v-bind=\"formProps\" class=\"es-form\">\r\n <div class=\"flex-center\">\r\n <el-row v-bind=\"rowLayout\">\r\n <template v-for=\"(item, index) in formItem\" :key=\"item.prop\">\r\n <el-col v-show=\"!item?.isFold\" :span=\"item.span || 6\">\r\n <el-form-item\r\n :label=\"item.label\"\r\n v-bind=\"initFormItemOptions(item.formItemOptions || {})\"\r\n :prop=\"item.prop\"\r\n @click.stop=\"() => {}\"\r\n >\r\n <template v-if=\"item.formtype\">\r\n <RenderDomForm :row=\"item\" :render=\"formInputComponents(item)\" :index=\"index\" :model=\"model\" />\r\n </template>\r\n <template v-else>\r\n <RenderDomForm :row=\"item\" :render=\"item.render\" :index=\"index\" :model=\"model\" />\r\n </template>\r\n </el-form-item>\r\n </el-col>\r\n </template>\r\n\r\n <template v-if=\"!isBtnHidden\">\r\n <template v-if=\"isRenderBtn\">\r\n <RenderBtn\r\n :row=\"{ isFold: isFold, folded, getBtnColSpan, getRowColsAlgorithm, changeFolded, refsForm: formInstance }\"\r\n :form-model=\"model\"\r\n :form-item-list=\"formItem\"\r\n :render=\"renderBtn\"\r\n />\r\n </template>\r\n <el-col v-else :span=\"btnColSpanRow ? 24 : getBtnColSpan\">\r\n <div v-if=\"btnColSpanRow && configBtn.length\" class=\"buttonOperate leftRightBtn\">\r\n <div class=\"btn-left\">\r\n <el-form-item label-width=\"0px\" class=\"btn-formItem\">\r\n <el-button\r\n v-for=\"(it, inx) in colRightLeftList.colLeftBtn\"\r\n v-bind=\"filterOptions(it)\"\r\n :icon=\"getCompIcon(it.icon)\"\r\n :disabled=\"typeof it.disabled === 'function' ? it.disabled() || false : it.disabled || false\"\r\n @click=\"() => it.click(model, refs, getTableInstant?.httpRequestInstance)\"\r\n :key=\"it.key || inx\"\r\n >\r\n {{ it.name }}\r\n </el-button>\r\n </el-form-item>\r\n </div>\r\n <div class=\"btn-right\">\r\n <el-form-item label-width=\"0px\" class=\"btn-formItem\">\r\n <el-button\r\n v-for=\"(it, inx) in colRightLeftList.colRightBtn\"\r\n v-bind=\"filterOptions(it)\"\r\n :icon=\"getCompIcon(it.icon)\"\r\n :disabled=\"typeof it.disabled === 'function' ? it.disabled() || false : it.disabled || false\"\r\n @click=\"() => clickBtn(it)\"\r\n :key=\"it.key || inx\"\r\n >\r\n {{ it.name }}\r\n </el-button>\r\n <el-button\r\n v-if=\"isFold\"\r\n link\r\n type=\"primary\"\r\n :icon=\"getCompIcon(folded ? 'ArrowDown' : 'ArrowUp')\"\r\n style=\"padding-left: 0; border: none\"\r\n @click=\"changeFolded\"\r\n >\r\n {{ folded ? '展开' : '收起' }}\r\n </el-button>\r\n <el-dropdown placement=\"bottom-start\" v-if=\"getSetOptionsStatus\">\r\n <el-button\r\n link\r\n type=\"primary\"\r\n style=\"margin-left: 2px; margin-right: 5px; outline: none\"\r\n :icon=\"getCompIcon('Tools')\"\r\n />\r\n <template #dropdown>\r\n <el-dropdown-menu>\r\n <el-dropdown-item @click=\"handleCustomerForm\">自定义查询</el-dropdown-item>\r\n <el-dropdown-item @click=\"handleTableItemOption\">自定义表格</el-dropdown-item>\r\n <el-dropdown-item @click=\"handleRefresh\">重置(刷新)</el-dropdown-item>\r\n </el-dropdown-menu>\r\n </template>\r\n </el-dropdown>\r\n </el-form-item>\r\n </div>\r\n </div>\r\n <el-form-item\r\n v-if=\"!btnColSpanRow && configBtn.length\"\r\n :label=\"' '\"\r\n :label-width=\"formProps.labelBtnWidth ? formProps.labelBtnWidth : formProps.labelWidth\"\r\n :class=\"{ formItemCols: btnColSpanRow ? true : getBtnColSpan === 24 }\"\r\n class=\"btn-formItem\"\r\n >\r\n <div class=\"buttonOperate\" :style=\"{ 'text-align': getBtnColSpan === 24 ? 'right' : 'left' }\">\r\n <template v-if=\"configBtn.length\">\r\n <el-button\r\n v-for=\"(it, inx) in configBtn\"\r\n v-bind=\"filterOptions(it)\"\r\n :icon=\"getCompIcon(it.icon)\"\r\n :disabled=\"typeof it.disabled === 'function' ? it.disabled() || false : it.disabled || false\"\r\n @click=\"() => it?.click(model, refs, getTableInstant?.httpRequestInstance)\"\r\n :key=\"it.key || inx\"\r\n >\r\n {{ it.name }}\r\n </el-button>\r\n </template>\r\n <el-button\r\n v-if=\"isFold\"\r\n type=\"primary\"\r\n link\r\n :icon=\"getCompIcon(folded ? 'ArrowDown' : 'ArrowUp')\"\r\n style=\"padding-left: 0; border: none\"\r\n @click=\"changeFolded\"\r\n >\r\n {{ folded ? '展开' : '收起' }}\r\n </el-button>\r\n <el-dropdown placement=\"bottom-start\" v-if=\"getSetOptionsStatus\">\r\n <el-button\r\n link\r\n type=\"primary\"\r\n style=\"margin-left: 2px; margin-right: 5px; outline: none\"\r\n :icon=\"getCompIcon('Tools')\"\r\n />\r\n <template #dropdown>\r\n <el-dropdown-menu>\r\n <el-dropdown-item @click=\"handleCustomerForm\">自定义查询</el-dropdown-item>\r\n <el-dropdown-item @click=\"handleTableItemOption\">自定义表格</el-dropdown-item>\r\n <el-dropdown-item @click=\"handleRefresh\">重置(刷新)</el-dropdown-item>\r\n </el-dropdown-menu>\r\n </template>\r\n </el-dropdown>\r\n </div>\r\n </el-form-item>\r\n </el-col>\r\n </template>\r\n </el-row>\r\n </div>\r\n </el-form>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nexport default { name: 'EsForm' }\r\n</script>\r\n\r\n<script setup lang=\"ts\">\r\nimport { ref, computed, watch, inject, getCurrentInstance, nextTick, h, defineComponent } from 'vue'\r\nimport {\r\n ElRow,\r\n ElCol,\r\n ElFormItem,\r\n ElForm,\r\n ElButton,\r\n ElDropdownMenu,\r\n ElDropdownItem,\r\n ElDropdown,\r\n ElInput\r\n} from 'element-plus'\r\nimport * as ElementPlusIconsVue from '@element-plus/icons-vue'\r\nimport { useFormInputs } from '../../../composables/use-form-inputs'\r\nimport { useFormLayout } from '../../../composables/use-form-layout'\r\nimport { useFormRequest } from '../../../composables/use-form-request'\r\nimport { isObject } from '../../../utils/shared'\r\nimport useDialog from '../../es-dialog/src/use-dialog'\r\nimport EsTable from '../../es-table'\r\nimport type { FormItemOption, BtnConfig, LayoutFormProps } from '../../../types'\r\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n model: Record<string, unknown>\r\n formItemList: FormItemOption[]\r\n layoutFormProps?: LayoutFormProps\r\n configBtn?: BtnConfig[]\r\n renderBtn?: Function | boolean\r\n btnColSpanRow?: boolean\r\n rules?: Record<string, unknown>\r\n fieldFieldOutput?: (defaults: Record<string, string>) => Record<string, string>\r\n }>(),\r\n {\r\n model: () => ({}),\r\n formItemList: () => [],\r\n layoutFormProps: () => ({}),\r\n configBtn: () => [],\r\n renderBtn: false,\r\n btnColSpanRow: true,\r\n rules: () => ({})\r\n }\r\n)\r\n\r\nconst emit = defineEmits<{\r\n confirm: [formRef: unknown, model: Record<string, unknown>]\r\n reset: [formRef: unknown, model: Record<string, unknown>]\r\n}>()\r\n\r\nconst instance = getCurrentInstance()\r\nconst $esPlusForm = inject<Record<string, unknown>>('$esPlusForm', {})\r\n\r\n// 保留与 Table 的耦合(同时支持 inject 和 instance.ctx 两种获取方式)\r\nconst injectedTableInstant = inject<(() => any) | null>('getTableInstantce', null)\r\nconst getTableInstant = computed(() => {\r\n if (injectedTableInstant) {\r\n return typeof injectedTableInstant === 'function' ? injectedTableInstant() : injectedTableInstant\r\n }\r\n const ctx = instance?.ctx as Record<string, unknown>\r\n return typeof ctx?.getTableInstantce === 'function' ? ctx?.getTableInstantce() : ctx?.getTableInstantce\r\n})\r\n\r\nconst isParentTable = computed(() => {\r\n return !!(getTableInstant.value && Object.keys(getTableInstant.value).length)\r\n})\r\n\r\n// 图标扩展\r\nconst extendedIcon = Object.fromEntries(Object.entries(ElementPlusIconsVue))\r\nconst getCompIcon = (key?: string) => (key ? extendedIcon[key] || key : undefined)\r\nconst filterOptions = (it: BtnConfig) => {\r\n const { icon, ...opt } = it as Record<string, unknown>\r\n return opt\r\n}\r\n\r\n// Refs\r\nconst refs = ref<unknown>(null)\r\nconst formInstance = ref<Record<string, unknown>>({})\r\nconst formItemRowsList = ref<FormItemOption[]>(props.formItemList)\r\n\r\nconst setFormRef = (el: unknown) => {\r\n if (el) refs.value = el\r\n}\r\n\r\n// Composables\r\nconst { formInputComponents } = useFormInputs()\r\nconst httpRequestGlobal = ($esPlusForm?.$httpRequest as (params: Record<string, unknown>) => Promise<unknown>) || undefined\r\nconst fieldFieldOutputGlobal = (props.fieldFieldOutput || $esPlusForm?.fieldFieldOutput) as ((defaults: Record<string, string>) => Record<string, string>) | undefined\r\nconst { getEveryFormQueryField } = useFormRequest(httpRequestGlobal)\r\n\r\n// Break circular dependency: formLayoutRef is populated after useFormLayout\r\nconst formLayoutRef = ref<Record<string, unknown>>(props.layoutFormProps?.fromLayProps || {})\r\nconst formProps = computed(() => ({\r\n ...formLayoutRef.value,\r\n model: props.model,\r\n rules: props.rules,\r\n validateOnRuleChange: false\r\n}))\r\n\r\n// 缓存已加载数据的表单项 prop,避免 computed 重新计算时重复调用接口\r\nconst loadedApiProps = ref<Set<string>>(new Set())\r\n\r\nwatch(\r\n () => props.formItemList,\r\n async (val) => {\r\n const list = Array.isArray(val) ? val : []\r\n // 只加载 isInitRun !== false 且尚未加载过数据的表单项\r\n const needLoadList = list.filter((it) => it && it.isInitRun !== false && !loadedApiProps.value.has(it.prop))\r\n if (!needLoadList.length) {\r\n // 无新表单项需要加载,保留已有的 dataOptions\r\n formItemRowsList.value = list.map((it) => {\r\n if (!it) return null\r\n const existing = formItemRowsList.value.find((old) => old && old.prop === it.prop)\r\n return existing?.dataOptions?.length ? { ...it, dataOptions: existing.dataOptions } : it\r\n }).filter((it): it is FormItemOption => !!it)\r\n return\r\n }\r\n const rows = await getEveryFormQueryField(needLoadList, fieldFieldOutputGlobal)\r\n // 标记已加载的 prop\r\n needLoadList.forEach((it) => loadedApiProps.value.add(it.prop))\r\n formItemRowsList.value = list\r\n .map((it) => {\r\n if (!it) return null\r\n const resultApiOption = rows.find((item) => item && item.prop === it.prop)\r\n const existing = formItemRowsList.value.find((old) => old && old.prop === it.prop)\r\n // 优先使用新加载的数据,其次保留已有数据\r\n if (resultApiOption) return { ...it, dataOptions: resultApiOption.listData }\r\n if (existing?.dataOptions?.length) return { ...it, dataOptions: existing.dataOptions }\r\n return it\r\n })\r\n .filter((it): it is FormItemOption => !!it)\r\n },\r\n { immediate: true, deep: true }\r\n)\r\n\r\nconst formItemListFilter = computed(() => {\r\n const list = formItemRowsList.value || []\r\n return list\r\n .map((it) => (it ? { ...it, span: it.span || 6, dataOptions: it.dataOptions || [] } : null))\r\n .filter((it): it is FormItemOption => {\r\n if (!it) return false\r\n if (it.isHidden && typeof it.isHidden === 'function') {\r\n return !it.isHidden(props.model, it, formProps.value)\r\n }\r\n return true\r\n })\r\n})\r\n\r\nconst {\r\n folded,\r\n isBtnHidden,\r\n rowLayout,\r\n formLayout,\r\n getSetOptionsStatus,\r\n getRowColsAlgorithm,\r\n isFold,\r\n getBtnColSpan,\r\n formItem,\r\n changeFolded\r\n} = useFormLayout({\r\n layoutFormProps: props.layoutFormProps,\r\n get formItemList() { return formItemListFilter.value }\r\n})\r\n\r\nwatch(\r\n formLayout,\r\n (val) => {\r\n formLayoutRef.value = val\r\n },\r\n { immediate: true }\r\n)\r\n\r\nconst colRightLeftList = computed(() => ({\r\n colRightBtn: props.configBtn.filter((it) => it.direction === 'right' || !it.direction),\r\n colLeftBtn: props.configBtn.filter((it) => it.direction === 'left')\r\n}))\r\n\r\nconst isRenderBtn = computed(() => typeof props.renderBtn === 'function')\r\n\r\nconst clickBtn = async (it: BtnConfig) => {\r\n if (it.triggerEvent && ['query', 'rest'].includes(it.key || '')) {\r\n queryTableRequest(props.model, refs.value as { resetFields: () => void }, it.key)\r\n } else {\r\n\r\n // await refs.value.validate()\r\n if (it.key === 'rest' && refs.value) {\r\n refs.value.resetFields()\r\n }\r\n it.click?.(props.model, refs.value, getTableInstant.value?.httpRequestInstance)\r\n }\r\n}\r\n\r\nconst queryTableRequest = async (model: Record<string, unknown>, formRef: { resetFields: () => void; validate: () => Promise<boolean> } | null, key?: string) => {\r\n if (key === 'query') {\r\n if (isParentTable.value) {\r\n getTableInstant.value?.httpRequestInstance?.(model)\r\n }\r\n // else if (formRef) {\r\n // await formRef.validate()\r\n // }\r\n } else if (key === 'rest' && formRef) {\r\n if (isParentTable.value) {\r\n getTableInstant.value?.httpRequestInstance?.(model)\r\n }\r\n formRef.resetFields()\r\n }\r\n}\r\n\r\nconst initFormItemOptions = (opts: Record<string, unknown>) => {\r\n if (isParentTable.value) {\r\n const { style, ...rest } = opts\r\n return { style: { marginBottom: '10px', ...(style as Record<string, unknown>) }, ...rest }\r\n }\r\n return opts\r\n}\r\n\r\nconst confirm = () => emit('confirm', refs.value, props.model)\r\nconst reset = () => emit('reset', refs.value, props.model)\r\n\r\n// 自定义弹窗\r\nconst createDialogInstance = (() =>\r\n instance?.ctx?.dialogInstance ? instance.ctx.dialogInstance() : useDialog)()\r\nconst customerForm = createDialogInstance()\r\nconst customerTable = createDialogInstance()\r\n\r\nconst handleRefresh = () => {\r\n // 保留原有逻辑\r\n}\r\n\r\nconst getFormRowsFun = () => {\r\n return {\r\n data: formItemRowsList.value.map((it) => ({\r\n ...it,\r\n label: it.label,\r\n prop: it.prop,\r\n isHidden: !!it.isHidden,\r\n width: it.width\r\n })),\r\n columns: [\r\n { type: 'selection', width: 50 },\r\n { label: '名称(列)', key: 'label' },\r\n { label: '属性(Key)', key: 'prop' },\r\n {\r\n label: '列宽',\r\n width: 180,\r\n render: (_text: unknown, row: Record<string, unknown>) => {\r\n return h('div', [\r\n h(ElInput, {\r\n size: 'small',\r\n maxlength: 3,\r\n formatter: (value: string) => value.replace(/^0|[^0-9]/g, ''),\r\n modelValue: row.width,\r\n 'onUpdate:modelValue': (val: unknown) => {\r\n row.width = val\r\n }\r\n }, {\r\n prepend: () => '宽度',\r\n append: () => 'px'\r\n })\r\n ])\r\n }\r\n }\r\n ]\r\n }\r\n}\r\n\r\nconst getCustomerTableInfo = () => {\r\n return {\r\n dataSource: [],\r\n columns: [\r\n { type: 'selection', width: 50 },\r\n { label: '名称(列)', key: 'label' },\r\n { label: '属性(Key)', key: 'tableProp' },\r\n {\r\n label: '列宽',\r\n width: 180,\r\n render: (_text: unknown, row: Record<string, unknown>) => {\r\n return h('div', [\r\n h(ElInput, {\r\n size: 'small',\r\n maxlength: 3,\r\n formatter: (value: string) => value.replace(/^0|[^0-9]/g, ''),\r\n modelValue: row.width,\r\n 'onUpdate:modelValue': (val: unknown) => {\r\n row.width = val\r\n }\r\n }, {\r\n prepend: () => '宽度',\r\n append: () => 'px'\r\n })\r\n ])\r\n }\r\n }\r\n ]\r\n }\r\n}\r\n\r\nconst handleCustomerForm = () => {\r\n const formRows = getFormRowsFun()\r\n customerForm({\r\n title: '自定义查询',\r\n width: '800px',\r\n isDraggable: true,\r\n render: () =>\r\n h(EsTable, {\r\n dataSource: formRows.data,\r\n columns: formRows.columns,\r\n options: {\r\n multiSelect: true,\r\n expand: false,\r\n snIndex: false,\r\n loading: false,\r\n border: true,\r\n size: 'small'\r\n },\r\n pagination: {\r\n pageSize: 10,\r\n current: 1,\r\n total: formRows.data?.length || 0\r\n }\r\n }),\r\n configBtn: [\r\n {\r\n name: '取消',\r\n icon: 'Close',\r\n click: (_instance: unknown, { close }: { close: () => void }) => close()\r\n },\r\n {\r\n name: '确认',\r\n type: 'primary',\r\n icon: 'Check',\r\n click: (_instance: unknown, { close }: { close: () => void }) => close()\r\n }\r\n ]\r\n })\r\n}\r\n\r\nconst handleTableItemOption = () => {\r\n const formRows = getCustomerTableInfo()\r\n customerTable({\r\n title: '自定义表格',\r\n width: '800px',\r\n render: () =>\r\n h(EsTable, {\r\n dataSource: formRows.dataSource,\r\n columns: formRows.columns\r\n })\r\n })\r\n}\r\n\r\n// 生命周期\r\nnextTick(() => {\r\n formInstance.value = refs.value as Record<string, unknown>\r\n ;(instance?.ctx as Record<string, unknown>)?.bodyFormInstance?.(formInstance.value)\r\n})\r\n\r\n// 子组件定义\r\nconst RenderBtn = defineComponent({\r\n props: {\r\n row: Object,\r\n formItemList: Array,\r\n formModel: Object,\r\n render: Function,\r\n ellipsis: Boolean\r\n },\r\n setup(props) {\r\n return () => {\r\n const { formItemList, formModel, row } = props\r\n const renderContent = props.render?.(row, formModel, formItemList, h) || ''\r\n return typeof renderContent === 'string' ? h('span', renderContent) : renderContent\r\n }\r\n }\r\n})\r\n\r\nconst RenderDomForm = defineComponent({\r\n props: {\r\n row: Object,\r\n index: Number,\r\n datakey: String,\r\n render: Function,\r\n model: Object,\r\n ellipsis: Boolean\r\n },\r\n setup(props) {\r\n return () => {\r\n const { row, index, model } = props\r\n const renderContent = props.render?.(h, model, { row, index }) || ''\r\n return typeof renderContent === 'string' ? h('span', renderContent) : renderContent\r\n }\r\n }\r\n})\r\n\r\n// 暴露给外部的方法,用于手动触发指定表单项的请求\r\nconst formItmeRequestInstance = async (propsList: string[]) => {\r\n const list = formItemListFilter.value\r\n const targetItems = list.filter((it) => it && propsList.includes(it.prop))\r\n if (!targetItems.length) return\r\n\r\n const rows = await getEveryFormQueryField(targetItems, fieldFieldOutputGlobal)\r\n rows.forEach((resultApiOption) => {\r\n if (!resultApiOption) return\r\n const itemIndex = formItemRowsList.value.findIndex((it) => it && it.prop === resultApiOption.prop)\r\n if (itemIndex !== -1) {\r\n formItemRowsList.value[itemIndex] = {\r\n ...formItemRowsList.value[itemIndex],\r\n dataOptions: resultApiOption.listData as Array<{ label: string; value: unknown }>\r\n }\r\n }\r\n })\r\n}\r\n\r\n// 暴露组件实例方法\r\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 }\r\n\r\ndefineExpose({\r\n formItmeRequestInstance,\r\n getFormRef,\r\n validate: () => getFormRef()?.validate(),\r\n resetFields: () => getFormRef()?.resetFields(),\r\n clearValidate: (props?: string | string[]) => getFormRef()?.clearValidate(props),\r\n validateField: (props: string | string[]) => getFormRef()?.validateField(props),\r\n scrollToField: (prop: string) => getFormRef()?.scrollToField(prop)\r\n})\r\n</script>\r\n\r\n<style lang=\"scss\" scoped>\r\n.es-form {\r\n :deep(.el-form-item) {\r\n margin-bottom: 18px;\r\n }\r\n\r\n :deep(.el-form-item__label) {\r\n font-weight: 500;\r\n }\r\n\r\n .buttonOperate {\r\n display: flex;\r\n align-items: center;\r\n flex-wrap: wrap;\r\n gap: 8px;\r\n }\r\n\r\n .leftRightBtn {\r\n display: flex;\r\n justify-content: space-between;\r\n align-items: center;\r\n width: 100%;\r\n\r\n .btn-left,\r\n .btn-right {\r\n display: flex;\r\n align-items: center;\r\n }\r\n }\r\n\r\n .btn-formItem {\r\n margin-bottom: 0;\r\n }\r\n\r\n .formItemCols {\r\n width: 100%;\r\n }\r\n}\r\n</style>\r\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","t","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","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]}
|
|
1
|
+
{"version":3,"file":"es-plus.umd.cjs","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 <el-table-column\n v-for=\"(item, index) in cols.groups\"\n :key=\"item.prop || item.key || index\"\n v-bind=\"columnBindAttr({ ...item, columnIndex: index })\"\n >\n <template v-if=\"item.render && typeof item.render === 'function'\" #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 <template v-else-if=\"item.scopedSlots && item.scopedSlots.customRender\" #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>\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>\r\n <el-config-provider :locale=\"locale\">\r\n <div :ref=\"setTableContainer\" class=\"table_component\" :style=\"{ [heightType]: tabHeight }\">\r\n <div class=\"table_containers\">\r\n <div\r\n v-if=\"showHeaderBar\"\r\n ref=\"headBarRef\"\r\n class=\"btn-slot\"\r\n :style=\"slotStyles.value && slotStyles.type === 'object' && slotStyles.value\"\r\n :class=\"slotStyles.type === 'string' ? slotStyles.value : { slotClass: slotState && slotStyles.type !== 'object' }\"\r\n >\r\n <div class=\"headerBar\" v-if=\"hasDefaultSlot\" :style=\"{ paddingBottom: hasDefaultSlot ? '10px' : '0px' }\">\r\n <slot />\r\n </div>\r\n </div>\r\n <div v-loading=\"loadStatus\" element-loading-background=\"rgba(0, 0, 0, 0.03)\" element-loading-text=\"努力加载中...\" class=\"page-loading-con tableContainer\">\r\n <div class=\"table_inner_containers\">\r\n <table-btns\r\n ref=\"tbBtnRef\"\r\n :instance=\"{ tableRef: instance, formInstance: formInstance }\"\r\n v-if=\"(options.configBtn && options.configBtn.length) || options.leftText\"\r\n :btn-config=\"options.configBtn\"\r\n :left-text=\"options.leftText\"\r\n />\r\n <el-table\r\n class=\"el-dp_tables\"\r\n :id=\"tableId\"\r\n :key=\"tableId\"\r\n ref=\"tableRef\"\r\n style=\"width: 100%\"\r\n v-bind=\"tableBindAttrs\"\r\n :data=\"dataSource\"\r\n @sort-change=\"changeTableSort\"\r\n @selection-change=\"handleTableSelectionChange\"\r\n >\r\n <template #empty>\r\n <div class=\"ant-empty ant-empty-normal\">\r\n <div class=\"ant-empty-image\">\r\n <svg class=\"ant-empty-img-simple\" width=\"64\" height=\"41\" viewBox=\"0 0 64 41\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <g transform=\"translate(0 1)\" fill=\"none\" fill-rule=\"evenodd\">\r\n <ellipse class=\"ant-empty-img-simple-ellipse\" cx=\"32\" cy=\"33\" rx=\"32\" ry=\"7\" />\r\n <g class=\"ant-empty-img-simple-g\" fill-rule=\"nonzero\">\r\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\" />\r\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\" />\r\n </g>\r\n </g>\r\n </svg>\r\n </div>\r\n <div class=\"ant-empty-description\">暂无数据</div>\r\n </div>\r\n </template>\r\n <column-item v-for=\"(cols, index) in filteredColumns\" :key=\"cols.prop || cols.key || index\" :cols=\"{ ...cols, columnIndex: index }\">\r\n <template v-if=\"cols.scopedSlots && cols.scopedSlots.customRender\" #[cols.scopedSlots.customRender]=\"{ scope }\">\r\n <slot v-bind=\"{ ...cols, columnIndex: index, row: scope.row, column: scope.column }\" :name=\"cols.scopedSlots.customRender\" :scope=\"scope\" />\r\n </template>\r\n </column-item>\r\n </el-table>\r\n </div>\r\n <div\r\n v-if=\"showPagination\"\r\n ref=\"paginationRef\"\r\n class=\"pagination_page\"\r\n :style=\"{\r\n position: heightType === 'height' ? 'absolute' : 'static',\r\n bottom: '0px',\r\n left: '0px',\r\n zIndex: 5,\r\n background: '#fff'\r\n }\"\r\n >\r\n <el-pagination\r\n :background=\"paginationBackground\"\r\n :size=\"paginationIsSmall ? 'small' : paginationConfig.size\"\r\n :total=\"paginationConfig.total\"\r\n v-model:page-size=\"paginationConfig.pageSize\"\r\n :page-sizes=\"paginationPageSizes\"\r\n v-model:current-page=\"paginationConfig.current\"\r\n :layout=\"layout\"\r\n style=\"padding: 0; margin: 10px 0; text-align: center\"\r\n @size-change=\"handleSizeChange\"\r\n @current-change=\"handleIndexChange\"\r\n />\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </el-config-provider>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nimport type { TableOptions } from '../../../types'\r\n\r\nconst defaultOptions: TableOptions = {\r\n multiSelect: false,\r\n expand: false,\r\n snIndex: false,\r\n loading: false,\r\n border: false,\r\n size: 'small',\r\n headerCellStyle: { background: '#f5f7fa' },\r\n highlightCurrentRow: true,\r\n cachePageSelection: true\r\n}\r\n</script>\r\n\r\n<script setup lang=\"ts\">\r\nimport { ref, computed, watch, inject, getCurrentInstance, provide, toRaw, unref, h, onMounted, useAttrs } from 'vue'\r\nimport { ElTable, ElConfigProvider, ElPagination, vLoading, ElButton } from 'element-plus'\r\nimport zhCn from 'element-plus/es/locale/lang/zh-cn'\r\nimport ColumnItem from './column-item.vue'\r\nimport TableBtns from './table-btns.vue'\r\nimport { useTableResize } from '../../../composables/use-table-resize'\r\nimport { useTableSelection } from '../../../composables/use-table-selection'\r\nimport { isObject, findValueByKey } from '../../../utils/shared'\r\nimport type { TableColumn, PaginationConfig } from '../../../types'\r\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n initTabHeight?: number\r\n headBarClass?: string | Record<string, unknown>\r\n showHeaderBar?: boolean\r\n dataSource: Record<string, unknown>[]\r\n columns: TableColumn[]\r\n options?: TableOptions\r\n pagination?: PaginationConfig\r\n }>(),\r\n {\r\n initTabHeight: 400,\r\n showHeaderBar: true,\r\n dataSource: () => [],\r\n columns: () => [],\r\n options: () => ({ ...defaultOptions }),\r\n pagination: () => ({})\r\n }\r\n)\r\n\r\nconst emit = defineEmits<{\r\n 'update:dataSource': [data: Record<string, unknown>[]]\r\n 'update:pagination': [pagination: PaginationConfig]\r\n 'pagination-current-change': [pagination: PaginationConfig]\r\n 'size-change': [pagination: PaginationConfig, size: number]\r\n 'change-table-sort': [column: Record<string, unknown>]\r\n}>()\r\n\r\nconst slots = defineSlots<{\r\n default?: () => any\r\n}>()\r\n\r\nconst locale = ref(zhCn)\r\nconst injectedLocale = inject('elLocale', null)\r\nif (injectedLocale) {\r\n locale.value = injectedLocale as any\r\n}\r\n\r\nconst instance = getCurrentInstance() || {}\r\nconst $esPlusTable = inject<Record<string, unknown>>('$esPlusTable', {})\r\n\r\n// Refs\r\nconst tableRef = ref<any>(null)\r\nconst tbBtnRef = ref<any>(null)\r\nconst headBarRef = ref<HTMLElement | null>(null)\r\nconst paginationRef = ref<HTMLElement | null>(null)\r\nconst tableContainerRef = ref<HTMLElement | null>(null)\r\nconst tableId = ref(`table_${Math.random().toString(36).substring(2, 12)}`)\r\nconst tableData = ref<Record<string, unknown>[]>([])\r\nconst columnRowList = ref<TableColumn[]>([...props.columns])\r\n\r\nwatch(\r\n () => props.columns,\r\n (val) => {\r\n columnRowList.value = [...val]\r\n },\r\n { deep: true }\r\n)\r\nconst loadingStatus = ref(false)\r\nconst slotState = ref(false)\r\nconst showPagination = ref(false)\r\n\r\nconst setTableContainer = (el: HTMLElement | null) => {\r\n if (el) tableContainerRef.value = el\r\n}\r\n\r\n// 保留与 Form 的耦合\r\nconst bodyFormInstance = inject<(inst: unknown) => void>('bodyFormInstance', () => {})\r\nconst getVisibleShow = inject<(() => boolean) | boolean>('getVisibleShow', false)\r\n\r\nconst visibleShow = computed(() => (typeof getVisibleShow === 'function' ? getVisibleShow() : getVisibleShow))\r\n\r\nconst paginationConfig = ref<PaginationConfig>({\r\n pageSize: 10,\r\n current: 1,\r\n total: 0,\r\n pageSizes: [],\r\n size: 'small',\r\n isSmall: true,\r\n ...props.pagination\r\n})\r\n\r\nconst formInstance = ref<unknown>(null)\r\n\r\n// 计算属性\r\nconst getListEntry = computed(() => {\r\n if (props.options.entryQuery && isObject(props.options.entryQuery) && Object.keys(props.options.entryQuery).length) {\r\n return props.options.entryQuery\r\n }\r\n return {}\r\n})\r\n\r\nconst configTableField = computed(() => {\r\n if (\r\n props.options.configTableOut &&\r\n isObject(props.options.configTableOut) &&\r\n Object.keys(props.options.configTableOut).length &&\r\n checkQueryFields(props.options.configTableOut)\r\n ) {\r\n return props.options.configTableOut\r\n }\r\n\r\n if ($esPlusTable?.configQueryFieldOutput && typeof $esPlusTable.configQueryFieldOutput === 'function') {\r\n const configFields = ($esPlusTable.configQueryFieldOutput as Function)({\r\n total: 'records',\r\n pageSize: 'pageSize',\r\n current: 'pageNo',\r\n tableData: 'rows'\r\n })\r\n if (checkQueryFields(configFields)) return configFields\r\n }\r\n\r\n return {\r\n total: 'records',\r\n pageSize: 'pageSize',\r\n current: 'pageNo',\r\n tableData: 'rows'\r\n }\r\n})\r\n\r\nconst isFormInstance = computed(() => {\r\n const defaultSlots = instance?.slots?.default?.() || []\r\n const formVNode = defaultSlots.find((vnode: any) => {\r\n const type = vnode.type\r\n return type?.name === 'EsForm' || type?.displayName === 'EsForm'\r\n })\r\n if (formVNode && formVNode.props?.ref) {\r\n formInstance.value = formVNode.ctx?.refs[formVNode.props.ref]\r\n bodyFormInstance(formInstance.value)\r\n }\r\n return formVNode || {}\r\n})\r\n\r\nconst hasDefaultSlot = computed(() => !!slots.default?.())\r\nconst heightType = computed(() => props.options.heightType || 'auto')\r\nconst tabHeight = computed(() => {\r\n if (typeof props.options.tabHeight === 'number') {\r\n return `${props.options.tabHeight}px`\r\n }\r\n if (heightType.value === 'height' && typeof props.options.height === 'number') {\r\n return `${props.options.height}px`\r\n }\r\n return '100%'\r\n})\r\n\r\nconst slotStyles = computed(() => {\r\n if (props.headBarClass) {\r\n return {\r\n type: typeof props.headBarClass === 'string' ? 'string' : 'object',\r\n value: props.headBarClass\r\n }\r\n }\r\n return { type: 'string', value: '' }\r\n})\r\n\r\nconst paginationLayoutConfig = computed(() => {\r\n const cfg = $esPlusTable?.paginationLayout\r\n if (!cfg) return null\r\n return typeof cfg === 'function' ? cfg() : cfg\r\n})\r\nconst layout = computed(() => paginationLayoutConfig.value?.layout || 'prev, pager, next, jumper, sizes, ->, total')\r\nconst paginationPageSizes = computed(() => paginationLayoutConfig.value?.pageSizes || paginationConfig.value.pageSizes)\r\nconst paginationIsSmall = computed(() => paginationLayoutConfig.value?.isSmall ?? paginationConfig.value.isSmall)\r\nconst paginationBackground = computed(() => paginationLayoutConfig.value?.background ?? true)\r\nconst loadStatus = computed(() => props.options.loading || loadingStatus.value)\r\nconst isRequestConf = computed(() => !!props.options.actionUrl || (props.options.apiParams && isObject(props.options.apiParams) && Object.keys(props.options.apiParams).length > 0))\r\nconst isHttpRequest = computed(() => !!props.options?.httpRequest && typeof props.options.httpRequest === 'function')\r\n\r\nconst filteredColumns = computed(() => {\r\n const list = columnRowList.value.filter((item) => !item.hidCol)\r\n list.forEach((el) => {\r\n if (el.prop !== 'operate' && el.key !== 'operate' && (el.prop || el.key) && !el.formatter) {\r\n el.formatter = (row: Record<string, unknown>) => {\r\n const value = row[el.prop as string] || row[el.key as string]\r\n if (value == null || value === '') {\r\n return el.emptyPlaceholder || '-'\r\n }\r\n return value\r\n }\r\n }\r\n\r\n if ((el.prop === 'operate' || el.key === 'operate') && el.btns && !el.render) {\r\n el.render = (_h: any, { row }: { row: Record<string, unknown> }) => {\r\n return h('div', [\r\n el.btns?.map((btn: any) =>\r\n h(ElButton, {\r\n onClick: () => btn.clickEvent?.(row),\r\n text: true,\r\n type: btn.type || 'primary'\r\n }, () => btn.name)\r\n )\r\n ])\r\n }\r\n }\r\n })\r\n return list\r\n})\r\n\r\n// es-table 内部选项键,不应传递给 el-table\r\nconst TABLE_INTERNAL_KEYS = new Set([\r\n 'multiSelect', 'expand', 'snIndex', 'loading', 'cachePageSelection',\r\n 'httpRequest', 'configTableOut', 'listenToCallBack',\r\n 'apiParams', 'actionUrl', 'heightType', 'tabHeight',\r\n 'isInitRun', 'entryQuery', 'configBtn', 'leftText', 'rowkey'\r\n])\r\n\r\nconst tableAttrs = computed(() => {\r\n const merged = columnBindAttr({ ...defaultOptions, ...props.options })\r\n const { align, ...rest } = merged\r\n const result: Record<string, unknown> = {}\r\n for (const key in rest) {\r\n if (!TABLE_INTERNAL_KEYS.has(key)) {\r\n result[key] = rest[key]\r\n }\r\n }\r\n return result\r\n})\r\n\r\n// 合并 options attrs 和父级 fallthrough attrs,供 el-table 使用\r\nconst fallthroughAttrs = useAttrs()\r\nconst tableBindAttrs = computed(() => {\r\n const result: Record<string, unknown> = { ...tableAttrs.value, ...fallthroughAttrs }\r\n if (props.options.rowkey) {\r\n result.rowKey = props.options.rowkey\r\n }\r\n if (heightType.value === 'height') {\r\n result.height = tableHeight.value\r\n } else if (heightType.value === 'maxHeight') {\r\n result.maxHeight = tableHeight.value\r\n }\r\n return result\r\n})\r\n\r\n// 使用原生 ResizeObserver\r\nconst { tableHeight, resizeObservers } = useTableResize(\r\n tableContainerRef,\r\n headBarRef,\r\n tbBtnRef,\r\n paginationRef,\r\n { heightType: heightType.value, tabHeight: props.options.tabHeight }\r\n)\r\n\r\nwatch(\r\n visibleShow,\r\n async (val, oldVal) => {\r\n if (val && val !== oldVal) {\r\n if (props.options.actionUrl) {\r\n await httpRequestInstance()\r\n }\r\n tableRef.value?.doLayout?.()\r\n }\r\n }\r\n)\r\n\r\nwatch(\r\n () => props.pagination,\r\n (val) => {\r\n paginationConfig.value = { ...paginationConfig.value, ...val }\r\n showPagination.value = val.total !== undefined\r\n },\r\n { deep: true, immediate: true }\r\n)\r\n\r\nwatch(\r\n () => props.dataSource,\r\n (val) => {\r\n initSelection(val, tableRef.value)\r\n },\r\n { deep: true }\r\n)\r\n\r\nwatch(\r\n tableData,\r\n (val) => {\r\n if (Array.isArray(val)) {\r\n emit('update:dataSource', val)\r\n }\r\n },\r\n { deep: true }\r\n)\r\n\r\n// 配置化接口请求时,挂载自动加载数据\r\nonMounted(() => {\r\n if (isRequestConf.value && props.options.isInitRun !== false) {\r\n httpRequestInstance()\r\n }\r\n})\r\n\r\n// 表格选择逻辑\r\nconst { multipleSelection, handleSelectionChange, initSelection, clearAllSelection } = useTableSelection(props.options.rowkey)\r\n\r\nconst handleTableSelectionChange = (val: Record<string, unknown>[]) => {\r\n handleSelectionChange(val, paginationConfig.value.current || 1)\r\n}\r\n\r\n// 请求逻辑\r\nconst checkQueryFields = (obj: Record<string, unknown>): boolean => {\r\n const checkListKey = ['total', 'pageSize', 'current', 'tableData']\r\n if (isObject(obj)) {\r\n return Object.keys(obj).every((it) => {\r\n return checkListKey.find((its) => its === it) && obj[it] && typeof obj[it] === 'string'\r\n })\r\n }\r\n return false\r\n}\r\n\r\nconst getListenToCallBack = (eventName: string, params: unknown) => {\r\n const eventNameList = [\r\n { eventName: 'brcb', isReturn: true },\r\n { eventName: 'qrcb', isReturn: true }\r\n ]\r\n const hasEventNameIndex = eventNameList.findIndex((it) => it.eventName === eventName)\r\n if (props.options.listenToCallBack && props.options.listenToCallBack[eventName] && hasEventNameIndex !== -1) {\r\n const callObj = eventNameList[hasEventNameIndex]\r\n if (callObj.isReturn) {\r\n return props.options.listenToCallBack[eventName](params)\r\n }\r\n }\r\n}\r\n\r\nconst formatConfigOut = (row: Record<string, unknown>, keyList: string[]) => {\r\n if (isObject(configTableField.value) && Object.keys(configTableField.value).length) {\r\n Object.entries(configTableField.value).forEach(([key, value]) => {\r\n const isKeyUsed = keyList.includes(key)\r\n if (!isKeyUsed) return\r\n\r\n const rowData = row[value as string] ?? findValueByKey(row, value as string)\r\n if (key === 'tableData') {\r\n tableData.value = Array.isArray(rowData) ? rowData : []\r\n } else {\r\n paginationConfig.value[key as keyof PaginationConfig] = typeof rowData === 'number' ? rowData : parseInt(rowData as string, 10) || 0\r\n }\r\n })\r\n }\r\n}\r\n\r\nconst queryTableListMethod = (params: Record<string, unknown>, options: { success?: (res: Record<string, unknown>) => void; fail?: (err: unknown) => void } = {}) => {\r\n const { success, fail } = options\r\n const apiParams = props.options?.apiParams || {}\r\n const url = props.options?.actionUrl || apiParams.url || ''\r\n\r\n if (!url || !Object.keys(apiParams).length) return\r\n\r\n const formData = Object.keys(isFormInstance.value).length\r\n ? toRaw(unref((isFormInstance.value as any).props.model))\r\n : getListEntry.value || {}\r\n\r\n\r\n const fnParams = getListenToCallBack('brcb', { ...formData, ...params, ...toRaw(unref(apiParams.model || {})) })\r\n const finalParams = isObject(fnParams) ? fnParams : { ...formData, ...toRaw(unref(apiParams.model || {})), ...params }\r\n const requestOption = { ...toRaw(unref(apiParams.options || {})) }\r\n if (apiParams?.method) {\r\n requestOption.method = apiParams?.method\r\n }\r\n\r\n const requestHandler = async (requestFn: Function) => {\r\n if (loadingStatus.value) return\r\n loadingStatus.value = true\r\n console.log('formData///', finalParams)\r\n try {\r\n const res = await requestFn({\r\n url,\r\n formParams: finalParams,\r\n headers: apiParams.headers || {},\r\n ...requestOption,\r\n ...params\r\n })\r\n const responseData = getListenToCallBack('qrcb', res) || res\r\n if (isObject(res) && Object.keys(res).length && typeof success === 'function') {\r\n success(responseData as Record<string, unknown>)\r\n }\r\n } catch (e) {\r\n if (typeof fail === 'function') {\r\n fail(e)\r\n }\r\n } finally {\r\n loadingStatus.value = false\r\n }\r\n }\r\n\r\n if (props.options.httpRequest) {\r\n requestHandler(props.options.httpRequest)\r\n } else if ($esPlusTable.$httpRequest) {\r\n requestHandler($esPlusTable.$httpRequest as Function)\r\n }\r\n}\r\n\r\nconst httpRequestInstance = (model?: Record<string, unknown>) => {\r\n return new Promise((resolve, reject) => {\r\n paginationConfig.value.current = 1\r\n queryTableListMethod(\r\n { ...(model || {}), pageIndex: paginationConfig.value.current, pageSize: paginationConfig.value.pageSize },\r\n {\r\n success: (res) => {\r\n formatConfigOut(res, ['total', 'tableData'])\r\n if (Object.keys(props.pagination).length) {\r\n emit('update:pagination', paginationConfig.value)\r\n }\r\n resolve(res)\r\n },\r\n fail: (err) => {\r\n reject(err)\r\n }\r\n }\r\n )\r\n })\r\n}\r\n\r\nconst changePageIndexRequest = () => {\r\n queryTableListMethod(\r\n { pageIndex: paginationConfig.value.current, pageSize: paginationConfig.value.pageSize },\r\n {\r\n success: (res) => {\r\n formatConfigOut(res, ['total', 'tableData'])\r\n emit('update:pagination', paginationConfig.value)\r\n emit('pagination-current-change', paginationConfig.value)\r\n }\r\n }\r\n )\r\n}\r\n\r\nconst changePageSizeRequest = () => {\r\n queryTableListMethod(\r\n { pageIndex: paginationConfig.value.current, pageSize: paginationConfig.value.pageSize },\r\n {\r\n success: (res) => {\r\n formatConfigOut(res, ['total', 'tableData'])\r\n emit('update:pagination', paginationConfig.value)\r\n }\r\n }\r\n )\r\n}\r\n\r\nconst handleSizeChange = (size: number) => {\r\n paginationConfig.value.pageSize = size\r\n paginationConfig.value.current = 1\r\n if (isRequestConf.value) {\r\n changePageSizeRequest()\r\n } else {\r\n emit('update:pagination', paginationConfig.value)\r\n emit('size-change', paginationConfig.value, size)\r\n }\r\n}\r\n\r\nconst handleIndexChange = (val: number) => {\r\n paginationConfig.value.current = val\r\n if (isRequestConf.value) {\r\n console.log('indexPages//', val)\r\n changePageIndexRequest()\r\n } else {\r\n emit('update:pagination', paginationConfig.value)\r\n emit('pagination-current-change', paginationConfig.value)\r\n }\r\n}\r\n\r\nconst changeTableSort = (column: Record<string, unknown>) => {\r\n emit('change-table-sort', column)\r\n}\r\n\r\nconst firstWordUpperCase = (str: string): string => {\r\n return str.toLowerCase().replace(/(\\s|^)[a-z]/g, (char) => char.toUpperCase())\r\n}\r\n\r\nconst columnBindAttr = (cols: Record<string, unknown>) => {\r\n const options: Record<string, unknown> = {}\r\n for (const t in cols) {\r\n if (t === 'groups' || t === 'scopedSlots' || t === 'render') continue\r\n\r\n if (t.includes('-')) {\r\n const parts = t.split('-')\r\n let newkey = parts[0]\r\n for (let j = 1; j < parts.length; j++) {\r\n newkey += firstWordUpperCase(parts[j])\r\n }\r\n options[newkey] = cols[t]\r\n } else if (t === 'key') {\r\n options.prop = cols[t]\r\n options[t] = cols[t]\r\n } else {\r\n options[t] = cols[t]\r\n }\r\n }\r\n\r\n if (!options.align) {\r\n options.align = 'center'\r\n }\r\n\r\n return options\r\n}\r\n\r\n// 提供表格实例给子组件(保留与 Form 的耦合)\r\nprovide('getTableInstantce', () => ({\r\n ...(instance?.setupState || {}),\r\n tableRef,\r\n toggleSelection: (rows: Record<string, unknown>[]) => {\r\n if (rows) {\r\n rows.forEach((row) => {\r\n tableRef.value?.toggleRowSelection(row)\r\n })\r\n } else {\r\n tableRef.value?.clearSelection()\r\n }\r\n },\r\n clearAllSelection: () => clearAllSelection(tableRef.value),\r\n refsInstance: () => tableRef.value,\r\n httpRequestInstance\r\n}))\r\n\r\n// 暴露方法\r\ndefineExpose({\r\n httpRequestInstance,\r\n getSelectionRows: () => multipleSelection.value,\r\n clearSelection: () => tableRef.value?.clearSelection?.(),\r\n clearAllSelection: () => clearAllSelection(tableRef.value),\r\n refresh: () => tableRef.value?.doLayout?.()\r\n})\r\n</script>\r\n\r\n<style lang=\"scss\" scoped>\r\n.el-dp_tables {\r\n height: auto;\r\n :deep(.el-table__body-wrapper) {\r\n height: auto;\r\n }\r\n}\r\n\r\n.table_component {\r\n width: 100%;\r\n display: flex;\r\n flex-direction: column;\r\n justify-content: space-between;\r\n align-items: flex-start;\r\n overflow: hidden;\r\n}\r\n\r\n.table_containers {\r\n flex: 1;\r\n width: 100%;\r\n height: 100%;\r\n display: flex;\r\n justify-content: space-between;\r\n flex-direction: column;\r\n align-items: flex-start;\r\n position: relative;\r\n}\r\n\r\n.pagination_page {\r\n width: 100%;\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n}\r\n\r\n.btn-slot {\r\n width: 100%;\r\n\r\n .headerBar {\r\n box-sizing: border-box;\r\n background-color: #fff;\r\n border-radius: 6px;\r\n\r\n :deep(.el-form-item--small .el-form-item__label) {\r\n box-sizing: border-box;\r\n }\r\n }\r\n}\r\n\r\n.tableContainer {\r\n border-radius: 0px;\r\n transition: all 1.5s;\r\n flex: 1;\r\n width: 100%;\r\n display: flex;\r\n justify-content: space-between;\r\n flex-direction: column;\r\n align-items: flex-start;\r\n\r\n .table_inner_containers {\r\n width: 100%;\r\n }\r\n\r\n :deep(.el-table__empty-block) {\r\n width: 100% !important;\r\n margin: 32px 0;\r\n font-size: 14px;\r\n line-height: 1.5715;\r\n\r\n .el-table__empty-text {\r\n width: auto !important;\r\n }\r\n\r\n .ant-empty-image {\r\n height: 40px;\r\n margin-bottom: 8px;\r\n\r\n .ant-empty-img-simple-ellipse {\r\n fill: #f5f5f5;\r\n }\r\n\r\n .ant-empty-img-simple-g {\r\n stroke: #d9d9d9;\r\n }\r\n\r\n .ant-empty-img-simple-path {\r\n fill: #fafafa;\r\n }\r\n }\r\n\r\n .ant-empty-description {\r\n line-height: 1.5715;\r\n color: rgba(0, 0, 0, 0.25);\r\n }\r\n }\r\n\r\n :deep(.el-tag) {\r\n height: 20px;\r\n padding: 0 7px;\r\n line-height: 20px;\r\n background: #fafafa;\r\n border: none;\r\n border-radius: 4px;\r\n\r\n &.el-tag--info {\r\n color: rgba(0, 0, 0, 0.85);\r\n }\r\n\r\n &.el-tag--success {\r\n color: #52c41a;\r\n background: #f6ffed;\r\n border-color: #b7eb8f;\r\n }\r\n }\r\n}\r\n</style>\r\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'\r\nimport { isObject, findValueByKey, wrapPromise } from '../utils/shared'\r\nimport type { FormItemOption, ApiParams } from '../types'\r\n\r\nexport interface RequestConfig {\r\n httpRequest?: (params: Record<string, unknown>) => Promise<unknown>\r\n apiParams?: ApiParams\r\n success?: (res: Record<string, unknown>) => void\r\n fail?: (err: unknown) => void\r\n [key: string]: unknown\r\n}\r\n\r\nexport function useFormRequest(httpRequestGlobal?: (params: Record<string, unknown>) => Promise<unknown>) {\r\n const queryTableListMethod = (params: Record<string, unknown>, options: RequestConfig = {}, option?: FormItemOption) => {\r\n const { success, fail, ..._params } = options || {}\r\n if (isObject(options.apiParams) && Object.keys(options.apiParams).length && options.apiParams.url) {\r\n const initFormParams = { ...params, ...toRaw(unref(options.apiParams.model || {})) }\r\n const requestOption = { ...toRaw(unref(options.apiParams.options || {})) }\r\n if (options.apiParams.method) {\r\n requestOption.method = options.apiParams.method\r\n }\r\n\r\n const requestPayload = {\r\n url: options.apiParams.url,\r\n headers: { ...(options.apiParams.headers || {}) },\r\n formParams: initFormParams,\r\n ...requestOption\r\n }\r\n\r\n const requestFn = options.httpRequest || httpRequestGlobal\r\n if (!requestFn) return\r\n\r\n requestFn(requestPayload)\r\n .then((res) => {\r\n // 支持对象和数组两种响应格式(兼容直接返回数组的接口)\r\n if (typeof success === 'function' && res && (isObject(res) || Array.isArray(res))) {\r\n success(res as Record<string, unknown>)\r\n }\r\n })\r\n .catch((e) => {\r\n if (typeof fail === 'function') {\r\n fail(e)\r\n }\r\n })\r\n }\r\n }\r\n\r\n const checkQueryFields = (obj: Record<string, unknown>): boolean => {\r\n const checkListKey = ['total', 'pageSize', 'current', 'listData']\r\n if (isObject(obj)) {\r\n return Object.keys(obj).every((it) => {\r\n return checkListKey.find((its) => its === it) && obj[it] && typeof obj[it] === 'string'\r\n })\r\n }\r\n return false\r\n }\r\n\r\n const configFormField = (options: Record<string, unknown> = {}, fieldFieldOutput?: (defaults: Record<string, string>) => Record<string, string>) => {\r\n if (isObject(options.configFormOut) && Object.keys(options.configFormOut).length && checkQueryFields(options.configFormOut as Record<string, unknown>)) {\r\n return options.configFormOut as Record<string, string>\r\n }\r\n\r\n if (typeof fieldFieldOutput === 'function') {\r\n const configFields = fieldFieldOutput({\r\n total: 'records',\r\n pageSize: 'pageSize',\r\n current: 'pageNo',\r\n listData: 'rows'\r\n })\r\n if (checkQueryFields(configFields)) {\r\n return configFields\r\n }\r\n }\r\n\r\n return {\r\n total: 'records',\r\n pageSize: 'pageSize',\r\n current: 'pageNo',\r\n listData: 'rows'\r\n }\r\n }\r\n\r\n const formatConfigOut = (row: Record<string, unknown>, keyList: string[], options: Record<string, unknown> = {}, fieldFieldOutput?: (defaults: Record<string, string>) => Record<string, string>) => {\r\n const configFieldOut = configFormField(options, fieldFieldOutput)\r\n const configDataOption: Record<string, unknown> = {}\r\n\r\n // 如果 API 响应本身就是数组,直接作为 listData 使用(兼容直接返回数组的接口)\r\n if (keyList.includes('listData') && Array.isArray(row)) {\r\n configDataOption['listData'] = row\r\n return configDataOption\r\n }\r\n\r\n if (isObject(configFieldOut) && Object.keys(configFieldOut).length) {\r\n for (const [key, value] of Object.entries(configFieldOut)) {\r\n const isKeyUsed = keyList.findIndex((it) => it === key)\r\n if (isKeyUsed === -1) continue\r\n\r\n const rowValue = row[value as string]\r\n if (rowValue !== undefined && rowValue !== null) {\r\n if (key === 'listData') {\r\n configDataOption[key] = Array.isArray(rowValue) ? rowValue : []\r\n } else {\r\n configDataOption[key] = typeof rowValue === 'number' ? rowValue : parseInt(rowValue as string, 10) || 0\r\n }\r\n } else {\r\n const resultData = findValueByKey(row, value as string)\r\n if (key === 'listData') {\r\n configDataOption[key] = Array.isArray(resultData) ? resultData : []\r\n } else {\r\n configDataOption[key] = typeof resultData === 'number' ? resultData : parseInt(resultData as string, 10) || 0\r\n }\r\n }\r\n }\r\n }\r\n return configDataOption\r\n }\r\n\r\n const httpRequestFormInstance = (model: Record<string, unknown>, options: RequestConfig, rows: FormItemOption, fieldFieldOutput?: (defaults: Record<string, string>) => Record<string, string>) => {\r\n return new Promise<{ data: Record<string, unknown>; configRows: Record<string, unknown> }>((resolve, reject) => {\r\n nextTick(() => {\r\n queryTableListMethod(\r\n { pageIndex: 1, pageSize: 1000, ...(model || {}) },\r\n {\r\n ...(options || {}),\r\n success: (res) => {\r\n const configRows = formatConfigOut(res, ['total', 'listData'], rows as unknown as Record<string, unknown>, fieldFieldOutput)\r\n resolve({ data: res, configRows })\r\n },\r\n fail: (err) => {\r\n reject(err)\r\n }\r\n },\r\n rows\r\n )\r\n })\r\n })\r\n }\r\n\r\n const getEveryFormQueryField = async (rowsList: FormItemOption[], fieldFieldOutput?: (defaults: Record<string, string>) => Record<string, string>) => {\r\n try {\r\n if (!Array.isArray(rowsList)) return []\r\n const apiUrlList = rowsList.filter((it) => it && it.apiParams && isObject(it.apiParams) && it.apiParams.url)\r\n const apiResult: { prop: string; listData: unknown[] }[] = []\r\n\r\n const wrappedPromises = apiUrlList.map((option) => {\r\n const { httpRequest } = option\r\n const promiseThen = httpRequestFormInstance(\r\n { ...(option.apiParams?.model || {}) },\r\n { httpRequest, apiParams: option.apiParams, ...(option.apiParams?.options || {}) },\r\n option,\r\n fieldFieldOutput\r\n )\r\n return wrapPromise(promiseThen)\r\n })\r\n\r\n const results = await Promise.all(wrappedPromises)\r\n\r\n results.forEach((item, index) => {\r\n if (item.status === 'fulfilled') {\r\n const { configRows, data } = item.value\r\n const option = apiUrlList[index]\r\n const listenToCallBack = option?.listenToCallBack as Record<string, (params: unknown) => unknown> | undefined\r\n\r\n /**\r\n * 优先使用 listenToCallBack.crtn 格式化数据\r\n * crtn 接收 API 原始响应 data,返回 [{ label, value }] 格式的选项数据\r\n * data 是 httpRequest 返回的 { data: any } 中的 data 字段\r\n */\r\n let listData: unknown[] = []\r\n if (listenToCallBack?.crtn) {\r\n listData = listenToCallBack.crtn(data) as unknown[]\r\n }\r\n\r\n // 如果 crtn 未配置或返回空,则降级使用 callOptionListFormat 或格式化后的数据\r\n const newListOptions =\r\n Array.isArray(listData) && listData.length > 0\r\n ? listData\r\n : typeof option?.callOptionListFormat === 'function'\r\n ? option.callOptionListFormat(configRows?.listData as unknown[] || option?.dataOptions || [])\r\n : undefined\r\n\r\n apiResult.push({\r\n prop: apiUrlList[index].prop,\r\n listData: Array.isArray(newListOptions) ? newListOptions : (configRows?.listData as unknown[] || apiUrlList[index]?.dataOptions || [])\r\n })\r\n }\r\n })\r\n return apiResult\r\n } catch (e) {\r\n return []\r\n }\r\n }\r\n\r\n return {\r\n queryTableListMethod,\r\n getEveryFormQueryField,\r\n formatConfigOut,\r\n configFormField\r\n }\r\n}\r\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>\r\n <el-form :ref=\"setFormRef\" v-bind=\"formProps\" class=\"es-form\">\r\n <div class=\"flex-center\">\r\n <el-row v-bind=\"rowLayout\">\r\n <template v-for=\"(item, index) in formItem\" :key=\"item.prop\">\r\n <el-col v-show=\"!item?.isFold\" :span=\"item.span || 6\">\r\n <el-form-item\r\n :label=\"item.label\"\r\n v-bind=\"initFormItemOptions(item.formItemOptions || {})\"\r\n :prop=\"item.prop\"\r\n @click.stop=\"() => {}\"\r\n >\r\n <template v-if=\"item.formtype\">\r\n <RenderDomForm :row=\"item\" :render=\"formInputComponents(item)\" :index=\"index\" :model=\"model\" />\r\n </template>\r\n <template v-else>\r\n <RenderDomForm :row=\"item\" :render=\"item.render\" :index=\"index\" :model=\"model\" />\r\n </template>\r\n </el-form-item>\r\n </el-col>\r\n </template>\r\n\r\n <template v-if=\"!isBtnHidden\">\r\n <template v-if=\"isRenderBtn\">\r\n <RenderBtn\r\n :row=\"{ isFold: isFold, folded, getBtnColSpan, getRowColsAlgorithm, changeFolded, refsForm: formInstance }\"\r\n :form-model=\"model\"\r\n :form-item-list=\"formItem\"\r\n :render=\"renderBtn\"\r\n />\r\n </template>\r\n <el-col v-else :span=\"btnColSpanRow ? 24 : getBtnColSpan\">\r\n <div v-if=\"btnColSpanRow && configBtn.length\" class=\"buttonOperate leftRightBtn\">\r\n <div class=\"btn-left\">\r\n <el-form-item label-width=\"0px\" class=\"btn-formItem\">\r\n <el-button\r\n v-for=\"(it, inx) in colRightLeftList.colLeftBtn\"\r\n v-bind=\"filterOptions(it)\"\r\n :icon=\"getCompIcon(it.icon)\"\r\n :disabled=\"typeof it.disabled === 'function' ? it.disabled() || false : it.disabled || false\"\r\n @click=\"() => it.click(model, refs, getTableInstant?.httpRequestInstance)\"\r\n :key=\"it.key || inx\"\r\n >\r\n {{ it.name }}\r\n </el-button>\r\n </el-form-item>\r\n </div>\r\n <div class=\"btn-right\">\r\n <el-form-item label-width=\"0px\" class=\"btn-formItem\">\r\n <el-button\r\n v-for=\"(it, inx) in colRightLeftList.colRightBtn\"\r\n v-bind=\"filterOptions(it)\"\r\n :icon=\"getCompIcon(it.icon)\"\r\n :disabled=\"typeof it.disabled === 'function' ? it.disabled() || false : it.disabled || false\"\r\n @click=\"() => clickBtn(it)\"\r\n :key=\"it.key || inx\"\r\n >\r\n {{ it.name }}\r\n </el-button>\r\n <el-button\r\n v-if=\"isFold\"\r\n link\r\n type=\"primary\"\r\n :icon=\"getCompIcon(folded ? 'ArrowDown' : 'ArrowUp')\"\r\n style=\"padding-left: 0; border: none\"\r\n @click=\"changeFolded\"\r\n >\r\n {{ folded ? '展开' : '收起' }}\r\n </el-button>\r\n <el-dropdown placement=\"bottom-start\" v-if=\"getSetOptionsStatus\">\r\n <el-button\r\n link\r\n type=\"primary\"\r\n style=\"margin-left: 2px; margin-right: 5px; outline: none\"\r\n :icon=\"getCompIcon('Tools')\"\r\n />\r\n <template #dropdown>\r\n <el-dropdown-menu>\r\n <el-dropdown-item @click=\"handleCustomerForm\">自定义查询</el-dropdown-item>\r\n <el-dropdown-item @click=\"handleTableItemOption\">自定义表格</el-dropdown-item>\r\n <el-dropdown-item @click=\"handleRefresh\">重置(刷新)</el-dropdown-item>\r\n </el-dropdown-menu>\r\n </template>\r\n </el-dropdown>\r\n </el-form-item>\r\n </div>\r\n </div>\r\n <el-form-item\r\n v-if=\"!btnColSpanRow && configBtn.length\"\r\n :label=\"' '\"\r\n :label-width=\"formProps.labelBtnWidth ? formProps.labelBtnWidth : formProps.labelWidth\"\r\n :class=\"{ formItemCols: btnColSpanRow ? true : getBtnColSpan === 24 }\"\r\n class=\"btn-formItem\"\r\n >\r\n <div class=\"buttonOperate\" :style=\"{ 'text-align': getBtnColSpan === 24 ? 'right' : 'left' }\">\r\n <template v-if=\"configBtn.length\">\r\n <el-button\r\n v-for=\"(it, inx) in configBtn\"\r\n v-bind=\"filterOptions(it)\"\r\n :icon=\"getCompIcon(it.icon)\"\r\n :disabled=\"typeof it.disabled === 'function' ? it.disabled() || false : it.disabled || false\"\r\n @click=\"() => it?.click(model, refs, getTableInstant?.httpRequestInstance)\"\r\n :key=\"it.key || inx\"\r\n >\r\n {{ it.name }}\r\n </el-button>\r\n </template>\r\n <el-button\r\n v-if=\"isFold\"\r\n type=\"primary\"\r\n link\r\n :icon=\"getCompIcon(folded ? 'ArrowDown' : 'ArrowUp')\"\r\n style=\"padding-left: 0; border: none\"\r\n @click=\"changeFolded\"\r\n >\r\n {{ folded ? '展开' : '收起' }}\r\n </el-button>\r\n <el-dropdown placement=\"bottom-start\" v-if=\"getSetOptionsStatus\">\r\n <el-button\r\n link\r\n type=\"primary\"\r\n style=\"margin-left: 2px; margin-right: 5px; outline: none\"\r\n :icon=\"getCompIcon('Tools')\"\r\n />\r\n <template #dropdown>\r\n <el-dropdown-menu>\r\n <el-dropdown-item @click=\"handleCustomerForm\">自定义查询</el-dropdown-item>\r\n <el-dropdown-item @click=\"handleTableItemOption\">自定义表格</el-dropdown-item>\r\n <el-dropdown-item @click=\"handleRefresh\">重置(刷新)</el-dropdown-item>\r\n </el-dropdown-menu>\r\n </template>\r\n </el-dropdown>\r\n </div>\r\n </el-form-item>\r\n </el-col>\r\n </template>\r\n </el-row>\r\n </div>\r\n </el-form>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nexport default { name: 'EsForm' }\r\n</script>\r\n\r\n<script setup lang=\"ts\">\r\nimport { ref, computed, watch, inject, getCurrentInstance, nextTick, h, defineComponent } from 'vue'\r\nimport {\r\n ElRow,\r\n ElCol,\r\n ElFormItem,\r\n ElForm,\r\n ElButton,\r\n ElDropdownMenu,\r\n ElDropdownItem,\r\n ElDropdown,\r\n ElInput\r\n} from 'element-plus'\r\nimport * as ElementPlusIconsVue from '@element-plus/icons-vue'\r\nimport { useFormInputs } from '../../../composables/use-form-inputs'\r\nimport { useFormLayout } from '../../../composables/use-form-layout'\r\nimport { useFormRequest } from '../../../composables/use-form-request'\r\nimport { isObject } from '../../../utils/shared'\r\nimport useDialog from '../../es-dialog/src/use-dialog'\r\nimport EsTable from '../../es-table'\r\nimport type { FormItemOption, BtnConfig, LayoutFormProps } from '../../../types'\r\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n model: Record<string, unknown>\r\n formItemList: FormItemOption[]\r\n layoutFormProps?: LayoutFormProps\r\n configBtn?: BtnConfig[]\r\n renderBtn?: Function | boolean\r\n btnColSpanRow?: boolean\r\n rules?: Record<string, unknown>\r\n fieldFieldOutput?: (defaults: Record<string, string>) => Record<string, string>\r\n }>(),\r\n {\r\n model: () => ({}),\r\n formItemList: () => [],\r\n layoutFormProps: () => ({}),\r\n configBtn: () => [],\r\n renderBtn: false,\r\n btnColSpanRow: true,\r\n rules: () => ({})\r\n }\r\n)\r\n\r\nconst emit = defineEmits<{\r\n confirm: [formRef: unknown, model: Record<string, unknown>]\r\n reset: [formRef: unknown, model: Record<string, unknown>]\r\n}>()\r\n\r\nconst instance = getCurrentInstance()\r\nconst $esPlusForm = inject<Record<string, unknown>>('$esPlusForm', {})\r\n\r\n// 保留与 Table 的耦合(同时支持 inject 和 instance.ctx 两种获取方式)\r\nconst injectedTableInstant = inject<(() => any) | null>('getTableInstantce', null)\r\nconst getTableInstant = computed(() => {\r\n if (injectedTableInstant) {\r\n return typeof injectedTableInstant === 'function' ? injectedTableInstant() : injectedTableInstant\r\n }\r\n const ctx = instance?.ctx as Record<string, unknown>\r\n return typeof ctx?.getTableInstantce === 'function' ? ctx?.getTableInstantce() : ctx?.getTableInstantce\r\n})\r\n\r\nconst isParentTable = computed(() => {\r\n return !!(getTableInstant.value && Object.keys(getTableInstant.value).length)\r\n})\r\n\r\n// 图标扩展\r\nconst extendedIcon = Object.fromEntries(Object.entries(ElementPlusIconsVue))\r\nconst getCompIcon = (key?: string) => (key ? extendedIcon[key] || key : undefined)\r\nconst filterOptions = (it: BtnConfig) => {\r\n const { icon, ...opt } = it as Record<string, unknown>\r\n return opt\r\n}\r\n\r\n// Refs\r\nconst refs = ref<unknown>(null)\r\nconst formInstance = ref<Record<string, unknown>>({})\r\nconst formItemRowsList = ref<FormItemOption[]>(props.formItemList)\r\n\r\nconst setFormRef = (el: unknown) => {\r\n if (el) refs.value = el\r\n}\r\n\r\n// Composables\r\nconst { formInputComponents } = useFormInputs()\r\nconst httpRequestGlobal = ($esPlusForm?.$httpRequest as (params: Record<string, unknown>) => Promise<unknown>) || undefined\r\nconst fieldFieldOutputGlobal = (props.fieldFieldOutput || $esPlusForm?.fieldFieldOutput) as ((defaults: Record<string, string>) => Record<string, string>) | undefined\r\nconst { getEveryFormQueryField } = useFormRequest(httpRequestGlobal)\r\n\r\n// Break circular dependency: formLayoutRef is populated after useFormLayout\r\nconst formLayoutRef = ref<Record<string, unknown>>(props.layoutFormProps?.fromLayProps || {})\r\nconst formProps = computed(() => ({\r\n ...formLayoutRef.value,\r\n model: props.model,\r\n rules: props.rules,\r\n validateOnRuleChange: false\r\n}))\r\n\r\n// 缓存已加载数据的表单项 prop,避免 computed 重新计算时重复调用接口\r\nconst loadedApiProps = ref<Set<string>>(new Set())\r\n\r\nwatch(\r\n () => props.formItemList,\r\n async (val) => {\r\n const list = Array.isArray(val) ? val : []\r\n // 只加载 isInitRun !== false 且尚未加载过数据的表单项\r\n const needLoadList = list.filter((it) => it && it.isInitRun !== false && !loadedApiProps.value.has(it.prop))\r\n if (!needLoadList.length) {\r\n // 无新表单项需要加载,保留已有的 dataOptions\r\n formItemRowsList.value = list.map((it) => {\r\n if (!it) return null\r\n const existing = formItemRowsList.value.find((old) => old && old.prop === it.prop)\r\n return existing?.dataOptions?.length ? { ...it, dataOptions: existing.dataOptions } : it\r\n }).filter((it): it is FormItemOption => !!it)\r\n return\r\n }\r\n const rows = await getEveryFormQueryField(needLoadList, fieldFieldOutputGlobal)\r\n // 标记已加载的 prop\r\n needLoadList.forEach((it) => loadedApiProps.value.add(it.prop))\r\n formItemRowsList.value = list\r\n .map((it) => {\r\n if (!it) return null\r\n const resultApiOption = rows.find((item) => item && item.prop === it.prop)\r\n const existing = formItemRowsList.value.find((old) => old && old.prop === it.prop)\r\n // 优先使用新加载的数据,其次保留已有数据\r\n if (resultApiOption) return { ...it, dataOptions: resultApiOption.listData }\r\n if (existing?.dataOptions?.length) return { ...it, dataOptions: existing.dataOptions }\r\n return it\r\n })\r\n .filter((it): it is FormItemOption => !!it)\r\n },\r\n { immediate: true, deep: true }\r\n)\r\n\r\nconst formItemListFilter = computed(() => {\r\n const list = formItemRowsList.value || []\r\n return list\r\n .map((it) => (it ? { ...it, span: it.span || 6, dataOptions: it.dataOptions || [] } : null))\r\n .filter((it): it is FormItemOption => {\r\n if (!it) return false\r\n if (it.isHidden && typeof it.isHidden === 'function') {\r\n return !it.isHidden(props.model, it, formProps.value)\r\n }\r\n return true\r\n })\r\n})\r\n\r\nconst {\r\n folded,\r\n isBtnHidden,\r\n rowLayout,\r\n formLayout,\r\n getSetOptionsStatus,\r\n getRowColsAlgorithm,\r\n isFold,\r\n getBtnColSpan,\r\n formItem,\r\n changeFolded\r\n} = useFormLayout({\r\n layoutFormProps: props.layoutFormProps,\r\n get formItemList() { return formItemListFilter.value }\r\n})\r\n\r\nwatch(\r\n formLayout,\r\n (val) => {\r\n formLayoutRef.value = val\r\n },\r\n { immediate: true }\r\n)\r\n\r\nconst colRightLeftList = computed(() => ({\r\n colRightBtn: props.configBtn.filter((it) => it.direction === 'right' || !it.direction),\r\n colLeftBtn: props.configBtn.filter((it) => it.direction === 'left')\r\n}))\r\n\r\nconst isRenderBtn = computed(() => typeof props.renderBtn === 'function')\r\n\r\nconst clickBtn = async (it: BtnConfig) => {\r\n if (it.triggerEvent && ['query', 'rest'].includes(it.key || '')) {\r\n queryTableRequest(props.model, refs.value as { resetFields: () => void }, it.key)\r\n } else {\r\n\r\n // await refs.value.validate()\r\n if (it.key === 'rest' && refs.value) {\r\n refs.value.resetFields()\r\n }\r\n it.click?.(props.model, refs.value, getTableInstant.value?.httpRequestInstance)\r\n }\r\n}\r\n\r\nconst queryTableRequest = async (model: Record<string, unknown>, formRef: { resetFields: () => void; validate: () => Promise<boolean> } | null, key?: string) => {\r\n if (key === 'query') {\r\n if (isParentTable.value) {\r\n getTableInstant.value?.httpRequestInstance?.(model)\r\n }\r\n // else if (formRef) {\r\n // await formRef.validate()\r\n // }\r\n } else if (key === 'rest' && formRef) {\r\n if (isParentTable.value) {\r\n getTableInstant.value?.httpRequestInstance?.(model)\r\n }\r\n formRef.resetFields()\r\n }\r\n}\r\n\r\nconst initFormItemOptions = (opts: Record<string, unknown>) => {\r\n if (isParentTable.value) {\r\n const { style, ...rest } = opts\r\n return { style: { marginBottom: '10px', ...(style as Record<string, unknown>) }, ...rest }\r\n }\r\n return opts\r\n}\r\n\r\nconst confirm = () => emit('confirm', refs.value, props.model)\r\nconst reset = () => emit('reset', refs.value, props.model)\r\n\r\n// 自定义弹窗\r\nconst createDialogInstance = (() =>\r\n instance?.ctx?.dialogInstance ? instance.ctx.dialogInstance() : useDialog)()\r\nconst customerForm = createDialogInstance()\r\nconst customerTable = createDialogInstance()\r\n\r\nconst handleRefresh = () => {\r\n // 保留原有逻辑\r\n}\r\n\r\nconst getFormRowsFun = () => {\r\n return {\r\n data: formItemRowsList.value.map((it) => ({\r\n ...it,\r\n label: it.label,\r\n prop: it.prop,\r\n isHidden: !!it.isHidden,\r\n width: it.width\r\n })),\r\n columns: [\r\n { type: 'selection', width: 50 },\r\n { label: '名称(列)', key: 'label' },\r\n { label: '属性(Key)', key: 'prop' },\r\n {\r\n label: '列宽',\r\n width: 180,\r\n render: (_text: unknown, row: Record<string, unknown>) => {\r\n return h('div', [\r\n h(ElInput, {\r\n size: 'small',\r\n maxlength: 3,\r\n formatter: (value: string) => value.replace(/^0|[^0-9]/g, ''),\r\n modelValue: row.width,\r\n 'onUpdate:modelValue': (val: unknown) => {\r\n row.width = val\r\n }\r\n }, {\r\n prepend: () => '宽度',\r\n append: () => 'px'\r\n })\r\n ])\r\n }\r\n }\r\n ]\r\n }\r\n}\r\n\r\nconst getCustomerTableInfo = () => {\r\n return {\r\n dataSource: [],\r\n columns: [\r\n { type: 'selection', width: 50 },\r\n { label: '名称(列)', key: 'label' },\r\n { label: '属性(Key)', key: 'tableProp' },\r\n {\r\n label: '列宽',\r\n width: 180,\r\n render: (_text: unknown, row: Record<string, unknown>) => {\r\n return h('div', [\r\n h(ElInput, {\r\n size: 'small',\r\n maxlength: 3,\r\n formatter: (value: string) => value.replace(/^0|[^0-9]/g, ''),\r\n modelValue: row.width,\r\n 'onUpdate:modelValue': (val: unknown) => {\r\n row.width = val\r\n }\r\n }, {\r\n prepend: () => '宽度',\r\n append: () => 'px'\r\n })\r\n ])\r\n }\r\n }\r\n ]\r\n }\r\n}\r\n\r\nconst handleCustomerForm = () => {\r\n const formRows = getFormRowsFun()\r\n customerForm({\r\n title: '自定义查询',\r\n width: '800px',\r\n isDraggable: true,\r\n render: () =>\r\n h(EsTable, {\r\n dataSource: formRows.data,\r\n columns: formRows.columns,\r\n options: {\r\n multiSelect: true,\r\n expand: false,\r\n snIndex: false,\r\n loading: false,\r\n border: true,\r\n size: 'small'\r\n },\r\n pagination: {\r\n pageSize: 10,\r\n current: 1,\r\n total: formRows.data?.length || 0\r\n }\r\n }),\r\n configBtn: [\r\n {\r\n name: '取消',\r\n icon: 'Close',\r\n click: (_instance: unknown, { close }: { close: () => void }) => close()\r\n },\r\n {\r\n name: '确认',\r\n type: 'primary',\r\n icon: 'Check',\r\n click: (_instance: unknown, { close }: { close: () => void }) => close()\r\n }\r\n ]\r\n })\r\n}\r\n\r\nconst handleTableItemOption = () => {\r\n const formRows = getCustomerTableInfo()\r\n customerTable({\r\n title: '自定义表格',\r\n width: '800px',\r\n render: () =>\r\n h(EsTable, {\r\n dataSource: formRows.dataSource,\r\n columns: formRows.columns\r\n })\r\n })\r\n}\r\n\r\n// 生命周期\r\nnextTick(() => {\r\n formInstance.value = refs.value as Record<string, unknown>\r\n ;(instance?.ctx as Record<string, unknown>)?.bodyFormInstance?.(formInstance.value)\r\n})\r\n\r\n// 子组件定义\r\nconst RenderBtn = defineComponent({\r\n props: {\r\n row: Object,\r\n formItemList: Array,\r\n formModel: Object,\r\n render: Function,\r\n ellipsis: Boolean\r\n },\r\n setup(props) {\r\n return () => {\r\n const { formItemList, formModel, row } = props\r\n const renderContent = props.render?.(row, formModel, formItemList, h) || ''\r\n return typeof renderContent === 'string' ? h('span', renderContent) : renderContent\r\n }\r\n }\r\n})\r\n\r\nconst RenderDomForm = defineComponent({\r\n props: {\r\n row: Object,\r\n index: Number,\r\n datakey: String,\r\n render: Function,\r\n model: Object,\r\n ellipsis: Boolean\r\n },\r\n setup(props) {\r\n return () => {\r\n const { row, index, model } = props\r\n const renderContent = props.render?.(h, model, { row, index }) || ''\r\n return typeof renderContent === 'string' ? h('span', renderContent) : renderContent\r\n }\r\n }\r\n})\r\n\r\n// 暴露给外部的方法,用于手动触发指定表单项的请求\r\nconst formItmeRequestInstance = async (propsList: string[]) => {\r\n const list = formItemListFilter.value\r\n const targetItems = list.filter((it) => it && propsList.includes(it.prop))\r\n if (!targetItems.length) return\r\n\r\n const rows = await getEveryFormQueryField(targetItems, fieldFieldOutputGlobal)\r\n rows.forEach((resultApiOption) => {\r\n if (!resultApiOption) return\r\n const itemIndex = formItemRowsList.value.findIndex((it) => it && it.prop === resultApiOption.prop)\r\n if (itemIndex !== -1) {\r\n formItemRowsList.value[itemIndex] = {\r\n ...formItemRowsList.value[itemIndex],\r\n dataOptions: resultApiOption.listData as Array<{ label: string; value: unknown }>\r\n }\r\n }\r\n })\r\n}\r\n\r\n// 暴露组件实例方法\r\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 }\r\n\r\ndefineExpose({\r\n formItmeRequestInstance,\r\n getFormRef,\r\n validate: () => getFormRef()?.validate(),\r\n resetFields: () => getFormRef()?.resetFields(),\r\n clearValidate: (props?: string | string[]) => getFormRef()?.clearValidate(props),\r\n validateField: (props: string | string[]) => getFormRef()?.validateField(props),\r\n scrollToField: (prop: string) => getFormRef()?.scrollToField(prop)\r\n})\r\n</script>\r\n\r\n<style lang=\"scss\" scoped>\r\n.es-form {\r\n :deep(.el-form-item) {\r\n margin-bottom: 18px;\r\n }\r\n\r\n :deep(.el-form-item__label) {\r\n font-weight: 500;\r\n }\r\n\r\n .buttonOperate {\r\n display: flex;\r\n align-items: center;\r\n flex-wrap: wrap;\r\n gap: 8px;\r\n }\r\n\r\n .leftRightBtn {\r\n display: flex;\r\n justify-content: space-between;\r\n align-items: center;\r\n width: 100%;\r\n\r\n .btn-left,\r\n .btn-right {\r\n display: flex;\r\n align-items: center;\r\n }\r\n }\r\n\r\n .btn-formItem {\r\n margin-bottom: 0;\r\n }\r\n\r\n .formItemCols {\r\n width: 100%;\r\n }\r\n}\r\n</style>\r\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","t","parts","camelKey","i","__props","_createBlock","_unref","ElTableColumn","_normalizeProps","_mergeProps","_openBlock","_createElementBlock","_Fragment","item","_createSlots","_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","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]}
|