@kp-ui/lowcode-pc 1.0.0-alpha.9 → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (97) hide show
  1. package/assets/styles/style.css +189 -51
  2. package/core/src/components/common/render/Debugger.vue.js +1 -1
  3. package/core/src/components/common/render/Debugger.vue2.js +1 -1
  4. package/core/src/components/common/render/Debugger.vue2.js.map +1 -1
  5. package/core/src/components/common/render/LowcodeRenderProvider.vue.js +10 -1
  6. package/core/src/components/common/render/LowcodeRenderProvider.vue.js.map +1 -1
  7. package/core/src/components/common/render/useFormContext.js +3 -2
  8. package/core/src/components/common/render/useFormContext.js.map +1 -1
  9. package/core/src/constants/WidgetTypeEnum.js +1 -0
  10. package/core/src/constants/WidgetTypeEnum.js.map +1 -1
  11. package/core/src/hooks/useAppRef.js +1 -0
  12. package/core/src/hooks/useAppRef.js.map +1 -1
  13. package/core/src/hooks/useDataHttp.js +3 -3
  14. package/core/src/hooks/useDataHttp.js.map +1 -1
  15. package/core/src/hooks/useDesigner.js +3 -1
  16. package/core/src/hooks/useDesigner.js.map +1 -1
  17. package/core/src/hooks/useField.js +97 -64
  18. package/core/src/hooks/useField.js.map +1 -1
  19. package/core/src/hooks/useWebMCP.js +82 -0
  20. package/core/src/hooks/useWebMCP.js.map +1 -0
  21. package/core/src/lang/en-US.js +33 -0
  22. package/core/src/lang/en-US.js.map +1 -1
  23. package/core/src/lang/zh-CN.js +64 -11
  24. package/core/src/lang/zh-CN.js.map +1 -1
  25. package/install.js +1 -1
  26. package/install.js.map +1 -1
  27. package/package.json +1 -1
  28. package/src/components/desginer/form-widget/container-widget/data-table-widget.vue.js +1 -1
  29. package/src/components/desginer/form-widget/container-widget/data-table-widget.vue2.js +17 -3
  30. package/src/components/desginer/form-widget/container-widget/data-table-widget.vue2.js.map +1 -1
  31. package/src/components/desginer/form-widget/container-widget/useTableWidget.js +23 -5
  32. package/src/components/desginer/form-widget/container-widget/useTableWidget.js.map +1 -1
  33. package/src/components/desginer/form-widget/container-widget/vf-box-widget.vue.js +1 -1
  34. package/src/components/desginer/form-widget/container-widget/vf-box-widget.vue2.js.map +1 -1
  35. package/src/components/desginer/form-widget/container-widget/vf-dialog-widget.vue2.js +0 -1
  36. package/src/components/desginer/form-widget/container-widget/vf-dialog-widget.vue2.js.map +1 -1
  37. package/src/components/desginer/widget-panel/advanced/data-table.js +2 -0
  38. package/src/components/desginer/widget-panel/advanced/data-table.js.map +1 -1
  39. package/src/components/desginer/widget-panel/containers/grid-sub-form.js +5 -0
  40. package/src/components/desginer/widget-panel/containers/grid-sub-form.js.map +1 -1
  41. package/src/components/desginer/widget-panel/containers/grid.js +1 -3
  42. package/src/components/desginer/widget-panel/containers/grid.js.map +1 -1
  43. package/src/components/field-widget/bpmn-editor-widget.vue.js +1 -1
  44. package/src/components/field-widget/bpmn-editor-widget.vue2.js +1 -1
  45. package/src/components/field-widget/bpmn-editor-widget.vue2.js.map +1 -1
  46. package/src/components/field-widget/button-list-widget.vue.js +1 -1
  47. package/src/components/field-widget/button-list-widget.vue2.js +1 -2
  48. package/src/components/field-widget/button-list-widget.vue2.js.map +1 -1
  49. package/src/components/field-widget/code-editor-widget.vue.js +1 -1
  50. package/src/components/field-widget/code-editor-widget.vue2.js +1 -1
  51. package/src/components/field-widget/code-editor-widget.vue2.js.map +1 -1
  52. package/src/components/field-widget/divider-widget.vue2.js +1 -1
  53. package/src/components/field-widget/divider-widget.vue2.js.map +1 -1
  54. package/src/components/field-widget/diy-compontent-widget.vue2.js +1 -1
  55. package/src/components/field-widget/diy-compontent-widget.vue2.js.map +1 -1
  56. package/src/components/field-widget/dropdown-widget.vue.js +1 -1
  57. package/src/components/field-widget/dropdown-widget.vue2.js +12 -20
  58. package/src/components/field-widget/dropdown-widget.vue2.js.map +1 -1
  59. package/src/components/field-widget/file-upload-widget.vue.js +1 -1
  60. package/src/components/field-widget/file-upload-widget.vue2.js +12 -16
  61. package/src/components/field-widget/file-upload-widget.vue2.js.map +1 -1
  62. package/src/components/field-widget/form-item-wrapper.vue.js +1 -1
  63. package/src/components/field-widget/form-item-wrapper.vue2.js.map +1 -1
  64. package/src/components/field-widget/number-widget.vue2.js +1 -1
  65. package/src/components/field-widget/number-widget.vue2.js.map +1 -1
  66. package/src/components/field-widget/radio-widget.vue.js +1 -1
  67. package/src/components/field-widget/radio-widget.vue2.js +5 -6
  68. package/src/components/field-widget/radio-widget.vue2.js.map +1 -1
  69. package/src/components/field-widget/rich-editor-widget.vue.js +1 -1
  70. package/src/components/field-widget/rich-editor-widget.vue2.js +1 -1
  71. package/src/components/field-widget/rich-editor-widget.vue2.js.map +1 -1
  72. package/src/components/field-widget/textarea-widget.vue.js +1 -1
  73. package/src/components/field-widget/textarea-widget.vue2.js +1 -1
  74. package/src/components/field-widget/textarea-widget.vue2.js.map +1 -1
  75. package/src/components/field-widget/treeSelect-widget.vue2.js +8 -9
  76. package/src/components/field-widget/treeSelect-widget.vue2.js.map +1 -1
  77. package/src/components/field-widget/vue-render-widget.vue2.js +1 -1
  78. package/src/components/field-widget/vue-render-widget.vue2.js.map +1 -1
  79. package/src/components/form-render/container-items/data-table-widget.vue.js +1 -1
  80. package/src/components/form-render/container-items/data-table-widget.vue2.js +83 -4
  81. package/src/components/form-render/container-items/data-table-widget.vue2.js.map +1 -1
  82. package/src/components/form-render/container-items/grid-sub-form-widget.vue.js +1 -1
  83. package/src/components/form-render/container-items/grid-sub-form-widget.vue2.js +24 -5
  84. package/src/components/form-render/container-items/grid-sub-form-widget.vue2.js.map +1 -1
  85. package/src/components/public/DataTableColumnDialog.vue.js +8 -0
  86. package/src/components/public/DataTableColumnDialog.vue.js.map +1 -0
  87. package/src/components/public/DataTableColumnDialog.vue2.js +333 -0
  88. package/src/components/public/DataTableColumnDialog.vue2.js.map +1 -0
  89. package/src/components/public/DynamicDialog.vue.js +0 -1
  90. package/src/components/public/DynamicDialog.vue.js.map +1 -1
  91. package/src/components/render/index.vue2.js +0 -1
  92. package/src/components/render/index.vue2.js.map +1 -1
  93. package/stats.html +1 -1
  94. package/core/src/utils/event-bus.js +0 -8
  95. package/core/src/utils/event-bus.js.map +0 -1
  96. package/src/components/field-widget/useField.js +0 -578
  97. package/src/components/field-widget/useField.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"data-table-widget.vue2.js","sources":["../../../../../src/components/form-render/container-items/data-table-widget.vue"],"sourcesContent":["<template>\n <div class=\"talbe-wrapper\" :style=\"{ width: tableWidth }\" v-if=\"!handleHidden\">\n <Table\n @register=\"register\"\n :tableProps=\"tableProps\"\n :loading=\"isLoading\"\n :pagination=\"pagintion\"\n />\n </div>\n</template>\n\n<script lang=\"ts\" setup>\n import { ContainerTypeEnum, ComponentNameEnum, WidgetProps } from '@kp-ui/lowcode-core';\n import { onMounted, watchEffect } from 'vue';\n import { useVxeTable, Table } from 'tmgc2-share';\n import { useField } from '@kp-ui/lowcode-core';\n import { useTableWidget } from '../../desginer/form-widget/container-widget/useTableWidget';\n import { DataTableWidget } from '../../desginer/widget-panel/advanced';\n\n const props = defineProps<WidgetProps<DataTableWidget>>();\n defineOptions({\n name: ContainerTypeEnum.DataTable,\n componentName: ComponentNameEnum.FieldWidget\n });\n\n const { fieldModel, handleHidden, defineExposed, customClass } = useField(props);\n\n const {\n isLoading,\n tableProps,\n tableWidth,\n pagintion,\n setPagination,\n setTableRef,\n initTableSoureData,\n handleTableChange,\n onRunEvent,\n onSortChange,\n onCheckboxChange,\n tableDefinExpoed\n } = useTableWidget({\n props,\n fieldModel\n });\n\n watchEffect(() => {\n if (!props.field.options.showPagination) {\n setPagination({\n total: 0\n });\n }\n });\n\n pagintion.value.onChange = (current, pageSize) => {\n initTableSoureData();\n };\n\n const { tableRef, register, selectedRowInfo, sorts, selectRow, delSelectRow } = useVxeTable({\n props: {\n rowKey: props.field.options.rowKey,\n hasRowSelection: props.field.options.rowSelection?.hasRowSelection,\n clickRowCheck: props.field.options.colorRow\n },\n events: {\n dataChange: params => handleTableChange({ sorts: sorts.value }),\n cellDblclick: params => onRunEvent(params, 'onDblclick'),\n cellMouseenter: params => onRunEvent(params, 'onMouseenter'),\n cellMouseleave: params => onRunEvent(params, 'onMouseleave')\n },\n callbacks: {\n onCheckboxChange,\n onSortChange,\n cellClick: params => onRunEvent(params, 'onClick')\n }\n });\n\n const getSelectedRowKeys = () => {\n return selectedRowInfo.value.selectedRowKeys;\n };\n\n const getSelectedRows = () => {\n return selectedRowInfo.value.selectedRows;\n };\n\n /**\n * 获取字段编辑器\n * @returns 字段编辑器\n */\n const getFieldEditor = () => {\n // 获取内置的el表单组件\n return tableRef.value;\n };\n\n watchEffect(() => {\n if (tableRef.value) {\n setTableRef(tableRef.value);\n }\n });\n\n onMounted(() => {\n initTableSoureData();\n });\n\n defineExpose({\n ...defineExposed,\n ...tableDefinExpoed,\n delSelectRow,\n getFieldEditor,\n selectRow,\n getSelectedRowKeys,\n getSelectedRows,\n setPagination,\n sorts,\n selectedRowInfo,\n loadDataTableDataSource: initTableSoureData,\n fieldEditor: tableRef\n });\n</script>\n\n<style lang=\"scss\" scoped>\n .talbe-wrapper {\n width: 100%;\n .vxe-grid {\n width: 100%;\n }\n &__pagination {\n margin-top: 10px;\n display: flex;\n justify-content: end;\n }\n }\n</style>\n"],"names":["_unref","_createElementBlock","_createVNode"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAmBI,UAAM,QAAQ;AAMd,UAAM,EAAE,YAAY,cAAc,cAA2B,IAAI,SAAS,KAAK;AAE/E,UAAM;AAAA,MACF;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAAA,IACA,eAAe;AAAA,MACf;AAAA,MACA;AAAA,IAAA,CACH;AAED,gBAAY,MAAM;AACd,UAAI,CAAC,MAAM,MAAM,QAAQ,gBAAgB;AACrC,sBAAc;AAAA,UACV,OAAO;AAAA,QAAA,CACV;AAAA,MACL;AAAA,IACJ,CAAC;AAED,cAAU,MAAM,WAAW,CAAC,SAAS,aAAa;AAC9C,yBAAA;AAAA,IACJ;AAEA,UAAM,EAAE,UAAU,UAAU,iBAAiB,OAAO,WAAW,aAAA,IAAiB,YAAY;AAAA,MACxF,OAAO;AAAA,QACH,QAAQ,MAAM,MAAM,QAAQ;AAAA,QAC5B,kBAAiB,WAAM,MAAM,QAAQ,iBAApB,mBAAkC;AAAA,QACnD,eAAe,MAAM,MAAM,QAAQ;AAAA,MAAA;AAAA,MAEvC,QAAQ;AAAA,QACJ,YAAY,CAAA,WAAU,kBAAkB,EAAE,OAAO,MAAM,OAAO;AAAA,QAC9D,cAAc,CAAA,WAAU,WAAW,QAAQ,YAAY;AAAA,QACvD,gBAAgB,CAAA,WAAU,WAAW,QAAQ,cAAc;AAAA,QAC3D,gBAAgB,CAAA,WAAU,WAAW,QAAQ,cAAc;AAAA,MAAA;AAAA,MAE/D,WAAW;AAAA,QACP;AAAA,QACA;AAAA,QACA,WAAW,CAAA,WAAU,WAAW,QAAQ,SAAS;AAAA,MAAA;AAAA,IACrD,CACH;AAED,UAAM,qBAAqB,MAAM;AAC7B,aAAO,gBAAgB,MAAM;AAAA,IACjC;AAEA,UAAM,kBAAkB,MAAM;AAC1B,aAAO,gBAAgB,MAAM;AAAA,IACjC;AAMA,UAAM,iBAAiB,MAAM;AAEzB,aAAO,SAAS;AAAA,IACpB;AAEA,gBAAY,MAAM;AACd,UAAI,SAAS,OAAO;AAChB,oBAAY,SAAS,KAAK;AAAA,MAC9B;AAAA,IACJ,CAAC;AAED,cAAU,MAAM;AACZ,yBAAA;AAAA,IACJ,CAAC;AAED,aAAa;AAAA,MACT,GAAG;AAAA,MACH,GAAG;AAAA,MACH;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,yBAAyB;AAAA,MACzB,aAAa;AAAA,IAAA,CAChB;;cAnHgEA,MAAA,YAAA,kBAAjEC,mBAOM,OAAA;AAAA;QAPD,OAAM;AAAA,QAAiB,+BAAgBD,MAAA,UAAA,GAAU;AAAA,MAAA;QAClDE,YAKEF,MAAA,KAAA,GAAA;AAAA,UAJG,YAAUA,MAAA,QAAA;AAAA,UACV,YAAYA,MAAA,UAAA;AAAA,UACZ,SAASA,MAAA,SAAA;AAAA,UACT,YAAYA,MAAA,SAAA;AAAA,QAAA;;;;;"}
1
+ {"version":3,"file":"data-table-widget.vue2.js","sources":["../../../../../src/components/form-render/container-items/data-table-widget.vue"],"sourcesContent":["<template>\n <div class=\"talbe-wrapper\" :style=\"{ width: tableWidth }\" v-if=\"!handleHidden\">\n <div class=\"table-toolbar\" v-if=\"showColumnManager\">\n <a-button size=\"small\" @click=\"openColumnDialog\">\n <template #icon>\n <SettingOutlined />\n </template>\n {{ t('lang.列设置') }}\n </a-button>\n </div>\n <Table\n @register=\"register\"\n :tableProps=\"tableProps\"\n :loading=\"isLoading\"\n :pagination=\"pagintion\"\n />\n <!-- 列管理弹窗 -->\n <DataTableColumnDialog\n v-model:visible=\"columnDialogVisible\"\n :columns=\"columnList\"\n @update=\"handleUpdateColumns\"\n ref=\"columnDialogRef\"\n />\n </div>\n</template>\n\n<script lang=\"ts\" setup>\n import { ref, onMounted, watchEffect } from 'vue';\n import { ContainerTypeEnum, ComponentNameEnum, WidgetProps } from '@kp-ui/lowcode-core';\n import { SettingOutlined } from '@ant-design/icons-vue';\n import { useVxeTable, Table } from 'tmgc2-share';\n import { useI18n } from '@kp-ui/i18n';\n import { useField } from '@kp-ui/lowcode-core';\n import { useTableWidget } from '../../desginer/form-widget/container-widget/useTableWidget';\n import { DataTableWidget } from '../../desginer/widget-panel/advanced';\n import DataTableColumnDialog from '../../public/DataTableColumnDialog.vue';\n\n const props = defineProps<WidgetProps<DataTableWidget>>();\n defineOptions({\n name: ContainerTypeEnum.DataTable,\n componentName: ComponentNameEnum.FieldWidget\n });\n\n const { t } = useI18n();\n const { fieldModel, handleHidden, defineExposed, customClass } = useField(props);\n\n // 列管理相关\n const columnDialogVisible = ref(false);\n const columnList = ref<any[]>([]);\n const {\n isLoading,\n tableProps,\n tableWidth,\n pagintion,\n showColumnManager,\n setPagination,\n setTableRef,\n initTableSoureData,\n handleTableChange,\n onRunEvent,\n onSortChange,\n onCheckboxChange,\n tableDefinExpoed\n } = useTableWidget({\n props,\n fieldModel\n });\n\n watchEffect(() => {\n if (!props.field.options.showPagination) {\n setPagination({\n total: 0\n });\n }\n });\n\n pagintion.value.onChange = (current, pageSize) => {\n initTableSoureData();\n };\n\n // 打开列管理弹窗\n const openColumnDialog = () => {\n columnDialogVisible.value = true;\n };\n\n // 处理列更新\n const handleUpdateColumns = (newColumns: any[]) => {\n // 更新原始配置,同步 show 属性\n if (props.field.options.tableColumns) {\n props.field.options.tableColumns = props.field.options.tableColumns.map(col => {\n const found = newColumns.find(item => item.dataIndex === col.dataIndex);\n if (found) {\n return { ...col, show: found.visible !== false };\n }\n return col;\n });\n }\n // 清除 vxe-table storage 中的列配置\n clearTableStorage();\n // 重新初始化列列表\n initColumnList();\n // 刷新表格列状态\n updateTableColumns();\n };\n\n // 初始化列列表\n const initColumnList = () => {\n const tableColumns = props.field.options.tableColumns || [];\n if (tableColumns.length > 0) {\n columnList.value = tableColumns.map(col => ({\n ...col,\n visible: col.show !== false,\n title: col.title || col.dataIndex\n }));\n }\n };\n\n // 清除 vxe-table storage 中的列配置\n const clearTableStorage = () => {\n // 清除当前表格的 storage key(包含表格 id)\n const tableId = props.field.id || props.field.options.name;\n const keysToRemove: string[] = [];\n for (let i = 0; i < localStorage.length; i++) {\n const key = localStorage.key(i);\n // 查找包含表格 id 的 storage key\n if (key && key.includes(tableId)) {\n keysToRemove.push(key);\n }\n }\n keysToRemove.forEach(key => localStorage.removeItem(key));\n };\n\n const { tableRef, register, selectedRowInfo, sorts, selectRow, delSelectRow } = useVxeTable({\n props: {\n rowKey: props.field.options.rowKey,\n hasRowSelection: props.field.options.rowSelection?.hasRowSelection,\n clickRowCheck: props.field.options.colorRow\n },\n events: {\n dataChange: params => handleTableChange({ sorts: sorts.value }),\n cellDblclick: params => onRunEvent(params, 'onDblclick'),\n cellMouseenter: params => onRunEvent(params, 'onMouseenter'),\n cellMouseleave: params => onRunEvent(params, 'onMouseleave')\n },\n callbacks: {\n onCheckboxChange,\n onSortChange,\n cellClick: params => onRunEvent(params, 'onClick')\n }\n });\n\n // 更新表格列配置\n const updateTableColumns = () => {\n if (!tableRef.value) return;\n // 调用 vxe-table 的 refreshColumn 方法来刷新列状态\n tableRef.value.refreshColumn();\n };\n\n const getSelectedRowKeys = () => {\n const selectRows = tableRef.value?.getCheckboxRecords() || [];\n return selectRows.map(item => item[props.field.options.rowKey]);\n };\n\n const getSelectedRows = () => {\n // return selectedRowInfo.value.selectedRows;\n return tableRef.value?.getCheckboxRecords(true);\n };\n\n /**\n * 获取字段编辑器\n * @returns 字段编辑器\n */\n const getFieldEditor = () => {\n // 获取内置的el表单组件\n return tableRef.value;\n };\n\n watchEffect(() => {\n if (tableRef.value) {\n setTableRef(tableRef.value);\n }\n });\n\n onMounted(() => {\n initTableSoureData();\n initColumnList();\n });\n\n defineExpose({\n ...defineExposed,\n ...tableDefinExpoed,\n delSelectRow,\n getFieldEditor,\n selectRow,\n getSelectedRowKeys,\n getSelectedRows,\n setPagination,\n sorts,\n selectedRowInfo,\n loadDataTableDataSource: initTableSoureData,\n fieldEditor: tableRef\n });\n</script>\n\n<style lang=\"scss\" scoped>\n .talbe-wrapper {\n width: 100%;\n\n .table-toolbar {\n padding: 8px 0;\n margin-bottom: 8px;\n }\n\n .vxe-grid {\n width: 100%;\n }\n\n &__pagination {\n margin-top: 10px;\n display: flex;\n justify-content: end;\n }\n }\n</style>\n"],"names":["_a","_unref","_createElementBlock","_openBlock","_createVNode","_createTextVNode"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import _sfc_main from "./grid-sub-form-widget.vue2.js";
2
2
  /* empty css */
3
3
  import _export_sfc from "../../../../_virtual/_plugin-vue_export-helper.js";
4
- const GridSubFormWidget = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-80b2c408"]]);
4
+ const GridSubFormWidget = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-a3f1d201"]]);
5
5
  export {
6
6
  GridSubFormWidget as default
7
7
  };
@@ -2,6 +2,7 @@ import { defineComponent, provide, ref, onMounted, resolveComponent, withDirecti
2
2
  import { traverseFieldWidgetsOfContainer, generateId, deepClone } from "../../../../core/src/utils/util.js";
3
3
  import _sfc_main$1 from "../RenderWigetList.vue2.js";
4
4
  import { SvgIcon, TpfDelConfirm } from "tmgc2-share";
5
+ import { PlusOutlined, DeleteOutlined } from "@ant-design/icons-vue";
5
6
  import { ComponentNameEnum, ContainerTypeEnum } from "../../../../core/src/constants/WidgetTypeEnum.js";
6
7
  import { useField } from "../../../../core/src/hooks/useField.js";
7
8
  import { useI18n } from "../../../../core/src/utils/i18n.js";
@@ -37,7 +38,13 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
37
38
  const insertDisabled = ref(false);
38
39
  const deleteDisabled = ref(false);
39
40
  const actionDisabled = ref(false);
40
- const { formModel, isReadMode, handleHidden, executeFunction, defineExposed } = useField(props);
41
+ const {
42
+ formModel,
43
+ isReadMode,
44
+ handleHidden,
45
+ executeFunction,
46
+ defineExposed
47
+ } = useField(props);
41
48
  const extractFieldWidgetList = () => {
42
49
  fieldWidgetList.value = [];
43
50
  const fieldListFn = (fw) => {
@@ -161,6 +168,16 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
161
168
  addSubFormRow();
162
169
  }
163
170
  };
171
+ const onSubFormRowDeleteHide = (index) => {
172
+ return executeFunction({
173
+ functionBody: props.widget.options.onSubFormRowDeleteHide,
174
+ params: {
175
+ subFormData: formModel.value[props.widget.options.name],
176
+ index
177
+ },
178
+ keys: ["subFormData", "index"]
179
+ });
180
+ };
164
181
  onMounted(() => {
165
182
  extractFieldWidgetList();
166
183
  initRowIdData(true);
@@ -209,21 +226,23 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
209
226
  onClick: ($event) => insertSubFormRow(sfrIdx)
210
227
  }, {
211
228
  icon: withCtx(() => [
212
- createVNode(unref(SvgIcon), { "icon-class": "icon-el-plus" })
229
+ createVNode(unref(PlusOutlined))
213
230
  ]),
214
231
  _: 2
215
232
  }, 1032, ["title", "disabled", "onClick"]),
216
- createVNode(_component_a_button, {
233
+ withDirectives(createVNode(_component_a_button, {
217
234
  type: "link",
218
235
  title: unref(i18nt)("render.hint.deleteSubFormRow"),
219
236
  disabled: actionDisabled.value || deleteDisabled.value,
220
237
  onClick: ($event) => deleteSubFormRow(sfrIdx)
221
238
  }, {
222
239
  icon: withCtx(() => [
223
- createVNode(unref(SvgIcon), { "icon-class": "icon-el-delete" })
240
+ createVNode(unref(DeleteOutlined))
224
241
  ]),
225
242
  _: 2
226
- }, 1032, ["title", "disabled", "onClick"])
243
+ }, 1032, ["title", "disabled", "onClick"]), [
244
+ [vShow, !onSubFormRowDeleteHide || !onSubFormRowDeleteHide(sfrIdx)]
245
+ ])
227
246
  ], 512), [
228
247
  [vShow, !unref(isReadMode)]
229
248
  ])
@@ -1 +1 @@
1
- {"version":3,"file":"grid-sub-form-widget.vue2.js","sources":["../../../../../src/components/form-render/container-items/grid-sub-form-widget.vue"],"sourcesContent":["<template>\n <div class=\"sub-form-container\" v-show=\"!handleHidden\">\n <div v-for=\"(subFormRowId, sfrIdx) in rowIdData\" class=\"sub-form-row\" :key=\"subFormRowId\">\n <div class=\"row-no-column\">\n <span class=\"row-number-span\">#{{ sfrIdx + 1 }}</span>\n </div>\n <div class=\"grid-sub-form-data-row\">\n <RenderWigetList\n :widgetList=\"widget.widgetList || []\"\n :parentWidget=\"widget\"\n :subFormRowIndex=\"sfrIdx\"\n :subFormRowId=\"subFormRowId\"\n />\n </div>\n <div class=\"sub-form-action-column hide-label\">\n <div class=\"action-button-column\" v-show=\"!isReadMode\">\n <a-button\n type=\"link\"\n :title=\"i18nt('render.hint.insertSubFormRow')\"\n :disabled=\"actionDisabled || insertDisabled\"\n @click=\"insertSubFormRow(sfrIdx)\"\n >\n <template #icon>\n <svg-icon icon-class=\"icon-el-plus\" />\n </template>\n </a-button>\n <a-button\n type=\"link\"\n :title=\"i18nt('render.hint.deleteSubFormRow')\"\n :disabled=\"actionDisabled || deleteDisabled\"\n @click=\"deleteSubFormRow(sfrIdx)\"\n >\n <template #icon>\n <svg-icon icon-class=\"icon-el-delete\" />\n </template>\n </a-button>\n </div>\n </div>\n </div>\n <div class=\"header-row\">\n <a-button\n block\n v-if=\"!isReadMode\"\n :disabled=\"actionDisabled || insertDisabled\"\n shape=\"round\"\n type=\"dashed\"\n size=\"small\"\n class=\"action-button\"\n @click=\"addSubFormRow\"\n :title=\"i18nt('render.hint.subFormAddActionHint')\"\n >\n <template #icon>\n <svg-icon icon-class=\"icon-el-plus\" />\n </template>\n {{ i18nt('render.hint.subFormAddAction') }}\n </a-button>\n </div>\n </div>\n</template>\n\n<script lang=\"ts\" setup>\n import { computed, ref, provide, onMounted, nextTick } from 'vue';\n import {\n deepClone,\n generateId,\n traverseFieldWidgetsOfContainer\n } from '@kp-ui/lowcode-core/src/utils/util';\n import RenderWigetList from '../RenderWigetList.vue';\n import { SvgIcon, TpfDelConfirm } from 'tmgc2-share';\n import { ComponentNameEnum, ContainerTypeEnum, WidgetProps } from '@kp-ui/lowcode-core';\n import { useI18n } from '@kp-ui/lowcode-core';\n import { useField } from '@kp-ui/lowcode-core';\n import { GridSubFormWidget } from '../../desginer/widget-panel/containers';\n\n defineOptions({\n name: ContainerTypeEnum.GridSubFormWidget,\n componentName: ComponentNameEnum.ContainerWidget,\n inheritAttrs: false\n });\n\n provide('isSubFormField', true);\n provide('getSubFormName', () => props.widget.options.name);\n\n const { i18nt } = useI18n();\n const props = withDefaults(defineProps<WidgetProps<GridSubFormWidget>>(), {});\n\n const rowIdData = ref<string[]>([]);\n const fieldWidgetList = ref<any[]>([]);\n const insertDisabled = ref(false);\n const deleteDisabled = ref(false);\n const actionDisabled = ref(false);\n\n const { formModel, isReadMode, handleHidden, executeFunction, defineExposed } = useField(props);\n\n const extractFieldWidgetList = () => {\n fieldWidgetList.value = [];\n const fieldListFn = (fw: any) => {\n fieldWidgetList.value.push(fw);\n };\n traverseFieldWidgetsOfContainer(props.widget, fieldListFn);\n };\n\n const initRowIdData = (initFlag = false) => {\n rowIdData.value = [];\n const subFormModel = formModel.value[props.widget.options.name];\n if (!!subFormModel && subFormModel.length > 0) {\n subFormModel.forEach(() => {\n rowIdData.value.push('id' + generateId());\n });\n\n if (initFlag) {\n setTimeout(() => {\n handleSubFormRowChange(subFormModel);\n }, 800);\n }\n }\n };\n\n const handleSubFormRowChange = (subFormData: any) => {\n if (props.widget.options.onSubFormRowChange) {\n executeFunction({\n functionBody: props.widget.options.onSubFormRowChange,\n keys: ['subFormData'],\n params: { subFormData }\n });\n }\n };\n\n const handleSubFormRowAdd = (subFormData: any, newRowId: string) => {\n executeFunction({\n functionBody: props.widget.options.onSubFormRowAdd,\n params: {\n subFormData,\n newRowId\n },\n keys: ['subFormData', 'newRowId']\n });\n };\n\n const handleSubFormRowInsert = (subFormData: any, newRowId: string) => {\n executeFunction({\n functionBody: props.widget.options.onSubFormRowInsert,\n params: {\n subFormData,\n newRowId\n },\n keys: ['subFormData', 'newRowId']\n });\n };\n\n const handleSubFormRowDelete = (subFormData: any, deletedDataRow: any) => {\n executeFunction({\n functionBody: props.widget.options.onSubFormRowDelete,\n params: {\n subFormData,\n deletedDataRow\n },\n keys: ['subFormData', 'deletedDataRow']\n });\n };\n\n const addSubFormRow = () => {\n const newSubFormDataRow: Record<string, any> = {};\n fieldWidgetList.value.forEach(subFormItem => {\n if (subFormItem?.formItemFlag) {\n newSubFormDataRow[subFormItem.options.name] = subFormItem.options.defaultValue;\n }\n });\n\n const oldSubFormData = formModel.value[props.widget.options.name] || [];\n oldSubFormData.push(newSubFormDataRow);\n // Ensure formModel is updated if it was empty/undefined\n if (!formModel.value[props.widget.options.name]) {\n formModel.value[props.widget.options.name] = oldSubFormData;\n }\n\n const newRowId = 'id' + generateId();\n rowIdData.value.push(newRowId);\n\n nextTick(() => {\n handleSubFormRowAdd(oldSubFormData, newRowId);\n handleSubFormRowChange(oldSubFormData);\n });\n };\n\n const insertSubFormRow = (index: number) => {\n const newSubFormDataRow: Record<string, any> = {};\n fieldWidgetList.value.forEach(subFormItem => {\n if (subFormItem?.formItemFlag) {\n newSubFormDataRow[subFormItem.options.name] = subFormItem.options.defaultValue;\n }\n });\n\n const oldSubFormData = formModel.value[props.widget.options.name] || [];\n oldSubFormData.splice(index, 0, newSubFormDataRow);\n // Ensure formModel is updated\n if (!formModel.value[props.widget.options.name]) {\n formModel.value[props.widget.options.name] = oldSubFormData;\n }\n\n const newRowId = 'id' + generateId();\n rowIdData.value.splice(index, 0, newRowId);\n\n nextTick(() => {\n handleSubFormRowInsert(oldSubFormData, newRowId);\n handleSubFormRowChange(oldSubFormData);\n });\n };\n\n const deleteSubFormRow = (index: number) => {\n TpfDelConfirm({\n type: 'confirm',\n content: i18nt('render.hint.deleteSubFormRow') + '?',\n title: i18nt('render.hint.prompt'),\n okText: i18nt('render.hint.confirm'),\n cancelText: i18nt('render.hint.cancel')\n })\n .then(() => {\n const oldSubFormData = formModel.value[props.widget.options.name] || [];\n const deletedDataRow = deepClone(oldSubFormData[index]);\n oldSubFormData.splice(index, 1);\n rowIdData.value.splice(index, 1);\n\n nextTick(() => {\n handleSubFormRowDelete(oldSubFormData, deletedDataRow);\n handleSubFormRowChange(oldSubFormData);\n });\n })\n .catch(() => {});\n };\n\n const handleSubFormFirstRowAdd = () => {\n if (!!props.widget.options.showBlankRow && rowIdData.value.length === 0) {\n if (fieldWidgetList.value.length === 0) extractFieldWidgetList();\n addSubFormRow();\n }\n };\n\n onMounted(() => {\n extractFieldWidgetList();\n initRowIdData(true);\n handleSubFormFirstRowAdd();\n });\n\n defineExpose({\n ...defineExposed,\n insertDisabled,\n deleteDisabled,\n actionDisabled,\n setInsertDisabled: (flag: boolean) => {\n insertDisabled.value = flag;\n },\n setDeleteDisabled: (flag: boolean) => {\n deleteDisabled.value = flag;\n },\n setActionDisabled: (flag: boolean) => {\n actionDisabled.value = flag;\n }\n });\n</script>\n\n<style lang=\"scss\" scoped>\n .sub-form-container {\n margin-bottom: 16px;\n text-align: left;\n background: #fafafa;\n border-radius: 8px;\n padding: 10px;\n\n .header-row {\n margin-top: 15px;\n :deep(.action-button) {\n height: 35px;\n }\n }\n\n .sub-form-row {\n display: flex;\n align-items: center;\n background: white;\n margin: 8px 0;\n border-radius: 6px;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.03);\n\n .row-number-span {\n margin-left: 16px;\n }\n }\n }\n\n .sub-form-action-column {\n display: inline-block;\n align-items: center;\n text-align: center;\n padding: 8px;\n }\n\n .grid-sub-form-data-row {\n display: inline-block;\n flex: 1;\n padding: 10px;\n position: relative;\n &:before,\n &:after {\n content: '';\n display: inline-block;\n width: 1px;\n height: 60%;\n background: #e1e2e3;\n position: absolute;\n top: 50%;\n transform: translateY(-50%);\n }\n &:before {\n left: 0;\n }\n &:after {\n right: 0;\n }\n :deep(.ant-form-item) {\n margin-bottom: 0;\n }\n }\n\n div.sub-form-action-column.hide-label {\n }\n\n div.row-no-column {\n display: flex;\n align-items: center;\n width: 50px;\n border-radius: 10px;\n background: #f1f2f3;\n padding: 5px 0;\n margin: 0 6px;\n font-size: 14px;\n color: #666;\n }\n\n .action-button-column {\n width: 140px;\n }\n</style>\n"],"names":["_withDirectives","_openBlock","_createElementBlock","_Fragment","_renderList","_createElementVNode","_createVNode","RenderWigetList","widget","_unref","_createBlock","_createTextVNode"],"mappings":"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"}
1
+ {"version":3,"file":"grid-sub-form-widget.vue2.js","sources":["../../../../../src/components/form-render/container-items/grid-sub-form-widget.vue"],"sourcesContent":["<template>\n <div class=\"sub-form-container\" v-show=\"!handleHidden\">\n <div v-for=\"(subFormRowId, sfrIdx) in rowIdData\" class=\"sub-form-row\" :key=\"subFormRowId\">\n <div class=\"row-no-column\">\n <span class=\"row-number-span\">#{{ sfrIdx + 1 }}</span>\n </div>\n <div class=\"grid-sub-form-data-row\">\n <RenderWigetList\n :widgetList=\"widget.widgetList || []\"\n :parentWidget=\"widget\"\n :subFormRowIndex=\"sfrIdx\"\n :subFormRowId=\"subFormRowId\"\n />\n </div>\n <div class=\"sub-form-action-column hide-label\">\n <div class=\"action-button-column\" v-show=\"!isReadMode\">\n <a-button\n type=\"link\"\n :title=\"i18nt('render.hint.insertSubFormRow')\"\n :disabled=\"actionDisabled || insertDisabled\"\n @click=\"insertSubFormRow(sfrIdx)\"\n >\n <template #icon>\n <PlusOutlined />\n </template>\n </a-button>\n <a-button\n type=\"link\"\n :title=\"i18nt('render.hint.deleteSubFormRow')\"\n :disabled=\"actionDisabled || deleteDisabled\"\n v-show=\"!onSubFormRowDeleteHide || !onSubFormRowDeleteHide(sfrIdx)\"\n @click=\"deleteSubFormRow(sfrIdx)\"\n >\n <template #icon>\n <DeleteOutlined />\n </template>\n </a-button>\n </div>\n </div>\n </div>\n <div class=\"header-row\">\n <a-button\n block\n v-if=\"!isReadMode\"\n :disabled=\"actionDisabled || insertDisabled\"\n shape=\"round\"\n type=\"dashed\"\n size=\"small\"\n class=\"action-button\"\n @click=\"addSubFormRow\"\n :title=\"i18nt('render.hint.subFormAddActionHint')\"\n >\n <template #icon>\n <svg-icon icon-class=\"icon-el-plus\" />\n </template>\n {{ i18nt('render.hint.subFormAddAction') }}\n </a-button>\n </div>\n </div>\n</template>\n\n<script lang=\"ts\" setup>\n import { computed, ref, provide, onMounted, nextTick } from 'vue';\n import {\n deepClone,\n generateId,\n traverseFieldWidgetsOfContainer\n } from '@kp-ui/lowcode-core/src/utils/util';\n import RenderWigetList from '../RenderWigetList.vue';\n import { SvgIcon, TpfDelConfirm } from 'tmgc2-share';\n import { ComponentNameEnum, ContainerTypeEnum, WidgetProps } from '@kp-ui/lowcode-core';\n import { useI18n } from '@kp-ui/lowcode-core';\n import { useField } from '@kp-ui/lowcode-core';\n import { GridSubFormWidget } from '../../desginer/widget-panel/containers';\n import { PlusOutlined, DeleteOutlined } from '@ant-design/icons-vue';\n defineOptions({\n name: ContainerTypeEnum.GridSubFormWidget,\n componentName: ComponentNameEnum.ContainerWidget,\n inheritAttrs: false\n });\n\n provide('isSubFormField', true);\n provide('getSubFormName', () => props.widget.options.name);\n\n const { i18nt } = useI18n();\n const props = withDefaults(defineProps<WidgetProps<GridSubFormWidget>>(), {});\n\n const rowIdData = ref<string[]>([]);\n const fieldWidgetList = ref<any[]>([]);\n const insertDisabled = ref(false);\n const deleteDisabled = ref(false);\n const actionDisabled = ref(false);\n\n const {\n formModel,\n isReadMode,\n handleHidden,\n executeFunction,\n defineExposed,\n executeWidgetEventFunction\n } = useField(props);\n\n const extractFieldWidgetList = () => {\n fieldWidgetList.value = [];\n const fieldListFn = (fw: any) => {\n fieldWidgetList.value.push(fw);\n };\n traverseFieldWidgetsOfContainer(props.widget, fieldListFn);\n };\n\n const initRowIdData = (initFlag = false) => {\n rowIdData.value = [];\n const subFormModel = formModel.value[props.widget.options.name];\n if (!!subFormModel && subFormModel.length > 0) {\n subFormModel.forEach(() => {\n rowIdData.value.push('id' + generateId());\n });\n\n if (initFlag) {\n setTimeout(() => {\n handleSubFormRowChange(subFormModel);\n }, 800);\n }\n }\n };\n\n const handleSubFormRowChange = (subFormData: any) => {\n if (props.widget.options.onSubFormRowChange) {\n executeFunction({\n functionBody: props.widget.options.onSubFormRowChange,\n keys: ['subFormData'],\n params: { subFormData }\n });\n }\n };\n\n const handleSubFormRowAdd = (subFormData: any, newRowId: string) => {\n executeFunction({\n functionBody: props.widget.options.onSubFormRowAdd,\n params: {\n subFormData,\n newRowId\n },\n keys: ['subFormData', 'newRowId']\n });\n };\n\n const handleSubFormRowInsert = (subFormData: any, newRowId: string) => {\n executeFunction({\n functionBody: props.widget.options.onSubFormRowInsert,\n params: {\n subFormData,\n newRowId\n },\n keys: ['subFormData', 'newRowId']\n });\n };\n\n const handleSubFormRowDelete = (subFormData: any, deletedDataRow: any) => {\n executeFunction({\n functionBody: props.widget.options.onSubFormRowDelete,\n params: {\n subFormData,\n deletedDataRow\n },\n keys: ['subFormData', 'deletedDataRow']\n });\n };\n\n const addSubFormRow = () => {\n const newSubFormDataRow: Record<string, any> = {};\n fieldWidgetList.value.forEach(subFormItem => {\n if (subFormItem?.formItemFlag) {\n newSubFormDataRow[subFormItem.options.name] = subFormItem.options.defaultValue;\n }\n });\n\n const oldSubFormData = formModel.value[props.widget.options.name] || [];\n oldSubFormData.push(newSubFormDataRow);\n // Ensure formModel is updated if it was empty/undefined\n if (!formModel.value[props.widget.options.name]) {\n formModel.value[props.widget.options.name] = oldSubFormData;\n }\n\n const newRowId = 'id' + generateId();\n rowIdData.value.push(newRowId);\n\n nextTick(() => {\n handleSubFormRowAdd(oldSubFormData, newRowId);\n handleSubFormRowChange(oldSubFormData);\n });\n };\n\n const insertSubFormRow = (index: number) => {\n const newSubFormDataRow: Record<string, any> = {};\n fieldWidgetList.value.forEach(subFormItem => {\n if (subFormItem?.formItemFlag) {\n newSubFormDataRow[subFormItem.options.name] = subFormItem.options.defaultValue;\n }\n });\n\n const oldSubFormData = formModel.value[props.widget.options.name] || [];\n oldSubFormData.splice(index, 0, newSubFormDataRow);\n // Ensure formModel is updated\n if (!formModel.value[props.widget.options.name]) {\n formModel.value[props.widget.options.name] = oldSubFormData;\n }\n\n const newRowId = 'id' + generateId();\n rowIdData.value.splice(index, 0, newRowId);\n\n nextTick(() => {\n handleSubFormRowInsert(oldSubFormData, newRowId);\n handleSubFormRowChange(oldSubFormData);\n });\n };\n\n const deleteSubFormRow = (index: number) => {\n TpfDelConfirm({\n type: 'confirm',\n content: i18nt('render.hint.deleteSubFormRow') + '?',\n title: i18nt('render.hint.prompt'),\n okText: i18nt('render.hint.confirm'),\n cancelText: i18nt('render.hint.cancel')\n })\n .then(() => {\n const oldSubFormData = formModel.value[props.widget.options.name] || [];\n const deletedDataRow = deepClone(oldSubFormData[index]);\n oldSubFormData.splice(index, 1);\n rowIdData.value.splice(index, 1);\n\n nextTick(() => {\n handleSubFormRowDelete(oldSubFormData, deletedDataRow);\n handleSubFormRowChange(oldSubFormData);\n });\n })\n .catch(() => {});\n };\n\n const handleSubFormFirstRowAdd = () => {\n if (!!props.widget.options.showBlankRow && rowIdData.value.length === 0) {\n if (fieldWidgetList.value.length === 0) extractFieldWidgetList();\n addSubFormRow();\n }\n };\n\n const onSubFormRowDeleteHide = index => {\n return executeFunction({\n functionBody: props.widget.options.onSubFormRowDeleteHide,\n params: {\n subFormData: formModel.value[props.widget.options.name],\n index\n },\n keys: ['subFormData', 'index']\n });\n };\n\n onMounted(() => {\n extractFieldWidgetList();\n initRowIdData(true);\n handleSubFormFirstRowAdd();\n });\n\n defineExpose({\n ...defineExposed,\n insertDisabled,\n deleteDisabled,\n actionDisabled,\n setInsertDisabled: (flag: boolean) => {\n insertDisabled.value = flag;\n },\n setDeleteDisabled: (flag: boolean) => {\n deleteDisabled.value = flag;\n },\n setActionDisabled: (flag: boolean) => {\n actionDisabled.value = flag;\n }\n });\n</script>\n\n<style lang=\"scss\" scoped>\n .sub-form-container {\n margin-bottom: 16px;\n text-align: left;\n background: #fafafa;\n border-radius: 8px;\n padding: 10px;\n\n .header-row {\n margin-top: 15px;\n :deep(.action-button) {\n height: 35px;\n }\n }\n\n .sub-form-row {\n display: flex;\n align-items: center;\n background: white;\n margin: 8px 0;\n border-radius: 6px;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.03);\n\n .row-number-span {\n margin-left: 16px;\n }\n }\n }\n\n .sub-form-action-column {\n display: inline-block;\n align-items: center;\n text-align: center;\n padding: 8px;\n }\n\n .grid-sub-form-data-row {\n display: inline-block;\n flex: 1;\n padding: 10px;\n position: relative;\n &:before,\n &:after {\n content: '';\n display: inline-block;\n width: 1px;\n height: 60%;\n background: #e1e2e3;\n position: absolute;\n top: 50%;\n transform: translateY(-50%);\n }\n &:before {\n left: 0;\n }\n &:after {\n right: 0;\n }\n :deep(.ant-form-item) {\n margin-bottom: 0;\n }\n }\n\n div.sub-form-action-column.hide-label {\n }\n\n div.row-no-column {\n display: flex;\n align-items: center;\n width: 50px;\n border-radius: 10px;\n background: #f1f2f3;\n padding: 5px 0;\n margin: 0 6px;\n font-size: 14px;\n color: #666;\n }\n\n .action-button-column {\n width: 140px;\n }\n</style>\n"],"names":["_withDirectives","_openBlock","_createElementBlock","_Fragment","_renderList","_createElementVNode","_createVNode","RenderWigetList","widget","_unref","_createBlock","_createTextVNode"],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import _sfc_main from "./DataTableColumnDialog.vue2.js";
2
+ /* empty css */
3
+ import _export_sfc from "../../../_virtual/_plugin-vue_export-helper.js";
4
+ const DataTableColumnDialog = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-7ae2c55f"]]);
5
+ export {
6
+ DataTableColumnDialog as default
7
+ };
8
+ //# sourceMappingURL=DataTableColumnDialog.vue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DataTableColumnDialog.vue.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
@@ -0,0 +1,333 @@
1
+ import { defineComponent, mergeModels, useModel, ref, computed, watch, resolveComponent, createBlock, openBlock, unref, withCtx, createVNode, createElementVNode, toDisplayString, createCommentVNode, createTextVNode, createElementBlock, Fragment, renderList, normalizeClass } from "vue";
2
+ import { SearchOutlined } from "@ant-design/icons-vue";
3
+ import { useI18n } from "@kp-ui/i18n";
4
+ import { cloneDeep } from "lodash-es";
5
+ import { TpfModal, SvgIcon } from "tmgc2-share";
6
+ import Draggable from "vuedraggable";
7
+ const _hoisted_1 = { class: "col-left-title" };
8
+ const _hoisted_2 = { class: "title" };
9
+ const _hoisted_3 = { class: "search" };
10
+ const _hoisted_4 = { class: "col-left-content" };
11
+ const _hoisted_5 = { class: "col-right-title" };
12
+ const _hoisted_6 = { class: "title" };
13
+ const _hoisted_7 = { class: "col-right-content-item-left" };
14
+ const _hoisted_8 = { class: "title" };
15
+ const _hoisted_9 = { class: "col-right-content-item-right" };
16
+ const _sfc_main = /* @__PURE__ */ defineComponent({
17
+ __name: "DataTableColumnDialog",
18
+ props: /* @__PURE__ */ mergeModels({
19
+ columns: { default: () => [] }
20
+ }, {
21
+ "visible": { type: Boolean, ...{ default: false } },
22
+ "visibleModifiers": {}
23
+ }),
24
+ emits: /* @__PURE__ */ mergeModels(["update"], ["update:visible"]),
25
+ setup(__props, { expose: __expose, emit: __emit }) {
26
+ const { t } = useI18n();
27
+ const props = __props;
28
+ const emit = __emit;
29
+ const visible = useModel(__props, "visible");
30
+ const searchKey = ref("");
31
+ const tableColumns = ref([]);
32
+ const rightShowColumns = ref([]);
33
+ const leftShowColumns = computed(() => {
34
+ if (!searchKey.value) return tableColumns.value;
35
+ return tableColumns.value.filter((item) => {
36
+ return item.title && item.title.toLowerCase().includes(searchKey.value.toLowerCase());
37
+ });
38
+ });
39
+ const checkAll = ref(false);
40
+ const indeterminate = ref(false);
41
+ const updateCheckAll = () => {
42
+ const visibleColumns = leftShowColumns.value.filter((item) => item.visible);
43
+ checkAll.value = visibleColumns.length === leftShowColumns.value.length && leftShowColumns.value.length > 0;
44
+ indeterminate.value = visibleColumns.length > 0 && visibleColumns.length < leftShowColumns.value.length;
45
+ };
46
+ const getRightShowColumns = () => {
47
+ rightShowColumns.value = [];
48
+ tableColumns.value.forEach((item) => {
49
+ if (item.visible) {
50
+ rightShowColumns.value.push(item);
51
+ }
52
+ });
53
+ };
54
+ const sortRightColumns = () => {
55
+ rightShowColumns.value.sort((a, b) => {
56
+ if (a.fixed === "left" && b.fixed !== "left") return -1;
57
+ if (a.fixed !== "left" && b.fixed === "left") return 1;
58
+ return 0;
59
+ });
60
+ };
61
+ const resetColumns = () => {
62
+ tableColumns.value = cloneDeep(props.columns);
63
+ getRightShowColumns();
64
+ updateCheckAll();
65
+ };
66
+ const onCancel = () => {
67
+ visible.value = false;
68
+ };
69
+ const handleOk = () => {
70
+ const newTableColumns = [];
71
+ rightShowColumns.value.forEach((rightItem) => {
72
+ const found = tableColumns.value.find((item) => item.dataIndex === rightItem.dataIndex);
73
+ if (found) {
74
+ found.visible = true;
75
+ found.fixed = rightItem.fixed;
76
+ newTableColumns.push({ ...found });
77
+ }
78
+ });
79
+ tableColumns.value.forEach((item) => {
80
+ if (!rightShowColumns.value.find((right) => right.dataIndex === item.dataIndex)) {
81
+ item.visible = false;
82
+ delete item.fixed;
83
+ newTableColumns.push({ ...item });
84
+ }
85
+ });
86
+ emit("update", newTableColumns);
87
+ visible.value = false;
88
+ };
89
+ const changeCheckAll = (e) => {
90
+ const checked = e.target.checked;
91
+ checkAll.value = checked;
92
+ indeterminate.value = false;
93
+ tableColumns.value.forEach((item) => {
94
+ item.visible = checked;
95
+ });
96
+ getRightShowColumns();
97
+ };
98
+ const onchangeCheck = (row) => {
99
+ const index = rightShowColumns.value.findIndex((item) => item.dataIndex === row.dataIndex);
100
+ if (row.visible) {
101
+ if (index === -1) {
102
+ rightShowColumns.value.push(row);
103
+ }
104
+ } else {
105
+ if (index > -1) {
106
+ rightShowColumns.value.splice(index, 1);
107
+ }
108
+ }
109
+ updateCheckAll();
110
+ };
111
+ const removeColumn = (row, index) => {
112
+ row.visible = false;
113
+ delete row.fixed;
114
+ rightShowColumns.value.splice(index, 1);
115
+ updateCheckAll();
116
+ };
117
+ const toggleFixed = (row) => {
118
+ if (row.fixed === "left") {
119
+ delete row.fixed;
120
+ } else {
121
+ const fixedCount = rightShowColumns.value.filter((item) => item.fixed === "left").length;
122
+ if (fixedCount >= 2) {
123
+ return;
124
+ }
125
+ row.fixed = "left";
126
+ }
127
+ sortRightColumns();
128
+ };
129
+ const open = () => {
130
+ visible.value = true;
131
+ };
132
+ watch(
133
+ () => visible.value,
134
+ async (val) => {
135
+ if (val) {
136
+ tableColumns.value = cloneDeep(props.columns);
137
+ getRightShowColumns();
138
+ sortRightColumns();
139
+ updateCheckAll();
140
+ }
141
+ },
142
+ { immediate: true }
143
+ );
144
+ __expose({ open, resetColumns });
145
+ return (_ctx, _cache) => {
146
+ const _component_a_input = resolveComponent("a-input");
147
+ const _component_a_checkbox = resolveComponent("a-checkbox");
148
+ const _component_a_tooltip = resolveComponent("a-tooltip");
149
+ const _component_a_col = resolveComponent("a-col");
150
+ const _component_a_row = resolveComponent("a-row");
151
+ const _component_a_button = resolveComponent("a-button");
152
+ return openBlock(), createBlock(unref(TpfModal), {
153
+ visible: visible.value,
154
+ "onUpdate:visible": _cache[2] || (_cache[2] = ($event) => visible.value = $event),
155
+ title: unref(t)("lang.列管理"),
156
+ width: "800px",
157
+ destroyOnClose: ""
158
+ }, {
159
+ footerRight: withCtx(() => [
160
+ createVNode(_component_a_button, {
161
+ class: "tpf-button",
162
+ onClick: onCancel
163
+ }, {
164
+ default: withCtx(() => [
165
+ createTextVNode(toDisplayString(unref(t)("lang.取消")), 1)
166
+ ]),
167
+ _: 1
168
+ }),
169
+ createVNode(_component_a_button, {
170
+ class: "tpf-button",
171
+ type: "primary",
172
+ onClick: handleOk
173
+ }, {
174
+ default: withCtx(() => [
175
+ createTextVNode(toDisplayString(unref(t)("lang.保存")), 1)
176
+ ]),
177
+ _: 1
178
+ })
179
+ ]),
180
+ default: withCtx(() => [
181
+ createVNode(_component_a_row, {
182
+ gutter: 10,
183
+ class: "column-row"
184
+ }, {
185
+ default: withCtx(() => [
186
+ createVNode(_component_a_col, {
187
+ span: 12,
188
+ class: "col-left"
189
+ }, {
190
+ default: withCtx(() => [
191
+ createElementVNode("div", _hoisted_1, [
192
+ createElementVNode("div", _hoisted_2, [
193
+ createElementVNode("span", null, toDisplayString(unref(t)("lang.可选字段")), 1),
194
+ createElementVNode("span", null, "(" + toDisplayString(leftShowColumns.value.length) + toDisplayString(unref(t)("lang.个")) + ") ", 1)
195
+ ]),
196
+ createElementVNode("div", _hoisted_3, [
197
+ createVNode(_component_a_input, {
198
+ placeholder: unref(t)("lang.请搜索"),
199
+ size: "small",
200
+ "allow-clear": "",
201
+ value: searchKey.value,
202
+ "onUpdate:value": _cache[0] || (_cache[0] = ($event) => searchKey.value = $event)
203
+ }, {
204
+ prefix: withCtx(() => [
205
+ createVNode(unref(SearchOutlined))
206
+ ]),
207
+ _: 1
208
+ }, 8, ["placeholder", "value"])
209
+ ])
210
+ ]),
211
+ createElementVNode("div", _hoisted_4, [
212
+ !!tableColumns.value.length ? (openBlock(), createBlock(_component_a_checkbox, {
213
+ key: 0,
214
+ checked: checkAll.value,
215
+ "onUpdate:checked": _cache[1] || (_cache[1] = ($event) => checkAll.value = $event),
216
+ onChange: changeCheckAll,
217
+ indeterminate: indeterminate.value
218
+ }, {
219
+ default: withCtx(() => [
220
+ createTextVNode(toDisplayString(unref(t)("lang.全选")), 1)
221
+ ]),
222
+ _: 1
223
+ }, 8, ["checked", "indeterminate"])) : createCommentVNode("", true),
224
+ createVNode(_component_a_row, {
225
+ gutter: [10, 10],
226
+ class: "checkbox-row"
227
+ }, {
228
+ default: withCtx(() => [
229
+ (openBlock(true), createElementBlock(Fragment, null, renderList(leftShowColumns.value, (item) => {
230
+ return openBlock(), createBlock(_component_a_col, {
231
+ key: item.dataIndex,
232
+ span: 12
233
+ }, {
234
+ default: withCtx(() => [
235
+ createVNode(_component_a_checkbox, {
236
+ checked: item.visible,
237
+ "onUpdate:checked": ($event) => item.visible = $event,
238
+ onChange: ($event) => onchangeCheck(item)
239
+ }, {
240
+ default: withCtx(() => [
241
+ createVNode(_component_a_tooltip, {
242
+ title: item.title
243
+ }, {
244
+ default: withCtx(() => [
245
+ createTextVNode(toDisplayString(item.title), 1)
246
+ ]),
247
+ _: 2
248
+ }, 1032, ["title"])
249
+ ]),
250
+ _: 2
251
+ }, 1032, ["checked", "onUpdate:checked", "onChange"])
252
+ ]),
253
+ _: 2
254
+ }, 1024);
255
+ }), 128))
256
+ ]),
257
+ _: 1
258
+ })
259
+ ])
260
+ ]),
261
+ _: 1
262
+ }),
263
+ createVNode(_component_a_col, {
264
+ span: 12,
265
+ class: "col-right"
266
+ }, {
267
+ default: withCtx(() => [
268
+ createElementVNode("div", _hoisted_5, [
269
+ createElementVNode("div", _hoisted_6, [
270
+ createElementVNode("span", null, toDisplayString(unref(t)("lang.已选字段")), 1),
271
+ createElementVNode("span", null, "(" + toDisplayString(rightShowColumns.value.length) + toDisplayString(unref(t)("lang.个")) + ") ", 1)
272
+ ])
273
+ ]),
274
+ createVNode(unref(Draggable), {
275
+ tag: "div",
276
+ list: rightShowColumns.value,
277
+ class: "col-right-content",
278
+ "item-key": "dataIndex",
279
+ handle: ".drag-handle",
280
+ animation: "150"
281
+ }, {
282
+ item: withCtx(({ element: item, index }) => [
283
+ (openBlock(), createElementBlock("div", {
284
+ class: "col-right-content-item",
285
+ key: item.dataIndex
286
+ }, [
287
+ createElementVNode("div", _hoisted_7, [
288
+ createVNode(unref(SvgIcon), {
289
+ size: "24",
290
+ type: "icon-move1",
291
+ class: "drag-handle icon-move1",
292
+ move: "",
293
+ shadow: ""
294
+ }),
295
+ createElementVNode("span", _hoisted_8, toDisplayString(item.title), 1),
296
+ createVNode(unref(SvgIcon), {
297
+ size: "18",
298
+ type: "icon-ding",
299
+ class: normalizeClass(["icon-ding", item.fixed === "left" && "showIcon"]),
300
+ cursor: "",
301
+ shadow: "",
302
+ onClick: ($event) => toggleFixed(item)
303
+ }, null, 8, ["class", "onClick"])
304
+ ]),
305
+ createElementVNode("div", _hoisted_9, [
306
+ createVNode(unref(SvgIcon), {
307
+ size: "18",
308
+ type: "icon-guanbi",
309
+ cursor: "",
310
+ shadow: "",
311
+ onClick: ($event) => removeColumn(item, index)
312
+ }, null, 8, ["onClick"])
313
+ ])
314
+ ]))
315
+ ]),
316
+ _: 1
317
+ }, 8, ["list"])
318
+ ]),
319
+ _: 1
320
+ })
321
+ ]),
322
+ _: 1
323
+ })
324
+ ]),
325
+ _: 1
326
+ }, 8, ["visible", "title"]);
327
+ };
328
+ }
329
+ });
330
+ export {
331
+ _sfc_main as default
332
+ };
333
+ //# sourceMappingURL=DataTableColumnDialog.vue2.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DataTableColumnDialog.vue2.js","sources":["../../../../src/components/public/DataTableColumnDialog.vue"],"sourcesContent":["<template>\n <TpfModal v-model:visible=\"visible\" :title=\"t('lang.列管理')\" width=\"800px\" destroyOnClose>\n <a-row :gutter=\"10\" class=\"column-row\">\n <!-- 左侧:可选字段 -->\n <a-col :span=\"12\" class=\"col-left\">\n <div class=\"col-left-title\">\n <div class=\"title\">\n <span>{{ t('lang.可选字段') }}</span>\n <span>({{ leftShowColumns.length }}{{ t('lang.个') }}) </span>\n </div>\n <div class=\"search\">\n <a-input\n :placeholder=\"t('lang.请搜索')\"\n size=\"small\"\n allow-clear\n v-model:value=\"searchKey\"\n >\n <template #prefix>\n <SearchOutlined />\n </template>\n </a-input>\n </div>\n </div>\n <div class=\"col-left-content\">\n <a-checkbox\n v-if=\"!!tableColumns.length\"\n v-model:checked=\"checkAll\"\n @change=\"changeCheckAll\"\n :indeterminate=\"indeterminate\"\n >\n {{ t('lang.全选') }}\n </a-checkbox>\n <a-row :gutter=\"[10, 10]\" class=\"checkbox-row\">\n <a-col v-for=\"item in leftShowColumns\" :key=\"item.dataIndex\" :span=\"12\">\n <a-checkbox\n v-model:checked=\"item.visible\"\n @change=\"onchangeCheck(item)\"\n >\n <a-tooltip :title=\"item.title\">\n {{ item.title }}\n </a-tooltip>\n </a-checkbox>\n </a-col>\n </a-row>\n </div>\n </a-col>\n\n <!-- 右侧:已选字段 -->\n <a-col :span=\"12\" class=\"col-right\">\n <div class=\"col-right-title\">\n <div class=\"title\">\n <span>{{ t('lang.已选字段') }}</span>\n <span>({{ rightShowColumns.length }}{{ t('lang.个') }}) </span>\n </div>\n </div>\n <Draggable\n tag=\"div\"\n :list=\"rightShowColumns\"\n class=\"col-right-content\"\n item-key=\"dataIndex\"\n handle=\".drag-handle\"\n animation=\"150\"\n >\n <template #item=\"{ element: item, index }\">\n <div class=\"col-right-content-item\" :key=\"item.dataIndex\">\n <div class=\"col-right-content-item-left\">\n <SvgIcon\n size=\"24\"\n type=\"icon-move1\"\n class=\"drag-handle icon-move1\"\n move\n shadow\n />\n <span class=\"title\">{{ item.title }}</span>\n <SvgIcon\n size=\"18\"\n type=\"icon-ding\"\n :class=\"['icon-ding', item.fixed === 'left' && 'showIcon']\"\n cursor\n shadow\n @click=\"toggleFixed(item)\"\n />\n </div>\n <div class=\"col-right-content-item-right\">\n <SvgIcon\n size=\"18\"\n type=\"icon-guanbi\"\n cursor\n shadow\n @click=\"removeColumn(item, index)\"\n />\n </div>\n </div>\n </template>\n </Draggable>\n </a-col>\n </a-row>\n\n <template #footerRight>\n <a-button class=\"tpf-button\" @click=\"onCancel\">{{ t('lang.取消') }} </a-button>\n <a-button class=\"tpf-button\" type=\"primary\" @click=\"handleOk\">\n {{ t('lang.保存') }}\n </a-button>\n </template>\n </TpfModal>\n</template>\n\n<script setup lang=\"ts\" name=\"DataTableColumnDialog\">\n import { ref, computed, watch } from 'vue';\n import { SearchOutlined } from '@ant-design/icons-vue';\n import { useI18n } from '@kp-ui/i18n';\n import { cloneDeep } from 'lodash-es';\n import { SvgIcon, TpfModal } from 'tmgc2-share';\n import Draggable from 'vuedraggable';\n\n const { t } = useI18n();\n\n interface ColumnType {\n dataIndex: string;\n title: string;\n visible?: boolean;\n fixed?: 'left' | 'right' | boolean;\n [key: string]: any;\n }\n\n interface Props {\n columns?: ColumnType[];\n }\n\n const props = withDefaults(defineProps<Props>(), {\n columns: () => []\n });\n\n const emit = defineEmits<{\n (e: 'update', columns: ColumnType[]): void;\n }>();\n\n const visible = defineModel<boolean>('visible', { default: false });\n\n const searchKey = ref('');\n\n // 可选字段列表\n const tableColumns = ref<ColumnType[]>([]);\n // 已选字段列表\n const rightShowColumns = ref<ColumnType[]>([]);\n\n // 左侧可筛选的字段\n const leftShowColumns = computed(() => {\n if (!searchKey.value) return tableColumns.value;\n return tableColumns.value.filter(item => {\n return item.title && item.title.toLowerCase().includes(searchKey.value.toLowerCase());\n });\n });\n\n // 全选相关\n const checkAll = ref(false);\n const indeterminate = ref(false);\n\n // 更新全选状态\n const updateCheckAll = () => {\n const visibleColumns = leftShowColumns.value.filter(item => item.visible);\n checkAll.value =\n visibleColumns.length === leftShowColumns.value.length &&\n leftShowColumns.value.length > 0;\n indeterminate.value =\n visibleColumns.length > 0 && visibleColumns.length < leftShowColumns.value.length;\n };\n\n // 获取已选字段\n const getRightShowColumns = () => {\n rightShowColumns.value = [];\n tableColumns.value.forEach(item => {\n if (item.visible) {\n rightShowColumns.value.push(item);\n }\n });\n };\n\n // 排序:固定列在前\n const sortRightColumns = () => {\n rightShowColumns.value.sort((a, b) => {\n if (a.fixed === 'left' && b.fixed !== 'left') return -1;\n if (a.fixed !== 'left' && b.fixed === 'left') return 1;\n return 0;\n });\n };\n\n // 重置\n const resetColumns = () => {\n tableColumns.value = cloneDeep(props.columns);\n getRightShowColumns();\n updateCheckAll();\n };\n\n // 取消\n const onCancel = () => {\n visible.value = false;\n };\n\n // 确定\n const handleOk = () => {\n // 根据 rightShowColumns 的顺序更新 tableColumns\n const newTableColumns: ColumnType[] = [];\n\n // 先添加可见列(按 rightShowColumns 顺序)\n rightShowColumns.value.forEach(rightItem => {\n const found = tableColumns.value.find(item => item.dataIndex === rightItem.dataIndex);\n if (found) {\n found.visible = true;\n found.fixed = rightItem.fixed;\n newTableColumns.push({ ...found });\n }\n });\n\n // 再添加隐藏列\n tableColumns.value.forEach(item => {\n if (!rightShowColumns.value.find(right => right.dataIndex === item.dataIndex)) {\n item.visible = false;\n delete item.fixed;\n newTableColumns.push({ ...item });\n }\n });\n\n emit('update', newTableColumns);\n visible.value = false;\n };\n\n // 全选/取消全选\n const changeCheckAll = (e: any) => {\n const checked = e.target.checked;\n checkAll.value = checked;\n indeterminate.value = false;\n tableColumns.value.forEach(item => {\n item.visible = checked;\n });\n getRightShowColumns();\n };\n\n // 单选\n const onchangeCheck = (row: ColumnType) => {\n const index = rightShowColumns.value.findIndex(item => item.dataIndex === row.dataIndex);\n if (row.visible) {\n if (index === -1) {\n rightShowColumns.value.push(row);\n }\n } else {\n if (index > -1) {\n rightShowColumns.value.splice(index, 1);\n }\n }\n updateCheckAll();\n };\n\n // 移除列\n const removeColumn = (row: ColumnType, index: number) => {\n row.visible = false;\n delete row.fixed;\n rightShowColumns.value.splice(index, 1);\n updateCheckAll();\n };\n\n // 切换固定\n const toggleFixed = (row: ColumnType) => {\n if (row.fixed === 'left') {\n delete row.fixed;\n } else {\n // 最多固定 2 列\n const fixedCount = rightShowColumns.value.filter(item => item.fixed === 'left').length;\n if (fixedCount >= 2) {\n return;\n }\n row.fixed = 'left';\n }\n sortRightColumns();\n };\n\n // 打开弹窗\n const open = () => {\n visible.value = true;\n };\n\n // 监听弹窗显示\n watch(\n () => visible.value,\n async val => {\n if (val) {\n // 初始化列数据\n tableColumns.value = cloneDeep(props.columns);\n getRightShowColumns();\n sortRightColumns();\n updateCheckAll();\n }\n },\n { immediate: true }\n );\n\n defineExpose({ open, resetColumns });\n</script>\n\n<style lang=\"less\" scoped>\n .column-row {\n height: 400px;\n display: flex;\n\n .col-left,\n .col-right {\n display: flex;\n flex-direction: column;\n height: 100%;\n }\n\n .col-left {\n padding-left: 20px !important;\n padding-right: 10px !important;\n border-right: 1px solid #f0f0f0;\n }\n\n .col-right {\n padding-left: 10px !important;\n }\n\n .col-left-title,\n .col-right-title {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 10px;\n\n .title {\n font-weight: 500;\n color: #333;\n }\n\n .search {\n width: 150px;\n }\n }\n\n .col-left-content,\n .col-right-content {\n flex: 1 0 0;\n overflow-y: auto;\n overflow-x: hidden;\n }\n\n .checkbox-row {\n margin-top: 10px;\n }\n\n .col-right-content-item {\n margin-right: 5px;\n height: 32px;\n display: flex;\n align-items: center;\n\n .col-right-content-item-left {\n flex: 1 0 0;\n display: flex;\n align-items: center;\n\n .drag-handle {\n cursor: move;\n margin-right: 8px;\n flex-shrink: 0;\n }\n\n .title {\n flex: 1 0 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n font-size: 14px;\n }\n\n .icon-ding {\n margin-left: 8px;\n flex-shrink: 0;\n opacity: 0;\n transition: opacity 0.2s;\n\n &:hover {\n opacity: 1;\n }\n\n &.showIcon {\n opacity: 1;\n }\n }\n }\n\n &:hover {\n .icon-ding {\n opacity: 1;\n }\n }\n\n .col-right-content-item-right {\n flex: 1 0 0;\n display: flex;\n justify-content: flex-end;\n padding-right: 10px;\n\n :deep(.icon-guanbi) {\n opacity: 0.6;\n\n &:hover {\n opacity: 1;\n }\n }\n }\n }\n }\n</style>\n"],"names":["_useModel","_createBlock","_unref","_createVNode","_createElementVNode","_toDisplayString","_createElementBlock","_Fragment","_renderList","_createTextVNode","_withCtx","_normalizeClass"],"mappings":"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"}
@@ -8,7 +8,6 @@ import "../desginer/form-widget/container-widget/index.js";
8
8
  import "lodash-es";
9
9
  import "ant-design-vue";
10
10
  import "../desginer/widget-panel/widgetsConfig.js";
11
- import "../../../core/src/utils/event-bus.js";
12
11
  import "@kp-ui/tool";
13
12
  import ActionButtonListRender from "./ActionButtonListRender.vue.js";
14
13
  import "../form-render/container-items/index.js";