workdesktop-ai 1.2.2 → 1.2.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/api-button/index.mjs +1 -1
- package/dist/auto-complete/index.mjs +1 -1
- package/dist/checkbox-list/index.mjs +1 -1
- package/dist/chunks/{ApiButton.vue_vue_type_script_setup_true_lang-3BjZSAPZ.mjs → ApiButton.vue_vue_type_script_setup_true_lang-GBEBLUxz.mjs} +2 -2
- package/dist/chunks/{ApiButton.vue_vue_type_script_setup_true_lang-3BjZSAPZ.mjs.map → ApiButton.vue_vue_type_script_setup_true_lang-GBEBLUxz.mjs.map} +1 -1
- package/dist/chunks/{AutoComplete-C6Nxatvt.mjs → AutoComplete-DqyhsqiS.mjs} +2 -2
- package/dist/chunks/{AutoComplete-C6Nxatvt.mjs.map → AutoComplete-DqyhsqiS.mjs.map} +1 -1
- package/dist/chunks/{CheckboxList-5AEx33r5.mjs → CheckboxList-RxJGe-LQ.mjs} +2 -2
- package/dist/chunks/{CheckboxList-5AEx33r5.mjs.map → CheckboxList-RxJGe-LQ.mjs.map} +1 -1
- package/dist/chunks/{ConfirmButton.vue_vue_type_script_setup_true_lang-CXYH1Rlc.mjs → ConfirmButton.vue_vue_type_script_setup_true_lang-BPtvM5GB.mjs} +2 -2
- package/dist/chunks/{ConfirmButton.vue_vue_type_script_setup_true_lang-CXYH1Rlc.mjs.map → ConfirmButton.vue_vue_type_script_setup_true_lang-BPtvM5GB.mjs.map} +1 -1
- package/dist/chunks/{DataForm-C6VLTSOm.mjs → DataForm-DYMderSS.mjs} +8 -7
- package/dist/chunks/{DataForm-C6VLTSOm.mjs.map → DataForm-DYMderSS.mjs.map} +1 -1
- package/dist/chunks/{DataGrid-Dd7n5JM7.mjs → DataGrid-DWAhwLVk.mjs} +3 -3
- package/dist/chunks/{DataGrid-Dd7n5JM7.mjs.map → DataGrid-DWAhwLVk.mjs.map} +1 -1
- package/dist/chunks/{DialogButton.vue_vue_type_script_setup_true_lang-CTXP79zc.mjs → DialogButton.vue_vue_type_script_setup_true_lang-ex2zYLZC.mjs} +2 -2
- package/dist/chunks/{DialogButton.vue_vue_type_script_setup_true_lang-CTXP79zc.mjs.map → DialogButton.vue_vue_type_script_setup_true_lang-ex2zYLZC.mjs.map} +1 -1
- package/dist/chunks/{Drawer-ucXKUecL.mjs → Drawer-BzdohcBg.mjs} +96 -90
- package/dist/chunks/Drawer-BzdohcBg.mjs.map +1 -0
- package/dist/chunks/{DrawerButton.vue_vue_type_script_setup_true_lang-DUda4p7_.mjs → DrawerButton.vue_vue_type_script_setup_true_lang-u5ifQw5k.mjs} +2 -2
- package/dist/chunks/{DrawerButton.vue_vue_type_script_setup_true_lang-DUda4p7_.mjs.map → DrawerButton.vue_vue_type_script_setup_true_lang-u5ifQw5k.mjs.map} +1 -1
- package/dist/chunks/{EditableGrid-CDeeVkaX.mjs → EditableGrid-e3wwCaem.mjs} +6 -5
- package/dist/chunks/{EditableGrid-CDeeVkaX.mjs.map → EditableGrid-e3wwCaem.mjs.map} +1 -1
- package/dist/chunks/Guide-AWaWvQoq.mjs +347 -0
- package/dist/chunks/Guide-AWaWvQoq.mjs.map +1 -0
- package/dist/chunks/Iframe-DcFFi0S9.mjs +128 -0
- package/dist/chunks/Iframe-DcFFi0S9.mjs.map +1 -0
- package/dist/chunks/{ImageUpload-CQA9XQ7Q.mjs → ImageUpload-BK7tbU2o.mjs} +5 -4
- package/dist/chunks/{ImageUpload-CQA9XQ7Q.mjs.map → ImageUpload-BK7tbU2o.mjs.map} +1 -1
- package/dist/chunks/{PromptButton.vue_vue_type_script_setup_true_lang-oYaMH-CI.mjs → PromptButton.vue_vue_type_script_setup_true_lang-82Mxc2Qv.mjs} +2 -2
- package/dist/chunks/{PromptButton.vue_vue_type_script_setup_true_lang-oYaMH-CI.mjs.map → PromptButton.vue_vue_type_script_setup_true_lang-82Mxc2Qv.mjs.map} +1 -1
- package/dist/chunks/{RadioList-BUWcP_Pk.mjs → RadioList-DuEeHumw.mjs} +2 -2
- package/dist/chunks/{RadioList-BUWcP_Pk.mjs.map → RadioList-DuEeHumw.mjs.map} +1 -1
- package/dist/chunks/Requester.vue_vue_type_script_setup_true_lang-xCw4QHCA.mjs +63 -0
- package/dist/chunks/Requester.vue_vue_type_script_setup_true_lang-xCw4QHCA.mjs.map +1 -0
- package/dist/chunks/{Select-uvFy7_NU.mjs → Select-MD3taMJo.mjs} +2 -2
- package/dist/chunks/{Select-uvFy7_NU.mjs.map → Select-MD3taMJo.mjs.map} +1 -1
- package/dist/chunks/{Station-BTP0SbBg.mjs → Station-2m9uznh3.mjs} +2 -2
- package/dist/chunks/{Station-BTP0SbBg.mjs.map → Station-2m9uznh3.mjs.map} +1 -1
- package/dist/chunks/{Switch.vue_vue_type_script_setup_true_lang-DUhXAGs2.mjs → Switch.vue_vue_type_script_setup_true_lang-vok-8-BT.mjs} +2 -2
- package/dist/chunks/{Switch.vue_vue_type_script_setup_true_lang-DUhXAGs2.mjs.map → Switch.vue_vue_type_script_setup_true_lang-vok-8-BT.mjs.map} +1 -1
- package/dist/chunks/Tips-B_18E4mc.mjs +71 -0
- package/dist/chunks/Tips-B_18E4mc.mjs.map +1 -0
- package/dist/chunks/{Upload.vue_vue_type_script_setup_true_lang-CHGCjpKK.mjs → Upload.vue_vue_type_script_setup_true_lang-DVDw-3mF.mjs} +5 -4
- package/dist/chunks/{Upload.vue_vue_type_script_setup_true_lang-CHGCjpKK.mjs.map → Upload.vue_vue_type_script_setup_true_lang-DVDw-3mF.mjs.map} +1 -1
- package/dist/chunks/{Viewer-CjLSQTrw.mjs → Viewer-FSV6xObc.mjs} +2 -2
- package/dist/chunks/{Viewer-CjLSQTrw.mjs.map → Viewer-FSV6xObc.mjs.map} +1 -1
- package/dist/chunks/config-B6nWG5dv.mjs +1378 -0
- package/dist/chunks/config-B6nWG5dv.mjs.map +1 -0
- package/dist/chunks/http-BKKP0gEJ.mjs +2774 -0
- package/dist/chunks/http-BKKP0gEJ.mjs.map +1 -0
- package/dist/chunks/{useApiAction-DxVQWWxv.mjs → useApiAction-71XPKjlQ.mjs} +2 -2
- package/dist/chunks/{useApiAction-DxVQWWxv.mjs.map → useApiAction-71XPKjlQ.mjs.map} +1 -1
- package/dist/chunks/{useColumnSettings-BwG2V9xp.mjs → useColumnSettings-CbiWd27-.mjs} +22 -21
- package/dist/chunks/{useColumnSettings-BwG2V9xp.mjs.map → useColumnSettings-CbiWd27-.mjs.map} +1 -1
- package/dist/chunks/useConfig-CPioiLWJ.mjs +23 -0
- package/dist/chunks/useConfig-CPioiLWJ.mjs.map +1 -0
- package/dist/chunks/{useOptionsLoader-DEVCYhrp.mjs → useOptionsLoader-D4Jh4f1F.mjs} +2 -2
- package/dist/chunks/{useOptionsLoader-DEVCYhrp.mjs.map → useOptionsLoader-D4Jh4f1F.mjs.map} +1 -1
- package/dist/confirm-button/index.mjs +1 -1
- package/dist/data-form/index.mjs +1 -1
- package/dist/data-grid/index.mjs +1 -1
- package/dist/dialog-button/index.mjs +1 -1
- package/dist/drawer/index.mjs +1 -1
- package/dist/drawer/style.css +1 -1
- package/dist/drawer-button/index.mjs +1 -1
- package/dist/editable-grid/index.mjs +1 -1
- package/dist/guide/index.mjs +7 -0
- package/dist/guide/index.mjs.map +1 -0
- package/dist/guide/style.css +1 -0
- package/dist/iframe/index.mjs +1 -1
- package/dist/iframe/style.css +1 -1
- package/dist/image-upload/index.mjs +1 -1
- package/dist/index.esm.js +194 -189
- package/dist/index.esm.js.map +1 -1
- package/dist/index.umd.js +25 -21
- package/dist/index.umd.js.map +1 -1
- package/dist/prompt-button/index.mjs +1 -1
- package/dist/radio-list/index.mjs +1 -1
- package/dist/requester/index.mjs +1 -1
- package/dist/select/index.mjs +1 -1
- package/dist/station/index.mjs +1 -1
- package/dist/station/style.css +1 -1
- package/dist/style.css +1 -1
- package/dist/switch/index.mjs +1 -1
- package/dist/tips/index.mjs +1 -1
- package/dist/tips/style.css +1 -1
- package/dist/types/src/components/buttons/ApiButton.vue.d.ts +3 -3
- package/dist/types/src/components/buttons/ConfirmButton.vue.d.ts +5 -5
- package/dist/types/src/components/buttons/DialogButton.vue.d.ts +3 -3
- package/dist/types/src/components/buttons/DrawerButton.vue.d.ts +4 -4
- package/dist/types/src/components/buttons/PopconfirmButton.vue.d.ts +6 -6
- package/dist/types/src/components/buttons/PromptButton.vue.d.ts +5 -5
- package/dist/types/src/components/buttons/RouteButton.vue.d.ts +1 -1
- package/dist/types/src/components/buttons/TipsButton.vue.d.ts +1 -1
- package/dist/types/src/components/containers/Drawer.vue.d.ts +4 -4
- package/dist/types/src/components/containers/Iframe.vue.d.ts +42 -0
- package/dist/types/src/components/data/datagrid/DataGrid.vue.d.ts +5 -5
- package/dist/types/src/components/data/editable-grid/EditableGrid.vue.d.ts +7 -7
- package/dist/types/src/components/data/viewer/Viewer.vue.d.ts +1 -1
- package/dist/types/src/components/form/FormItem.vue.d.ts +1 -1
- package/dist/types/src/components/form/SearchItem.vue.d.ts +1 -1
- package/dist/types/src/components/form/data-form/DataForm.vue.d.ts +10 -10
- package/dist/types/src/components/guide/Guide.vue.d.ts +116 -0
- package/dist/types/src/components/index.d.ts +2 -1
- package/dist/types/src/components/inputs/AutoComplete.vue.d.ts +6 -6
- package/dist/types/src/components/inputs/CheckboxList.vue.d.ts +6 -6
- package/dist/types/src/components/inputs/RadioList.vue.d.ts +6 -6
- package/dist/types/src/components/inputs/Select.vue.d.ts +6 -6
- package/dist/types/src/components/inputs/Switch.vue.d.ts +9 -9
- package/dist/types/src/components/styles/Path.vue.d.ts +1 -1
- package/dist/types/src/components/styles/Tips.vue.d.ts +17 -0
- package/dist/types/src/components/upload/ImageUpload.vue.d.ts +5 -5
- package/dist/types/src/components/upload/Upload.vue.d.ts +5 -5
- package/dist/types/src/entries/guide.d.ts +9 -0
- package/dist/upload/index.mjs +1 -1
- package/dist/viewer/index.mjs +1 -1
- package/package.json +2 -2
- package/dist/chunks/Drawer-ucXKUecL.mjs.map +0 -1
- package/dist/chunks/Iframe-CeSiMnvR.mjs +0 -65
- package/dist/chunks/Iframe-CeSiMnvR.mjs.map +0 -1
- package/dist/chunks/Requester.vue_vue_type_script_setup_true_lang-DkLqAjug.mjs +0 -80
- package/dist/chunks/Requester.vue_vue_type_script_setup_true_lang-DkLqAjug.mjs.map +0 -1
- package/dist/chunks/Tips-IWCZcR1K.mjs +0 -63
- package/dist/chunks/Tips-IWCZcR1K.mjs.map +0 -1
- package/dist/chunks/http-C06mNpwY.mjs +0 -4141
- package/dist/chunks/http-C06mNpwY.mjs.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DataGrid-Dd7n5JM7.mjs","sources":["../../src/components/data/datagrid/DataGrid.vue"],"sourcesContent":["<template>\n <div\n ref=\"rootRef\"\n class=\"wd-datagrid\"\n :class=\"{\n 'wd-datagrid--auto-height': autoHeight,\n 'wd-datagrid--fixed-height': isFixedHeightMode\n }\"\n :style=\"rootStyle\"\n >\n <!-- 顶部工具栏:自定义组与内置工具组按各自 position 渲染到左/右 -->\n <div v-if=\"showTopToolbar\" class=\"wd-datagrid__toolbar\">\n <!-- 自定义工具栏组:toolbar 插槽 + 新增/导出 -->\n <div\n v-if=\"actionsAtTop\"\n class=\"wd-datagrid__toolbar-left wd-datagrid__toolbar-group\"\n :class=\"toolbarPosition === 'right' ? 'at-right' : 'at-left'\"\n >\n <!-- 补充按钮(开发者)始终位于最左;以下为内置业务按钮 -->\n <slot name=\"toolbar\" :selection=\"selection\" :list=\"list\" />\n <el-button v-if=\"toolsConf.add\" type=\"primary\" :size=\"toolBtnSize\" @click=\"emit('add')\">\n <el-icon><Plus /></el-icon>新增\n </el-button>\n <el-button v-if=\"toolsConf.export\" :size=\"toolBtnSize\" @click=\"emit('export')\">\n <el-icon><Download /></el-icon>导出\n </el-button>\n </div>\n <!-- 内置工具按钮组:刷新 / 大小 / 模式切换 / 列设置 / 购物车 -->\n <div\n v-if=\"toolsAtTop\"\n class=\"wd-datagrid__toolbar-right wd-datagrid__toolbar-group\"\n :class=\"[`is-${toolBtnMode}`, toolsPosition === 'left' ? 'at-left' : 'at-right']\"\n >\n <el-tooltip v-if=\"toolsConf.refresh\" content=\"刷新\" placement=\"top\">\n <el-button :circle=\"toolBtnMode === 'round'\" :size=\"toolBtnSize\" @click=\"refresh\">\n <el-icon><Refresh /></el-icon>\n </el-button>\n </el-tooltip>\n <el-tooltip v-if=\"toolsConf.size\" content=\"调整大小\" placement=\"top\">\n <el-dropdown trigger=\"click\" @command=\"onSizeChange\">\n <el-button :circle=\"toolBtnMode === 'round'\" :size=\"toolBtnSize\">\n <el-icon><ScaleToOriginal /></el-icon>\n </el-button>\n <template #dropdown>\n <el-dropdown-menu>\n <el-dropdown-item command=\"large\" :disabled=\"innerSize === 'large'\">大</el-dropdown-item>\n <el-dropdown-item command=\"default\" :disabled=\"innerSize === 'default'\">默认</el-dropdown-item>\n <el-dropdown-item command=\"small\" :disabled=\"innerSize === 'small'\">小</el-dropdown-item>\n </el-dropdown-menu>\n </template>\n </el-dropdown>\n </el-tooltip>\n <el-tooltip v-if=\"(toolsConf.modeSwitch || modeSwitch) && $slots['card-item']\" content=\"表格/列表切换\" placement=\"top\">\n <el-button :circle=\"toolBtnMode === 'round'\" :size=\"toolBtnSize\" @click=\"toggleMode\">\n <el-icon><Grid v-if=\"viewMode === 'card'\" /><Menu v-else /></el-icon>\n </el-button>\n </el-tooltip>\n <el-tooltip v-if=\"toolsConf.columnSetting || dynamicColumn\" content=\"列设置\" placement=\"top\">\n <el-button :circle=\"toolBtnMode === 'round'\" :size=\"toolBtnSize\" @click=\"colSettingVisible = true\">\n <el-icon><Setting /></el-icon>\n </el-button>\n </el-tooltip>\n <el-tooltip v-if=\"withSelectionCart\" :content=\"cartConfig.buttonText || '已选数据'\" placement=\"top\">\n <el-badge :value=\"cartList.length\" :hidden=\"cartList.length === 0\" :max=\"999\">\n <el-button\n :circle=\"toolBtnMode === 'round' && !cartConfig.buttonText\"\n :size=\"toolBtnSize\"\n class=\"wd-datagrid__cart-btn\"\n :class=\"{ 'wd-datagrid__cart-btn--text': !!cartConfig.buttonText }\"\n @click=\"openCart\"\n >\n <el-icon><ShoppingCart /></el-icon>\n <span v-if=\"cartConfig.buttonText\" class=\"wd-datagrid__cart-text\">{{ cartConfig.buttonText }}</span>\n </el-button>\n </el-badge>\n </el-tooltip>\n </div>\n </div>\n\n <!-- 表格主体 -->\n <el-table\n v-if=\"viewMode === 'table'\"\n ref=\"tableRef\"\n v-loading=\"loading\"\n :data=\"list\"\n :size=\"innerSize\"\n :border=\"border\"\n :stripe=\"stripe\"\n :height=\"tableHeight\"\n :row-key=\"rowKey || undefined\"\n :tree-props=\"treeProps\"\n :default-expand-all=\"defaultExpandAll\"\n :span-method=\"rowspanMethod\"\n class=\"wd-datagrid__table\"\n @selection-change=\"onSelectionChange\"\n @sort-change=\"grid.changeSort\"\n >\n <el-table-column v-if=\"withSelection\" type=\"selection\" width=\"60\" align=\"center\" reserve-selection />\n <el-table-column v-if=\"withIndex\" type=\"index\" label=\"序号\" width=\"60\" align=\"center\" :index=\"indexMethod\" />\n\n <!-- 业务列:默认插槽内容(el-table-column),过滤隐藏列 -->\n <ColumnRenderer :vnodes=\"columnVnodes\" />\n\n <!-- 内置操作列(rowActions) -->\n <el-table-column\n v-if=\"rowActions.length\"\n label=\"操作\"\n :width=\"actionColumnWidth\"\n align=\"center\"\n fixed=\"right\"\n >\n <template #default=\"{ row }\">\n <el-button\n v-for=\"act in rowActions\"\n :key=\"act.command || act.text\"\n link\n size=\"small\"\n :type=\"(act.type as any) || 'primary'\"\n @click=\"onRowAction(row, act)\"\n >{{ act.text }}</el-button>\n </template>\n </el-table-column>\n\n <template #empty>\n <slot name=\"empty\">\n <el-empty :description=\"loading ? '加载中...' : '暂无数据'\" :image-size=\"80\" />\n </slot>\n </template>\n </el-table>\n\n <!-- 列表(卡片)模式 -->\n <div v-else class=\"wd-datagrid__cards\" v-loading=\"loading\">\n <el-empty v-if=\"!list.length\" description=\"暂无数据\" :image-size=\"80\" />\n <div v-for=\"(row, idx) in list\" :key=\"row[rowKey || 'id'] ?? idx\" class=\"wd-datagrid__card\">\n <slot name=\"card-item\" :row=\"row\" :index=\"idx\">\n <div class=\"wd-datagrid__card-title\">{{ row.name || row.title || `第 ${idx + 1} 项` }}</div>\n <div class=\"wd-datagrid__card-body\">\n <div v-for=\"(val, k) in row\" :key=\"k\" class=\"wd-datagrid__card-line\">\n <span class=\"wd-datagrid__card-label\">{{ k }}</span>\n <span class=\"wd-datagrid__card-value\">{{ val }}</span>\n </div>\n </div>\n </slot>\n </div>\n </div>\n\n <!-- 底部栏:置于底部的工具组/自定义组与分页合并同一行 -->\n <div\n v-if=\"showBottomBar\"\n class=\"wd-datagrid__pager wd-datagrid__bottom-bar\"\n :class=\"`pager-at-${pagerPos}`\"\n >\n <!-- 自定义工具栏组(底部):toolbar 插槽 + 新增/导出 -->\n <div v-if=\"actionsAtBottom\" class=\"wd-datagrid__bottom-group wd-datagrid__bottom-actions\">\n <slot name=\"toolbar\" :selection=\"selection\" :list=\"list\" />\n <el-button v-if=\"toolsConf.add\" type=\"primary\" :size=\"toolBtnSize\" @click=\"emit('add')\">\n <el-icon><Plus /></el-icon>新增\n </el-button>\n <el-button v-if=\"toolsConf.export\" :size=\"toolBtnSize\" @click=\"emit('export')\">\n <el-icon><Download /></el-icon>导出\n </el-button>\n </div>\n <!-- 内置工具按钮组(底部):刷新 / 大小 / 模式切换 / 列设置 / 购物车 -->\n <div\n v-if=\"toolsAtBottom\"\n class=\"wd-datagrid__bottom-group wd-datagrid__bottom-tools wd-datagrid__toolbar-group\"\n :class=\"`is-${toolBtnMode}`\"\n >\n <el-tooltip v-if=\"toolsConf.refresh\" content=\"刷新\" placement=\"top\">\n <el-button :circle=\"toolBtnMode === 'round'\" :size=\"toolBtnSize\" @click=\"refresh\">\n <el-icon><Refresh /></el-icon>\n </el-button>\n </el-tooltip>\n <el-tooltip v-if=\"toolsConf.size\" content=\"调整大小\" placement=\"top\">\n <el-dropdown trigger=\"click\" @command=\"onSizeChange\">\n <el-button :circle=\"toolBtnMode === 'round'\" :size=\"toolBtnSize\">\n <el-icon><ScaleToOriginal /></el-icon>\n </el-button>\n <template #dropdown>\n <el-dropdown-menu>\n <el-dropdown-item command=\"large\" :disabled=\"innerSize === 'large'\">大</el-dropdown-item>\n <el-dropdown-item command=\"default\" :disabled=\"innerSize === 'default'\">默认</el-dropdown-item>\n <el-dropdown-item command=\"small\" :disabled=\"innerSize === 'small'\">小</el-dropdown-item>\n </el-dropdown-menu>\n </template>\n </el-dropdown>\n </el-tooltip>\n <el-tooltip v-if=\"(toolsConf.modeSwitch || modeSwitch) && $slots.list\" content=\"表格/列表切换\" placement=\"top\">\n <el-button :circle=\"toolBtnMode === 'round'\" :size=\"toolBtnSize\" @click=\"toggleMode\">\n <el-icon><Grid v-if=\"viewMode === 'card'\" /><Menu v-else /></el-icon>\n </el-button>\n </el-tooltip>\n <el-tooltip v-if=\"toolsConf.columnSetting || dynamicColumn\" content=\"列设置\" placement=\"top\">\n <el-button :circle=\"toolBtnMode === 'round'\" :size=\"toolBtnSize\" @click=\"colSettingVisible = true\">\n <el-icon><Setting /></el-icon>\n </el-button>\n </el-tooltip>\n <el-tooltip v-if=\"withSelectionCart\" :content=\"cartConfig.buttonText || '已选数据'\" placement=\"top\">\n <el-badge :value=\"cartList.length\" :hidden=\"cartList.length === 0\" :max=\"999\">\n <el-button\n :circle=\"toolBtnMode === 'round' && !cartConfig.buttonText\"\n :size=\"toolBtnSize\"\n class=\"wd-datagrid__cart-btn\"\n :class=\"{ 'wd-datagrid__cart-btn--text': !!cartConfig.buttonText }\"\n @click=\"openCart\"\n >\n <el-icon><ShoppingCart /></el-icon>\n <span v-if=\"cartConfig.buttonText\" class=\"wd-datagrid__cart-text\">{{ cartConfig.buttonText }}</span>\n </el-button>\n </el-badge>\n </el-tooltip>\n </div>\n <!-- 分页 -->\n <el-pagination\n v-if=\"withPager && viewMode === 'table'\"\n class=\"wd-datagrid__pager-main\"\n :current-page=\"currentPage\"\n :page-size=\"pageSize\"\n :total=\"total\"\n :page-sizes=\"pagerPageSizes\"\n :layout=\"pagerLayout\"\n :small=\"pagerStyle === 'simple'\"\n :hide-on-single-page=\"hideOnSinglePage\"\n :background=\"true\"\n @current-change=\"onChangeCurrentpage\"\n @size-change=\"onChangePagesize\"\n />\n </div>\n\n <!-- 列设置弹层 -->\n <el-dialog v-model=\"colSettingVisible\" title=\"列设置\" width=\"360px\" append-to-body>\n <div class=\"wd-datagrid__col-tip\">勾选控制列的显示 / 隐藏,拖拽手柄可调整列顺序</div>\n <div class=\"wd-datagrid__col-setting\">\n <div\n v-for=\"col in controllableColumns\"\n :key=\"col.key\"\n class=\"wd-datagrid__col-item\"\n :class=\"{\n 'is-dragging': draggingColKey === col.key,\n 'drag-over--before': dragOverKey === col.key && dragOverPosition === 'before',\n 'drag-over--after': dragOverKey === col.key && dragOverPosition === 'after'\n }\"\n @dragover.prevent=\"onColDragOver($event, col.key)\"\n @dragleave=\"onColDragLeave(col.key)\"\n @drop.prevent=\"onColDrop(col.key)\"\n >\n <el-checkbox\n class=\"wd-datagrid__col-checkbox\"\n :model-value=\"col.visible\"\n @update:model-value=\"(v: boolean) => setColumnVisible(col.key, v)\"\n >\n {{ col.label }}\n </el-checkbox>\n <span\n class=\"wd-datagrid__col-handle\"\n draggable=\"true\"\n title=\"拖拽调整顺序\"\n @dragstart=\"onColDragStart($event, col.key)\"\n @dragend=\"onColDragEnd\"\n >\n <el-icon><Rank /></el-icon>\n </span>\n </div>\n </div>\n <template #footer>\n <el-button @click=\"resetColumns()\">恢复默认</el-button>\n <el-button type=\"primary\" @click=\"colSettingVisible = false\">完成</el-button>\n </template>\n </el-dialog>\n\n <!-- 跨页选择「购物车」查看面板 -->\n <component\n :is=\"cartConfig.type === 'drawer' ? 'el-drawer' : 'el-dialog'\"\n v-model=\"cartVisible\"\n :title=\"String(cartConfig.title || '已选数据').replace('{count}', String(cartList.length))\"\n :width=\"cartConfig.size\"\n append-to-body\n >\n <slot name=\"cart-content\" :list=\"cartList\" :remove=\"removeCartRow\" :clear=\"clearCart\">\n <el-empty v-if=\"!cartList.length\" description=\"暂无已选数据\" :image-size=\"80\" />\n <div v-else class=\"wd-datagrid__cart-list\">\n <div v-for=\"(row, idx) in cartList\" :key=\"idx\" class=\"wd-datagrid__cart-item\">\n <span class=\"wd-datagrid__cart-name\">{{ row.name || row.title || cartKeyLabel(row) }}</span>\n <el-button v-if=\"cartConfig.showRemove !== false\" link type=\"danger\" size=\"small\" @click=\"removeCartRow(row)\">\n 移除\n </el-button>\n </div>\n </div>\n </slot>\n <template v-if=\"cartConfig.showClear !== false\" #footer>\n <el-button type=\"danger\" @click=\"clearCart\">清空</el-button>\n </template>\n </component>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, computed, onMounted, onBeforeUnmount, useSlots, watch, nextTick, defineComponent, type VNode, type PropType } from 'vue'\nimport { Plus, Download, Refresh, Setting, ScaleToOriginal, Grid, Menu, ShoppingCart, Rank } from '@element-plus/icons-vue'\nimport { useDataGrid } from '../../../lib/composables/useDataGrid'\nimport { registerDataGrid } from '../../../lib/core/linkage'\nimport { getGlobalConfig } from '../../../lib/core/config'\nimport { safeJsonParse } from '../../../lib/core/utils'\nimport { useColumnSettings, orderColumnVnodes } from './useColumnSettings'\n\ndefineOptions({ name: 'WdDataGrid' })\n\n/**\n * 列渲染器:把默认插槽里的 el-table-column vnode 渲染进 el-table。\n * 用函数式组件透传 vnode,保留插槽上下文({ row, column, $index })。\n */\nconst ColumnRenderer = defineComponent({\n name: 'WdColumnRenderer',\n props: {\n vnodes: { type: Array as PropType<VNode[]>, default: () => [] }\n },\n render() {\n return this.vnodes\n }\n})\n\nconst props = defineProps({\n // 数据源\n api: { type: String, default: '' },\n apiMethod: { type: String as PropType<'get' | 'post' | 'put' | 'delete'>, default: 'post' },\n apiParam: { type: Object as PropType<Record<string, any>>, default: () => ({}) },\n active: { type: Boolean, default: false },\n /** 静态数据(数组) */\n dataSource: { type: [Array, Object] as PropType<any[] | any>, default: undefined },\n // 分页 / 搜索 / 模式\n withPager: { type: Boolean, default: true },\n withSearch: { type: Boolean, default: false },\n modeSwitch: { type: Boolean, default: false },\n dynamicColumn: { type: Boolean, default: false },\n columnStorageKey: { type: String, default: '' },\n // 表格展示\n fix: { type: Boolean, default: true },\n border: { type: Boolean, default: false },\n stripe: { type: Boolean, default: false },\n /**\n * 高度模式:缺省内容自适应(数据多少就多高);\n * 'fix' —— 贴合最近一个有确定高度 / 可滚动的祖先容器(顶部取自身位置、底部贴其内容区底),\n * 数据超出在行区内滚动、表头固定;祖先无定高 / 滚动约束时退化为内容自适应;\n * 数字 / CSS 长度(如 '520px')—— 表格固定高度,行区内滚动。\n */\n height: { type: [String, Number] as PropType<string | number>, default: undefined },\n autoHeight: { type: Boolean, default: false },\n rowKey: { type: String, default: '' },\n tableSize: { type: String as PropType<'large' | 'default' | 'small'>, default: 'default' },\n pagerStyle: { type: String as PropType<'simple' | 'normal' | 'full'>, default: 'normal' },\n /** 分页在底栏的水平位置:left/center/right;缺省走全局配置 page.pager.position(默认 right) */\n pagerPosition: { type: String as PropType<'left' | 'center' | 'right'>, default: '' },\n withIndex: { type: Boolean, default: true },\n withSelection: { type: Boolean, default: false },\n // 行合并\n rowspanKey: { type: String, default: '' },\n rowspanColumn: { type: Array as PropType<string[]>, default: () => [] },\n // 树形\n treeProps: { type: Object, default: () => ({ children: 'children', hasChildren: 'hasChildren' }) },\n defaultExpandAll: { type: Boolean, default: false },\n // selection v-model\n modelValue: { type: Array as PropType<any[]>, default: () => [] },\n /**\n * 选中项返回:默认返回完整行对象数组;如果设置 selectionKey,则返回对应字段值数组\n */\n selectionKey: { type: String, default: '' },\n // tools\n tools: {\n type: Object as PropType<{\n refresh?: boolean\n columnSetting?: boolean\n modeSwitch?: boolean\n size?: boolean\n /** 显示内置「新增」按钮(点击 emit add) */\n add?: boolean\n /** 显示内置「导出」按钮(点击 emit export) */\n export?: boolean\n /** 右侧工具按钮形态:round 圆角(默认)/ square 方角 / group 按钮组 */\n mode?: 'round' | 'square' | 'group'\n /** 工具按钮尺寸:large / default(默认)/ small,与 el-button 一致 */\n buttonSize?: 'large' | 'default' | 'small'\n }>,\n default: () => ({})\n },\n /**\n * 内置工具按钮组(刷新 / 大小 / 模式切换 / 列设置 / 购物车)位置:\n * left 右上左区 / right 右上右区(默认)/ bottom 底栏(与分页同一行)\n */\n toolsPosition: {\n type: String as PropType<'left' | 'right' | 'bottom'>,\n default: 'right'\n },\n /**\n * 自定义工具栏(toolbar 插槽 + 新增/导出按钮)位置:\n * left 左上左区(默认)/ right 左上右区 / bottom 底栏(与分页同一行)\n */\n toolbarPosition: {\n type: String as PropType<'left' | 'right' | 'bottom'>,\n default: 'left'\n },\n /** 内置操作列配置(渲染行操作按钮,点击 emit row-action) */\n rowActions: {\n type: Array as PropType<Array<{ text: string; command?: string; type?: string }>>,\n default: () => []\n },\n // 跨页选择「购物车」\n withSelectionCart: { type: Boolean, default: false },\n /** 购物车去重/自动回勾的唯一键字段,缺省复用 rowKey,均未配置时退化为按行对象引用比较 */\n cartRowKey: { type: String, default: '' },\n /** 购物车按钮与查看面板配置 */\n cartConfig: {\n type: Object as PropType<{\n type?: 'dialog' | 'drawer'\n title?: string\n buttonText?: string\n size?: number | string\n showClear?: boolean\n showRemove?: boolean\n }>,\n default: () => ({\n type: 'dialog',\n title: '已选数据',\n buttonText: '',\n size: 560,\n showClear: true,\n showRemove: true\n })\n },\n // 联动\n filter: { type: String, default: '' }\n})\n\nconst emit = defineEmits([\n 'add',\n 'export',\n 'row-action',\n 'page-change',\n 'selection-change',\n 'mode-change',\n 'loaded',\n 'apiBefore',\n 'apiAfter',\n 'update:modelValue',\n 'cart-change'\n])\n\nconst slots = useSlots()\nconst tableRef = ref<any>(null)\nconst viewMode = ref<'table' | 'card'>('table')\n\n// tools 配置合并默认值\nconst toolsConf = computed(() => ({\n refresh: props.tools.refresh !== false, // 默认 true\n columnSetting: props.tools.columnSetting === true, // 默认 false\n modeSwitch: props.tools.modeSwitch !== false, // 默认 true(需配合 card-item 插槽才渲染)\n size: props.tools.size !== false, // 默认 true\n add: props.tools.add === true, // 默认 false\n export: props.tools.export === true // 默认 false\n}))\n\n// 工具按钮形态:round 圆角(默认)/ square 方角 / group 按钮组\nconst toolBtnMode = computed(() => props.tools.mode || 'round')\n// 工具按钮尺寸:large / default / small(不传时跟随表格尺寸)\nconst toolBtnSize = computed<'large' | 'default' | 'small' | undefined>(() => props.tools.buttonSize || undefined)\n\nconst hasToolbar = computed(() => !!slots.toolbar)\n// 自定义工具栏组(toolbar 插槽 + 新增/导出业务按钮)\nconst hasActions = computed(() => hasToolbar.value || toolsConf.value.add || toolsConf.value.export)\n// 内置工具按钮组(刷新/大小/模式切换/列设置/购物车);modeSwitch 还需 card-item 插槽才渲染\nconst hasToolsGroup = computed(\n () =>\n toolsConf.value.refresh ||\n toolsConf.value.size ||\n ((toolsConf.value.modeSwitch || props.modeSwitch) && !!slots['card-item']) ||\n toolsConf.value.columnSetting ||\n props.dynamicColumn ||\n props.withSelectionCart\n)\n\n// 各组当前是否处于顶部 / 底部\nconst actionsAtTop = computed(() => hasActions.value && props.toolbarPosition !== 'bottom')\nconst toolsAtTop = computed(() => hasToolsGroup.value && props.toolsPosition !== 'bottom')\nconst actionsAtBottom = computed(() => hasActions.value && props.toolbarPosition === 'bottom')\nconst toolsAtBottom = computed(() => hasToolsGroup.value && props.toolsPosition === 'bottom')\n\n// 顶部工具栏:任一组位于顶部即渲染\nconst showTopToolbar = computed(() => actionsAtTop.value || toolsAtTop.value)\n// 底栏:底部分组存在时始终渲染;否则有分页时渲染(保持原有底栏)\nconst showBottomBar = computed(\n () => actionsAtBottom.value || toolsAtBottom.value || (props.withPager && viewMode.value === 'table')\n)\n\n// 兼容旧逻辑(高度计算等场景仍按 hasTools 判断)\nconst hasTools = computed(() => hasActions.value || hasToolsGroup.value)\n\n// ---------- 跨页选择「购物车」 ----------\n/** 程序化回显勾选中(购物车回勾 / modelValue 回显),屏蔽 selection-change 对外触发,避免循环 */\nlet syncingSelection = false\n\n/** 购物车暂存(跨页累计、已去重) */\nconst cartList = ref<any[]>([])\n/** 购物车查看面板开关 */\nconst cartVisible = ref(false)\n\n/** 购物车唯一键:cartRowKey 优先,缺省复用 rowKey,均未配置时退化为行对象引用(Map/数组比较均按引用) */\nfunction cartKeyOf(row: any): unknown {\n const k = props.cartRowKey || props.rowKey\n return k ? row?.[k] : row\n}\n\n/** 面板默认展示文案:name/title 优先,否则取唯一键字段值(对象引用时返回「第 N 项」) */\nfunction cartKeyLabel(row: any): string {\n const k = props.cartRowKey || props.rowKey\n if (!k) return '已选项'\n const v = row?.[k]\n return v == null ? '' : String(v)\n}\n\n/** 把当前页勾选同步进购物车:当前页未勾选的行从购物车移除,勾选行按唯一键去重并入(同 key 以后入者为准) */\nfunction syncCartFromSelection(rows: any[]) {\n const pageKeys = new Set(list.value.map((r: any) => cartKeyOf(r)))\n const kept = cartList.value.filter((c: any) => !pageKeys.has(cartKeyOf(c)))\n const merged = [...kept]\n rows.forEach((r) => {\n const k = cartKeyOf(r)\n const idx = merged.findIndex((c) => cartKeyOf(c) === k)\n if (idx >= 0) merged[idx] = r\n else merged.push(r)\n })\n const changed =\n merged.length !== cartList.value.length ||\n merged.some((c, i) => cartKeyOf(c) !== cartKeyOf(cartList.value[i]) || c !== cartList.value[i])\n if (changed) {\n cartList.value = merged\n emit('cart-change', cartList.value)\n }\n}\n\n/** 打开购物车查看面板 */\nfunction openCart() {\n cartVisible.value = true\n}\n\n/** 移除购物车中某行;若该行在当前页,同时取消勾选(经 selection 同步移除) */\nfunction removeCartRow(row: any) {\n const k = cartKeyOf(row)\n cartList.value = cartList.value.filter((c) => cartKeyOf(c) !== k)\n emit('cart-change', cartList.value)\n const table = tableRef.value\n if (table && list.value.includes(row)) table.toggleRowSelection(row, false)\n}\n\n/** 清空购物车(计数归零,面板同步;当前页勾选一并清空) */\nfunction clearCart() {\n cartList.value = []\n emit('cart-change', cartList.value)\n tableRef.value?.clearSelection?.()\n}\n\n/** 获取购物车暂存数组(跨页累计、已去重) */\nfunction getCartList() {\n return cartList.value\n}\n\n/** 列表数据刷新后:当前页数据中已在购物车的行自动回勾(增量,不清空其他勾选) */\nfunction applyCartRestore() {\n if (!props.withSelectionCart || !props.withSelection || !list.value.length || !cartList.value.length) return\n const table = tableRef.value\n if (!table) return\n syncingSelection = true\n list.value.forEach((row: any) => {\n if (cartList.value.some((c) => cartKeyOf(c) === cartKeyOf(row))) {\n table.toggleRowSelection(row, true)\n }\n })\n nextTick(() => {\n syncingSelection = false\n })\n}\n\n// 表格尺寸持久化\nconst sizeStorageKey = props.columnStorageKey ? `wd:tablesize:${props.columnStorageKey}` : ''\nconst storedSize = sizeStorageKey ? safeJsonParse(localStorage.getItem(sizeStorageKey), null) : null\nconst innerSize = ref<'large' | 'default' | 'small'>(storedSize || props.tableSize)\nwatch(\n () => props.tableSize,\n (v) => {\n if (!storedSize) innerSize.value = v\n }\n)\nfunction onSizeChange(cmd: 'large' | 'default' | 'small') {\n innerSize.value = cmd\n if (sizeStorageKey) localStorage.setItem(sizeStorageKey, JSON.stringify(cmd))\n}\n\n// ---------- 高度模式:height='fix'(贴合最近可约束祖先,而非视口) ----------\nconst rootRef = ref<HTMLElement | null>(null)\n/** fix 模式:可占用高度(祖先内容区剩余;无约束祖先时为 0 → 内容自适应) */\nconst availFixHeight = ref(0)\n/** fix 模式:表格主体高(可占用高度扣除工具栏与分页占用,行区内滚动) */\nconst fixTableHeight = ref(0)\nconst isFixMode = computed(() => props.height === 'fix')\n\n/**\n * 固定高度模式:height 传数字 / CSS 长度(非 'fix')。\n * 此时 el-table 自身取固定高度,根容器不再以 height:100% 被内容撑高,\n * 表格也不能 flex:1 拉伸覆盖其显式高度。\n */\nconst isFixedHeightMode = computed(() => {\n if (props.autoHeight) return false\n const h = props.height\n return h != null && h !== '' && h !== 'fix'\n})\n\n/** 根容器内联高:fix 且测得可占用高度时钉死为可用高度,否则内容自适应 */\nconst rootStyle = computed(() =>\n isFixMode.value && availFixHeight.value > 0 ? { height: `${availFixHeight.value}px` } : undefined\n)\n\n/** el-table height:fix → 计算表体像素高(无约束祖先时 undefined = 内容自适应);autoHeight → '100%';显式数字/CSS 长度 → 固定高 */\nconst tableHeight = computed(() => {\n if (isFixMode.value) return fixTableHeight.value > 0 ? fixTableHeight.value : undefined\n if (props.autoHeight) return '100%'\n const h = props.height\n if (h == null || h === '') return undefined\n return h as string | number\n})\n\n/**\n * 找限制高度的祖先(fix 边界):向上取最近一个有确定高度 / 最大高度 / 纵向可滚动的容器。\n * body 与 html 不视作边界(避免退回「视口口径」),找不到则返回 null(fix 退化为内容自适应)。\n */\nfunction findFixBoundary(el: HTMLElement): HTMLElement | null {\n let node: HTMLElement | null = el.parentElement\n while (node && node !== document.body && node !== document.documentElement) {\n const style = getComputedStyle(node)\n const h = parseFloat(style.height)\n const maxH = style.maxHeight === 'none' ? 0 : parseFloat(style.maxHeight)\n const overflowY = style.overflowY\n const isScroll = overflowY === 'auto' || overflowY === 'scroll' || overflowY === 'overlay'\n const hasBoundedHeight = (Number.isFinite(h) && h > 0) || (Number.isFinite(maxH) && maxH > 0)\n // 可滚动容器即边界;overflow:hidden 仅在自身定高/有最大高时算边界(避免包住自动高内容层)\n if (isScroll || hasBoundedHeight) return node\n node = node.parentElement\n }\n return null\n}\n\nlet fixBoundaryEl: HTMLElement | null = null\nlet fixObserver: ResizeObserver | null = null\n\n/** fix 测量:以最近可约束祖先的内容区底为下界,网格顶到该界的距离即可用高度 */\nfunction measureFixHeight() {\n const el = rootRef.value\n if (!el || !isFixMode.value) return\n const boundary = findFixBoundary(el)\n // 祖先变化时重新挂载观察器:容器尺寸变化(含弹层出现/折叠展开)自动重算\n if (fixBoundaryEl !== boundary) {\n fixObserver?.disconnect()\n fixBoundaryEl = boundary\n if (boundary && typeof ResizeObserver !== 'undefined') {\n fixObserver = new ResizeObserver(() => measureFixHeight())\n fixObserver.observe(boundary)\n }\n }\n if (!boundary) {\n // 无约束祖先:内容自适应(不撑高)\n availFixHeight.value = 0\n fixTableHeight.value = 0\n return\n }\n const style = getComputedStyle(boundary)\n const padB = parseFloat(style.paddingBottom) || 0\n const rect = boundary.getBoundingClientRect()\n const gridTop = el.getBoundingClientRect().top\n // 内容坐标口径:内容底 = clientHeight - 下内边距(+边框顶偏移),再减网格距内容顶的偏移(祖先纵向滚动用 scrollTop 补偿)\n const avail = Math.floor(boundary.clientHeight - padB + rect.top + boundary.clientTop - gridTop - boundary.scrollTop)\n if (avail <= 0) {\n availFixHeight.value = 0\n fixTableHeight.value = 0\n return\n }\n availFixHeight.value = avail\n const toolbar = el.querySelector('.wd-datagrid__toolbar') as HTMLElement | null\n const pager = el.querySelector('.wd-datagrid__pager') as HTMLElement | null\n fixTableHeight.value = Math.max(40, avail - (toolbar?.offsetHeight ?? 0) - (pager?.offsetHeight ?? 0))\n}\nfunction onViewportResize() {\n measureFixHeight()\n}\n\n// 动态切换 height='fix' 时挂/卸 resize 监听并重算\nwatch(\n () => props.height,\n (v) => {\n if (v === 'fix') {\n window.addEventListener('resize', onViewportResize)\n nextTick(measureFixHeight)\n } else {\n window.removeEventListener('resize', onViewportResize)\n fixObserver?.disconnect()\n fixObserver = null\n fixBoundaryEl = null\n }\n }\n)\n\n// 分页档位\nconst globalCfg = getGlobalConfig()\nconst pagerPageSizes = globalCfg.page.pager.pageSizes\nconst hideOnSinglePage = globalCfg.page.pager.hideOnSinglePage\nconst pagerLayout = computed(() => {\n if (props.pagerStyle === 'simple') return 'prev, pager, next'\n if (props.pagerStyle === 'full') return 'total, sizes, prev, pager, next, jumper'\n return globalCfg.page.pager.layout\n})\n// 分页位置:prop 优先,缺省走全局配置 page.pager.position(默认 right)\nconst pagerPos = computed(() => props.pagerPosition || globalCfg.page.pager.position || 'right')\n\n// 数据控制\nconst isStatic = computed(() => Array.isArray(props.dataSource))\nconst grid = useDataGrid({\n api: isStatic.value ? '' : props.api,\n apiMethod: props.apiMethod,\n apiParam: props.apiParam,\n pageSize: globalCfg.page.pager.pageSize,\n immediate: false\n})\n\nconst { list, total, loading, currentPage, pageSize, selection } = grid\n\n// 静态数据直接渲染\nwatch(\n () => props.dataSource,\n (val) => {\n if (isStatic.value) {\n list.value = val as any[]\n total.value = (val as any[]).length\n }\n },\n { immediate: true }\n)\n\n// 动态列\nconst {\n columns: colColumns,\n controllableColumns,\n hiddenKeys,\n columnOrderMap,\n settingVisible: colSettingVisible,\n init: initColumns,\n setVisible: setColumnVisible,\n reorder: reorderColumns,\n reset: resetColumns\n} = useColumnSettings(props.columnStorageKey || undefined)\n\n// ---------- 列设置:拖拽排序 ----------\nconst draggingColKey = ref('')\nconst dragOverKey = ref('')\nconst dragOverPosition = ref<'before' | 'after'>('before')\n\nfunction onColDragStart(e: DragEvent, key: string) {\n draggingColKey.value = key\n if (e.dataTransfer) {\n e.dataTransfer.effectAllowed = 'move'\n // Firefox 需要 setData 才会触发拖拽\n e.dataTransfer.setData('text/plain', key)\n }\n}\n\nfunction onColDragOver(e: DragEvent, key: string) {\n if (!draggingColKey.value || draggingColKey.value === key) return\n const el = e.currentTarget as HTMLElement\n const rect = el.getBoundingClientRect()\n dragOverKey.value = key\n dragOverPosition.value = e.clientY - rect.top < rect.height / 2 ? 'before' : 'after'\n if (e.dataTransfer) e.dataTransfer.dropEffect = 'move'\n}\n\nfunction onColDragLeave(key: string) {\n if (dragOverKey.value === key) dragOverKey.value = ''\n}\n\nfunction onColDrop(key: string) {\n reorderColumns(draggingColKey.value, key, dragOverPosition.value)\n onColDragEnd()\n}\n\nfunction onColDragEnd() {\n draggingColKey.value = ''\n dragOverKey.value = ''\n}\n\nconst columnVnodes = computed<VNode[]>(() => {\n const defaultSlot = slots.default\n if (!defaultSlot) return []\n const vn = defaultSlot()\n // 首次初始化列元信息\n if (!colColumns.value.length) {\n initColumns(vn)\n }\n // 先按显隐过滤,再按列设置中的顺序重排\n return orderColumnVnodes(filterColumnVnodes(vn, hiddenKeys.value), columnOrderMap.value)\n})\n\n/** 根据隐藏列 key 过滤插槽 vnode(隐藏的列不渲染) */\nfunction filterColumnVnodes(vnodes: VNode[], hidden: Set<string>): VNode[] {\n const result: VNode[] = []\n vnodes.forEach((vnode) => {\n if (!vnode || typeof vnode !== 'object') {\n if (vnode) result.push(vnode)\n return\n }\n const p = (vnode.props || {}) as Record<string, any>\n const key = String(p.prop || p.columnKey || '')\n // selection/index 列已由组件自身渲染,跳过插槽里用户重复声明的\n if (p.type === 'selection' || p.type === 'index') return\n if (key && hidden.has(key)) return\n result.push(vnode)\n })\n return result\n}\n\n// 序号\nfunction indexMethod(index: number) {\n return (currentPage.value - 1) * pageSize.value + index + 1\n}\n\n// 行合并\nfunction rowspanMethod({ row, column, rowIndex, columnIndex }: any) {\n if (!props.rowspanKey || !props.rowspanColumn.length) return { rowspan: 1, colspan: 1 }\n const prop = column.property\n if (!props.rowspanColumn.includes(prop)) return { rowspan: 1, colspan: 1 }\n const data = list.value\n const keyVal = row[props.rowspanKey]\n // 该分组第一行计算 span\n const firstIdx = data.findIndex((r) => r[props.rowspanKey] === keyVal)\n if (rowIndex === firstIdx) {\n const span = data.filter((r) => r[props.rowspanKey] === keyVal).length\n return { rowspan: span, colspan: 1 }\n }\n return { rowspan: 0, colspan: 0 }\n}\n\n// ---------- 选中项(v-model:modelValue 双向绑定,支持 selectionKey) ----------\n/** 内部选中行(完整行对象)→ 对外值:默认行数组;设置 selectionKey 时返回该字段值数组 */\nfunction selectionValue(rows: any[]): any[] {\n if (!props.selectionKey) return rows\n return rows.map((r) => r?.[props.selectionKey])\n}\n\n/** 依据 props.modelValue 回显勾选对应行(从非空→空时清空勾选;初始/未使用 v-model 时不干预) */\nfunction applySelectionFromModel(mv?: any[], ov?: any[]) {\n if (mv === undefined) mv = props.modelValue\n // 空 → 空:跳过(未使用 v-model 或初始未设置选中,不干预用户选择)\n if ((!mv || mv.length === 0) && (!ov || ov.length === 0)) return\n const table = tableRef.value\n if (!table) return\n // 与当前内部选择一致则跳过,避免用户勾选→父回传→再次触发造成抖动\n const current = selectionValue(grid.getSelection())\n if (current.length === mv.length && mv.every((v) => current.includes(v))) return\n\n syncingSelection = true\n table.clearSelection()\n if (mv && mv.length) {\n const targets = props.selectionKey\n ? list.value.filter((r: any) => mv.includes(r?.[props.selectionKey]))\n : list.value.filter((r: any) => mv.includes(r))\n targets.forEach((r: any) => table.toggleRowSelection(r, true))\n }\n nextTick(() => {\n syncingSelection = false\n })\n}\n\n// modelValue 变化或数据刷新后,回显勾选\nwatch(\n () => props.modelValue,\n (nv, ov) => {\n applySelectionFromModel(nv as any[], ov as any[])\n },\n { deep: true }\n)\nwatch(\n () => list.value,\n () => {\n if (!syncingSelection) applySelectionFromModel()\n // 购物车:数据刷新/翻页后回勾当前页中已暂存的行\n if (props.withSelectionCart) applyCartRestore()\n }\n)\n\n// 事件\nfunction onSelectionChange(rows: any[]) {\n grid.setSelection(rows)\n if (syncingSelection) return\n // 购物车:用户勾选变化同步进暂存(跨页累计、去重;当前页未勾选的行移出)\n if (props.withSelectionCart) syncCartFromSelection(rows)\n const value = selectionValue(rows)\n emit('selection-change', value)\n emit('update:modelValue', value)\n}\n\nfunction onChangeCurrentpage(val: number) {\n grid.onChangeCurrentpage(val)\n emit('page-change', { currentPage: val, pageSize: pageSize.value })\n}\nfunction onChangePagesize(val: number) {\n grid.onChangePagesize(val)\n emit('page-change', { currentPage: currentPage.value, pageSize: val })\n}\n\nfunction toggleMode() {\n viewMode.value = viewMode.value === 'table' ? 'card' : 'table'\n emit('mode-change', viewMode.value)\n}\n\n/** 操作列宽度:按按钮数量估算 */\nconst actionColumnWidth = computed(() => {\n const w = props.rowActions.reduce((sum, act) => sum + act.text.length * 14 + 16, 20)\n return Math.max(w, 90)\n})\n\n/** 内置操作列点击:emit row-action { row, command, text } */\nfunction onRowAction(row: any, act: { text: string; command?: string; type?: string }) {\n emit('row-action', { row, command: act.command ?? act.text, text: act.text })\n}\n\n// 对外方法\nfunction requestApi(options?: { apiParam?: Record<string, any> }) {\n if (isStatic.value) return Promise.resolve()\n return grid.fetchData(options?.apiParam).then((res) => {\n emit('loaded', res)\n })\n}\nfunction refresh() {\n if (isStatic.value) return Promise.resolve()\n return grid.fetchData().then((res) => emit('loaded', res))\n}\nfunction getSelection() {\n return selectionValue(grid.getSelection())\n}\nfunction clearSelection() {\n tableRef.value?.clearSelection?.()\n grid.clearSelection()\n}\n/** 搜索面板联动:带搜索参数查询(重置到第一页) */\nfunction search(params?: Record<string, any>) {\n if (isStatic.value) return Promise.resolve()\n currentPage.value = 1\n return grid.fetchData(params).then((res) => emit('loaded', res))\n}\n/** 重置搜索并刷新 */\nfunction resetSearch() {\n return grid.reset()\n}\n\ndefineExpose({\n requestApi,\n refresh,\n onChangePagesize,\n onChangeCurrentpage,\n getSelection,\n clearSelection,\n search,\n resetSearch,\n getCartList,\n clearCart,\n tableRef\n})\n\n// 注册到联动中心\nlet unregister: (() => void) | null = null\nonMounted(() => {\n unregister = registerDataGrid({\n filter: props.filter,\n refresh: () => refresh(),\n search: (params?: Record<string, any>) => search(params),\n resetSearch: () => resetSearch()\n })\n if (props.active && !isStatic.value) {\n requestApi()\n }\n if (isFixMode.value) {\n window.addEventListener('resize', onViewportResize)\n measureFixHeight()\n }\n // 静态数据在 setup 阶段已就绪,挂载后补一次选中回显\n applySelectionFromModel()\n})\nonBeforeUnmount(() => {\n window.removeEventListener('resize', onViewportResize)\n fixObserver?.disconnect()\n fixObserver = null\n fixBoundaryEl = null\n unregister?.()\n})\n\n// api 变化自动重载\nwatch(\n () => [props.api, props.apiMethod],\n () => {\n if (props.active && !isStatic.value) requestApi()\n }\n)\n</script>\n\n<style scoped>\n.wd-datagrid {\n display: flex;\n flex-direction: column;\n width: 100%;\n height: 100%;\n background: var(--wd-bg-color, #fff);\n}\n.wd-datagrid--auto-height {\n height: 100%;\n}\n/*\n * 固定高度模式(height 传数字 / CSS 长度):\n * 根容器高度由「工具栏 + 固定高表格 + 分页」自然拼成,不能保持 height:100%\n * (父级无定高时 height:100% 退化为 auto,会被 flex:1 的表格反向撑高)。\n */\n.wd-datagrid--fixed-height {\n height: auto;\n}\n.wd-datagrid__toolbar {\n display: flex;\n align-items: center;\n justify-content: flex-start;\n gap: var(--wd-spacing-base, 12px);\n padding: 0 0 var(--wd-spacing-base, 12px);\n flex-wrap: wrap;\n}\n/* 功能区与左区按钮紧凑排布:按钮自身间距交由容器 gap 控制 */\n.wd-datagrid__toolbar :deep(.el-button + .el-button) {\n margin-left: 0;\n}\n.wd-datagrid__toolbar :deep(.el-button .el-icon) {\n font-size: 16px;\n}\n.wd-datagrid__toolbar-group,\n.wd-datagrid__bottom-group {\n display: flex;\n align-items: center;\n flex-wrap: wrap;\n}\n.wd-datagrid__toolbar-left {\n gap: 8px;\n}\n.wd-datagrid__toolbar-right {\n gap: 6px;\n margin-left: auto;\n}\n/* 顶栏分组对齐:order 决定左/右视觉次序;置右组用 margin-left:auto 右推。\n 多个置右组相邻时仅首个右推,后续组 margin 归零紧贴,避免两个 auto 平分剩余空间把第一组停在中间 */\n.wd-datagrid__toolbar-group.at-left {\n order: 1;\n margin-left: 0;\n}\n.wd-datagrid__toolbar-group.at-right {\n order: 2;\n margin-left: auto;\n}\n.wd-datagrid__toolbar-group.at-right + .at-right {\n margin-left: 0;\n}\n/* 方角模式:图标按钮为直角正方形,宽高跟随尺寸切换(带文字的购物车按钮除外) */\n.wd-datagrid__toolbar-group.is-square :deep(.el-button) {\n border-radius: 0;\n}\n.wd-datagrid__toolbar-group.is-square :deep(.el-button:not(.wd-datagrid__cart-btn--text)) {\n padding: 0;\n width: var(--el-button-size, 32px);\n}\n/* 按钮组模式:按钮粘连成组,仅首尾保留圆角 */\n.wd-datagrid__toolbar-group.is-group {\n gap: 0;\n}\n.wd-datagrid__toolbar-group.is-group > *:not(:first-child) {\n margin-left: -1px;\n}\n.wd-datagrid__toolbar-group.is-group :deep(.el-button:not(.wd-datagrid__cart-btn--text)) {\n padding: 0;\n width: var(--el-button-size, 32px);\n}\n/* 中间按钮直角:覆盖「按钮是直接子」与「按钮被 dropdown/badge 包裹」两种结构 */\n.wd-datagrid__toolbar-group.is-group > :deep(.el-button:not(:first-child)),\n.wd-datagrid__toolbar-group.is-group > *:not(:first-child) :deep(.el-button) {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n.wd-datagrid__toolbar-group.is-group > :deep(.el-button:not(:last-child)),\n.wd-datagrid__toolbar-group.is-group > *:not(:last-child) :deep(.el-button) {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n/* hover/focus 时提升层级,显示完整边框 */\n.wd-datagrid__toolbar-group.is-group :deep(.el-button:hover),\n.wd-datagrid__toolbar-group.is-group :deep(.el-button:focus) {\n position: relative;\n z-index: 1;\n}\n\n/* 移除对el-badge的所有自定义样式覆盖,使用Element Plus默认样式 */\n.wd-datagrid__toolbar-group :deep(.el-badge) {\n /* 不覆盖任何样式,保留默认 */\n}\n.wd-datagrid__cart-btn {\n /* 保持默认位置,不干扰badge定位 */\n}\n.wd-datagrid__table {\n flex: 1;\n min-height: 0;\n}\n/* 固定高度模式下 el-table 自带显式高度,禁止 flex:1 拉伸覆盖该高度 */\n.wd-datagrid--fixed-height .wd-datagrid__table {\n flex: none;\n}\n.wd-datagrid__pager {\n display: flex;\n align-items: center;\n justify-content: flex-end;\n gap: var(--wd-spacing-base, 12px);\n /* 底部组与分页合并同一行:不换行,内容过宽时横向滚动 */\n flex-wrap: nowrap;\n overflow-x: auto;\n padding-top: var(--wd-spacing-base, 12px);\n}\n/* 底部工具组与自定义组:图标按钮紧凑排布、内部不换行 */\n.wd-datagrid__bottom-group {\n gap: 6px;\n flex-wrap: nowrap;\n flex-shrink: 0;\n}\n.wd-datagrid__bottom-actions {\n gap: 8px;\n}\n.wd-datagrid__bottom-group :deep(.el-button + .el-button) {\n margin-left: 0;\n}\n.wd-datagrid__bottom-group :deep(.el-button .el-icon) {\n font-size: 16px;\n}\n/* 分页:默认 right——无任何底部组时单独靠右;有底部组时也保持推到行尾 */\n.wd-datagrid__pager-main {\n margin-left: auto;\n}\n/* 分页位置 left:分页贴左(DOM 在底部组之后,用 order 提前),后续底部组被 margin-right:auto 推到行尾 */\n.wd-datagrid__bottom-bar.pager-at-left .wd-datagrid__pager-main {\n order: -1;\n margin-left: 0;\n margin-right: auto;\n}\n/* 分页位置 center:两侧 auto margin 平分剩余空间居中(flex 中 auto margin 优先于 justify-content);有底部组时组靠左、分页在剩余空间居中 */\n.wd-datagrid__bottom-bar.pager-at-center .wd-datagrid__pager-main {\n margin-right: auto;\n}\n.wd-datagrid__cards {\n flex: 1;\n min-height: 0;\n overflow: auto;\n}\n.wd-datagrid__card {\n /* 组件级令牌回退链:皮肤可单独定制 DataGrid 卡片 */\n background: var(--wd-datagrid-bg, transparent);\n /* 背景素材:皮肤可挂纹理/图片(须置于 background 简写之后,否则被简写重置) */\n background-image: var(--wd-datagrid-bg-image, none);\n border: var(--wd-border-width, 1px) var(--wd-border-style, solid) var(--wd-datagrid-border-color, var(--wd-border-color-light, #e4e7ed));\n border-radius: var(--wd-datagrid-radius, var(--wd-radius-base, 4px));\n padding: var(--wd-datagrid-padding, var(--wd-spacing-base, 12px));\n margin-bottom: var(--wd-spacing-base, 12px);\n}\n.wd-datagrid__card-title {\n font-weight: 600;\n font-size: var(--wd-font-size-large, 16px);\n color: var(--wd-text-color-primary, #303133);\n margin-bottom: 8px;\n}\n.wd-datagrid__card-line {\n display: flex;\n font-size: var(--wd-font-size-base, 14px);\n line-height: 1.8;\n}\n.wd-datagrid__card-label {\n width: 110px;\n color: var(--wd-text-color-secondary, #909399);\n flex-shrink: 0;\n}\n.wd-datagrid__card-value {\n color: var(--wd-text-color-regular, #606266);\n word-break: break-all;\n}\n.wd-datagrid__col-tip {\n margin-bottom: 8px;\n font-size: var(--wd-font-size-small, 12px);\n color: var(--wd-text-color-secondary, #909399);\n}\n.wd-datagrid__col-setting {\n max-height: 400px;\n overflow: auto;\n}\n.wd-datagrid__col-item {\n position: relative;\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 6px 8px;\n border-bottom: var(--wd-border-width, 1px) var(--wd-border-style, solid) var(--wd-border-color-light, #f0f0f0);\n border-radius: var(--wd-radius-small, 4px);\n transition: background-color 0.15s;\n}\n.wd-datagrid__col-item:hover {\n background-color: var(--wd-fill-color-light, #f5f7fa);\n}\n.wd-datagrid__col-handle {\n display: inline-flex;\n align-items: center;\n cursor: grab;\n color: var(--wd-text-color-placeholder, #a8abb2);\n touch-action: none;\n}\n.wd-datagrid__col-handle:active {\n cursor: grabbing;\n}\n.wd-datagrid__col-checkbox {\n flex: 1;\n}\n/* 正在拖拽的源行 */\n.wd-datagrid__col-item.is-dragging {\n opacity: 0.45;\n}\n/* 放置位置指示线 */\n.wd-datagrid__col-item.drag-over--before::before,\n.wd-datagrid__col-item.drag-over--after::after {\n content: '';\n position: absolute;\n left: 0;\n right: 0;\n height: 2px;\n background-color: var(--el-color-primary, #409eff);\n pointer-events: none;\n}\n.wd-datagrid__col-item.drag-over--before::before {\n top: -1px;\n}\n.wd-datagrid__col-item.drag-over--after::after {\n bottom: -1px;\n}\n</style>\n"],"names":["ColumnRenderer","defineComponent","props","__props","emit","__emit","slots","useSlots","tableRef","ref","viewMode","toolsConf","computed","toolBtnMode","toolBtnSize","hasToolbar","hasActions","hasToolsGroup","actionsAtTop","toolsAtTop","actionsAtBottom","toolsAtBottom","showTopToolbar","showBottomBar","syncingSelection","cartList","cartVisible","cartKeyOf","row","k","cartKeyLabel","v","syncCartFromSelection","rows","pageKeys","list","r","merged","c","idx","i","openCart","removeCartRow","table","clearCart","_b","_a","getCartList","applyCartRestore","nextTick","sizeStorageKey","storedSize","safeJsonParse","innerSize","watch","onSizeChange","cmd","rootRef","availFixHeight","fixTableHeight","isFixMode","isFixedHeightMode","h","rootStyle","tableHeight","findFixBoundary","el","node","style","maxH","overflowY","isScroll","hasBoundedHeight","fixBoundaryEl","fixObserver","measureFixHeight","boundary","padB","rect","gridTop","avail","toolbar","pager","onViewportResize","globalCfg","getGlobalConfig","pagerPageSizes","hideOnSinglePage","pagerLayout","pagerPos","isStatic","grid","useDataGrid","total","loading","currentPage","pageSize","selection","val","colColumns","controllableColumns","hiddenKeys","columnOrderMap","colSettingVisible","initColumns","setColumnVisible","reorderColumns","resetColumns","useColumnSettings","draggingColKey","dragOverKey","dragOverPosition","onColDragStart","key","onColDragOver","onColDragLeave","onColDrop","onColDragEnd","columnVnodes","defaultSlot","vn","orderColumnVnodes","filterColumnVnodes","vnodes","hidden","result","vnode","p","indexMethod","index","rowspanMethod","column","rowIndex","columnIndex","prop","data","keyVal","firstIdx","selectionValue","applySelectionFromModel","mv","ov","current","nv","onSelectionChange","value","onChangeCurrentpage","onChangePagesize","toggleMode","actionColumnWidth","w","sum","act","onRowAction","requestApi","options","res","refresh","getSelection","clearSelection","search","params","resetSearch","__expose","unregister","onMounted","registerDataGrid","onBeforeUnmount","_createElementBlock","_openBlock","_hoisted_1","_normalizeClass","_renderSlot","_ctx","_unref","_createBlock","_component_el_button","_createVNode","_component_el_icon","Plus","Download","_component_el_tooltip","Refresh","_component_el_dropdown","_component_el_dropdown_menu","_component_el_dropdown_item","_cache","ScaleToOriginal","$slots","Grid","Menu","Setting","_component_el_badge","ShoppingCart","_hoisted_2","_toDisplayString","_component_el_table","_component_el_empty","_component_el_table_column","_withCtx","_Fragment","_renderList","$event","_createTextVNode","_withDirectives","_hoisted_3","_createElementVNode","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_8","_hoisted_9","_component_el_pagination","_component_el_dialog","_hoisted_10","col","_withModifiers","_component_el_checkbox","Rank","_resolveDynamicComponent","_hoisted_13","_hoisted_14"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"DataGrid-DWAhwLVk.mjs","sources":["../../src/components/data/datagrid/DataGrid.vue"],"sourcesContent":["<template>\n <div\n ref=\"rootRef\"\n class=\"wd-datagrid\"\n :class=\"{\n 'wd-datagrid--auto-height': autoHeight,\n 'wd-datagrid--fixed-height': isFixedHeightMode\n }\"\n :style=\"rootStyle\"\n >\n <!-- 顶部工具栏:自定义组与内置工具组按各自 position 渲染到左/右 -->\n <div v-if=\"showTopToolbar\" class=\"wd-datagrid__toolbar\">\n <!-- 自定义工具栏组:toolbar 插槽 + 新增/导出 -->\n <div\n v-if=\"actionsAtTop\"\n class=\"wd-datagrid__toolbar-left wd-datagrid__toolbar-group\"\n :class=\"toolbarPosition === 'right' ? 'at-right' : 'at-left'\"\n >\n <!-- 补充按钮(开发者)始终位于最左;以下为内置业务按钮 -->\n <slot name=\"toolbar\" :selection=\"selection\" :list=\"list\" />\n <el-button v-if=\"toolsConf.add\" type=\"primary\" :size=\"toolBtnSize\" @click=\"emit('add')\">\n <el-icon><Plus /></el-icon>新增\n </el-button>\n <el-button v-if=\"toolsConf.export\" :size=\"toolBtnSize\" @click=\"emit('export')\">\n <el-icon><Download /></el-icon>导出\n </el-button>\n </div>\n <!-- 内置工具按钮组:刷新 / 大小 / 模式切换 / 列设置 / 购物车 -->\n <div\n v-if=\"toolsAtTop\"\n class=\"wd-datagrid__toolbar-right wd-datagrid__toolbar-group\"\n :class=\"[`is-${toolBtnMode}`, toolsPosition === 'left' ? 'at-left' : 'at-right']\"\n >\n <el-tooltip v-if=\"toolsConf.refresh\" content=\"刷新\" placement=\"top\">\n <el-button :circle=\"toolBtnMode === 'round'\" :size=\"toolBtnSize\" @click=\"refresh\">\n <el-icon><Refresh /></el-icon>\n </el-button>\n </el-tooltip>\n <el-tooltip v-if=\"toolsConf.size\" content=\"调整大小\" placement=\"top\">\n <el-dropdown trigger=\"click\" @command=\"onSizeChange\">\n <el-button :circle=\"toolBtnMode === 'round'\" :size=\"toolBtnSize\">\n <el-icon><ScaleToOriginal /></el-icon>\n </el-button>\n <template #dropdown>\n <el-dropdown-menu>\n <el-dropdown-item command=\"large\" :disabled=\"innerSize === 'large'\">大</el-dropdown-item>\n <el-dropdown-item command=\"default\" :disabled=\"innerSize === 'default'\">默认</el-dropdown-item>\n <el-dropdown-item command=\"small\" :disabled=\"innerSize === 'small'\">小</el-dropdown-item>\n </el-dropdown-menu>\n </template>\n </el-dropdown>\n </el-tooltip>\n <el-tooltip v-if=\"(toolsConf.modeSwitch || modeSwitch) && $slots['card-item']\" content=\"表格/列表切换\" placement=\"top\">\n <el-button :circle=\"toolBtnMode === 'round'\" :size=\"toolBtnSize\" @click=\"toggleMode\">\n <el-icon><Grid v-if=\"viewMode === 'card'\" /><Menu v-else /></el-icon>\n </el-button>\n </el-tooltip>\n <el-tooltip v-if=\"toolsConf.columnSetting || dynamicColumn\" content=\"列设置\" placement=\"top\">\n <el-button :circle=\"toolBtnMode === 'round'\" :size=\"toolBtnSize\" @click=\"colSettingVisible = true\">\n <el-icon><Setting /></el-icon>\n </el-button>\n </el-tooltip>\n <el-tooltip v-if=\"withSelectionCart\" :content=\"cartConfig.buttonText || '已选数据'\" placement=\"top\">\n <el-badge :value=\"cartList.length\" :hidden=\"cartList.length === 0\" :max=\"999\">\n <el-button\n :circle=\"toolBtnMode === 'round' && !cartConfig.buttonText\"\n :size=\"toolBtnSize\"\n class=\"wd-datagrid__cart-btn\"\n :class=\"{ 'wd-datagrid__cart-btn--text': !!cartConfig.buttonText }\"\n @click=\"openCart\"\n >\n <el-icon><ShoppingCart /></el-icon>\n <span v-if=\"cartConfig.buttonText\" class=\"wd-datagrid__cart-text\">{{ cartConfig.buttonText }}</span>\n </el-button>\n </el-badge>\n </el-tooltip>\n </div>\n </div>\n\n <!-- 表格主体 -->\n <el-table\n v-if=\"viewMode === 'table'\"\n ref=\"tableRef\"\n v-loading=\"loading\"\n :data=\"list\"\n :size=\"innerSize\"\n :border=\"border\"\n :stripe=\"stripe\"\n :height=\"tableHeight\"\n :row-key=\"rowKey || undefined\"\n :tree-props=\"treeProps\"\n :default-expand-all=\"defaultExpandAll\"\n :span-method=\"rowspanMethod\"\n class=\"wd-datagrid__table\"\n @selection-change=\"onSelectionChange\"\n @sort-change=\"grid.changeSort\"\n >\n <el-table-column v-if=\"withSelection\" type=\"selection\" width=\"60\" align=\"center\" reserve-selection />\n <el-table-column v-if=\"withIndex\" type=\"index\" label=\"序号\" width=\"60\" align=\"center\" :index=\"indexMethod\" />\n\n <!-- 业务列:默认插槽内容(el-table-column),过滤隐藏列 -->\n <ColumnRenderer :vnodes=\"columnVnodes\" />\n\n <!-- 内置操作列(rowActions) -->\n <el-table-column\n v-if=\"rowActions.length\"\n label=\"操作\"\n :width=\"actionColumnWidth\"\n align=\"center\"\n fixed=\"right\"\n >\n <template #default=\"{ row }\">\n <el-button\n v-for=\"act in rowActions\"\n :key=\"act.command || act.text\"\n link\n size=\"small\"\n :type=\"(act.type as any) || 'primary'\"\n @click=\"onRowAction(row, act)\"\n >{{ act.text }}</el-button>\n </template>\n </el-table-column>\n\n <template #empty>\n <slot name=\"empty\">\n <el-empty :description=\"loading ? '加载中...' : '暂无数据'\" :image-size=\"80\" />\n </slot>\n </template>\n </el-table>\n\n <!-- 列表(卡片)模式 -->\n <div v-else class=\"wd-datagrid__cards\" v-loading=\"loading\">\n <el-empty v-if=\"!list.length\" description=\"暂无数据\" :image-size=\"80\" />\n <div v-for=\"(row, idx) in list\" :key=\"row[rowKey || 'id'] ?? idx\" class=\"wd-datagrid__card\">\n <slot name=\"card-item\" :row=\"row\" :index=\"idx\">\n <div class=\"wd-datagrid__card-title\">{{ row.name || row.title || `第 ${idx + 1} 项` }}</div>\n <div class=\"wd-datagrid__card-body\">\n <div v-for=\"(val, k) in row\" :key=\"k\" class=\"wd-datagrid__card-line\">\n <span class=\"wd-datagrid__card-label\">{{ k }}</span>\n <span class=\"wd-datagrid__card-value\">{{ val }}</span>\n </div>\n </div>\n </slot>\n </div>\n </div>\n\n <!-- 底部栏:置于底部的工具组/自定义组与分页合并同一行 -->\n <div\n v-if=\"showBottomBar\"\n class=\"wd-datagrid__pager wd-datagrid__bottom-bar\"\n :class=\"`pager-at-${pagerPos}`\"\n >\n <!-- 自定义工具栏组(底部):toolbar 插槽 + 新增/导出 -->\n <div v-if=\"actionsAtBottom\" class=\"wd-datagrid__bottom-group wd-datagrid__bottom-actions\">\n <slot name=\"toolbar\" :selection=\"selection\" :list=\"list\" />\n <el-button v-if=\"toolsConf.add\" type=\"primary\" :size=\"toolBtnSize\" @click=\"emit('add')\">\n <el-icon><Plus /></el-icon>新增\n </el-button>\n <el-button v-if=\"toolsConf.export\" :size=\"toolBtnSize\" @click=\"emit('export')\">\n <el-icon><Download /></el-icon>导出\n </el-button>\n </div>\n <!-- 内置工具按钮组(底部):刷新 / 大小 / 模式切换 / 列设置 / 购物车 -->\n <div\n v-if=\"toolsAtBottom\"\n class=\"wd-datagrid__bottom-group wd-datagrid__bottom-tools wd-datagrid__toolbar-group\"\n :class=\"`is-${toolBtnMode}`\"\n >\n <el-tooltip v-if=\"toolsConf.refresh\" content=\"刷新\" placement=\"top\">\n <el-button :circle=\"toolBtnMode === 'round'\" :size=\"toolBtnSize\" @click=\"refresh\">\n <el-icon><Refresh /></el-icon>\n </el-button>\n </el-tooltip>\n <el-tooltip v-if=\"toolsConf.size\" content=\"调整大小\" placement=\"top\">\n <el-dropdown trigger=\"click\" @command=\"onSizeChange\">\n <el-button :circle=\"toolBtnMode === 'round'\" :size=\"toolBtnSize\">\n <el-icon><ScaleToOriginal /></el-icon>\n </el-button>\n <template #dropdown>\n <el-dropdown-menu>\n <el-dropdown-item command=\"large\" :disabled=\"innerSize === 'large'\">大</el-dropdown-item>\n <el-dropdown-item command=\"default\" :disabled=\"innerSize === 'default'\">默认</el-dropdown-item>\n <el-dropdown-item command=\"small\" :disabled=\"innerSize === 'small'\">小</el-dropdown-item>\n </el-dropdown-menu>\n </template>\n </el-dropdown>\n </el-tooltip>\n <el-tooltip v-if=\"(toolsConf.modeSwitch || modeSwitch) && $slots.list\" content=\"表格/列表切换\" placement=\"top\">\n <el-button :circle=\"toolBtnMode === 'round'\" :size=\"toolBtnSize\" @click=\"toggleMode\">\n <el-icon><Grid v-if=\"viewMode === 'card'\" /><Menu v-else /></el-icon>\n </el-button>\n </el-tooltip>\n <el-tooltip v-if=\"toolsConf.columnSetting || dynamicColumn\" content=\"列设置\" placement=\"top\">\n <el-button :circle=\"toolBtnMode === 'round'\" :size=\"toolBtnSize\" @click=\"colSettingVisible = true\">\n <el-icon><Setting /></el-icon>\n </el-button>\n </el-tooltip>\n <el-tooltip v-if=\"withSelectionCart\" :content=\"cartConfig.buttonText || '已选数据'\" placement=\"top\">\n <el-badge :value=\"cartList.length\" :hidden=\"cartList.length === 0\" :max=\"999\">\n <el-button\n :circle=\"toolBtnMode === 'round' && !cartConfig.buttonText\"\n :size=\"toolBtnSize\"\n class=\"wd-datagrid__cart-btn\"\n :class=\"{ 'wd-datagrid__cart-btn--text': !!cartConfig.buttonText }\"\n @click=\"openCart\"\n >\n <el-icon><ShoppingCart /></el-icon>\n <span v-if=\"cartConfig.buttonText\" class=\"wd-datagrid__cart-text\">{{ cartConfig.buttonText }}</span>\n </el-button>\n </el-badge>\n </el-tooltip>\n </div>\n <!-- 分页 -->\n <el-pagination\n v-if=\"withPager && viewMode === 'table'\"\n class=\"wd-datagrid__pager-main\"\n :current-page=\"currentPage\"\n :page-size=\"pageSize\"\n :total=\"total\"\n :page-sizes=\"pagerPageSizes\"\n :layout=\"pagerLayout\"\n :small=\"pagerStyle === 'simple'\"\n :hide-on-single-page=\"hideOnSinglePage\"\n :background=\"true\"\n @current-change=\"onChangeCurrentpage\"\n @size-change=\"onChangePagesize\"\n />\n </div>\n\n <!-- 列设置弹层 -->\n <el-dialog v-model=\"colSettingVisible\" title=\"列设置\" width=\"360px\" append-to-body>\n <div class=\"wd-datagrid__col-tip\">勾选控制列的显示 / 隐藏,拖拽手柄可调整列顺序</div>\n <div class=\"wd-datagrid__col-setting\">\n <div\n v-for=\"col in controllableColumns\"\n :key=\"col.key\"\n class=\"wd-datagrid__col-item\"\n :class=\"{\n 'is-dragging': draggingColKey === col.key,\n 'drag-over--before': dragOverKey === col.key && dragOverPosition === 'before',\n 'drag-over--after': dragOverKey === col.key && dragOverPosition === 'after'\n }\"\n @dragover.prevent=\"onColDragOver($event, col.key)\"\n @dragleave=\"onColDragLeave(col.key)\"\n @drop.prevent=\"onColDrop(col.key)\"\n >\n <el-checkbox\n class=\"wd-datagrid__col-checkbox\"\n :model-value=\"col.visible\"\n @update:model-value=\"(v: boolean) => setColumnVisible(col.key, v)\"\n >\n {{ col.label }}\n </el-checkbox>\n <span\n class=\"wd-datagrid__col-handle\"\n draggable=\"true\"\n title=\"拖拽调整顺序\"\n @dragstart=\"onColDragStart($event, col.key)\"\n @dragend=\"onColDragEnd\"\n >\n <el-icon><Rank /></el-icon>\n </span>\n </div>\n </div>\n <template #footer>\n <el-button @click=\"resetColumns()\">恢复默认</el-button>\n <el-button type=\"primary\" @click=\"colSettingVisible = false\">完成</el-button>\n </template>\n </el-dialog>\n\n <!-- 跨页选择「购物车」查看面板 -->\n <component\n :is=\"cartConfig.type === 'drawer' ? 'el-drawer' : 'el-dialog'\"\n v-model=\"cartVisible\"\n :title=\"String(cartConfig.title || '已选数据').replace('{count}', String(cartList.length))\"\n :width=\"cartConfig.size\"\n append-to-body\n >\n <slot name=\"cart-content\" :list=\"cartList\" :remove=\"removeCartRow\" :clear=\"clearCart\">\n <el-empty v-if=\"!cartList.length\" description=\"暂无已选数据\" :image-size=\"80\" />\n <div v-else class=\"wd-datagrid__cart-list\">\n <div v-for=\"(row, idx) in cartList\" :key=\"idx\" class=\"wd-datagrid__cart-item\">\n <span class=\"wd-datagrid__cart-name\">{{ row.name || row.title || cartKeyLabel(row) }}</span>\n <el-button v-if=\"cartConfig.showRemove !== false\" link type=\"danger\" size=\"small\" @click=\"removeCartRow(row)\">\n 移除\n </el-button>\n </div>\n </div>\n </slot>\n <template v-if=\"cartConfig.showClear !== false\" #footer>\n <el-button type=\"danger\" @click=\"clearCart\">清空</el-button>\n </template>\n </component>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, computed, onMounted, onBeforeUnmount, useSlots, watch, nextTick, defineComponent, type VNode, type PropType } from 'vue'\nimport { Plus, Download, Refresh, Setting, ScaleToOriginal, Grid, Menu, ShoppingCart, Rank } from '@element-plus/icons-vue'\nimport { useDataGrid } from '../../../lib/composables/useDataGrid'\nimport { registerDataGrid } from '../../../lib/core/linkage'\nimport { getGlobalConfig } from '../../../lib/core/config'\nimport { safeJsonParse } from '../../../lib/core/utils'\nimport { useColumnSettings, orderColumnVnodes } from './useColumnSettings'\n\ndefineOptions({ name: 'WdDataGrid' })\n\n/**\n * 列渲染器:把默认插槽里的 el-table-column vnode 渲染进 el-table。\n * 用函数式组件透传 vnode,保留插槽上下文({ row, column, $index })。\n */\nconst ColumnRenderer = defineComponent({\n name: 'WdColumnRenderer',\n props: {\n vnodes: { type: Array as PropType<VNode[]>, default: () => [] }\n },\n render() {\n return this.vnodes\n }\n})\n\nconst props = defineProps({\n // 数据源\n api: { type: String, default: '' },\n apiMethod: { type: String as PropType<'get' | 'post' | 'put' | 'delete'>, default: 'post' },\n apiParam: { type: Object as PropType<Record<string, any>>, default: () => ({}) },\n active: { type: Boolean, default: false },\n /** 静态数据(数组) */\n dataSource: { type: [Array, Object] as PropType<any[] | any>, default: undefined },\n // 分页 / 搜索 / 模式\n withPager: { type: Boolean, default: true },\n withSearch: { type: Boolean, default: false },\n modeSwitch: { type: Boolean, default: false },\n dynamicColumn: { type: Boolean, default: false },\n columnStorageKey: { type: String, default: '' },\n // 表格展示\n fix: { type: Boolean, default: true },\n border: { type: Boolean, default: false },\n stripe: { type: Boolean, default: false },\n /**\n * 高度模式:缺省内容自适应(数据多少就多高);\n * 'fix' —— 贴合最近一个有确定高度 / 可滚动的祖先容器(顶部取自身位置、底部贴其内容区底),\n * 数据超出在行区内滚动、表头固定;祖先无定高 / 滚动约束时退化为内容自适应;\n * 数字 / CSS 长度(如 '520px')—— 表格固定高度,行区内滚动。\n */\n height: { type: [String, Number] as PropType<string | number>, default: undefined },\n autoHeight: { type: Boolean, default: false },\n rowKey: { type: String, default: '' },\n tableSize: { type: String as PropType<'large' | 'default' | 'small'>, default: 'default' },\n pagerStyle: { type: String as PropType<'simple' | 'normal' | 'full'>, default: 'normal' },\n /** 分页在底栏的水平位置:left/center/right;缺省走全局配置 page.pager.position(默认 right) */\n pagerPosition: { type: String as PropType<'left' | 'center' | 'right'>, default: '' },\n withIndex: { type: Boolean, default: true },\n withSelection: { type: Boolean, default: false },\n // 行合并\n rowspanKey: { type: String, default: '' },\n rowspanColumn: { type: Array as PropType<string[]>, default: () => [] },\n // 树形\n treeProps: { type: Object, default: () => ({ children: 'children', hasChildren: 'hasChildren' }) },\n defaultExpandAll: { type: Boolean, default: false },\n // selection v-model\n modelValue: { type: Array as PropType<any[]>, default: () => [] },\n /**\n * 选中项返回:默认返回完整行对象数组;如果设置 selectionKey,则返回对应字段值数组\n */\n selectionKey: { type: String, default: '' },\n // tools\n tools: {\n type: Object as PropType<{\n refresh?: boolean\n columnSetting?: boolean\n modeSwitch?: boolean\n size?: boolean\n /** 显示内置「新增」按钮(点击 emit add) */\n add?: boolean\n /** 显示内置「导出」按钮(点击 emit export) */\n export?: boolean\n /** 右侧工具按钮形态:round 圆角(默认)/ square 方角 / group 按钮组 */\n mode?: 'round' | 'square' | 'group'\n /** 工具按钮尺寸:large / default(默认)/ small,与 el-button 一致 */\n buttonSize?: 'large' | 'default' | 'small'\n }>,\n default: () => ({})\n },\n /**\n * 内置工具按钮组(刷新 / 大小 / 模式切换 / 列设置 / 购物车)位置:\n * left 右上左区 / right 右上右区(默认)/ bottom 底栏(与分页同一行)\n */\n toolsPosition: {\n type: String as PropType<'left' | 'right' | 'bottom'>,\n default: 'right'\n },\n /**\n * 自定义工具栏(toolbar 插槽 + 新增/导出按钮)位置:\n * left 左上左区(默认)/ right 左上右区 / bottom 底栏(与分页同一行)\n */\n toolbarPosition: {\n type: String as PropType<'left' | 'right' | 'bottom'>,\n default: 'left'\n },\n /** 内置操作列配置(渲染行操作按钮,点击 emit row-action) */\n rowActions: {\n type: Array as PropType<Array<{ text: string; command?: string; type?: string }>>,\n default: () => []\n },\n // 跨页选择「购物车」\n withSelectionCart: { type: Boolean, default: false },\n /** 购物车去重/自动回勾的唯一键字段,缺省复用 rowKey,均未配置时退化为按行对象引用比较 */\n cartRowKey: { type: String, default: '' },\n /** 购物车按钮与查看面板配置 */\n cartConfig: {\n type: Object as PropType<{\n type?: 'dialog' | 'drawer'\n title?: string\n buttonText?: string\n size?: number | string\n showClear?: boolean\n showRemove?: boolean\n }>,\n default: () => ({\n type: 'dialog',\n title: '已选数据',\n buttonText: '',\n size: 560,\n showClear: true,\n showRemove: true\n })\n },\n // 联动\n filter: { type: String, default: '' }\n})\n\nconst emit = defineEmits([\n 'add',\n 'export',\n 'row-action',\n 'page-change',\n 'selection-change',\n 'mode-change',\n 'loaded',\n 'apiBefore',\n 'apiAfter',\n 'update:modelValue',\n 'cart-change'\n])\n\nconst slots = useSlots()\nconst tableRef = ref<any>(null)\nconst viewMode = ref<'table' | 'card'>('table')\n\n// tools 配置合并默认值\nconst toolsConf = computed(() => ({\n refresh: props.tools.refresh !== false, // 默认 true\n columnSetting: props.tools.columnSetting === true, // 默认 false\n modeSwitch: props.tools.modeSwitch !== false, // 默认 true(需配合 card-item 插槽才渲染)\n size: props.tools.size !== false, // 默认 true\n add: props.tools.add === true, // 默认 false\n export: props.tools.export === true // 默认 false\n}))\n\n// 工具按钮形态:round 圆角(默认)/ square 方角 / group 按钮组\nconst toolBtnMode = computed(() => props.tools.mode || 'round')\n// 工具按钮尺寸:large / default / small(不传时跟随表格尺寸)\nconst toolBtnSize = computed<'large' | 'default' | 'small' | undefined>(() => props.tools.buttonSize || undefined)\n\nconst hasToolbar = computed(() => !!slots.toolbar)\n// 自定义工具栏组(toolbar 插槽 + 新增/导出业务按钮)\nconst hasActions = computed(() => hasToolbar.value || toolsConf.value.add || toolsConf.value.export)\n// 内置工具按钮组(刷新/大小/模式切换/列设置/购物车);modeSwitch 还需 card-item 插槽才渲染\nconst hasToolsGroup = computed(\n () =>\n toolsConf.value.refresh ||\n toolsConf.value.size ||\n ((toolsConf.value.modeSwitch || props.modeSwitch) && !!slots['card-item']) ||\n toolsConf.value.columnSetting ||\n props.dynamicColumn ||\n props.withSelectionCart\n)\n\n// 各组当前是否处于顶部 / 底部\nconst actionsAtTop = computed(() => hasActions.value && props.toolbarPosition !== 'bottom')\nconst toolsAtTop = computed(() => hasToolsGroup.value && props.toolsPosition !== 'bottom')\nconst actionsAtBottom = computed(() => hasActions.value && props.toolbarPosition === 'bottom')\nconst toolsAtBottom = computed(() => hasToolsGroup.value && props.toolsPosition === 'bottom')\n\n// 顶部工具栏:任一组位于顶部即渲染\nconst showTopToolbar = computed(() => actionsAtTop.value || toolsAtTop.value)\n// 底栏:底部分组存在时始终渲染;否则有分页时渲染(保持原有底栏)\nconst showBottomBar = computed(\n () => actionsAtBottom.value || toolsAtBottom.value || (props.withPager && viewMode.value === 'table')\n)\n\n// 兼容旧逻辑(高度计算等场景仍按 hasTools 判断)\nconst hasTools = computed(() => hasActions.value || hasToolsGroup.value)\n\n// ---------- 跨页选择「购物车」 ----------\n/** 程序化回显勾选中(购物车回勾 / modelValue 回显),屏蔽 selection-change 对外触发,避免循环 */\nlet syncingSelection = false\n\n/** 购物车暂存(跨页累计、已去重) */\nconst cartList = ref<any[]>([])\n/** 购物车查看面板开关 */\nconst cartVisible = ref(false)\n\n/** 购物车唯一键:cartRowKey 优先,缺省复用 rowKey,均未配置时退化为行对象引用(Map/数组比较均按引用) */\nfunction cartKeyOf(row: any): unknown {\n const k = props.cartRowKey || props.rowKey\n return k ? row?.[k] : row\n}\n\n/** 面板默认展示文案:name/title 优先,否则取唯一键字段值(对象引用时返回「第 N 项」) */\nfunction cartKeyLabel(row: any): string {\n const k = props.cartRowKey || props.rowKey\n if (!k) return '已选项'\n const v = row?.[k]\n return v == null ? '' : String(v)\n}\n\n/** 把当前页勾选同步进购物车:当前页未勾选的行从购物车移除,勾选行按唯一键去重并入(同 key 以后入者为准) */\nfunction syncCartFromSelection(rows: any[]) {\n const pageKeys = new Set(list.value.map((r: any) => cartKeyOf(r)))\n const kept = cartList.value.filter((c: any) => !pageKeys.has(cartKeyOf(c)))\n const merged = [...kept]\n rows.forEach((r) => {\n const k = cartKeyOf(r)\n const idx = merged.findIndex((c) => cartKeyOf(c) === k)\n if (idx >= 0) merged[idx] = r\n else merged.push(r)\n })\n const changed =\n merged.length !== cartList.value.length ||\n merged.some((c, i) => cartKeyOf(c) !== cartKeyOf(cartList.value[i]) || c !== cartList.value[i])\n if (changed) {\n cartList.value = merged\n emit('cart-change', cartList.value)\n }\n}\n\n/** 打开购物车查看面板 */\nfunction openCart() {\n cartVisible.value = true\n}\n\n/** 移除购物车中某行;若该行在当前页,同时取消勾选(经 selection 同步移除) */\nfunction removeCartRow(row: any) {\n const k = cartKeyOf(row)\n cartList.value = cartList.value.filter((c) => cartKeyOf(c) !== k)\n emit('cart-change', cartList.value)\n const table = tableRef.value\n if (table && list.value.includes(row)) table.toggleRowSelection(row, false)\n}\n\n/** 清空购物车(计数归零,面板同步;当前页勾选一并清空) */\nfunction clearCart() {\n cartList.value = []\n emit('cart-change', cartList.value)\n tableRef.value?.clearSelection?.()\n}\n\n/** 获取购物车暂存数组(跨页累计、已去重) */\nfunction getCartList() {\n return cartList.value\n}\n\n/** 列表数据刷新后:当前页数据中已在购物车的行自动回勾(增量,不清空其他勾选) */\nfunction applyCartRestore() {\n if (!props.withSelectionCart || !props.withSelection || !list.value.length || !cartList.value.length) return\n const table = tableRef.value\n if (!table) return\n syncingSelection = true\n list.value.forEach((row: any) => {\n if (cartList.value.some((c) => cartKeyOf(c) === cartKeyOf(row))) {\n table.toggleRowSelection(row, true)\n }\n })\n nextTick(() => {\n syncingSelection = false\n })\n}\n\n// 表格尺寸持久化\nconst sizeStorageKey = props.columnStorageKey ? `wd:tablesize:${props.columnStorageKey}` : ''\nconst storedSize = sizeStorageKey ? safeJsonParse(localStorage.getItem(sizeStorageKey), null) : null\nconst innerSize = ref<'large' | 'default' | 'small'>(storedSize || props.tableSize)\nwatch(\n () => props.tableSize,\n (v) => {\n if (!storedSize) innerSize.value = v\n }\n)\nfunction onSizeChange(cmd: 'large' | 'default' | 'small') {\n innerSize.value = cmd\n if (sizeStorageKey) localStorage.setItem(sizeStorageKey, JSON.stringify(cmd))\n}\n\n// ---------- 高度模式:height='fix'(贴合最近可约束祖先,而非视口) ----------\nconst rootRef = ref<HTMLElement | null>(null)\n/** fix 模式:可占用高度(祖先内容区剩余;无约束祖先时为 0 → 内容自适应) */\nconst availFixHeight = ref(0)\n/** fix 模式:表格主体高(可占用高度扣除工具栏与分页占用,行区内滚动) */\nconst fixTableHeight = ref(0)\nconst isFixMode = computed(() => props.height === 'fix')\n\n/**\n * 固定高度模式:height 传数字 / CSS 长度(非 'fix')。\n * 此时 el-table 自身取固定高度,根容器不再以 height:100% 被内容撑高,\n * 表格也不能 flex:1 拉伸覆盖其显式高度。\n */\nconst isFixedHeightMode = computed(() => {\n if (props.autoHeight) return false\n const h = props.height\n return h != null && h !== '' && h !== 'fix'\n})\n\n/** 根容器内联高:fix 且测得可占用高度时钉死为可用高度,否则内容自适应 */\nconst rootStyle = computed(() =>\n isFixMode.value && availFixHeight.value > 0 ? { height: `${availFixHeight.value}px` } : undefined\n)\n\n/** el-table height:fix → 计算表体像素高(无约束祖先时 undefined = 内容自适应);autoHeight → '100%';显式数字/CSS 长度 → 固定高 */\nconst tableHeight = computed(() => {\n if (isFixMode.value) return fixTableHeight.value > 0 ? fixTableHeight.value : undefined\n if (props.autoHeight) return '100%'\n const h = props.height\n if (h == null || h === '') return undefined\n return h as string | number\n})\n\n/**\n * 找限制高度的祖先(fix 边界):向上取最近一个有确定高度 / 最大高度 / 纵向可滚动的容器。\n * body 与 html 不视作边界(避免退回「视口口径」),找不到则返回 null(fix 退化为内容自适应)。\n */\nfunction findFixBoundary(el: HTMLElement): HTMLElement | null {\n let node: HTMLElement | null = el.parentElement\n while (node && node !== document.body && node !== document.documentElement) {\n const style = getComputedStyle(node)\n const h = parseFloat(style.height)\n const maxH = style.maxHeight === 'none' ? 0 : parseFloat(style.maxHeight)\n const overflowY = style.overflowY\n const isScroll = overflowY === 'auto' || overflowY === 'scroll' || overflowY === 'overlay'\n const hasBoundedHeight = (Number.isFinite(h) && h > 0) || (Number.isFinite(maxH) && maxH > 0)\n // 可滚动容器即边界;overflow:hidden 仅在自身定高/有最大高时算边界(避免包住自动高内容层)\n if (isScroll || hasBoundedHeight) return node\n node = node.parentElement\n }\n return null\n}\n\nlet fixBoundaryEl: HTMLElement | null = null\nlet fixObserver: ResizeObserver | null = null\n\n/** fix 测量:以最近可约束祖先的内容区底为下界,网格顶到该界的距离即可用高度 */\nfunction measureFixHeight() {\n const el = rootRef.value\n if (!el || !isFixMode.value) return\n const boundary = findFixBoundary(el)\n // 祖先变化时重新挂载观察器:容器尺寸变化(含弹层出现/折叠展开)自动重算\n if (fixBoundaryEl !== boundary) {\n fixObserver?.disconnect()\n fixBoundaryEl = boundary\n if (boundary && typeof ResizeObserver !== 'undefined') {\n fixObserver = new ResizeObserver(() => measureFixHeight())\n fixObserver.observe(boundary)\n }\n }\n if (!boundary) {\n // 无约束祖先:内容自适应(不撑高)\n availFixHeight.value = 0\n fixTableHeight.value = 0\n return\n }\n const style = getComputedStyle(boundary)\n const padB = parseFloat(style.paddingBottom) || 0\n const rect = boundary.getBoundingClientRect()\n const gridTop = el.getBoundingClientRect().top\n // 内容坐标口径:内容底 = clientHeight - 下内边距(+边框顶偏移),再减网格距内容顶的偏移(祖先纵向滚动用 scrollTop 补偿)\n const avail = Math.floor(boundary.clientHeight - padB + rect.top + boundary.clientTop - gridTop - boundary.scrollTop)\n if (avail <= 0) {\n availFixHeight.value = 0\n fixTableHeight.value = 0\n return\n }\n availFixHeight.value = avail\n const toolbar = el.querySelector('.wd-datagrid__toolbar') as HTMLElement | null\n const pager = el.querySelector('.wd-datagrid__pager') as HTMLElement | null\n fixTableHeight.value = Math.max(40, avail - (toolbar?.offsetHeight ?? 0) - (pager?.offsetHeight ?? 0))\n}\nfunction onViewportResize() {\n measureFixHeight()\n}\n\n// 动态切换 height='fix' 时挂/卸 resize 监听并重算\nwatch(\n () => props.height,\n (v) => {\n if (v === 'fix') {\n window.addEventListener('resize', onViewportResize)\n nextTick(measureFixHeight)\n } else {\n window.removeEventListener('resize', onViewportResize)\n fixObserver?.disconnect()\n fixObserver = null\n fixBoundaryEl = null\n }\n }\n)\n\n// 分页档位\nconst globalCfg = getGlobalConfig()\nconst pagerPageSizes = globalCfg.page.pager.pageSizes\nconst hideOnSinglePage = globalCfg.page.pager.hideOnSinglePage\nconst pagerLayout = computed(() => {\n if (props.pagerStyle === 'simple') return 'prev, pager, next'\n if (props.pagerStyle === 'full') return 'total, sizes, prev, pager, next, jumper'\n return globalCfg.page.pager.layout\n})\n// 分页位置:prop 优先,缺省走全局配置 page.pager.position(默认 right)\nconst pagerPos = computed(() => props.pagerPosition || globalCfg.page.pager.position || 'right')\n\n// 数据控制\nconst isStatic = computed(() => Array.isArray(props.dataSource))\nconst grid = useDataGrid({\n api: isStatic.value ? '' : props.api,\n apiMethod: props.apiMethod,\n apiParam: props.apiParam,\n pageSize: globalCfg.page.pager.pageSize,\n immediate: false\n})\n\nconst { list, total, loading, currentPage, pageSize, selection } = grid\n\n// 静态数据直接渲染\nwatch(\n () => props.dataSource,\n (val) => {\n if (isStatic.value) {\n list.value = val as any[]\n total.value = (val as any[]).length\n }\n },\n { immediate: true }\n)\n\n// 动态列\nconst {\n columns: colColumns,\n controllableColumns,\n hiddenKeys,\n columnOrderMap,\n settingVisible: colSettingVisible,\n init: initColumns,\n setVisible: setColumnVisible,\n reorder: reorderColumns,\n reset: resetColumns\n} = useColumnSettings(props.columnStorageKey || undefined)\n\n// ---------- 列设置:拖拽排序 ----------\nconst draggingColKey = ref('')\nconst dragOverKey = ref('')\nconst dragOverPosition = ref<'before' | 'after'>('before')\n\nfunction onColDragStart(e: DragEvent, key: string) {\n draggingColKey.value = key\n if (e.dataTransfer) {\n e.dataTransfer.effectAllowed = 'move'\n // Firefox 需要 setData 才会触发拖拽\n e.dataTransfer.setData('text/plain', key)\n }\n}\n\nfunction onColDragOver(e: DragEvent, key: string) {\n if (!draggingColKey.value || draggingColKey.value === key) return\n const el = e.currentTarget as HTMLElement\n const rect = el.getBoundingClientRect()\n dragOverKey.value = key\n dragOverPosition.value = e.clientY - rect.top < rect.height / 2 ? 'before' : 'after'\n if (e.dataTransfer) e.dataTransfer.dropEffect = 'move'\n}\n\nfunction onColDragLeave(key: string) {\n if (dragOverKey.value === key) dragOverKey.value = ''\n}\n\nfunction onColDrop(key: string) {\n reorderColumns(draggingColKey.value, key, dragOverPosition.value)\n onColDragEnd()\n}\n\nfunction onColDragEnd() {\n draggingColKey.value = ''\n dragOverKey.value = ''\n}\n\nconst columnVnodes = computed<VNode[]>(() => {\n const defaultSlot = slots.default\n if (!defaultSlot) return []\n const vn = defaultSlot()\n // 首次初始化列元信息\n if (!colColumns.value.length) {\n initColumns(vn)\n }\n // 先按显隐过滤,再按列设置中的顺序重排\n return orderColumnVnodes(filterColumnVnodes(vn, hiddenKeys.value), columnOrderMap.value)\n})\n\n/** 根据隐藏列 key 过滤插槽 vnode(隐藏的列不渲染) */\nfunction filterColumnVnodes(vnodes: VNode[], hidden: Set<string>): VNode[] {\n const result: VNode[] = []\n vnodes.forEach((vnode) => {\n if (!vnode || typeof vnode !== 'object') {\n if (vnode) result.push(vnode)\n return\n }\n const p = (vnode.props || {}) as Record<string, any>\n const key = String(p.prop || p.columnKey || '')\n // selection/index 列已由组件自身渲染,跳过插槽里用户重复声明的\n if (p.type === 'selection' || p.type === 'index') return\n if (key && hidden.has(key)) return\n result.push(vnode)\n })\n return result\n}\n\n// 序号\nfunction indexMethod(index: number) {\n return (currentPage.value - 1) * pageSize.value + index + 1\n}\n\n// 行合并\nfunction rowspanMethod({ row, column, rowIndex, columnIndex }: any) {\n if (!props.rowspanKey || !props.rowspanColumn.length) return { rowspan: 1, colspan: 1 }\n const prop = column.property\n if (!props.rowspanColumn.includes(prop)) return { rowspan: 1, colspan: 1 }\n const data = list.value\n const keyVal = row[props.rowspanKey]\n // 该分组第一行计算 span\n const firstIdx = data.findIndex((r) => r[props.rowspanKey] === keyVal)\n if (rowIndex === firstIdx) {\n const span = data.filter((r) => r[props.rowspanKey] === keyVal).length\n return { rowspan: span, colspan: 1 }\n }\n return { rowspan: 0, colspan: 0 }\n}\n\n// ---------- 选中项(v-model:modelValue 双向绑定,支持 selectionKey) ----------\n/** 内部选中行(完整行对象)→ 对外值:默认行数组;设置 selectionKey 时返回该字段值数组 */\nfunction selectionValue(rows: any[]): any[] {\n if (!props.selectionKey) return rows\n return rows.map((r) => r?.[props.selectionKey])\n}\n\n/** 依据 props.modelValue 回显勾选对应行(从非空→空时清空勾选;初始/未使用 v-model 时不干预) */\nfunction applySelectionFromModel(mv?: any[], ov?: any[]) {\n if (mv === undefined) mv = props.modelValue\n // 空 → 空:跳过(未使用 v-model 或初始未设置选中,不干预用户选择)\n if ((!mv || mv.length === 0) && (!ov || ov.length === 0)) return\n const table = tableRef.value\n if (!table) return\n // 与当前内部选择一致则跳过,避免用户勾选→父回传→再次触发造成抖动\n const current = selectionValue(grid.getSelection())\n if (current.length === mv.length && mv.every((v) => current.includes(v))) return\n\n syncingSelection = true\n table.clearSelection()\n if (mv && mv.length) {\n const targets = props.selectionKey\n ? list.value.filter((r: any) => mv.includes(r?.[props.selectionKey]))\n : list.value.filter((r: any) => mv.includes(r))\n targets.forEach((r: any) => table.toggleRowSelection(r, true))\n }\n nextTick(() => {\n syncingSelection = false\n })\n}\n\n// modelValue 变化或数据刷新后,回显勾选\nwatch(\n () => props.modelValue,\n (nv, ov) => {\n applySelectionFromModel(nv as any[], ov as any[])\n },\n { deep: true }\n)\nwatch(\n () => list.value,\n () => {\n if (!syncingSelection) applySelectionFromModel()\n // 购物车:数据刷新/翻页后回勾当前页中已暂存的行\n if (props.withSelectionCart) applyCartRestore()\n }\n)\n\n// 事件\nfunction onSelectionChange(rows: any[]) {\n grid.setSelection(rows)\n if (syncingSelection) return\n // 购物车:用户勾选变化同步进暂存(跨页累计、去重;当前页未勾选的行移出)\n if (props.withSelectionCart) syncCartFromSelection(rows)\n const value = selectionValue(rows)\n emit('selection-change', value)\n emit('update:modelValue', value)\n}\n\nfunction onChangeCurrentpage(val: number) {\n grid.onChangeCurrentpage(val)\n emit('page-change', { currentPage: val, pageSize: pageSize.value })\n}\nfunction onChangePagesize(val: number) {\n grid.onChangePagesize(val)\n emit('page-change', { currentPage: currentPage.value, pageSize: val })\n}\n\nfunction toggleMode() {\n viewMode.value = viewMode.value === 'table' ? 'card' : 'table'\n emit('mode-change', viewMode.value)\n}\n\n/** 操作列宽度:按按钮数量估算 */\nconst actionColumnWidth = computed(() => {\n const w = props.rowActions.reduce((sum, act) => sum + act.text.length * 14 + 16, 20)\n return Math.max(w, 90)\n})\n\n/** 内置操作列点击:emit row-action { row, command, text } */\nfunction onRowAction(row: any, act: { text: string; command?: string; type?: string }) {\n emit('row-action', { row, command: act.command ?? act.text, text: act.text })\n}\n\n// 对外方法\nfunction requestApi(options?: { apiParam?: Record<string, any> }) {\n if (isStatic.value) return Promise.resolve()\n return grid.fetchData(options?.apiParam).then((res) => {\n emit('loaded', res)\n })\n}\nfunction refresh() {\n if (isStatic.value) return Promise.resolve()\n return grid.fetchData().then((res) => emit('loaded', res))\n}\nfunction getSelection() {\n return selectionValue(grid.getSelection())\n}\nfunction clearSelection() {\n tableRef.value?.clearSelection?.()\n grid.clearSelection()\n}\n/** 搜索面板联动:带搜索参数查询(重置到第一页) */\nfunction search(params?: Record<string, any>) {\n if (isStatic.value) return Promise.resolve()\n currentPage.value = 1\n return grid.fetchData(params).then((res) => emit('loaded', res))\n}\n/** 重置搜索并刷新 */\nfunction resetSearch() {\n return grid.reset()\n}\n\ndefineExpose({\n requestApi,\n refresh,\n onChangePagesize,\n onChangeCurrentpage,\n getSelection,\n clearSelection,\n search,\n resetSearch,\n getCartList,\n clearCart,\n tableRef\n})\n\n// 注册到联动中心\nlet unregister: (() => void) | null = null\nonMounted(() => {\n unregister = registerDataGrid({\n filter: props.filter,\n refresh: () => refresh(),\n search: (params?: Record<string, any>) => search(params),\n resetSearch: () => resetSearch()\n })\n if (props.active && !isStatic.value) {\n requestApi()\n }\n if (isFixMode.value) {\n window.addEventListener('resize', onViewportResize)\n measureFixHeight()\n }\n // 静态数据在 setup 阶段已就绪,挂载后补一次选中回显\n applySelectionFromModel()\n})\nonBeforeUnmount(() => {\n window.removeEventListener('resize', onViewportResize)\n fixObserver?.disconnect()\n fixObserver = null\n fixBoundaryEl = null\n unregister?.()\n})\n\n// api 变化自动重载\nwatch(\n () => [props.api, props.apiMethod],\n () => {\n if (props.active && !isStatic.value) requestApi()\n }\n)\n</script>\n\n<style scoped>\n.wd-datagrid {\n display: flex;\n flex-direction: column;\n width: 100%;\n height: 100%;\n background: var(--wd-bg-color, #fff);\n}\n.wd-datagrid--auto-height {\n height: 100%;\n}\n/*\n * 固定高度模式(height 传数字 / CSS 长度):\n * 根容器高度由「工具栏 + 固定高表格 + 分页」自然拼成,不能保持 height:100%\n * (父级无定高时 height:100% 退化为 auto,会被 flex:1 的表格反向撑高)。\n */\n.wd-datagrid--fixed-height {\n height: auto;\n}\n.wd-datagrid__toolbar {\n display: flex;\n align-items: center;\n justify-content: flex-start;\n gap: var(--wd-spacing-base, 12px);\n padding: 0 0 var(--wd-spacing-base, 12px);\n flex-wrap: wrap;\n}\n/* 功能区与左区按钮紧凑排布:按钮自身间距交由容器 gap 控制 */\n.wd-datagrid__toolbar :deep(.el-button + .el-button) {\n margin-left: 0;\n}\n.wd-datagrid__toolbar :deep(.el-button .el-icon) {\n font-size: 16px;\n}\n.wd-datagrid__toolbar-group,\n.wd-datagrid__bottom-group {\n display: flex;\n align-items: center;\n flex-wrap: wrap;\n}\n.wd-datagrid__toolbar-left {\n gap: 8px;\n}\n.wd-datagrid__toolbar-right {\n gap: 6px;\n margin-left: auto;\n}\n/* 顶栏分组对齐:order 决定左/右视觉次序;置右组用 margin-left:auto 右推。\n 多个置右组相邻时仅首个右推,后续组 margin 归零紧贴,避免两个 auto 平分剩余空间把第一组停在中间 */\n.wd-datagrid__toolbar-group.at-left {\n order: 1;\n margin-left: 0;\n}\n.wd-datagrid__toolbar-group.at-right {\n order: 2;\n margin-left: auto;\n}\n.wd-datagrid__toolbar-group.at-right + .at-right {\n margin-left: 0;\n}\n/* 方角模式:图标按钮为直角正方形,宽高跟随尺寸切换(带文字的购物车按钮除外) */\n.wd-datagrid__toolbar-group.is-square :deep(.el-button) {\n border-radius: 0;\n}\n.wd-datagrid__toolbar-group.is-square :deep(.el-button:not(.wd-datagrid__cart-btn--text)) {\n padding: 0;\n width: var(--el-button-size, 32px);\n}\n/* 按钮组模式:按钮粘连成组,仅首尾保留圆角 */\n.wd-datagrid__toolbar-group.is-group {\n gap: 0;\n}\n.wd-datagrid__toolbar-group.is-group > *:not(:first-child) {\n margin-left: -1px;\n}\n.wd-datagrid__toolbar-group.is-group :deep(.el-button:not(.wd-datagrid__cart-btn--text)) {\n padding: 0;\n width: var(--el-button-size, 32px);\n}\n/* 中间按钮直角:覆盖「按钮是直接子」与「按钮被 dropdown/badge 包裹」两种结构 */\n.wd-datagrid__toolbar-group.is-group > :deep(.el-button:not(:first-child)),\n.wd-datagrid__toolbar-group.is-group > *:not(:first-child) :deep(.el-button) {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n.wd-datagrid__toolbar-group.is-group > :deep(.el-button:not(:last-child)),\n.wd-datagrid__toolbar-group.is-group > *:not(:last-child) :deep(.el-button) {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n/* hover/focus 时提升层级,显示完整边框 */\n.wd-datagrid__toolbar-group.is-group :deep(.el-button:hover),\n.wd-datagrid__toolbar-group.is-group :deep(.el-button:focus) {\n position: relative;\n z-index: 1;\n}\n\n/* 移除对el-badge的所有自定义样式覆盖,使用Element Plus默认样式 */\n.wd-datagrid__toolbar-group :deep(.el-badge) {\n /* 不覆盖任何样式,保留默认 */\n}\n.wd-datagrid__cart-btn {\n /* 保持默认位置,不干扰badge定位 */\n}\n.wd-datagrid__table {\n flex: 1;\n min-height: 0;\n}\n/* 固定高度模式下 el-table 自带显式高度,禁止 flex:1 拉伸覆盖该高度 */\n.wd-datagrid--fixed-height .wd-datagrid__table {\n flex: none;\n}\n.wd-datagrid__pager {\n display: flex;\n align-items: center;\n justify-content: flex-end;\n gap: var(--wd-spacing-base, 12px);\n /* 底部组与分页合并同一行:不换行,内容过宽时横向滚动 */\n flex-wrap: nowrap;\n overflow-x: auto;\n padding-top: var(--wd-spacing-base, 12px);\n}\n/* 底部工具组与自定义组:图标按钮紧凑排布、内部不换行 */\n.wd-datagrid__bottom-group {\n gap: 6px;\n flex-wrap: nowrap;\n flex-shrink: 0;\n}\n.wd-datagrid__bottom-actions {\n gap: 8px;\n}\n.wd-datagrid__bottom-group :deep(.el-button + .el-button) {\n margin-left: 0;\n}\n.wd-datagrid__bottom-group :deep(.el-button .el-icon) {\n font-size: 16px;\n}\n/* 分页:默认 right——无任何底部组时单独靠右;有底部组时也保持推到行尾 */\n.wd-datagrid__pager-main {\n margin-left: auto;\n}\n/* 分页位置 left:分页贴左(DOM 在底部组之后,用 order 提前),后续底部组被 margin-right:auto 推到行尾 */\n.wd-datagrid__bottom-bar.pager-at-left .wd-datagrid__pager-main {\n order: -1;\n margin-left: 0;\n margin-right: auto;\n}\n/* 分页位置 center:两侧 auto margin 平分剩余空间居中(flex 中 auto margin 优先于 justify-content);有底部组时组靠左、分页在剩余空间居中 */\n.wd-datagrid__bottom-bar.pager-at-center .wd-datagrid__pager-main {\n margin-right: auto;\n}\n.wd-datagrid__cards {\n flex: 1;\n min-height: 0;\n overflow: auto;\n}\n.wd-datagrid__card {\n /* 组件级令牌回退链:皮肤可单独定制 DataGrid 卡片 */\n background: var(--wd-datagrid-bg, transparent);\n /* 背景素材:皮肤可挂纹理/图片(须置于 background 简写之后,否则被简写重置) */\n background-image: var(--wd-datagrid-bg-image, none);\n border: var(--wd-border-width, 1px) var(--wd-border-style, solid) var(--wd-datagrid-border-color, var(--wd-border-color-light, #e4e7ed));\n border-radius: var(--wd-datagrid-radius, var(--wd-radius-base, 4px));\n padding: var(--wd-datagrid-padding, var(--wd-spacing-base, 12px));\n margin-bottom: var(--wd-spacing-base, 12px);\n}\n.wd-datagrid__card-title {\n font-weight: 600;\n font-size: var(--wd-font-size-large, 16px);\n color: var(--wd-text-color-primary, #303133);\n margin-bottom: 8px;\n}\n.wd-datagrid__card-line {\n display: flex;\n font-size: var(--wd-font-size-base, 14px);\n line-height: 1.8;\n}\n.wd-datagrid__card-label {\n width: 110px;\n color: var(--wd-text-color-secondary, #909399);\n flex-shrink: 0;\n}\n.wd-datagrid__card-value {\n color: var(--wd-text-color-regular, #606266);\n word-break: break-all;\n}\n.wd-datagrid__col-tip {\n margin-bottom: 8px;\n font-size: var(--wd-font-size-small, 12px);\n color: var(--wd-text-color-secondary, #909399);\n}\n.wd-datagrid__col-setting {\n max-height: 400px;\n overflow: auto;\n}\n.wd-datagrid__col-item {\n position: relative;\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 6px 8px;\n border-bottom: var(--wd-border-width, 1px) var(--wd-border-style, solid) var(--wd-border-color-light, #f0f0f0);\n border-radius: var(--wd-radius-small, 4px);\n transition: background-color 0.15s;\n}\n.wd-datagrid__col-item:hover {\n background-color: var(--wd-fill-color-light, #f5f7fa);\n}\n.wd-datagrid__col-handle {\n display: inline-flex;\n align-items: center;\n cursor: grab;\n color: var(--wd-text-color-placeholder, #a8abb2);\n touch-action: none;\n}\n.wd-datagrid__col-handle:active {\n cursor: grabbing;\n}\n.wd-datagrid__col-checkbox {\n flex: 1;\n}\n/* 正在拖拽的源行 */\n.wd-datagrid__col-item.is-dragging {\n opacity: 0.45;\n}\n/* 放置位置指示线 */\n.wd-datagrid__col-item.drag-over--before::before,\n.wd-datagrid__col-item.drag-over--after::after {\n content: '';\n position: absolute;\n left: 0;\n right: 0;\n height: 2px;\n background-color: var(--el-color-primary, #409eff);\n pointer-events: none;\n}\n.wd-datagrid__col-item.drag-over--before::before {\n top: -1px;\n}\n.wd-datagrid__col-item.drag-over--after::after {\n bottom: -1px;\n}\n</style>\n"],"names":["ColumnRenderer","defineComponent","props","__props","emit","__emit","slots","useSlots","tableRef","ref","viewMode","toolsConf","computed","toolBtnMode","toolBtnSize","hasToolbar","hasActions","hasToolsGroup","actionsAtTop","toolsAtTop","actionsAtBottom","toolsAtBottom","showTopToolbar","showBottomBar","syncingSelection","cartList","cartVisible","cartKeyOf","row","k","cartKeyLabel","v","syncCartFromSelection","rows","pageKeys","list","r","merged","c","idx","i","openCart","removeCartRow","table","clearCart","_b","_a","getCartList","applyCartRestore","nextTick","sizeStorageKey","storedSize","safeJsonParse","innerSize","watch","onSizeChange","cmd","rootRef","availFixHeight","fixTableHeight","isFixMode","isFixedHeightMode","h","rootStyle","tableHeight","findFixBoundary","el","node","style","maxH","overflowY","isScroll","hasBoundedHeight","fixBoundaryEl","fixObserver","measureFixHeight","boundary","padB","rect","gridTop","avail","toolbar","pager","onViewportResize","globalCfg","getGlobalConfig","pagerPageSizes","hideOnSinglePage","pagerLayout","pagerPos","isStatic","grid","useDataGrid","total","loading","currentPage","pageSize","selection","val","colColumns","controllableColumns","hiddenKeys","columnOrderMap","colSettingVisible","initColumns","setColumnVisible","reorderColumns","resetColumns","useColumnSettings","draggingColKey","dragOverKey","dragOverPosition","onColDragStart","key","onColDragOver","onColDragLeave","onColDrop","onColDragEnd","columnVnodes","defaultSlot","vn","orderColumnVnodes","filterColumnVnodes","vnodes","hidden","result","vnode","p","indexMethod","index","rowspanMethod","column","rowIndex","columnIndex","prop","data","keyVal","firstIdx","selectionValue","applySelectionFromModel","mv","ov","current","nv","onSelectionChange","value","onChangeCurrentpage","onChangePagesize","toggleMode","actionColumnWidth","w","sum","act","onRowAction","requestApi","options","res","refresh","getSelection","clearSelection","search","params","resetSearch","__expose","unregister","onMounted","registerDataGrid","onBeforeUnmount","_createElementBlock","_openBlock","_hoisted_1","_normalizeClass","_renderSlot","_ctx","_unref","_createBlock","_component_el_button","_createVNode","_component_el_icon","Plus","Download","_component_el_tooltip","Refresh","_component_el_dropdown","_component_el_dropdown_menu","_component_el_dropdown_item","_cache","ScaleToOriginal","$slots","Grid","Menu","Setting","_component_el_badge","ShoppingCart","_hoisted_2","_toDisplayString","_component_el_table","_component_el_empty","_component_el_table_column","_withCtx","_Fragment","_renderList","$event","_createTextVNode","_withDirectives","_hoisted_3","_createElementVNode","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_8","_hoisted_9","_component_el_pagination","_component_el_dialog","_hoisted_10","col","_withModifiers","_component_el_checkbox","Rank","_resolveDynamicComponent","_hoisted_13","_hoisted_14"],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { defineComponent as C, ref as c, resolveComponent as p, openBlock as o, createElementBlock as D, Fragment as V, createBlock as d, withCtx as a, createVNode as $, mergeProps as y, renderSlot as i, createTextVNode as b, toDisplayString as g, createSlots as B, normalizeProps as P, guardReactiveProps as N, createCommentVNode as w, nextTick as R } from "vue";
|
|
2
|
-
import { W as T } from "./Drawer-
|
|
2
|
+
import { W as T } from "./Drawer-BzdohcBg.mjs";
|
|
3
3
|
import { t as W, h as j, f as A } from "./props-DAytpx7D.mjs";
|
|
4
4
|
const U = /* @__PURE__ */ C({
|
|
5
5
|
name: "WdDialogButton",
|
|
@@ -114,4 +114,4 @@ const U = /* @__PURE__ */ C({
|
|
|
114
114
|
export {
|
|
115
115
|
U as _
|
|
116
116
|
};
|
|
117
|
-
//# sourceMappingURL=DialogButton.vue_vue_type_script_setup_true_lang-
|
|
117
|
+
//# sourceMappingURL=DialogButton.vue_vue_type_script_setup_true_lang-ex2zYLZC.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DialogButton.vue_vue_type_script_setup_true_lang-
|
|
1
|
+
{"version":3,"file":"DialogButton.vue_vue_type_script_setup_true_lang-ex2zYLZC.mjs","sources":["../../src/components/buttons/DialogButton.vue"],"sourcesContent":["<template>\r\n <el-tooltip\r\n v-if=\"tips\"\r\n :content=\"tips\"\r\n :effect=\"tipsType\"\r\n :placement=\"placement\"\r\n >\r\n <el-button :type=\"type\" :size=\"buttonSize\" :disabled=\"disabled\" v-bind=\"$attrs\" @click=\"openDialog\">\r\n <slot name=\"button\">{{ label }}</slot>\r\n </el-button>\r\n </el-tooltip>\r\n <el-button v-else :type=\"type\" :size=\"buttonSize\" :disabled=\"disabled\" v-bind=\"$attrs\" @click=\"openDialog\">\r\n <slot name=\"button\">{{ label }}</slot>\r\n </el-button>\r\n\r\n <wd-drawer\r\n v-if=\"rendered\"\r\n v-model=\"dialogVisible\"\r\n mode=\"dialog\"\r\n :title=\"title\"\r\n :size=\"size\"\r\n :url=\"url\"\r\n :data=\"data\"\r\n :filter=\"filter\"\r\n :head-refresh-datagrid=\"headRefreshDatagrid\"\r\n @close=\"onClose\"\r\n @confirm=\"onConfirm\"\r\n >\r\n <slot :data=\"data\" :close=\"closeDialog\" />\r\n <template v-if=\"$slots.footer\" #footer=\"footerProps\">\r\n <slot name=\"footer\" v-bind=\"footerProps\" />\r\n </template>\r\n </wd-drawer>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { ref, nextTick, type PropType } from 'vue'\r\nimport WdDrawer from '../containers/Drawer.vue'\r\nimport { filterProp, headRefreshDatagridProp, tipsProp } from '../common/props'\r\n\r\ndefineOptions({ name: 'WdDialogButton', inheritAttrs: false })\r\n\r\ndefineProps({\r\n ...filterProp,\r\n ...headRefreshDatagridProp,\r\n ...tipsProp,\r\n /** 按钮文案(也可用 #button 插槽;el-button 原生 text 走 $attrs 透传) */\r\n label: { type: String, default: '' },\r\n /** 弹出层标题 */\r\n title: { type: String, default: '' },\r\n /** iframe 地址(设置后弹层内以 iframe 加载,否则渲染默认插槽) */\r\n url: { type: String, default: '' },\r\n /** 传给内部表单/iframe 的数据 */\r\n data: { type: Object, default: () => ({}) },\r\n /** 对话框宽度 */\r\n size: { type: [String, Number], default: '50%' },\r\n /** el-button type */\r\n type: { type: String, default: 'primary' },\r\n /** el-button size */\r\n buttonSize: { type: String, default: 'default' },\r\n disabled: { type: Boolean, default: false },\r\n})\r\n\r\nconst emit = defineEmits(['open', 'close', 'confirm'])\r\n\r\n/** 内容懒挂载:首次打开才渲染弹层内容,避免内部 DataForm 提前请求 */\r\nconst rendered = ref(false)\r\nconst dialogVisible = ref(false)\r\n\r\nasync function openDialog() {\r\n rendered.value = true\r\n await nextTick()\r\n dialogVisible.value = true\r\n emit('open')\r\n}\r\n\r\nfunction closeDialog() {\r\n dialogVisible.value = false\r\n}\r\n\r\nfunction onClose() {\r\n emit('close')\r\n}\r\n\r\nfunction onConfirm(payload: any) {\r\n emit('confirm', payload)\r\n}\r\n</script>\r\n"],"names":["emit","__emit","rendered","ref","dialogVisible","openDialog","nextTick","closeDialog","onClose","onConfirm","payload","tips","_createBlock","_component_el_tooltip","tipsType","placement","_createVNode","_component_el_button","_mergeProps","__props","$attrs","_renderSlot","_ctx","_openBlock","WdDrawer","$event","filter","headRefreshDatagrid","$slots","_withCtx","footerProps"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+DA,UAAMA,IAAOC,GAGPC,IAAWC,EAAI,EAAK,GACpBC,IAAgBD,EAAI,EAAK;AAE/B,mBAAeE,IAAa;AAC1B,MAAAH,EAAS,QAAQ,IACjB,MAAMI,EAAA,GACNF,EAAc,QAAQ,IACtBJ,EAAK,MAAM;AAAA,IACb;AAEA,aAASO,IAAc;AACrB,MAAAH,EAAc,QAAQ;AAAA,IACxB;AAEA,aAASI,IAAU;AACjB,MAAAR,EAAK,OAAO;AAAA,IACd;AAEA,aAASS,EAAUC,GAAc;AAC/B,MAAAV,EAAK,WAAWU,CAAO;AAAA,IACzB;;;;QApFUC,EAAAA,aADRC,EASaC,GAAA;AAAA;UAPV,SAASF,EAAAA;AAAAA,UACT,QAAQG,EAAAA;AAAAA,UACR,WAAWC,EAAAA;AAAAA,QAAAA;qBAEZ,MAEY;AAAA,YAFZC,EAEYC,GAFZC,EAEY;AAAA,cAFA,MAAMC,EAAA;AAAA,cAAO,MAAMA,EAAA;AAAA,cAAa,UAAUA,EAAA;AAAA,YAAA,GAAkBC,EAAAA,QAAM,EAAG,SAAOf,EAAA,CAAU,GAAA;AAAA,yBAChG,MAAsC;AAAA,gBAAtCgB,EAAsCC,wBAAtC,MAAsC;AAAA,sBAAfH,EAAA,KAAK,GAAA,CAAA;AAAA,gBAAA;;;;;;sDAGhCI,KAAAX,EAEYK,GAFZC,EAEY;AAAA;UAFO,MAAMC,EAAA;AAAA,UAAO,MAAMA,EAAA;AAAA,UAAa,UAAUA,EAAA;AAAA,QAAA,GAAkBC,EAAAA,QAAM,EAAG,SAAOf,EAAA,CAAU,GAAA;AAAA,qBACvG,MAAsC;AAAA,YAAtCgB,EAAsCC,wBAAtC,MAAsC;AAAA,kBAAfH,EAAA,KAAK,GAAA,CAAA;AAAA,YAAA;;;;QAItBjB,EAAA,cADRU,EAiBYY,GAAA;AAAA;sBAfDpB,EAAA;AAAA,wDAAAA,EAAa,QAAAqB;AAAA,UACtB,MAAK;AAAA,UACJ,OAAON,EAAA;AAAA,UACP,MAAMA,EAAA;AAAA,UACN,KAAKA,EAAA;AAAA,UACL,MAAMA,EAAA;AAAA,UACN,QAAQO,EAAAA;AAAAA,UACR,yBAAuBC,EAAAA;AAAAA,UACvB,SAAAnB;AAAA,UACA,WAAAC;AAAA,QAAA;qBAED,MAA0C;AAAA,YAA1CY,EAA0CC,EAAA,QAAA,WAAA;AAAA,cAAnC,MAAMH,EAAA;AAAA,cAAO,OAAOZ;AAAA,YAAA;;;;UACXqB,EAAAA,OAAO;kBAAS;AAAA,YAC9B,IAAAC,EAAA,CADsCC,MAAW;AAAA,cACjDT,EAA2CC,wBAAfQ,CAAW,CAAA,CAAA;AAAA,YAAA;;;;;;;;"}
|