@kp-ui/lowcode-pc 1.0.2 → 1.0.3
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/assets/styles/style.css +50 -48
- package/core/src/hooks/useField.js +1 -0
- package/core/src/hooks/useField.js.map +1 -1
- package/core/src/store/useTableColumnStore.js +42 -0
- package/core/src/store/useTableColumnStore.js.map +1 -0
- package/package.json +1 -1
- package/src/components/desginer/form-widget/container-widget/useTableWidget.js +60 -4
- package/src/components/desginer/form-widget/container-widget/useTableWidget.js.map +1 -1
- package/src/components/desginer/form-widget/container-widget/vf-dialog-widget.vue2.js +1 -1
- package/src/components/desginer/widget-panel/advanced/data-table.js +1 -1
- package/src/components/desginer/widget-panel/advanced/data-table.js.map +1 -1
- package/src/components/field-widget/button-list-widget.vue2.js +1 -1
- package/src/components/field-widget/diy-compontent-widget.vue2.js +1 -1
- package/src/components/field-widget/diy-compontent-widget.vue2.js.map +1 -1
- package/src/components/form-render/container-items/data-table-widget.vue.js +1 -1
- package/src/components/form-render/container-items/data-table-widget.vue2.js +25 -68
- package/src/components/form-render/container-items/data-table-widget.vue2.js.map +1 -1
- package/src/components/form-render/container-items/grid-sub-form-widget.vue.js +1 -1
- package/src/components/form-render/container-items/grid-sub-form-widget.vue2.js +9 -8
- package/src/components/form-render/container-items/grid-sub-form-widget.vue2.js.map +1 -1
- package/src/components/public/ActionButtonListRender.vue.js +50 -127
- package/src/components/public/ActionButtonListRender.vue.js.map +1 -1
- package/src/components/public/ActionButtonListRender.vue2.js +130 -0
- package/src/components/public/{ActionButtonListRender.vue3.js.map → ActionButtonListRender.vue2.js.map} +1 -1
- package/src/components/public/ConfigView/CustomPageRender.vue.js +1 -1
- package/src/components/public/CustomerModal/CustomerModal.vue2.js +1 -1
- package/src/components/public/DataTableColumnDialog.vue.js +1 -1
- package/src/components/public/DataTableColumnDialog.vue2.js +103 -32
- package/src/components/public/DataTableColumnDialog.vue2.js.map +1 -1
- package/src/components/public/DynamicDialog.vue.js +1 -1
- package/src/components/render/index.vue2.js +1 -1
- package/stats.html +1 -1
- package/src/components/public/ActionButtonListRender.vue3.js +0 -53
|
@@ -1,9 +1,12 @@
|
|
|
1
|
-
import { defineComponent, mergeModels, useModel, ref, computed, watch, resolveComponent, createBlock, openBlock, unref, withCtx, createVNode, createElementVNode, toDisplayString, createCommentVNode, createTextVNode, createElementBlock, Fragment, renderList, normalizeClass } from "vue";
|
|
1
|
+
import { defineComponent, mergeModels, useModel, ref, computed, watch, resolveComponent, createBlock, openBlock, unref, withCtx, createVNode, createElementVNode, toDisplayString, createCommentVNode, createTextVNode, createElementBlock, Fragment, renderList, normalizeStyle, normalizeClass } from "vue";
|
|
2
2
|
import { SearchOutlined } from "@ant-design/icons-vue";
|
|
3
3
|
import { useI18n } from "@kp-ui/i18n";
|
|
4
4
|
import { cloneDeep } from "lodash-es";
|
|
5
5
|
import { TpfModal, SvgIcon } from "tmgc2-share";
|
|
6
6
|
import Draggable from "vuedraggable";
|
|
7
|
+
import TpfDelConfirm from "tmgc2-share/src/components/TpfModal/TpfDelConfirm";
|
|
8
|
+
import { message } from "ant-design-vue";
|
|
9
|
+
import { useTableColumnStore } from "../../../core/src/store/useTableColumnStore.js";
|
|
7
10
|
const _hoisted_1 = { class: "col-left-title" };
|
|
8
11
|
const _hoisted_2 = { class: "title" };
|
|
9
12
|
const _hoisted_3 = { class: "search" };
|
|
@@ -16,7 +19,9 @@ const _hoisted_9 = { class: "col-right-content-item-right" };
|
|
|
16
19
|
const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
17
20
|
__name: "DataTableColumnDialog",
|
|
18
21
|
props: /* @__PURE__ */ mergeModels({
|
|
19
|
-
columns: { default: () => [] }
|
|
22
|
+
columns: { default: () => [] },
|
|
23
|
+
pageCode: { default: "" },
|
|
24
|
+
tableId: { default: "" }
|
|
20
25
|
}, {
|
|
21
26
|
"visible": { type: Boolean, ...{ default: false } },
|
|
22
27
|
"visibleModifiers": {}
|
|
@@ -24,12 +29,20 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
24
29
|
emits: /* @__PURE__ */ mergeModels(["update"], ["update:visible"]),
|
|
25
30
|
setup(__props, { expose: __expose, emit: __emit }) {
|
|
26
31
|
const { t } = useI18n();
|
|
32
|
+
const tableColumnStore = useTableColumnStore();
|
|
27
33
|
const props = __props;
|
|
28
34
|
const emit = __emit;
|
|
29
35
|
const visible = useModel(__props, "visible");
|
|
30
36
|
const searchKey = ref("");
|
|
31
37
|
const tableColumns = ref([]);
|
|
32
38
|
const rightShowColumns = ref([]);
|
|
39
|
+
const initColumn = ref([]);
|
|
40
|
+
const saveColumnConfig = () => {
|
|
41
|
+
const storageKey = props.pageCode || props.tableId;
|
|
42
|
+
if (!storageKey) return;
|
|
43
|
+
const columnList = mergeColumns();
|
|
44
|
+
tableColumnStore.saveColumnList(storageKey, columnList);
|
|
45
|
+
};
|
|
33
46
|
const leftShowColumns = computed(() => {
|
|
34
47
|
if (!searchKey.value) return tableColumns.value;
|
|
35
48
|
return tableColumns.value.filter((item) => {
|
|
@@ -58,32 +71,43 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
58
71
|
return 0;
|
|
59
72
|
});
|
|
60
73
|
};
|
|
61
|
-
const
|
|
62
|
-
|
|
74
|
+
const mergeColumns = () => {
|
|
75
|
+
const selectList = unref(rightShowColumns);
|
|
76
|
+
const unSelectList = [];
|
|
77
|
+
unref(initColumn).forEach((item) => {
|
|
78
|
+
const flag = unref(selectList).some((it) => it.dataIndex === item.dataIndex);
|
|
79
|
+
if (!flag) {
|
|
80
|
+
unSelectList.push({ ...item, visible: false });
|
|
81
|
+
}
|
|
82
|
+
});
|
|
83
|
+
const result = [...selectList, ...unSelectList];
|
|
84
|
+
return result.map((item, index) => ({
|
|
85
|
+
...item,
|
|
86
|
+
displayOrdinal: index
|
|
87
|
+
}));
|
|
88
|
+
};
|
|
89
|
+
const restColum = () => {
|
|
90
|
+
tableColumns.value = cloneDeep(unref(initColumn));
|
|
63
91
|
getRightShowColumns();
|
|
64
92
|
updateCheckAll();
|
|
65
93
|
};
|
|
94
|
+
const restPageJson = async () => {
|
|
95
|
+
const storageKey = props.pageCode || props.tableId;
|
|
96
|
+
if (!storageKey) {
|
|
97
|
+
message.warning(t("lang.未配置 pageCode 或 tableId"));
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
await TpfDelConfirm({ content: t("lang.确定清除缓存记录吗") });
|
|
101
|
+
tableColumnStore.clearTableConfig(storageKey);
|
|
102
|
+
message.success(t("lang.清除成功"));
|
|
103
|
+
window.location.reload();
|
|
104
|
+
};
|
|
66
105
|
const onCancel = () => {
|
|
67
106
|
visible.value = false;
|
|
68
107
|
};
|
|
69
108
|
const handleOk = () => {
|
|
70
|
-
|
|
71
|
-
|
|
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);
|
|
109
|
+
saveColumnConfig();
|
|
110
|
+
emit("update", mergeColumns());
|
|
87
111
|
visible.value = false;
|
|
88
112
|
};
|
|
89
113
|
const changeCheckAll = (e) => {
|
|
@@ -129,11 +153,36 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
129
153
|
const open = () => {
|
|
130
154
|
visible.value = true;
|
|
131
155
|
};
|
|
156
|
+
const restoreColumnFromStorage = () => {
|
|
157
|
+
const storageKey = props.pageCode || props.tableId;
|
|
158
|
+
if (!storageKey || !tableColumnStore.hasTableConfig(storageKey)) {
|
|
159
|
+
return cloneDeep(props.columns);
|
|
160
|
+
}
|
|
161
|
+
const storedColumnList = tableColumnStore.getColumnList(storageKey);
|
|
162
|
+
if (storedColumnList.length === 0) {
|
|
163
|
+
return cloneDeep(props.columns);
|
|
164
|
+
}
|
|
165
|
+
const columns = cloneDeep(props.columns);
|
|
166
|
+
return columns.map((col) => {
|
|
167
|
+
const stored = storedColumnList.find((item) => item.dataIndex === col.dataIndex);
|
|
168
|
+
if (stored) {
|
|
169
|
+
return {
|
|
170
|
+
...col,
|
|
171
|
+
visible: stored.visible !== false,
|
|
172
|
+
fixed: stored.fixed,
|
|
173
|
+
displayOrdinal: stored.displayOrdinal
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
return col;
|
|
177
|
+
});
|
|
178
|
+
};
|
|
132
179
|
watch(
|
|
133
180
|
() => visible.value,
|
|
134
181
|
async (val) => {
|
|
135
182
|
if (val) {
|
|
136
|
-
|
|
183
|
+
const columnsConfig = restoreColumnFromStorage();
|
|
184
|
+
tableColumns.value = columnsConfig;
|
|
185
|
+
initColumn.value = columnsConfig;
|
|
137
186
|
getRightShowColumns();
|
|
138
187
|
sortRightColumns();
|
|
139
188
|
updateCheckAll();
|
|
@@ -141,7 +190,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
141
190
|
},
|
|
142
191
|
{ immediate: true }
|
|
143
192
|
);
|
|
144
|
-
__expose({ open,
|
|
193
|
+
__expose({ open, restColum });
|
|
145
194
|
return (_ctx, _cache) => {
|
|
146
195
|
const _component_a_input = resolveComponent("a-input");
|
|
147
196
|
const _component_a_checkbox = resolveComponent("a-checkbox");
|
|
@@ -156,6 +205,26 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
156
205
|
width: "800px",
|
|
157
206
|
destroyOnClose: ""
|
|
158
207
|
}, {
|
|
208
|
+
footerLeft: withCtx(() => [
|
|
209
|
+
createVNode(_component_a_button, {
|
|
210
|
+
class: "tpf-button",
|
|
211
|
+
onClick: restColum
|
|
212
|
+
}, {
|
|
213
|
+
default: withCtx(() => [
|
|
214
|
+
createTextVNode(toDisplayString(unref(t)("lang.重置")), 1)
|
|
215
|
+
]),
|
|
216
|
+
_: 1
|
|
217
|
+
}),
|
|
218
|
+
createVNode(_component_a_button, {
|
|
219
|
+
class: "tpf-button",
|
|
220
|
+
onClick: restPageJson
|
|
221
|
+
}, {
|
|
222
|
+
default: withCtx(() => [
|
|
223
|
+
createTextVNode(toDisplayString(unref(t)("lang.清除缓存记录")), 1)
|
|
224
|
+
]),
|
|
225
|
+
_: 1
|
|
226
|
+
})
|
|
227
|
+
]),
|
|
159
228
|
footerRight: withCtx(() => [
|
|
160
229
|
createVNode(_component_a_button, {
|
|
161
230
|
class: "tpf-button",
|
|
@@ -184,7 +253,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
184
253
|
}, {
|
|
185
254
|
default: withCtx(() => [
|
|
186
255
|
createVNode(_component_a_col, {
|
|
187
|
-
span:
|
|
256
|
+
span: 17,
|
|
188
257
|
class: "col-left"
|
|
189
258
|
}, {
|
|
190
259
|
default: withCtx(() => [
|
|
@@ -229,7 +298,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
229
298
|
(openBlock(true), createElementBlock(Fragment, null, renderList(leftShowColumns.value, (item) => {
|
|
230
299
|
return openBlock(), createBlock(_component_a_col, {
|
|
231
300
|
key: item.dataIndex,
|
|
232
|
-
span:
|
|
301
|
+
span: 6
|
|
233
302
|
}, {
|
|
234
303
|
default: withCtx(() => [
|
|
235
304
|
createVNode(_component_a_checkbox, {
|
|
@@ -261,7 +330,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
261
330
|
_: 1
|
|
262
331
|
}),
|
|
263
332
|
createVNode(_component_a_col, {
|
|
264
|
-
span:
|
|
333
|
+
span: 7,
|
|
265
334
|
class: "col-right"
|
|
266
335
|
}, {
|
|
267
336
|
default: withCtx(() => [
|
|
@@ -292,19 +361,21 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
292
361
|
move: "",
|
|
293
362
|
shadow: ""
|
|
294
363
|
}),
|
|
295
|
-
createElementVNode("span", _hoisted_8, toDisplayString(item.title), 1)
|
|
364
|
+
createElementVNode("span", _hoisted_8, toDisplayString(item.title), 1)
|
|
365
|
+
]),
|
|
366
|
+
createElementVNode("div", _hoisted_9, [
|
|
296
367
|
createVNode(unref(SvgIcon), {
|
|
297
|
-
size: "
|
|
368
|
+
size: "24",
|
|
298
369
|
type: "icon-ding",
|
|
299
370
|
class: normalizeClass(["icon-ding", item.fixed === "left" && "showIcon"]),
|
|
300
371
|
cursor: "",
|
|
301
372
|
shadow: "",
|
|
373
|
+
activeBackGround: item.fixed === "left" ? "" : "#e8e9e9",
|
|
374
|
+
style: normalizeStyle(`color:${item.fixed === "left" ? "var(--ant-primary-color)" : "#b0b4b7"}`),
|
|
302
375
|
onClick: ($event) => toggleFixed(item)
|
|
303
|
-
}, null, 8, ["class", "onClick"])
|
|
304
|
-
]),
|
|
305
|
-
createElementVNode("div", _hoisted_9, [
|
|
376
|
+
}, null, 8, ["class", "activeBackGround", "style", "onClick"]),
|
|
306
377
|
createVNode(unref(SvgIcon), {
|
|
307
|
-
size: "
|
|
378
|
+
size: "24",
|
|
308
379
|
type: "icon-guanbi",
|
|
309
380
|
cursor: "",
|
|
310
381
|
shadow: "",
|
|
@@ -1 +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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"}
|
|
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=\"17\" 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=\"6\">\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=\"7\" 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 </div>\n <div class=\"col-right-content-item-right\">\n <SvgIcon\n size=\"24\"\n type=\"icon-ding\"\n :class=\"['icon-ding', item.fixed === 'left' && 'showIcon']\"\n cursor\n shadow\n :activeBackGround=\"item.fixed === 'left' ? '' : '#e8e9e9'\"\n :style=\"`color:${\n item.fixed === 'left'\n ? 'var(--ant-primary-color)'\n : '#b0b4b7'\n }`\"\n @click=\"toggleFixed(item)\"\n />\n <SvgIcon\n size=\"24\"\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 <template #footerLeft>\n <a-button class=\"tpf-button\" @click=\"restColum\"> {{ t('lang.重置') }} </a-button>\n <a-button class=\"tpf-button\" @click=\"restPageJson\">\n {{ t('lang.清除缓存记录') }}\n </a-button>\n </template>\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, unref } 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 import TpfDelConfirm from 'tmgc2-share/src/components/TpfModal/TpfDelConfirm';\n import { message } from 'ant-design-vue';\n import { useTableColumnStore, TableColumnConfig } from '@kp-ui/lowcode-core';\n\n const { t } = useI18n();\n const tableColumnStore = useTableColumnStore();\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 pageCode?: string;\n tableId?: string;\n }\n\n const props = withDefaults(defineProps<Props>(), {\n columns: () => [],\n pageCode: '',\n tableId: ''\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 const initColumn = ref<ColumnType[]>([]);\n\n // 获取存储的列配置\n const getStoredColumnConfig = () => {\n const storageKey = props.pageCode || props.tableId;\n if (!storageKey) return null;\n return tableColumnStore.getTableConfig(storageKey);\n };\n\n // 保存列配置到存储\n const saveColumnConfig = () => {\n const storageKey = props.pageCode || props.tableId;\n if (!storageKey) return;\n\n const columnList = mergeColumns();\n tableColumnStore.saveColumnList(storageKey, columnList as TableColumnConfig[]);\n };\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 mergeColumns = () => {\n const selectList = unref(rightShowColumns);\n const unSelectList: ColumnType[] = [];\n\n unref(initColumn).forEach(item => {\n const flag = unref(selectList).some(it => it.dataIndex === item.dataIndex);\n if (!flag) {\n unSelectList.push({ ...item, visible: false });\n }\n });\n\n // 按照 rightShowColumns 的顺序返回可见列,然后是隐藏列\n const result = [...selectList, ...unSelectList];\n // 添加 displayOrdinal 用于记录顺序,返回完整列配置\n return result.map((item, index) => ({\n ...item,\n displayOrdinal: index\n }));\n };\n\n // 重置 - 恢复初始配置\n const restColum = () => {\n tableColumns.value = cloneDeep(unref(initColumn));\n getRightShowColumns();\n updateCheckAll();\n };\n\n // 清除缓存记录\n const restPageJson = async () => {\n const storageKey = props.pageCode || props.tableId;\n if (!storageKey) {\n message.warning(t('lang.未配置 pageCode 或 tableId'));\n return;\n }\n await TpfDelConfirm({ content: t('lang.确定清除缓存记录吗') });\n tableColumnStore.clearTableConfig(storageKey);\n message.success(t('lang.清除成功'));\n window.location.reload();\n };\n\n // 取消\n const onCancel = () => {\n visible.value = false;\n };\n\n // 确定 - 保存列配置\n const handleOk = () => {\n saveColumnConfig();\n emit('update', mergeColumns());\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 const restoreColumnFromStorage = () => {\n const storageKey = props.pageCode || props.tableId;\n if (!storageKey || !tableColumnStore.hasTableConfig(storageKey)) {\n return cloneDeep(props.columns);\n }\n\n const storedColumnList = tableColumnStore.getColumnList(storageKey);\n if (storedColumnList.length === 0) {\n return cloneDeep(props.columns);\n }\n\n // 将存储的配置应用到当前列\n const columns = cloneDeep(props.columns);\n return columns.map(col => {\n const stored = storedColumnList.find(item => item.dataIndex === col.dataIndex);\n if (stored) {\n return {\n ...col,\n visible: stored.visible !== false,\n fixed: stored.fixed,\n displayOrdinal: stored.displayOrdinal\n };\n }\n return col;\n });\n };\n\n // 监听弹窗显示\n watch(\n () => visible.value,\n async val => {\n if (val) {\n // 初始化列数据,从存储中恢复配置\n const columnsConfig = restoreColumnFromStorage();\n tableColumns.value = columnsConfig;\n initColumn.value = columnsConfig;\n getRightShowColumns();\n sortRightColumns();\n updateCheckAll();\n }\n },\n { immediate: true }\n );\n\n defineExpose({ open, restColum });\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 flex: 1;\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: 12px;\n }\n }\n\n .col-right-content-item-right {\n flex: 0 0 50px;\n display: flex;\n justify-content: flex-end;\n padding-right: 10px;\n .icon-ding {\n margin-left: 8px;\n flex-shrink: 0;\n opacity: 0;\n transition: opacity 0.2s;\n color: var(--ant-primary-color);\n &:hover {\n opacity: 1;\n }\n\n &.showIcon {\n opacity: 1;\n }\n }\n &:hover {\n .icon-ding {\n opacity: 1;\n }\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","_normalizeStyle"],"mappings":"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"}
|
|
@@ -9,7 +9,7 @@ import "lodash-es";
|
|
|
9
9
|
import "ant-design-vue";
|
|
10
10
|
import "../desginer/widget-panel/widgetsConfig.js";
|
|
11
11
|
import "@kp-ui/tool";
|
|
12
|
-
import ActionButtonListRender from "./ActionButtonListRender.
|
|
12
|
+
import ActionButtonListRender from "./ActionButtonListRender.vue.js";
|
|
13
13
|
import "../form-render/container-items/index.js";
|
|
14
14
|
import { useLowcode } from "../../hooks/useLowcode.js";
|
|
15
15
|
/* empty css */
|
|
@@ -9,7 +9,7 @@ import "../desginer/form-widget/container-widget/index.js";
|
|
|
9
9
|
import "lodash-es";
|
|
10
10
|
import "tmgc2-share";
|
|
11
11
|
import "../desginer/widget-panel/widgetsConfig.js";
|
|
12
|
-
import "../public/ActionButtonListRender.
|
|
12
|
+
import "../public/ActionButtonListRender.vue2.js";
|
|
13
13
|
/* empty css */
|
|
14
14
|
import "../form-render/container-items/index.js";
|
|
15
15
|
import _sfc_main$3 from "../public/DynamicDialog.vue.js";
|