es-plus-ui 1.2.0 → 1.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"es-plus.js","sources":["../node_modules/element-plus/es/locale/lang/zh-cn.mjs","../src/components/es-dialog/src/render-jsx.vue","../src/components/es-table/src/column-item.vue","../src/components/es-table/src/table-btns.vue","../src/composables/use-table-resize.ts","../src/composables/use-table-selection.ts","../src/utils/shared.ts","../src/components/es-table/src/component.vue","../src/components/es-table/index.ts","../src/composables/use-form-inputs.ts","../src/composables/use-form-layout.ts","../src/composables/use-form-request.ts","../src/components/es-dialog/src/use-dialog.ts","../src/components/es-form/src/es-form.vue","../src/components/es-form/index.ts","../src/components/es-dialog/src/component.vue","../src/components/es-dialog/index.ts","../src/components/es-crud-page/src/es-crud-page.vue","../src/components/es-crud-page/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>\r\n <!-- 分组列处理 -->\r\n <el-table-column v-if=\"cols.groups && Array.isArray(cols.groups)\" v-bind=\"columnBindAttr(cols)\">\r\n <el-table-column\r\n v-for=\"(item, index) in cols.groups\"\r\n :key=\"item.prop || item.key || index\"\r\n v-bind=\"columnBindAttr({ ...item, columnIndex: index })\"\r\n >\r\n <template v-if=\"item.render && typeof item.render === 'function'\" #default=\"scope\">\r\n <render-dom-tb\r\n v-if=\"scope && scope.row\"\r\n :row=\"scope.row\"\r\n :index=\"scope.$index\"\r\n :data-key=\"item.key\"\r\n :render=\"item.render\"\r\n />\r\n <span v-else>-</span>\r\n </template>\r\n <template v-else-if=\"item.scopedSlots && item.scopedSlots.customRender\" #default=\"scope\">\r\n <slot\r\n v-if=\"scope && scope.row\"\r\n v-bind=\"{ ...item, row: scope.row, column: scope.column, scope: scope }\"\r\n :name=\"item.scopedSlots.customRender\"\r\n />\r\n <span v-else>-</span>\r\n </template>\r\n </el-table-column>\r\n </el-table-column>\r\n\r\n <!-- 自定义渲染函数列 -->\r\n <el-table-column v-else-if=\"cols.render && typeof cols.render === 'function'\" v-bind=\"columnBindAttr(cols)\">\r\n <template #default=\"scope\">\r\n <render-dom-tb\r\n v-if=\"scope && scope.row\"\r\n :row=\"scope.row\"\r\n :index=\"scope.$index\"\r\n :data-key=\"cols.key\"\r\n :render=\"cols.render\"\r\n />\r\n <span v-else>-</span>\r\n </template>\r\n </el-table-column>\r\n\r\n <!-- 作用域插槽列 -->\r\n <el-table-column v-else-if=\"cols.scopedSlots && cols.scopedSlots.customRender\" v-bind=\"columnBindAttr(cols)\">\r\n <template #default=\"scope\">\r\n <slot\r\n v-if=\"scope && scope.row\"\r\n v-bind=\"{ ...cols, row: scope.row, column: scope.column, scope: scope }\"\r\n :name=\"cols.scopedSlots.customRender\"\r\n />\r\n <span v-else>-</span>\r\n </template>\r\n </el-table-column>\r\n\r\n <!-- 省略号工具提示列 -->\r\n <el-table-column v-else-if=\"cols.ellipsis && typeof cols.ellipsis === 'boolean'\" show-overflow-tooltip v-bind=\"columnBindAttr(cols)\" />\r\n\r\n <!-- 普通列 -->\r\n <el-table-column v-else v-bind=\"columnBindAttr(cols)\" />\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { h, defineComponent, inject } from 'vue'\r\nimport { ElTableColumn } from 'element-plus'\r\nimport type { TableColumn } from '../../../types'\r\n\r\nconst props = defineProps<{\r\n cols: TableColumn\r\n}>()\r\n\r\nconst esPlus = inject<Record<string, unknown>>('$EsPlus', {})\r\n\r\n// 函数式组件定义\r\nconst RenderDomTb = defineComponent({\r\n props: {\r\n row: { type: Object, default: () => ({}) },\r\n index: { type: Number, default: 0 },\r\n dataKey: String,\r\n render: { type: Function, required: true }\r\n },\r\n setup(props) {\r\n return () => {\r\n const { row, index, dataKey, render } = props\r\n if (!row) return h('span', '-')\r\n const value = dataKey ? row[dataKey] : null\r\n try {\r\n const renderResult = render(h, { value, row, index })\r\n if (typeof renderResult === 'string') return h('span', renderResult)\r\n return renderResult\r\n } catch (error) {\r\n return h('span', '-')\r\n }\r\n }\r\n }\r\n})\r\n\r\nconst firstWordUpperCase = (str: string): string => {\r\n return str.charAt(0).toUpperCase() + str.slice(1).toLowerCase()\r\n}\r\n\r\nconst columnBindAttr = (cols: TableColumn) => {\r\n const options: Record<string, unknown> = {}\r\n\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 camelKey = parts[0]\r\n for (let i = 1; i < parts.length; i++) {\r\n camelKey += firstWordUpperCase(parts[i])\r\n }\r\n options[camelKey] = cols[t]\r\n } else if (t === 'key') {\r\n options.prop = cols[t]\r\n options[t] = cols[t]\r\n } else if (t === 'label' && cols.labelKey && typeof esPlus.t === 'function') {\r\n options.label = (esPlus.t as (k: string) => string)(cols.labelKey)\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</script>\r\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, inject } 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 esPlus = inject<Record<string, unknown>>('$EsPlus', {})\n\nconst hasPermission = (_btnList: unknown[], pvalue?: string) => {\n if (!pvalue) return true\n const permFn = esPlus.permission\n if (typeof permFn === 'function') return (permFn as (v: string) => boolean)(pvalue)\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\nconst esPlus = inject<Record<string, unknown>>('$EsPlus', {})\r\n\r\nconst checkPermission = (pvalue?: string): boolean => {\r\n if (!pvalue) return true\r\n const fn = esPlus.permission\r\n return typeof fn === 'function' ? (fn as (v: string) => boolean)(pvalue) : true\r\n}\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?.filter((btn: any) => checkPermission(btn.permissionValue))\r\n .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=\"translateLabel(item)\"\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 <template v-for=\"(it, inx) in colRightLeftList.colLeftBtn\" :key=\"it.key || inx\">\r\n <el-button\r\n v-if=\"checkPermission(it.permissionValue)\"\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 >\r\n {{ it.name }}\r\n </el-button>\r\n </template>\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 <template v-for=\"(it, inx) in colRightLeftList.colRightBtn\" :key=\"it.key || inx\">\r\n <el-button\r\n v-if=\"checkPermission(it.permissionValue)\"\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 >\r\n {{ it.name }}\r\n </el-button>\r\n </template>\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 <template v-for=\"(it, inx) in configBtn\" :key=\"it.key || inx\">\r\n <el-button\r\n v-if=\"checkPermission(it.permissionValue)\"\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 >\r\n {{ it.name }}\r\n </el-button>\r\n </template>\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\nconst esPlus = inject<Record<string, unknown>>('$EsPlus', {})\r\n\r\nconst checkPermission = (pvalue?: string): boolean => {\r\n if (!pvalue) return true\r\n const fn = esPlus.permission\r\n return typeof fn === 'function' ? (fn as (v: string) => boolean)(pvalue) : true\r\n}\r\n\r\nconst translateLabel = (item: FormItemOption): string => {\r\n if (item.labelKey && typeof esPlus.t === 'function') {\r\n return (esPlus.t as (k: string) => string)(item.labelKey)\r\n }\r\n return item.label\r\n}\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 <template v-for=\"(it, inx) in configBtn\" :key=\"it.key || inx\">\n <el-button\n v-if=\"checkPermission(it.permissionValue)\"\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 >\n {{ it.name }}\n </el-button>\n </template>\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 esPlus = inject<Record<string, unknown>>('$EsPlus', {})\n\nconst checkPermission = (pvalue?: string): boolean => {\n if (!pvalue) return true\n const fn = esPlus.permission\n return typeof fn === 'function' ? (fn as (v: string) => boolean)(pvalue) : true\n}\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 class=\"es-crud-page\">\n <es-table\n ref=\"tableRef\"\n :columns=\"mergedColumns\"\n :options=\"mergedOptions\"\n v-model:data-source=\"tableData\"\n v-model:pagination=\"paginationState\"\n v-bind=\"$attrs\"\n >\n <es-form\n v-if=\"schema.formItems && schema.formItems.length\"\n ref=\"formRef\"\n :model=\"queryModel\"\n :form-item-list=\"schema.formItems\"\n :config-btn=\"mergedQueryBtns\"\n />\n <template v-for=\"(_, name) in $slots\" #[name]=\"slotData\">\n <slot :name=\"name\" v-bind=\"slotData || {}\" />\n </template>\n </es-table>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, reactive, computed, watch } from 'vue'\nimport EsForm from '../../es-form/src/es-form.vue'\nimport EsTable from '../../es-table/src/component.vue'\nimport useDialog from '../../es-dialog/src/use-dialog'\nimport type { CrudPageSchema, CrudAction } from './types'\nimport type { BtnConfig, TableColumn } from '../../../types'\n\ndefineOptions({ name: 'EsCrudPage' })\n\nconst props = withDefaults(\n defineProps<{\n schema: CrudPageSchema\n httpRequest?: (params: Record<string, unknown>) => Promise<unknown>\n autoLoad?: boolean\n }>(),\n {\n autoLoad: true\n }\n)\n\nconst emit = defineEmits<{\n 'query': [model: Record<string, unknown>]\n 'add': []\n 'edit': [row: Record<string, unknown>]\n 'delete': [row: Record<string, unknown>]\n 'view': [row: Record<string, unknown>]\n 'export': [model: Record<string, unknown>]\n 'row-click': [row: Record<string, unknown>]\n 'btn-click': [key: string, row?: Record<string, unknown>]\n}>()\n\nconst tableRef = ref<any>(null)\nconst formRef = ref<any>(null)\nconst tableData = ref<Record<string, unknown>[]>([])\n\nconst queryModel = reactive<Record<string, unknown>>({})\n\nwatch(\n () => props.schema.formItems,\n (items) => {\n if (items) {\n items.forEach((item) => {\n if (item.prop && !(item.prop in queryModel)) {\n queryModel[item.prop] = ''\n }\n })\n }\n },\n { immediate: true }\n)\n\nconst paginationState = ref({\n current: 1,\n pageSize: 10,\n total: 0,\n ...(props.schema.pagination || {})\n})\n\nconst actions = computed<CrudAction[]>(() => props.schema.actions || ['add', 'edit', 'delete'])\n\nconst mergedQueryBtns = computed<BtnConfig[]>(() => {\n if (props.schema.queryBtns) return props.schema.queryBtns\n\n const btns: BtnConfig[] = [\n { name: '查询', type: 'primary', key: 'query', triggerEvent: true },\n { name: '重置', key: 'rest', triggerEvent: true },\n ]\n if (actions.value.includes('add')) {\n btns.push({\n name: '新增',\n type: 'primary',\n key: 'add',\n icon: 'Plus',\n click: () => handleAdd()\n })\n }\n if (actions.value.includes('export')) {\n btns.push({\n name: '导出',\n key: 'export',\n icon: 'Download',\n click: () => emit('export', { ...queryModel })\n })\n }\n return btns\n})\n\nconst mergedColumns = computed<TableColumn[]>(() => {\n const cols = [...(props.schema.columns || [])]\n\n const hasActionCol = cols.some((c) => c.prop === 'action' || c.btns)\n if (!hasActionCol && actions.value.some((a) => ['edit', 'delete', 'view'].includes(a))) {\n const actionBtns: any[] = []\n if (actions.value.includes('view')) {\n actionBtns.push({ name: '查看', type: 'primary', clickEvent: (row: any) => handleView(row) })\n }\n if (actions.value.includes('edit')) {\n actionBtns.push({ name: '编辑', type: 'primary', clickEvent: (row: any) => handleEdit(row) })\n }\n if (actions.value.includes('delete')) {\n actionBtns.push({ name: '删除', type: 'danger', clickEvent: (row: any) => handleDelete(row) })\n }\n cols.push({\n prop: 'action',\n label: '操作',\n width: actionBtns.length * 80 + 20,\n fixed: 'right',\n btns: actionBtns\n })\n }\n return cols\n})\n\nconst mergedOptions = computed(() => {\n const base: Record<string, unknown> = {\n border: true,\n isInitRun: props.autoLoad,\n ...(props.schema.tableOptions || {})\n }\n if (props.httpRequest) {\n base.httpRequest = props.httpRequest\n }\n const hasHttp = base.httpRequest && typeof base.httpRequest === 'function'\n if (hasHttp && !base.apiParams && !base.actionUrl) {\n base.apiParams = { url: '/crud-page', method: 'GET' }\n }\n return base\n})\n\nfunction handleAdd() {\n if (props.schema.dialogFormItems?.length) {\n openFormDialog('新增', {})\n }\n emit('add')\n}\n\nfunction handleEdit(row: Record<string, unknown>) {\n if (props.schema.dialogFormItems?.length) {\n openFormDialog('编辑', { ...row })\n }\n emit('edit', row)\n}\n\nfunction handleDelete(row: Record<string, unknown>) {\n emit('delete', row)\n}\n\nfunction handleView(row: Record<string, unknown>) {\n emit('view', row)\n}\n\nfunction openFormDialog(title: string, row: Record<string, unknown>) {\n const dialog = useDialog()\n const formData = reactive<Record<string, unknown>>({})\n\n props.schema.dialogFormItems?.forEach((item) => {\n if (item.prop) {\n formData[item.prop] = row[item.prop] ?? ''\n }\n })\n\n const dialogWidth = props.schema.dialogOptions?.width || '600px'\n\n dialog({\n title,\n width: dialogWidth,\n ...(props.schema.dialogOptions || {}),\n render: (h: any, { registerRef }: any) => {\n return h(EsForm, {\n ref: (el: any) => el && registerRef('dialogForm', el),\n model: formData,\n formItemList: props.schema.dialogFormItems,\n layoutFormProps: {\n rowLayProps: { gutter: 16 },\n fromLayProps: { isBtnHidden: true }\n }\n })\n },\n configBtn: [\n {\n name: '取消',\n click: (_: any, { close }: any) => close()\n },\n {\n name: '确定',\n type: 'primary',\n click: async (_: any, { close, getRefs }: any) => {\n const dialogForm = getRefs('dialogForm')\n if (dialogForm?.validate) {\n await dialogForm.validate()\n }\n emit('btn-click', title === '新增' ? 'add-confirm' : 'edit-confirm', formData)\n close()\n refresh()\n }\n }\n ]\n })\n}\n\nfunction refresh() {\n tableRef.value?.httpRequestInstance?.()\n}\n\nfunction getSelectedRows(): Record<string, unknown>[] {\n return tableRef.value?.getSelectionRows?.() || []\n}\n\ndefineExpose({\n refresh,\n getSelectedRows,\n tableRef,\n formRef,\n queryModel\n})\n</script>\n\n<style scoped>\n.es-crud-page {\n width: 100%;\n}\n</style>\n","import EsCrudPage from './src/es-crud-page.vue'\n\nEsCrudPage.install = function (app: any) {\n app.component(EsCrudPage.name, EsCrudPage)\n}\n\nexport default EsCrudPage\nexport type { CrudPageSchema, CrudAction, CrudPageProps, CrudPageEmits, CrudPageExpose } from './src/types'\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 EsCrudPage from './components/es-crud-page'\nimport SvgIcon from './components/svg-icon'\n\n// 组件列表\nconst components = [EsDialog, EsForm, EsTable, EsCrudPage, 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 EsCrudPage,\n SvgIcon,\n useDialog,\n install\n}\n\n// 类型导出\nexport type { CrudPageSchema, CrudAction } from './components/es-crud-page'\nexport type {\n FormItemOption,\n ApiParams,\n BtnConfig,\n LayoutFormProps,\n TableColumn,\n TableOptions,\n PaginationConfig,\n DialogOptions,\n EsFormInstance,\n EsTableInstance,\n EsPlusOptions\n} from './types'\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","esPlus","inject","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","permFn","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","getCurrentInstance","$esPlusTable","checkPermission","fn","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","translateLabel","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","queryModel","items","paginationState","actions","mergedQueryBtns","btns","handleAdd","mergedColumns","c","a","actionBtns","handleView","handleEdit","handleDelete","base","openFormDialog","title","dialog","dialogWidth","registerRef","getRefs","dialogForm","refresh","getSelectedRows","$attrs","$slots","slotData","_guardReactiveProps","EsCrudPage","isExternal","isExternals","iconName","svgClass","styleExternalIcon","SvgIcon","components","install","component","version"],"mappings":"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","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"es-plus.js","sources":["../node_modules/element-plus/es/locale/lang/zh-cn.mjs","../src/components/es-dialog/src/render-jsx.vue","../src/components/es-table/src/column-item.vue","../src/components/es-table/src/table-btns.vue","../src/composables/use-table-resize.ts","../src/composables/use-table-selection.ts","../src/utils/shared.ts","../src/components/es-table/src/component.vue","../src/components/es-table/index.ts","../src/composables/use-form-inputs.ts","../src/composables/use-form-layout.ts","../src/composables/use-form-request.ts","../src/components/es-dialog/src/use-dialog.ts","../src/components/es-form/src/es-form.vue","../src/components/es-form/index.ts","../src/components/es-dialog/src/component.vue","../src/components/es-dialog/index.ts","../src/components/es-crud-page/src/es-crud-page.vue","../src/components/es-crud-page/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>\r\n <!-- 分组列处理 -->\r\n <el-table-column v-if=\"cols.groups && Array.isArray(cols.groups)\" v-bind=\"columnBindAttr(cols)\">\r\n <el-table-column\r\n v-for=\"(item, index) in cols.groups\"\r\n :key=\"item.prop || item.key || index\"\r\n v-bind=\"columnBindAttr({ ...item, columnIndex: index })\"\r\n >\r\n <template v-if=\"item.render && typeof item.render === 'function'\" #default=\"scope\">\r\n <render-dom-tb\r\n v-if=\"scope && scope.row\"\r\n :row=\"scope.row\"\r\n :index=\"scope.$index\"\r\n :data-key=\"item.key\"\r\n :render=\"item.render\"\r\n />\r\n <span v-else>-</span>\r\n </template>\r\n <template v-else-if=\"item.scopedSlots && item.scopedSlots.customRender\" #default=\"scope\">\r\n <slot\r\n v-if=\"scope && scope.row\"\r\n v-bind=\"{ ...item, row: scope.row, column: scope.column, scope: scope }\"\r\n :name=\"item.scopedSlots.customRender\"\r\n />\r\n <span v-else>-</span>\r\n </template>\r\n </el-table-column>\r\n </el-table-column>\r\n\r\n <!-- 自定义渲染函数列 -->\r\n <el-table-column v-else-if=\"cols.render && typeof cols.render === 'function'\" v-bind=\"columnBindAttr(cols)\">\r\n <template #default=\"scope\">\r\n <render-dom-tb\r\n v-if=\"scope && scope.row\"\r\n :row=\"scope.row\"\r\n :index=\"scope.$index\"\r\n :data-key=\"cols.key\"\r\n :render=\"cols.render\"\r\n />\r\n <span v-else>-</span>\r\n </template>\r\n </el-table-column>\r\n\r\n <!-- 作用域插槽列 -->\r\n <el-table-column v-else-if=\"cols.scopedSlots && cols.scopedSlots.customRender\" v-bind=\"columnBindAttr(cols)\">\r\n <template #default=\"scope\">\r\n <slot\r\n v-if=\"scope && scope.row\"\r\n v-bind=\"{ ...cols, row: scope.row, column: scope.column, scope: scope }\"\r\n :name=\"cols.scopedSlots.customRender\"\r\n />\r\n <span v-else>-</span>\r\n </template>\r\n </el-table-column>\r\n\r\n <!-- 省略号工具提示列 -->\r\n <el-table-column v-else-if=\"cols.ellipsis && typeof cols.ellipsis === 'boolean'\" show-overflow-tooltip v-bind=\"columnBindAttr(cols)\" />\r\n\r\n <!-- 普通列 -->\r\n <el-table-column v-else v-bind=\"columnBindAttr(cols)\" />\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { h, defineComponent, inject } from 'vue'\r\nimport { ElTableColumn } from 'element-plus'\r\nimport type { TableColumn } from '../../../types'\r\n\r\nconst props = defineProps<{\r\n cols: TableColumn\r\n}>()\r\n\r\nconst esPlus = inject<Record<string, unknown>>('$EsPlus', {})\r\n\r\n// 函数式组件定义\r\nconst RenderDomTb = defineComponent({\r\n props: {\r\n row: { type: Object, default: () => ({}) },\r\n index: { type: Number, default: 0 },\r\n dataKey: String,\r\n render: { type: Function, required: true }\r\n },\r\n setup(props) {\r\n return () => {\r\n const { row, index, dataKey, render } = props\r\n if (!row) return h('span', '-')\r\n const value = dataKey ? row[dataKey] : null\r\n try {\r\n const renderResult = render(h, { value, row, index })\r\n if (typeof renderResult === 'string') return h('span', renderResult)\r\n return renderResult\r\n } catch (error) {\r\n return h('span', '-')\r\n }\r\n }\r\n }\r\n})\r\n\r\nconst firstWordUpperCase = (str: string): string => {\r\n return str.charAt(0).toUpperCase() + str.slice(1).toLowerCase()\r\n}\r\n\r\nconst columnBindAttr = (cols: TableColumn) => {\r\n const options: Record<string, unknown> = {}\r\n\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 camelKey = parts[0]\r\n for (let i = 1; i < parts.length; i++) {\r\n camelKey += firstWordUpperCase(parts[i])\r\n }\r\n options[camelKey] = cols[t]\r\n } else if (t === 'key') {\r\n options.prop = cols[t]\r\n options[t] = cols[t]\r\n } else if (t === 'label' && cols.labelKey && typeof esPlus.t === 'function') {\r\n options.label = (esPlus.t as (k: string) => string)(cols.labelKey)\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</script>\r\n","<template>\r\n <div v-if=\"showContainer\" class=\"flex-float btns\">\r\n <div class=\"left-text\">\r\n {{ leftText }}\r\n </div>\r\n\r\n <div class=\"btn-container_block\">\r\n <!-- 左侧按钮组 -->\r\n <div class=\"btn-left\">\r\n <template v-for=\"(item, index) in processedBtnLeft\" :key=\"item.name\">\r\n <div v-if=\"!item.isHide\" :style=\"buttonContainerStyle(index)\">\r\n <render-dom v-if=\"item.render && typeof item.render === 'function'\" :render=\"item.render\" />\r\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)\">\r\n {{ item.name }}\r\n </el-button>\r\n </div>\r\n </template>\r\n </div>\r\n\r\n <!-- 右侧按钮组 -->\r\n <div class=\"btn-right\">\r\n <template v-for=\"(item, index) in processedBtnRight\" :key=\"item.name\">\r\n <div v-if=\"!item.isHide\" :style=\"buttonContainerStyle(index)\">\r\n <render-dom v-if=\"item.render && typeof item.render === 'function'\" :render=\"item.render\" />\r\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)\">\r\n {{ item.name }}\r\n </el-button>\r\n </div>\r\n </template>\r\n </div>\r\n </div>\r\n </div>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { computed, h, inject } from 'vue'\r\nimport { ElButton } from 'element-plus'\r\n\r\nconst props = defineProps<{\r\n leftText?: string\r\n btnConfig?: Array<Record<string, unknown>>\r\n instance?: Record<string, unknown>\r\n}>()\r\n\r\nconst RenderDom = (props: { render: () => unknown }) => {\r\n if (!props.render || typeof props.render !== 'function') return null\r\n try {\r\n return props.render()\r\n } catch {\r\n return null\r\n }\r\n}\r\n\r\nRenderDom.props = {\r\n render: { type: Function, required: true }\r\n}\r\n\r\nconst esPlus = inject<Record<string, unknown>>('$EsPlus', {})\r\n\r\nconst hasPermission = (_btnList: unknown[], pvalue?: string) => {\r\n if (!pvalue) return true\r\n const permFn = esPlus.permission\r\n if (typeof permFn === 'function') return (permFn as (v: string) => boolean)(pvalue)\r\n return true\r\n}\r\n\r\nconst processButtonConfig = (config: Array<Record<string, unknown>>) => {\r\n return config.map((item) => {\r\n const processed = { ...item }\r\n const hasPerm = hasPermission([], item.permissionValue as string)\r\n\r\n if (!hasPerm) {\r\n processed.isHide = true\r\n } else if (typeof item.isHide === 'function') {\r\n processed.isHide = item.isHide()\r\n } else {\r\n processed.isHide = item.isHide || false\r\n }\r\n\r\n return processed\r\n })\r\n}\r\n\r\nconst processedBtnLeft = computed(() => {\r\n return processButtonConfig((props.btnConfig || []).filter((item) => item.code === 1)).filter((item) => !item.isHide)\r\n})\r\n\r\nconst processedBtnRight = computed(() => {\r\n return processButtonConfig((props.btnConfig || []).filter((item) => item.code === 2)).filter((item) => !item.isHide)\r\n})\r\n\r\nconst showContainer = computed(() => {\r\n return props.leftText || processedBtnLeft.value.length > 0 || processedBtnRight.value.length > 0\r\n})\r\n\r\nconst getDisabledState = (item: Record<string, unknown>) => {\r\n if (typeof item.disabled === 'function') {\r\n return item.disabled()\r\n }\r\n return item.disabled || false\r\n}\r\n\r\nconst buttonContainerStyle = (index: number) => {\r\n return {\r\n display: 'inline-block',\r\n marginLeft: index !== 0 ? '8px' : '0px'\r\n }\r\n}\r\n</script>\r\n\r\n<style lang=\"scss\" scoped>\r\n.btns {\r\n padding: 0;\r\n padding-bottom: 5px;\r\n display: flex;\r\n justify-content: space-between;\r\n align-items: center;\r\n}\r\n\r\n.left-text {\r\n color: rgb(125, 125, 125);\r\n font-size: 14px;\r\n // flex-grow: 1;\r\n}\r\n\r\n.btn-container_block {\r\n display: flex;\r\n justify-content: space-between;\r\n align-items: center;\r\n flex: 1;\r\n\r\n .btn-left {\r\n display: flex;\r\n justify-content: flex-start;\r\n align-items: center;\r\n flex-wrap: wrap;\r\n }\r\n\r\n .btn-right {\r\n display: flex;\r\n justify-content: flex-end;\r\n align-items: center;\r\n flex-wrap: wrap;\r\n }\r\n}\r\n\r\n@media (max-width: 768px) {\r\n .btns {\r\n flex-direction: column;\r\n align-items: flex-start;\r\n }\r\n\r\n .btn-container_block {\r\n flex-direction: column;\r\n align-items: flex-start;\r\n gap: 10px;\r\n\r\n .btn-left,\r\n .btn-right {\r\n width: 100%;\r\n justify-content: flex-start;\r\n }\r\n }\r\n}\r\n</style>\r\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\nconst esPlus = inject<Record<string, unknown>>('$EsPlus', {})\r\n\r\nconst checkPermission = (pvalue?: string): boolean => {\r\n if (!pvalue) return true\r\n const fn = esPlus.permission\r\n return typeof fn === 'function' ? (fn as (v: string) => boolean)(pvalue) : true\r\n}\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?.filter((btn: any) => checkPermission(btn.permissionValue))\r\n .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=\"translateLabel(item)\"\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 <template v-for=\"(it, inx) in colRightLeftList.colLeftBtn\" :key=\"it.key || inx\">\r\n <el-button\r\n v-if=\"checkPermission(it.permissionValue)\"\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 >\r\n {{ it.name }}\r\n </el-button>\r\n </template>\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 <template v-for=\"(it, inx) in colRightLeftList.colRightBtn\" :key=\"it.key || inx\">\r\n <el-button\r\n v-if=\"checkPermission(it.permissionValue)\"\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 >\r\n {{ it.name }}\r\n </el-button>\r\n </template>\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 <template v-for=\"(it, inx) in configBtn\" :key=\"it.key || inx\">\r\n <el-button\r\n v-if=\"checkPermission(it.permissionValue)\"\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 >\r\n {{ it.name }}\r\n </el-button>\r\n </template>\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\nconst esPlus = inject<Record<string, unknown>>('$EsPlus', {})\r\n\r\nconst checkPermission = (pvalue?: string): boolean => {\r\n if (!pvalue) return true\r\n const fn = esPlus.permission\r\n return typeof fn === 'function' ? (fn as (v: string) => boolean)(pvalue) : true\r\n}\r\n\r\nconst translateLabel = (item: FormItemOption): string => {\r\n if (item.labelKey && typeof esPlus.t === 'function') {\r\n return (esPlus.t as (k: string) => string)(item.labelKey)\r\n }\r\n return item.label\r\n}\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>\r\n <div class=\"dp-dialog_wrapper\">\r\n <el-dialog\r\n :class=\"['dg-dialog', initDialogCls]\"\r\n v-bind=\"filteredAttrs\"\r\n v-model=\"dialogVisible\"\r\n :draggable=\"props.isDraggable\"\r\n :width=\"props.width\"\r\n :show-close=\"false\"\r\n @close=\"beforeClose\"\r\n :fullscreen=\"filteredAttrs?.fullscreen ?? isFullscreen\"\r\n >\r\n <template #header>\r\n <template v-if=\"props.renderHeader\">\r\n <RenderJsx :render=\"props.renderHeader\" :instance=\"getCurrentInstanceModel\" />\r\n </template>\r\n <template v-else>\r\n <div>\r\n <span class=\"dialog-title\">{{ props.title }}</span>\r\n </div>\r\n <div class=\"btns\">\r\n <el-icon @click=\"handleFullscreen\" v-show=\"!props.hiddenFullBtn\">\r\n <FullScreen v-if=\"!isFullscreen\" />\r\n <CopyDocument v-else />\r\n </el-icon>\r\n <el-icon @click=\"handleClose\"><Close /></el-icon>\r\n </div>\r\n </template>\r\n </template>\r\n\r\n <div class=\"dialog_body_layouts\" :style=\"initDialogHeight\">\r\n <template v-if=\"props.render && typeof props.render === 'function'\">\r\n <RenderJsx\r\n :refs=\"renderBodyRefsObject\"\r\n :instance=\"getCurrentInstanceModel\"\r\n :render=\"props.render\"\r\n :components=\"{ EsTable, EsForm }\"\r\n :locale=\"locale\"\r\n />\r\n </template>\r\n </div>\r\n\r\n <template #footer v-if=\"!attrs.isHiddenFooter\">\r\n <span v-if=\"!slots.footer\" class=\"dialog-footer\">\r\n <template v-if=\"props.renderFooter && typeof props.renderFooter === 'function'\">\r\n <RenderJsx :render=\"props.renderFooter\" :instance=\"getCurrentInstanceModel\" />\r\n </template>\r\n <template v-else-if=\"props.configBtn && props.configBtn.length\">\r\n <template v-for=\"(it, inx) in configBtn\" :key=\"it.key || inx\">\r\n <el-button\r\n v-if=\"checkPermission(it.permissionValue)\"\r\n size=\"small\"\r\n v-bind=\"filterOptions(it)\"\r\n :icon=\"getCompIcon(it.icon)\"\r\n :disabled=\"typeof it.disabled === 'function' ? it.disabled() : it.disabled || false\"\r\n @click=\"() => {\r\n it.click?.(renderBodyRefsObject.currentRef, {\r\n close: handleClose,\r\n getRefs: (name?: string) => {\r\n if (name) return renderBodyRefsObject[name] || null\r\n return renderBodyRefsObject\r\n },\r\n dialogInstance\r\n })\r\n }\"\r\n >\r\n {{ it.name }}\r\n </el-button>\r\n </template>\r\n </template>\r\n </span>\r\n <slot v-else name=\"footer\" />\r\n </template>\r\n </el-dialog>\r\n </div>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { computed, ref, reactive, getCurrentInstance, provide, inject, useAttrs } from 'vue'\r\nimport { ElConfigProvider, ElDialog, ElButton, ElIcon } from 'element-plus'\r\nimport { FullScreen, Close, CopyDocument } from '@element-plus/icons-vue'\r\nimport RenderJsx from './render-jsx.vue'\r\nimport EsTable from '../../es-table'\r\nimport EsForm from '../../es-form'\r\nimport * as ElementPlusIconsVue from '@element-plus/icons-vue'\r\nimport zhCn from 'element-plus/es/locale/lang/zh-cn'\r\nimport type { BtnConfig } from '../../../types'\r\n\r\nconst props = defineProps<{\r\n title?: string\r\n visible?: boolean\r\n appendTo?: object | string\r\n hiddenFullBtn?: boolean\r\n width?: string | number\r\n isDraggable?: boolean\r\n confirmText?: string\r\n cancelText?: string\r\n configBtn?: BtnConfig[]\r\n maxHeight?: string | number\r\n isHiddenFooter?: boolean\r\n renderHeader?: Function\r\n renderFooter?: Function\r\n render?: Function\r\n fullscreen?: boolean\r\n}>()\r\n\r\nconst emit = defineEmits<{\r\n 'update:visible': [val: boolean]\r\n closed: [val: boolean]\r\n submit: [payload: any]\r\n}>()\r\n\r\nconst slots = defineSlots()\r\n\r\nconst instance = getCurrentInstance()\r\nconst attrs = useAttrs()\r\n\r\nconst extended = Object.fromEntries(Object.entries(ElementPlusIconsVue).map(([key]) => [key, ElementPlusIconsVue[key]]))\r\n\r\nconst lyFormInstance = ref(null)\r\nconst renderBodyRefsObject = reactive<Record<string, any>>({})\r\nconst isFullscreen = ref(false)\r\nconst dialogInstance = instance\r\nconst locale = ref(zhCn)\r\n\r\nconst esPlus = inject<Record<string, unknown>>('$EsPlus', {})\r\n\r\nconst checkPermission = (pvalue?: string): boolean => {\r\n if (!pvalue) return true\r\n const fn = esPlus.permission\r\n return typeof fn === 'function' ? (fn as (v: string) => boolean)(pvalue) : true\r\n}\r\n\r\nconst injectedLocale = inject('elLocale', null)\r\nif (injectedLocale) {\r\n locale.value = injectedLocale as any\r\n}\r\n\r\nprovide('elLocale', locale.value)\r\n\r\nconst getCompIcon = (key?: string) => {\r\n return key ? extended[key] || key : undefined\r\n}\r\n\r\nconst filterOptions = (it: BtnConfig) => {\r\n const { icon, ...opt } = it as Record<string, unknown>\r\n return opt\r\n}\r\n\r\nconst closeFullscreen = () => {\r\n setTimeout(() => {\r\n if (isFullscreen.value) {\r\n isFullscreen.value = false\r\n }\r\n }, 500)\r\n}\r\n\r\nconst handleFullscreen = () => {\r\n if (attrs?.fullscreen) return\r\n isFullscreen.value = !isFullscreen.value\r\n}\r\n\r\nconst handleClose = () => {\r\n emit('closed', false)\r\n closeFullscreen()\r\n}\r\n\r\nconst handleConfirm = () => {\r\n emit('submit', { renderBodyRefs: renderBodyRefsObject.currentRef, lyFormInstance, dialogInstance })\r\n}\r\n\r\nconst beforeClose = () => {\r\n emit('closed', false)\r\n closeFullscreen()\r\n}\r\n\r\nconst filteredAttrs = computed(() => {\r\n const { ...rest } = attrs\r\n return rest\r\n})\r\n\r\nconst initDialogCls = computed(() => {\r\n if (!isFullscreen.value) {\r\n if (props.maxHeight) return 'dialogShadow'\r\n return 'dialogAuto'\r\n }\r\n return 'dialogFull'\r\n})\r\n\r\nconst getMaxContentHeight = () => {\r\n const viewH = window.innerHeight\r\n return Math.max(viewH - 135, 200)\r\n}\r\n\r\nconst initDialogHeight = computed(() => {\r\n const viewH = getMaxContentHeight()\r\n if (!isFullscreen.value) {\r\n if (props.maxHeight) {\r\n return { maxHeight: typeof props.maxHeight === 'number' ? `${props.maxHeight}px` : props.maxHeight }\r\n }\r\n return { maxHeight: viewH + 'px' }\r\n }\r\n return { height: viewH + 'px' }\r\n})\r\n\r\nconst dialogVisible = computed({\r\n get: () => props.visible || false,\r\n set: (val) => {\r\n emit('update:visible', val)\r\n if (!val) {\r\n emit('closed', val)\r\n closeFullscreen()\r\n }\r\n }\r\n})\r\n\r\nconst getCurrentInstanceModel = computed(() => ({\r\n renderBodyRefs: renderBodyRefsObject.currentRef,\r\n renderBodyRefsObject,\r\n lyFormInstance,\r\n dialogInstance,\r\n getRefs: () => renderBodyRefsObject\r\n}))\r\n\r\nprovide('bodyFormInstance', (e: any) => {\r\n lyFormInstance.value = e\r\n})\r\n\r\nif (instance) {\r\n instance.exposed = {\r\n closed: handleClose\r\n }\r\n}\r\n</script>\r\n\r\n<style lang=\"scss\" scoped>\r\n.dp-dialog_wrapper {\r\n :deep(.dialogAuto) {\r\n margin: 0px !important;\r\n }\r\n :deep(.el-overlay-dialog) {\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n }\r\n :deep(.el-dialog) {\r\n padding: 10px;\r\n\r\n .el-dialog__footer {\r\n padding-top: 0px;\r\n }\r\n\r\n .el-dialog__body {\r\n padding: 10px 0px;\r\n }\r\n\r\n .el-dialog__header {\r\n border-bottom: 1px solid #eee;\r\n display: flex;\r\n padding: 0px 0px 10px 0px;\r\n align-items: center;\r\n justify-content: space-between;\r\n margin: 0;\r\n }\r\n }\r\n}\r\n\r\n.dialog-title {\r\n line-height: 24px;\r\n font-size: 14px;\r\n color: #303133;\r\n font-weight: bold;\r\n}\r\n\r\n.btns {\r\n display: flex;\r\n align-items: center;\r\n\r\n i {\r\n margin-right: 8px;\r\n font-size: 14px;\r\n cursor: pointer;\r\n\r\n &:last-child {\r\n margin-right: 0;\r\n }\r\n }\r\n}\r\n\r\n.dialog_body_layouts {\r\n overflow-y: auto;\r\n overflow-x: hidden;\r\n scrollbar-width: thin;\r\n scrollbar-color: #87a2bd26 #c8d5e147;\r\n}\r\n\r\n/* 滚动条样式 */\r\n*::-webkit-scrollbar {\r\n width: 14px;\r\n height: 14px;\r\n}\r\n\r\n*::-webkit-scrollbar-button {\r\n width: 0;\r\n height: 0;\r\n display: none;\r\n}\r\n\r\n*::-webkit-scrollbar-corner {\r\n background-color: transparent;\r\n}\r\n\r\n*::-webkit-scrollbar-thumb {\r\n min-height: 12px;\r\n border: 4px solid transparent;\r\n background-clip: content-box;\r\n border-radius: 7px;\r\n background-color: #c8d5e1;\r\n\r\n &:hover {\r\n background-color: #a8bbcf;\r\n }\r\n\r\n &:active {\r\n background-color: #87a2bd;\r\n }\r\n}\r\n\r\n*::-webkit-scrollbar-track {\r\n background-color: transparent;\r\n}\r\n\r\n*::-webkit-scrollbar-track-piece {\r\n background-color: transparent;\r\n}\r\n</style>\r\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>\r\n <div class=\"es-crud-page\">\r\n <es-table\r\n ref=\"tableRef\"\r\n :columns=\"mergedColumns\"\r\n :options=\"mergedOptions\"\r\n v-model:data-source=\"tableData\"\r\n v-model:pagination=\"paginationState\"\r\n v-bind=\"$attrs\"\r\n >\r\n <es-form\r\n v-if=\"schema.formItems && schema.formItems.length\"\r\n ref=\"formRef\"\r\n :model=\"queryModel\"\r\n :form-item-list=\"schema.formItems\"\r\n :config-btn=\"mergedQueryBtns\"\r\n />\r\n <template v-for=\"(_, name) in $slots\" #[name]=\"slotData\">\r\n <slot :name=\"name\" v-bind=\"slotData || {}\" />\r\n </template>\r\n </es-table>\r\n </div>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { ref, reactive, computed, watch } from 'vue'\r\nimport EsForm from '../../es-form/src/es-form.vue'\r\nimport EsTable from '../../es-table/src/component.vue'\r\nimport useDialog from '../../es-dialog/src/use-dialog'\r\nimport type { CrudPageSchema, CrudAction } from './types'\r\nimport type { BtnConfig, TableColumn } from '../../../types'\r\n\r\ndefineOptions({ name: 'EsCrudPage' })\r\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n schema: CrudPageSchema\r\n httpRequest?: (params: Record<string, unknown>) => Promise<unknown>\r\n autoLoad?: boolean\r\n }>(),\r\n {\r\n autoLoad: true\r\n }\r\n)\r\n\r\nconst emit = defineEmits<{\r\n 'query': [model: Record<string, unknown>]\r\n 'add': []\r\n 'edit': [row: Record<string, unknown>]\r\n 'delete': [row: Record<string, unknown>]\r\n 'view': [row: Record<string, unknown>]\r\n 'export': [model: Record<string, unknown>]\r\n 'row-click': [row: Record<string, unknown>]\r\n 'btn-click': [key: string, row?: Record<string, unknown>]\r\n}>()\r\n\r\nconst tableRef = ref<any>(null)\r\nconst formRef = ref<any>(null)\r\nconst tableData = ref<Record<string, unknown>[]>([])\r\n\r\nconst queryModel = reactive<Record<string, unknown>>({})\r\n\r\nwatch(\r\n () => props.schema.formItems,\r\n (items) => {\r\n if (items) {\r\n items.forEach((item) => {\r\n if (item.prop && !(item.prop in queryModel)) {\r\n queryModel[item.prop] = ''\r\n }\r\n })\r\n }\r\n },\r\n { immediate: true }\r\n)\r\n\r\nconst paginationState = ref({\r\n current: 1,\r\n pageSize: 10,\r\n total: 0,\r\n ...(props.schema.pagination || {})\r\n})\r\n\r\nconst actions = computed<CrudAction[]>(() => props.schema.actions || ['add', 'edit', 'delete'])\r\n\r\nconst mergedQueryBtns = computed<BtnConfig[]>(() => {\r\n if (props.schema.queryBtns) return props.schema.queryBtns\r\n\r\n const btns: BtnConfig[] = [\r\n { name: '查询', type: 'primary', key: 'query', triggerEvent: true },\r\n { name: '重置', key: 'rest', triggerEvent: true },\r\n ]\r\n if (actions.value.includes('add')) {\r\n btns.push({\r\n name: '新增',\r\n type: 'primary',\r\n key: 'add',\r\n icon: 'Plus',\r\n click: () => handleAdd()\r\n })\r\n }\r\n if (actions.value.includes('export')) {\r\n btns.push({\r\n name: '导出',\r\n key: 'export',\r\n icon: 'Download',\r\n click: () => emit('export', { ...queryModel })\r\n })\r\n }\r\n return btns\r\n})\r\n\r\nconst mergedColumns = computed<TableColumn[]>(() => {\r\n const cols = [...(props.schema.columns || [])]\r\n\r\n const hasActionCol = cols.some((c) => c.prop === 'action' || c.btns)\r\n if (!hasActionCol && actions.value.some((a) => ['edit', 'delete', 'view'].includes(a))) {\r\n const actionBtns: any[] = []\r\n if (actions.value.includes('view')) {\r\n actionBtns.push({ name: '查看', type: 'primary', clickEvent: (row: any) => handleView(row) })\r\n }\r\n if (actions.value.includes('edit')) {\r\n actionBtns.push({ name: '编辑', type: 'primary', clickEvent: (row: any) => handleEdit(row) })\r\n }\r\n if (actions.value.includes('delete')) {\r\n actionBtns.push({ name: '删除', type: 'danger', clickEvent: (row: any) => handleDelete(row) })\r\n }\r\n cols.push({\r\n prop: 'action',\r\n label: '操作',\r\n width: actionBtns.length * 80 + 20,\r\n fixed: 'right',\r\n btns: actionBtns\r\n })\r\n }\r\n return cols\r\n})\r\n\r\nconst mergedOptions = computed(() => {\r\n const base: Record<string, unknown> = {\r\n border: true,\r\n isInitRun: props.autoLoad,\r\n ...(props.schema.tableOptions || {})\r\n }\r\n if (props.httpRequest) {\r\n base.httpRequest = props.httpRequest\r\n }\r\n const hasHttp = base.httpRequest && typeof base.httpRequest === 'function'\r\n if (hasHttp && !base.apiParams && !base.actionUrl) {\r\n base.apiParams = { url: '/crud-page', method: 'GET' }\r\n }\r\n return base\r\n})\r\n\r\nfunction handleAdd() {\r\n if (props.schema.dialogFormItems?.length) {\r\n openFormDialog('新增', {})\r\n }\r\n emit('add')\r\n}\r\n\r\nfunction handleEdit(row: Record<string, unknown>) {\r\n if (props.schema.dialogFormItems?.length) {\r\n openFormDialog('编辑', { ...row })\r\n }\r\n emit('edit', row)\r\n}\r\n\r\nfunction handleDelete(row: Record<string, unknown>) {\r\n emit('delete', row)\r\n}\r\n\r\nfunction handleView(row: Record<string, unknown>) {\r\n emit('view', row)\r\n}\r\n\r\nfunction openFormDialog(title: string, row: Record<string, unknown>) {\r\n const dialog = useDialog()\r\n const formData = reactive<Record<string, unknown>>({})\r\n\r\n props.schema.dialogFormItems?.forEach((item) => {\r\n if (item.prop) {\r\n formData[item.prop] = row[item.prop] ?? ''\r\n }\r\n })\r\n\r\n const dialogWidth = props.schema.dialogOptions?.width || '600px'\r\n\r\n dialog({\r\n title,\r\n width: dialogWidth,\r\n ...(props.schema.dialogOptions || {}),\r\n render: (h: any, { registerRef }: any) => {\r\n return h(EsForm, {\r\n ref: (el: any) => el && registerRef('dialogForm', el),\r\n model: formData,\r\n formItemList: props.schema.dialogFormItems,\r\n layoutFormProps: {\r\n rowLayProps: { gutter: 16 },\r\n fromLayProps: { isBtnHidden: true }\r\n }\r\n })\r\n },\r\n configBtn: [\r\n {\r\n name: '取消',\r\n click: (_: any, { close }: any) => close()\r\n },\r\n {\r\n name: '确定',\r\n type: 'primary',\r\n click: async (_: any, { close, getRefs }: any) => {\r\n const dialogForm = getRefs('dialogForm')\r\n if (dialogForm?.validate) {\r\n await dialogForm.validate()\r\n }\r\n emit('btn-click', title === '新增' ? 'add-confirm' : 'edit-confirm', formData)\r\n close()\r\n refresh()\r\n }\r\n }\r\n ]\r\n })\r\n}\r\n\r\nfunction refresh() {\r\n tableRef.value?.httpRequestInstance?.()\r\n}\r\n\r\nfunction getSelectedRows(): Record<string, unknown>[] {\r\n return tableRef.value?.getSelectionRows?.() || []\r\n}\r\n\r\ndefineExpose({\r\n refresh,\r\n getSelectedRows,\r\n tableRef,\r\n formRef,\r\n queryModel\r\n})\r\n</script>\r\n\r\n<style scoped>\r\n.es-crud-page {\r\n width: 100%;\r\n}\r\n</style>\r\n","import EsCrudPage from './src/es-crud-page.vue'\r\n\r\nEsCrudPage.install = function (app: any) {\r\n app.component(EsCrudPage.name, EsCrudPage)\r\n}\r\n\r\nexport default EsCrudPage\r\nexport type { CrudPageSchema, CrudAction, CrudPageProps, CrudPageEmits, CrudPageExpose } from './src/types'\r\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'\r\nimport EsDialog from './components/es-dialog'\r\nimport useDialog from './components/es-dialog/src/use-dialog'\r\nimport EsForm from './components/es-form'\r\nimport EsTable from './components/es-table'\r\nimport EsCrudPage from './components/es-crud-page'\r\nimport SvgIcon from './components/svg-icon'\r\n\r\n// 组件列表\r\nconst components = [EsDialog, EsForm, EsTable, EsCrudPage, SvgIcon]\r\n\r\n// Vue 3 插件安装函数\r\nconst install = (app: any, options: Record<string, unknown> = {}) => {\r\n components.forEach((component) => {\r\n if (component.name) {\r\n app.component(component.name, component)\r\n }\r\n })\r\n\r\n if (options.globalProperties !== false) {\r\n app.config.globalProperties.$useDialog = useDialog\r\n\r\n components.forEach((component: any) => {\r\n if (component.isPlugin && component.Plugin) {\r\n app.use(component.Plugin, options[component.name] || {})\r\n }\r\n })\r\n }\r\n\r\n app.provide('$EsPlus', {\r\n useDialog,\r\n ...options\r\n })\r\n}\r\n\r\n// 按需导出\r\nexport {\r\n EsDialog,\r\n EsForm,\r\n EsTable,\r\n EsCrudPage,\r\n SvgIcon,\r\n useDialog,\r\n install\r\n}\r\n\r\n// 类型导出\r\nexport type { CrudPageSchema, CrudAction } from './components/es-crud-page'\r\nexport type {\r\n FormItemOption,\r\n ApiParams,\r\n BtnConfig,\r\n LayoutFormProps,\r\n TableColumn,\r\n TableOptions,\r\n PaginationConfig,\r\n DialogOptions,\r\n EsFormInstance,\r\n EsTableInstance,\r\n EsPlusOptions\r\n} from './types'\r\n\r\n// 默认导出\r\nexport default {\r\n version,\r\n install\r\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","esPlus","inject","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","permFn","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","getCurrentInstance","$esPlusTable","checkPermission","fn","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","translateLabel","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","queryModel","items","paginationState","actions","mergedQueryBtns","btns","handleAdd","mergedColumns","c","a","actionBtns","handleView","handleEdit","handleDelete","base","openFormDialog","title","dialog","dialogWidth","registerRef","getRefs","dialogForm","refresh","getSelectedRows","$attrs","$slots","slotData","_guardReactiveProps","EsCrudPage","isExternal","isExternals","iconName","svgClass","styleExternalIcon","SvgIcon","components","install","component","version"],"mappings":"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","x_google_ignoreList":[0]}