@robot-admin/naive-ui-components 0.4.3 → 0.4.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/C_ActionBar.cjs +1 -5
- package/dist/C_ActionBar.js +1 -4
- package/dist/C_ActionBar.js.map +1 -0
- package/dist/C_ActionBar2.js +1 -195
- package/dist/C_ActionBar2.js.map +1 -1
- package/dist/C_AntV.cjs +1 -8
- package/dist/C_AntV.js +1 -4
- package/dist/C_AntV.js.map +1 -0
- package/dist/C_AntV2.js +4 -3149
- package/dist/C_AntV2.js.map +1 -1
- package/dist/C_Barcode.cjs +1 -4
- package/dist/C_Barcode.js +1 -3
- package/dist/C_Barcode.js.map +1 -0
- package/dist/C_Barcode2.js +1 -67
- package/dist/C_Barcode2.js.map +1 -1
- package/dist/C_Captcha.cjs +1 -4
- package/dist/C_Captcha.js +1 -3
- package/dist/C_Captcha.js.map +1 -0
- package/dist/C_Captcha2.js +1 -154
- package/dist/C_Captcha2.js.map +1 -1
- package/dist/C_Cascade.cjs +1 -4
- package/dist/C_Cascade.js +1 -3
- package/dist/C_Cascade.js.map +1 -0
- package/dist/C_Cascade2.js +1 -102
- package/dist/C_Cascade2.js.map +1 -1
- package/dist/C_City.cjs +1 -4
- package/dist/C_City.js +1 -3
- package/dist/C_City.js.map +1 -0
- package/dist/C_City2.js +1 -840
- package/dist/C_City2.js.map +1 -1
- package/dist/C_Code.cjs +1 -5
- package/dist/C_Code.js +1 -4
- package/dist/C_Code.js.map +1 -0
- package/dist/C_Code2.js +1 -346
- package/dist/C_Code2.js.map +1 -1
- package/dist/C_CollapsePanel.cjs +1 -6
- package/dist/C_CollapsePanel.js +1 -4
- package/dist/C_CollapsePanel.js.map +1 -0
- package/dist/C_CollapsePanel2.js +1 -318
- package/dist/C_CollapsePanel2.js.map +1 -1
- package/dist/C_Cron.cjs +1 -15
- package/dist/C_Cron.js +1 -4
- package/dist/C_Cron.js.map +1 -0
- package/dist/C_Cron2.js +1 -1209
- package/dist/C_Cron2.js.map +1 -1
- package/dist/C_Date.cjs +1 -4
- package/dist/C_Date.js +1 -3
- package/dist/C_Date.js.map +1 -0
- package/dist/C_Date2.js +1 -218
- package/dist/C_Date2.js.map +1 -1
- package/dist/C_Draggable.cjs +1 -5
- package/dist/C_Draggable.js +1 -3
- package/dist/C_Draggable.js.map +1 -0
- package/dist/C_Draggable2.js +1 -294
- package/dist/C_Draggable2.js.map +1 -1
- package/dist/C_Editor.cjs +1 -4
- package/dist/C_Editor.js +1 -3
- package/dist/C_Editor.js.map +1 -0
- package/dist/C_Editor2.js +1 -159
- package/dist/C_Editor2.js.map +1 -1
- package/dist/C_FilePreview.cjs +1 -7
- package/dist/C_FilePreview.js +1 -4
- package/dist/C_FilePreview.js.map +1 -0
- package/dist/C_FilePreview2.js +1 -1031
- package/dist/C_FilePreview2.js.map +1 -1
- package/dist/C_Form.cjs +1 -16
- package/dist/C_Form.js +1 -5
- package/dist/C_Form.js.map +1 -0
- package/dist/C_Form2.js +1 -2569
- package/dist/C_Form2.js.map +1 -1
- package/dist/C_FormSearch.cjs +1 -6
- package/dist/C_FormSearch.js +1 -3
- package/dist/C_FormSearch.js.map +1 -0
- package/dist/C_FormSearch2.js +1 -355
- package/dist/C_FormSearch2.js.map +1 -1
- package/dist/C_FormulaEditor.cjs +1 -13
- package/dist/C_FormulaEditor.js +1 -4
- package/dist/C_FormulaEditor.js.map +1 -0
- package/dist/C_FormulaEditor2.js +1 -1432
- package/dist/C_FormulaEditor2.js.map +1 -1
- package/dist/C_FullCalendar.cjs +1 -9
- package/dist/C_FullCalendar.js +1 -3
- package/dist/C_FullCalendar.js.map +1 -0
- package/dist/C_FullCalendar2.js +1 -376
- package/dist/C_FullCalendar2.js.map +1 -1
- package/dist/C_GlobalSearch.cjs +1 -5
- package/dist/C_GlobalSearch.js +1 -3
- package/dist/C_GlobalSearch.js.map +1 -0
- package/dist/C_GlobalSearch2.js +1 -335
- package/dist/C_GlobalSearch2.js.map +1 -1
- package/dist/C_Guide.cjs +1 -5
- package/dist/C_Guide.js +1 -4
- package/dist/C_Guide.js.map +1 -0
- package/dist/C_Guide2.js +1 -60
- package/dist/C_Guide2.js.map +1 -1
- package/dist/C_Icon.cjs +1 -4
- package/dist/C_Icon.js +1 -3
- package/dist/C_Icon.js.map +1 -0
- package/dist/C_Icon2.js +1 -285
- package/dist/C_Icon2.js.map +1 -1
- package/dist/C_ImageCropper.cjs +1 -6
- package/dist/C_ImageCropper.js +1 -4
- package/dist/C_ImageCropper.js.map +1 -0
- package/dist/C_ImageCropper2.js +1 -722
- package/dist/C_ImageCropper2.js.map +1 -1
- package/dist/C_Language.cjs +1 -5
- package/dist/C_Language.js +1 -4
- package/dist/C_Language.js.map +1 -0
- package/dist/C_Language2.js +1 -78
- package/dist/C_Language2.js.map +1 -1
- package/dist/C_Map.cjs +1 -7
- package/dist/C_Map.js +1 -3
- package/dist/C_Map.js.map +1 -0
- package/dist/C_Map2.js +1 -198
- package/dist/C_Map2.js.map +1 -1
- package/dist/C_Markdown.cjs +1 -4
- package/dist/C_Markdown.js +1 -3
- package/dist/C_Markdown.js.map +1 -0
- package/dist/C_Markdown2.js +1 -185
- package/dist/C_Markdown2.js.map +1 -1
- package/dist/C_NotificationCenter.cjs +1 -20
- package/dist/C_NotificationCenter.js +1 -4
- package/dist/C_NotificationCenter.js.map +1 -0
- package/dist/C_NotificationCenter2.js +1 -1383
- package/dist/C_NotificationCenter2.js.map +1 -1
- package/dist/C_Progress.cjs +1 -4
- package/dist/C_Progress.js +1 -3
- package/dist/C_Progress.js.map +1 -0
- package/dist/C_Progress2.js +1 -102
- package/dist/C_Progress2.js.map +1 -1
- package/dist/C_QRCode.cjs +1 -5
- package/dist/C_QRCode.js +1 -3
- package/dist/C_QRCode.js.map +1 -0
- package/dist/C_QRCode2.js +1 -217
- package/dist/C_QRCode2.js.map +1 -1
- package/dist/C_Signature.cjs +1 -8
- package/dist/C_Signature.js +1 -4
- package/dist/C_Signature.js.map +1 -0
- package/dist/C_Signature2.js +1 -617
- package/dist/C_Signature2.js.map +1 -1
- package/dist/C_SplitPane.cjs +1 -6
- package/dist/C_SplitPane.js +1 -4
- package/dist/C_SplitPane.js.map +1 -0
- package/dist/C_SplitPane2.js +1 -355
- package/dist/C_SplitPane2.js.map +1 -1
- package/dist/C_Steps.cjs +1 -4
- package/dist/C_Steps.js +1 -3
- package/dist/C_Steps.js.map +1 -0
- package/dist/C_Steps2.js +1 -81
- package/dist/C_Steps2.js.map +1 -1
- package/dist/C_Table.cjs +1 -20
- package/dist/C_Table.js +1 -6
- package/dist/C_Table.js.map +1 -0
- package/dist/C_Table2.js +1 -3023
- package/dist/C_Table2.js.map +1 -1
- package/dist/C_Theme.cjs +1 -5
- package/dist/C_Theme.js +1 -4
- package/dist/C_Theme.js.map +1 -0
- package/dist/C_Theme2.js +1 -63
- package/dist/C_Theme2.js.map +1 -1
- package/dist/C_Time.cjs +1 -5
- package/dist/C_Time.js +1 -3
- package/dist/C_Time.js.map +1 -0
- package/dist/C_Time2.js +1 -198
- package/dist/C_Time2.js.map +1 -1
- package/dist/C_Tree.cjs +1 -7
- package/dist/C_Tree.js +1 -4
- package/dist/C_Tree.js.map +1 -0
- package/dist/C_Tree2.js +1 -440
- package/dist/C_Tree2.js.map +1 -1
- package/dist/C_Upload.cjs +1 -12
- package/dist/C_Upload.js +1 -4
- package/dist/C_Upload.js.map +1 -0
- package/dist/C_Upload2.js +2 -1365
- package/dist/C_Upload2.js.map +1 -1
- package/dist/C_VideoPlayer.cjs +1 -23
- package/dist/C_VideoPlayer.js +1 -3
- package/dist/C_VideoPlayer.js.map +1 -0
- package/dist/C_VideoPlayer2.js +3 -1932
- package/dist/C_VideoPlayer2.js.map +1 -1
- package/dist/C_VtableGantt.cjs +1 -6
- package/dist/C_VtableGantt.js +1 -4
- package/dist/C_VtableGantt.js.map +1 -0
- package/dist/C_VtableGantt2.js +1 -872
- package/dist/C_VtableGantt2.js.map +1 -1
- package/dist/C_WaterFall.cjs +1 -13
- package/dist/C_WaterFall.js +1 -3
- package/dist/C_WaterFall.js.map +1 -0
- package/dist/C_WaterFall2.js +1 -364
- package/dist/C_WaterFall2.js.map +1 -1
- package/dist/C_WorkFlow.cjs +1 -8
- package/dist/C_WorkFlow.js +1 -4
- package/dist/C_WorkFlow.js.map +1 -0
- package/dist/C_WorkFlow2.js +1 -1983
- package/dist/C_WorkFlow2.js.map +1 -1
- package/dist/chunk.js +1 -18
- package/dist/city.js +1 -4816
- package/dist/constants.d.ts +2 -2
- package/dist/constants2.d.ts +3 -3
- package/dist/constants3.d.ts +3 -3
- package/dist/constants4.d.ts +5 -5
- package/dist/constants5.d.ts +2 -2
- package/dist/data.d.ts +1 -1
- package/dist/export-helper.js +1 -9
- package/dist/index.cjs +2 -413
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +1 -2
- package/dist/index.d.ts +1 -2
- package/dist/index.js +1 -231
- package/dist/index.js.map +1 -1
- package/dist/index.vue.d.ts +2 -2
- package/dist/index10.vue.d.ts +5 -5
- package/dist/index12.vue.d.ts +3 -3
- package/dist/index13.vue.d.ts +3 -3
- package/dist/index14.vue.d.ts +3 -3
- package/dist/index16.vue.d.ts +3 -3
- package/dist/index3.vue.d.ts +3 -3
- package/dist/index5.vue.d.ts +1 -1
- package/dist/index7.vue.d.ts +4 -4
- package/dist/index8.vue.d.ts +2 -2
- package/dist/resolver.cjs +2 -89
- package/dist/resolver.cjs.map +1 -0
- package/dist/resolver.js +1 -86
- package/dist/resolver.js.map +1 -1
- package/dist/storage.js +1 -30
- package/dist/storage.js.map +1 -1
- package/dist/useCollapsePanel.d.ts +2 -2
- package/dist/useCropperCore.d.ts +8 -8
- package/dist/useDraggableLayout.d.ts +4 -4
- package/dist/useDynamicFormState.d.ts +7 -7
- package/dist/useEdgeInteraction.d.ts +1 -1
- package/dist/useFullscreen.d.ts +2 -2
- package/dist/useInfiniteScroll.d.ts +1 -1
- package/dist/useModalEdit.d.ts +1 -1
- package/dist/useQRCode.d.ts +3 -3
- package/dist/useSearchState.d.ts +2 -2
- package/dist/useSignatureHistory.d.ts +1 -1
- package/dist/useSplitResize.d.ts +6 -6
- package/dist/useTimeSelection.d.ts +2 -2
- package/dist/useTreeOperations.d.ts +6 -6
- package/dist/useWorkflowValidation.d.ts +4 -4
- package/package.json +1 -2
- package/dist/constants.d.ts.map +0 -1
- package/dist/constants2.d.ts.map +0 -1
- package/dist/constants3.d.ts.map +0 -1
- package/dist/constants4.d.ts.map +0 -1
- package/dist/constants5.d.ts.map +0 -1
- package/dist/data.d.ts.map +0 -1
- package/dist/index.d.cts.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.vue.d.ts.map +0 -1
- package/dist/index10.vue.d.ts.map +0 -1
- package/dist/index11.vue.d.ts.map +0 -1
- package/dist/index12.vue.d.ts.map +0 -1
- package/dist/index13.vue.d.ts.map +0 -1
- package/dist/index14.vue.d.ts.map +0 -1
- package/dist/index15.vue.d.ts.map +0 -1
- package/dist/index16.vue.d.ts.map +0 -1
- package/dist/index2.vue.d.ts.map +0 -1
- package/dist/index3.vue.d.ts.map +0 -1
- package/dist/index4.vue.d.ts.map +0 -1
- package/dist/index5.vue.d.ts.map +0 -1
- package/dist/index6.vue.d.ts.map +0 -1
- package/dist/index7.vue.d.ts.map +0 -1
- package/dist/index8.vue.d.ts.map +0 -1
- package/dist/index9.vue.d.ts.map +0 -1
- package/dist/resolver.d.cts.map +0 -1
- package/dist/resolver.d.ts.map +0 -1
- package/dist/useCalendarEvents.d.ts.map +0 -1
- package/dist/useCollapsePanel.d.ts.map +0 -1
- package/dist/useCropperCore.d.ts.map +0 -1
- package/dist/useDraggableLayout.d.ts.map +0 -1
- package/dist/useDynamicFormState.d.ts.map +0 -1
- package/dist/useEdgeInteraction.d.ts.map +0 -1
- package/dist/useFullscreen.d.ts.map +0 -1
- package/dist/useGlobalSearch.d.ts.map +0 -1
- package/dist/useInfiniteScroll.d.ts.map +0 -1
- package/dist/useModalEdit.d.ts.map +0 -1
- package/dist/useQRCode.d.ts.map +0 -1
- package/dist/useSearchState.d.ts.map +0 -1
- package/dist/useSignatureHistory.d.ts.map +0 -1
- package/dist/useSplitResize.d.ts.map +0 -1
- package/dist/useTimeSelection.d.ts.map +0 -1
- package/dist/useTreeOperations.d.ts.map +0 -1
- package/dist/useWorkflowValidation.d.ts.map +0 -1
package/dist/C_Tree2.js
CHANGED
|
@@ -1,441 +1,2 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { t as export_helper_default } from "./export-helper.js";
|
|
3
|
-
import { NButton, NInput, NPopconfirm, NSpace, NTag, NTree } from "naive-ui";
|
|
4
|
-
import { computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createTextVNode, createVNode, defineComponent, h, isRef, openBlock, ref, renderSlot, toDisplayString, unref, withCtx } from "vue";
|
|
5
|
-
|
|
6
|
-
//#region src/components/C_Tree/data.ts
|
|
7
|
-
const presetConfigs = {
|
|
8
|
-
menu: {
|
|
9
|
-
draggable: true,
|
|
10
|
-
showLine: true,
|
|
11
|
-
iconConfig: { typeMap: {
|
|
12
|
-
directory: "mdi:folder",
|
|
13
|
-
menu: "mdi:file-document",
|
|
14
|
-
button: "mdi:button-cursor"
|
|
15
|
-
} },
|
|
16
|
-
actions: [
|
|
17
|
-
{
|
|
18
|
-
key: "add",
|
|
19
|
-
text: "新增子菜单",
|
|
20
|
-
icon: "mdi:plus",
|
|
21
|
-
type: "primary"
|
|
22
|
-
},
|
|
23
|
-
{
|
|
24
|
-
key: "edit",
|
|
25
|
-
text: "编辑",
|
|
26
|
-
icon: "mdi:pencil",
|
|
27
|
-
type: "info"
|
|
28
|
-
},
|
|
29
|
-
{
|
|
30
|
-
key: "delete",
|
|
31
|
-
text: "删除",
|
|
32
|
-
icon: "mdi:delete",
|
|
33
|
-
type: "error",
|
|
34
|
-
confirm: "确认删除该菜单吗?"
|
|
35
|
-
}
|
|
36
|
-
]
|
|
37
|
-
},
|
|
38
|
-
file: {
|
|
39
|
-
draggable: false,
|
|
40
|
-
showLine: false,
|
|
41
|
-
iconConfig: { typeMap: {
|
|
42
|
-
folder: "mdi:folder",
|
|
43
|
-
file: "mdi:file-document",
|
|
44
|
-
image: "mdi:file-image",
|
|
45
|
-
video: "mdi:file-video",
|
|
46
|
-
audio: "mdi:file-music"
|
|
47
|
-
} },
|
|
48
|
-
actions: [
|
|
49
|
-
{
|
|
50
|
-
key: "open",
|
|
51
|
-
text: "打开",
|
|
52
|
-
icon: "mdi:folder-open",
|
|
53
|
-
type: "primary"
|
|
54
|
-
},
|
|
55
|
-
{
|
|
56
|
-
key: "rename",
|
|
57
|
-
text: "重命名",
|
|
58
|
-
icon: "mdi:rename-box",
|
|
59
|
-
type: "info"
|
|
60
|
-
},
|
|
61
|
-
{
|
|
62
|
-
key: "delete",
|
|
63
|
-
text: "删除",
|
|
64
|
-
icon: "mdi:delete",
|
|
65
|
-
type: "error",
|
|
66
|
-
confirm: "确认删除该文件吗?"
|
|
67
|
-
}
|
|
68
|
-
]
|
|
69
|
-
},
|
|
70
|
-
org: {
|
|
71
|
-
draggable: false,
|
|
72
|
-
showLine: true,
|
|
73
|
-
iconConfig: { typeMap: {
|
|
74
|
-
department: "mdi:domain",
|
|
75
|
-
user: "mdi:account",
|
|
76
|
-
manager: "mdi:account-tie"
|
|
77
|
-
} },
|
|
78
|
-
actions: [{
|
|
79
|
-
key: "add",
|
|
80
|
-
text: "新增下级",
|
|
81
|
-
icon: "mdi:plus",
|
|
82
|
-
type: "primary"
|
|
83
|
-
}, {
|
|
84
|
-
key: "edit",
|
|
85
|
-
text: "编辑",
|
|
86
|
-
icon: "mdi:pencil",
|
|
87
|
-
type: "info"
|
|
88
|
-
}]
|
|
89
|
-
},
|
|
90
|
-
custom: {}
|
|
91
|
-
};
|
|
92
|
-
|
|
93
|
-
//#endregion
|
|
94
|
-
//#region src/components/C_Tree/composables/useTreeOperations.ts
|
|
95
|
-
function useTreeOperations(props, emit) {
|
|
96
|
-
const internalSearchPattern = ref("");
|
|
97
|
-
const expandedKeys = ref(props.defaultExpandedKeys ?? []);
|
|
98
|
-
const selectedKeys = ref(props.defaultSelectedKeys ?? []);
|
|
99
|
-
const isAllExpanded = ref(props.defaultExpandAll ?? false);
|
|
100
|
-
const keyField = computed(() => props.keyField ?? "id");
|
|
101
|
-
const labelField = computed(() => props.labelField ?? "name");
|
|
102
|
-
const childrenField = computed(() => props.childrenField ?? "children");
|
|
103
|
-
const iconField = computed(() => props.iconField ?? "icon");
|
|
104
|
-
const mergedConfig = computed(() => {
|
|
105
|
-
const preset = presetConfigs[props.mode ?? "custom"] || {};
|
|
106
|
-
return {
|
|
107
|
-
...preset,
|
|
108
|
-
...props,
|
|
109
|
-
iconConfig: {
|
|
110
|
-
...preset.iconConfig,
|
|
111
|
-
...props.iconConfig
|
|
112
|
-
},
|
|
113
|
-
actions: props.actions?.length ? props.actions : preset.actions || []
|
|
114
|
-
};
|
|
115
|
-
});
|
|
116
|
-
const treeData = computed(() => props.data);
|
|
117
|
-
const currentSearchPattern = computed(() => props.searchPattern || internalSearchPattern.value);
|
|
118
|
-
const selectedNode = computed(() => {
|
|
119
|
-
if (selectedKeys.value.length === 0) return null;
|
|
120
|
-
const findNode = (nodes, id) => {
|
|
121
|
-
for (const node of nodes) {
|
|
122
|
-
if (node[keyField.value] === id) return node;
|
|
123
|
-
if (node[childrenField.value]) {
|
|
124
|
-
const found = findNode(node[childrenField.value], id);
|
|
125
|
-
if (found) return found;
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
|
-
return null;
|
|
129
|
-
};
|
|
130
|
-
return findNode(props.data, selectedKeys.value[0]);
|
|
131
|
-
});
|
|
132
|
-
const getAllKeys = (nodes) => {
|
|
133
|
-
const keys = [];
|
|
134
|
-
nodes.forEach((node) => {
|
|
135
|
-
keys.push(node[keyField.value]);
|
|
136
|
-
if (node[childrenField.value]) keys.push(...getAllKeys(node[childrenField.value]));
|
|
137
|
-
});
|
|
138
|
-
return keys;
|
|
139
|
-
};
|
|
140
|
-
const getNodeIcon = (node) => {
|
|
141
|
-
const config = mergedConfig.value.iconConfig;
|
|
142
|
-
if (node[iconField.value]) return node[iconField.value];
|
|
143
|
-
if (node.type && config.typeMap?.[node.type]) return config.typeMap[node.type];
|
|
144
|
-
return config.default || "mdi:circle-outline";
|
|
145
|
-
};
|
|
146
|
-
const getNodeIconColor = (node) => {
|
|
147
|
-
const config = mergedConfig.value.iconConfig;
|
|
148
|
-
if (node.type && config.colorMap?.[node.type]) return config.colorMap[node.type];
|
|
149
|
-
return "currentColor";
|
|
150
|
-
};
|
|
151
|
-
const renderPrefix = ({ option }) => {
|
|
152
|
-
const node = option;
|
|
153
|
-
return h(C_Icon_default, {
|
|
154
|
-
name: getNodeIcon(node),
|
|
155
|
-
size: 18,
|
|
156
|
-
color: getNodeIconColor(node),
|
|
157
|
-
class: "mr-3 flex-shrink-0"
|
|
158
|
-
});
|
|
159
|
-
};
|
|
160
|
-
const renderLabel = ({ option }) => {
|
|
161
|
-
const node = option;
|
|
162
|
-
const statusTags = props.statusConfigs?.map((config) => {
|
|
163
|
-
const value = node[config.field];
|
|
164
|
-
const statusConfig = config.values[value];
|
|
165
|
-
if (!statusConfig?.text) return null;
|
|
166
|
-
return h(NTag, {
|
|
167
|
-
type: statusConfig.type,
|
|
168
|
-
size: "small",
|
|
169
|
-
class: "ml-2",
|
|
170
|
-
style: { fontSize: "12px" }
|
|
171
|
-
}, { default: () => statusConfig.text });
|
|
172
|
-
}).filter(Boolean) || [];
|
|
173
|
-
return h("div", {
|
|
174
|
-
class: "flex items-center flex-1 min-w-0 py-1",
|
|
175
|
-
style: { lineHeight: "1.5" }
|
|
176
|
-
}, [h("span", { class: "mr-3 font-medium text-sm" }, node[labelField.value]), ...statusTags]);
|
|
177
|
-
};
|
|
178
|
-
const renderSuffix = ({ option }) => {
|
|
179
|
-
const node = option;
|
|
180
|
-
const actionButtons = (mergedConfig.value.actions || []).filter((action) => !action.show || action.show(node)).map((action) => {
|
|
181
|
-
const buttonProps = {
|
|
182
|
-
size: "tiny",
|
|
183
|
-
type: action.type || "default",
|
|
184
|
-
secondary: true,
|
|
185
|
-
style: {
|
|
186
|
-
padding: "4px 6px",
|
|
187
|
-
minWidth: "24px",
|
|
188
|
-
height: "24px"
|
|
189
|
-
},
|
|
190
|
-
onClick: (e) => {
|
|
191
|
-
e.stopPropagation();
|
|
192
|
-
handleNodeAction(action.key, node);
|
|
193
|
-
}
|
|
194
|
-
};
|
|
195
|
-
const iconEl = h(C_Icon_default, {
|
|
196
|
-
name: action.icon,
|
|
197
|
-
size: 12,
|
|
198
|
-
title: action.text
|
|
199
|
-
});
|
|
200
|
-
if (action.confirm) return h(NPopconfirm, { onPositiveClick: () => handleNodeAction(action.key, node) }, {
|
|
201
|
-
trigger: () => h(NButton, {
|
|
202
|
-
...buttonProps,
|
|
203
|
-
onClick: (e) => e.stopPropagation()
|
|
204
|
-
}, { icon: () => iconEl }),
|
|
205
|
-
default: () => action.confirm
|
|
206
|
-
});
|
|
207
|
-
return h(NButton, buttonProps, { icon: () => iconEl });
|
|
208
|
-
});
|
|
209
|
-
return h("div", {
|
|
210
|
-
class: "tree-actions",
|
|
211
|
-
style: {
|
|
212
|
-
display: "flex",
|
|
213
|
-
alignItems: "center",
|
|
214
|
-
marginLeft: "8px",
|
|
215
|
-
opacity: "0",
|
|
216
|
-
transition: "opacity 0.2s ease"
|
|
217
|
-
}
|
|
218
|
-
}, [h(NSpace, { size: 4 }, { default: () => actionButtons })]);
|
|
219
|
-
};
|
|
220
|
-
const toggleExpandAll = () => {
|
|
221
|
-
if (isAllExpanded.value) {
|
|
222
|
-
expandedKeys.value = [];
|
|
223
|
-
isAllExpanded.value = false;
|
|
224
|
-
} else {
|
|
225
|
-
expandedKeys.value = getAllKeys(props.data);
|
|
226
|
-
isAllExpanded.value = true;
|
|
227
|
-
}
|
|
228
|
-
};
|
|
229
|
-
const handleExpandedKeysChange = (keys) => {
|
|
230
|
-
expandedKeys.value = keys;
|
|
231
|
-
isAllExpanded.value = keys.length === getAllKeys(props.data).length;
|
|
232
|
-
};
|
|
233
|
-
const handleSelectedKeysChange = (keys) => {
|
|
234
|
-
selectedKeys.value = keys;
|
|
235
|
-
emit("node-select", selectedNode.value, keys);
|
|
236
|
-
};
|
|
237
|
-
const handleDrop = (info) => emit("node-drop", info);
|
|
238
|
-
const handleNodeAction = (action, node) => {
|
|
239
|
-
if (action === "add") emit("add", node);
|
|
240
|
-
else emit("node-action", action, node);
|
|
241
|
-
};
|
|
242
|
-
const handleAdd = () => emit("add");
|
|
243
|
-
const handleRefresh = () => emit("refresh");
|
|
244
|
-
return {
|
|
245
|
-
internalSearchPattern,
|
|
246
|
-
expandedKeys,
|
|
247
|
-
selectedKeys,
|
|
248
|
-
isAllExpanded,
|
|
249
|
-
treeData,
|
|
250
|
-
currentSearchPattern,
|
|
251
|
-
renderPrefix,
|
|
252
|
-
renderLabel,
|
|
253
|
-
renderSuffix,
|
|
254
|
-
toggleExpandAll,
|
|
255
|
-
handleExpandedKeysChange,
|
|
256
|
-
handleSelectedKeysChange,
|
|
257
|
-
handleDrop,
|
|
258
|
-
handleAdd,
|
|
259
|
-
handleRefresh,
|
|
260
|
-
expose: {
|
|
261
|
-
expandAll: () => {
|
|
262
|
-
expandedKeys.value = getAllKeys(props.data);
|
|
263
|
-
isAllExpanded.value = true;
|
|
264
|
-
},
|
|
265
|
-
collapseAll: () => {
|
|
266
|
-
expandedKeys.value = [];
|
|
267
|
-
isAllExpanded.value = false;
|
|
268
|
-
},
|
|
269
|
-
selectNode: (key) => {
|
|
270
|
-
selectedKeys.value = [key];
|
|
271
|
-
},
|
|
272
|
-
getSelectedNode: () => selectedNode.value,
|
|
273
|
-
expandedKeys,
|
|
274
|
-
selectedKeys
|
|
275
|
-
}
|
|
276
|
-
};
|
|
277
|
-
}
|
|
278
|
-
|
|
279
|
-
//#endregion
|
|
280
|
-
//#region src/components/C_Tree/index.vue?vue&type=script&setup=true&lang.ts
|
|
281
|
-
const _hoisted_1 = { class: "c-tree" };
|
|
282
|
-
const _hoisted_2 = {
|
|
283
|
-
key: 0,
|
|
284
|
-
class: "c-tree-toolbar"
|
|
285
|
-
};
|
|
286
|
-
const _hoisted_3 = { class: "toolbar-left" };
|
|
287
|
-
const _hoisted_4 = { class: "toolbar-right" };
|
|
288
|
-
const _hoisted_5 = { class: "c-tree-container" };
|
|
289
|
-
var index_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
|
|
290
|
-
name: "C_Tree",
|
|
291
|
-
__name: "index",
|
|
292
|
-
props: {
|
|
293
|
-
data: {},
|
|
294
|
-
mode: { default: "custom" },
|
|
295
|
-
keyField: { default: "id" },
|
|
296
|
-
labelField: { default: "name" },
|
|
297
|
-
childrenField: { default: "children" },
|
|
298
|
-
searchPattern: { default: "" },
|
|
299
|
-
searchable: {
|
|
300
|
-
type: Boolean,
|
|
301
|
-
default: true
|
|
302
|
-
},
|
|
303
|
-
searchPlaceholder: { default: "搜索..." },
|
|
304
|
-
draggable: {
|
|
305
|
-
type: Boolean,
|
|
306
|
-
default: false
|
|
307
|
-
},
|
|
308
|
-
showLine: {
|
|
309
|
-
type: Boolean,
|
|
310
|
-
default: true
|
|
311
|
-
},
|
|
312
|
-
showToolbar: {
|
|
313
|
-
type: Boolean,
|
|
314
|
-
default: true
|
|
315
|
-
},
|
|
316
|
-
addable: {
|
|
317
|
-
type: Boolean,
|
|
318
|
-
default: true
|
|
319
|
-
},
|
|
320
|
-
addText: { default: "新增" },
|
|
321
|
-
refreshable: {
|
|
322
|
-
type: Boolean,
|
|
323
|
-
default: true
|
|
324
|
-
},
|
|
325
|
-
iconField: { default: "icon" },
|
|
326
|
-
iconConfig: { default: () => ({
|
|
327
|
-
default: "mdi:circle-outline",
|
|
328
|
-
typeMap: {},
|
|
329
|
-
colorMap: {}
|
|
330
|
-
}) },
|
|
331
|
-
statusConfigs: { default: () => [] },
|
|
332
|
-
actions: { default: () => [] },
|
|
333
|
-
defaultExpandAll: {
|
|
334
|
-
type: Boolean,
|
|
335
|
-
default: false
|
|
336
|
-
},
|
|
337
|
-
defaultExpandedKeys: { default: () => [] },
|
|
338
|
-
defaultSelectedKeys: { default: () => [] }
|
|
339
|
-
},
|
|
340
|
-
emits: [
|
|
341
|
-
"node-select",
|
|
342
|
-
"node-action",
|
|
343
|
-
"node-drop",
|
|
344
|
-
"add",
|
|
345
|
-
"refresh"
|
|
346
|
-
],
|
|
347
|
-
setup(__props, { expose: __expose, emit: __emit }) {
|
|
348
|
-
const { internalSearchPattern, expandedKeys, selectedKeys, isAllExpanded, treeData, currentSearchPattern, renderPrefix, renderLabel, renderSuffix, toggleExpandAll, handleExpandedKeysChange, handleSelectedKeysChange, handleDrop, handleAdd, handleRefresh, expose } = useTreeOperations(__props, __emit);
|
|
349
|
-
__expose(expose);
|
|
350
|
-
return (_ctx, _cache) => {
|
|
351
|
-
return openBlock(), createElementBlock("div", _hoisted_1, [_ctx.showToolbar ? (openBlock(), createElementBlock("div", _hoisted_2, [createElementVNode("div", _hoisted_3, [_ctx.searchable ? (openBlock(), createBlock(unref(NInput), {
|
|
352
|
-
key: 0,
|
|
353
|
-
value: unref(internalSearchPattern),
|
|
354
|
-
"onUpdate:value": _cache[0] || (_cache[0] = ($event) => isRef(internalSearchPattern) ? internalSearchPattern.value = $event : null),
|
|
355
|
-
placeholder: _ctx.searchPlaceholder,
|
|
356
|
-
clearable: "",
|
|
357
|
-
class: "search-input"
|
|
358
|
-
}, {
|
|
359
|
-
prefix: withCtx(() => [createVNode(C_Icon_default, {
|
|
360
|
-
name: "mdi:magnify",
|
|
361
|
-
size: 16
|
|
362
|
-
})]),
|
|
363
|
-
_: 1
|
|
364
|
-
}, 8, ["value", "placeholder"])) : createCommentVNode("v-if", true)]), createElementVNode("div", _hoisted_4, [renderSlot(_ctx.$slots, "toolbar-actions", {}, () => [
|
|
365
|
-
_ctx.addable ? (openBlock(), createBlock(unref(NButton), {
|
|
366
|
-
key: 0,
|
|
367
|
-
type: "primary",
|
|
368
|
-
onClick: _cache[1] || (_cache[1] = ($event) => unref(handleAdd)())
|
|
369
|
-
}, {
|
|
370
|
-
icon: withCtx(() => [createVNode(C_Icon_default, {
|
|
371
|
-
name: "mdi:plus",
|
|
372
|
-
size: 16
|
|
373
|
-
})]),
|
|
374
|
-
default: withCtx(() => [createTextVNode(" " + toDisplayString(_ctx.addText), 1)]),
|
|
375
|
-
_: 1
|
|
376
|
-
})) : createCommentVNode("v-if", true),
|
|
377
|
-
createVNode(unref(NButton), { onClick: unref(toggleExpandAll) }, {
|
|
378
|
-
icon: withCtx(() => [createVNode(C_Icon_default, {
|
|
379
|
-
name: "mdi:file-tree",
|
|
380
|
-
size: 16
|
|
381
|
-
})]),
|
|
382
|
-
default: withCtx(() => [createTextVNode(" " + toDisplayString(unref(isAllExpanded) ? "收起全部" : "展开全部"), 1)]),
|
|
383
|
-
_: 1
|
|
384
|
-
}, 8, ["onClick"]),
|
|
385
|
-
_ctx.refreshable ? (openBlock(), createBlock(unref(NButton), {
|
|
386
|
-
key: 1,
|
|
387
|
-
onClick: unref(handleRefresh)
|
|
388
|
-
}, {
|
|
389
|
-
icon: withCtx(() => [createVNode(C_Icon_default, {
|
|
390
|
-
name: "mdi:refresh",
|
|
391
|
-
size: 16
|
|
392
|
-
})]),
|
|
393
|
-
default: withCtx(() => [_cache[2] || (_cache[2] = createTextVNode(" 刷新 ", -1))]),
|
|
394
|
-
_: 1,
|
|
395
|
-
__: [2]
|
|
396
|
-
}, 8, ["onClick"])) : createCommentVNode("v-if", true)
|
|
397
|
-
], true)])])) : createCommentVNode("v-if", true), createElementVNode("div", _hoisted_5, [createVNode(unref(NTree), {
|
|
398
|
-
data: unref(treeData),
|
|
399
|
-
pattern: unref(currentSearchPattern),
|
|
400
|
-
"expanded-keys": unref(expandedKeys),
|
|
401
|
-
"selected-keys": unref(selectedKeys),
|
|
402
|
-
draggable: _ctx.draggable,
|
|
403
|
-
"show-line": _ctx.showLine,
|
|
404
|
-
"render-prefix": unref(renderPrefix),
|
|
405
|
-
"render-suffix": unref(renderSuffix),
|
|
406
|
-
"render-label": unref(renderLabel),
|
|
407
|
-
"key-field": _ctx.keyField,
|
|
408
|
-
"label-field": _ctx.labelField,
|
|
409
|
-
"children-field": _ctx.childrenField,
|
|
410
|
-
"onUpdate:expandedKeys": unref(handleExpandedKeysChange),
|
|
411
|
-
"onUpdate:selectedKeys": unref(handleSelectedKeysChange),
|
|
412
|
-
onDrop: unref(handleDrop),
|
|
413
|
-
class: "tree-instance"
|
|
414
|
-
}, null, 8, [
|
|
415
|
-
"data",
|
|
416
|
-
"pattern",
|
|
417
|
-
"expanded-keys",
|
|
418
|
-
"selected-keys",
|
|
419
|
-
"draggable",
|
|
420
|
-
"show-line",
|
|
421
|
-
"render-prefix",
|
|
422
|
-
"render-suffix",
|
|
423
|
-
"render-label",
|
|
424
|
-
"key-field",
|
|
425
|
-
"label-field",
|
|
426
|
-
"children-field",
|
|
427
|
-
"onUpdate:expandedKeys",
|
|
428
|
-
"onUpdate:selectedKeys",
|
|
429
|
-
"onDrop"
|
|
430
|
-
])])]);
|
|
431
|
-
};
|
|
432
|
-
}
|
|
433
|
-
});
|
|
434
|
-
|
|
435
|
-
//#endregion
|
|
436
|
-
//#region src/components/C_Tree/index.vue
|
|
437
|
-
var C_Tree_default = /* @__PURE__ */ export_helper_default(index_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-2c548e72"]]);
|
|
438
|
-
|
|
439
|
-
//#endregion
|
|
440
|
-
export { useTreeOperations as n, presetConfigs as r, C_Tree_default as t };
|
|
1
|
+
import{t as e}from"./C_Icon2.js";import{t}from"./export-helper.js";import{NButton as n,NInput as r,NPopconfirm as i,NSpace as a,NTag as o,NTree as s}from"naive-ui";import{computed as c,createBlock as l,createCommentVNode as u,createElementBlock as d,createElementVNode as f,createTextVNode as p,createVNode as m,defineComponent as h,h as g,isRef as _,openBlock as v,ref as y,renderSlot as b,toDisplayString as x,unref as S,withCtx as C}from"vue";const w={menu:{draggable:!0,showLine:!0,iconConfig:{typeMap:{directory:`mdi:folder`,menu:`mdi:file-document`,button:`mdi:button-cursor`}},actions:[{key:`add`,text:`新增子菜单`,icon:`mdi:plus`,type:`primary`},{key:`edit`,text:`编辑`,icon:`mdi:pencil`,type:`info`},{key:`delete`,text:`删除`,icon:`mdi:delete`,type:`error`,confirm:`确认删除该菜单吗?`}]},file:{draggable:!1,showLine:!1,iconConfig:{typeMap:{folder:`mdi:folder`,file:`mdi:file-document`,image:`mdi:file-image`,video:`mdi:file-video`,audio:`mdi:file-music`}},actions:[{key:`open`,text:`打开`,icon:`mdi:folder-open`,type:`primary`},{key:`rename`,text:`重命名`,icon:`mdi:rename-box`,type:`info`},{key:`delete`,text:`删除`,icon:`mdi:delete`,type:`error`,confirm:`确认删除该文件吗?`}]},org:{draggable:!1,showLine:!0,iconConfig:{typeMap:{department:`mdi:domain`,user:`mdi:account`,manager:`mdi:account-tie`}},actions:[{key:`add`,text:`新增下级`,icon:`mdi:plus`,type:`primary`},{key:`edit`,text:`编辑`,icon:`mdi:pencil`,type:`info`}]},custom:{}};function T(t,r){let s=y(``),l=y(t.defaultExpandedKeys??[]),u=y(t.defaultSelectedKeys??[]),d=y(t.defaultExpandAll??!1),f=c(()=>t.keyField??`id`),p=c(()=>t.labelField??`name`),m=c(()=>t.childrenField??`children`),h=c(()=>t.iconField??`icon`),_=c(()=>{let e=w[t.mode??`custom`]||{};return{...e,...t,iconConfig:{...e.iconConfig,...t.iconConfig},actions:t.actions?.length?t.actions:e.actions||[]}}),v=c(()=>t.data),b=c(()=>t.searchPattern||s.value),x=c(()=>{if(u.value.length===0)return null;let e=(t,n)=>{for(let r of t){if(r[f.value]===n)return r;if(r[m.value]){let t=e(r[m.value],n);if(t)return t}}return null};return e(t.data,u.value[0])}),S=e=>{let t=[];return e.forEach(e=>{t.push(e[f.value]),e[m.value]&&t.push(...S(e[m.value]))}),t},C=e=>{let t=_.value.iconConfig;return e[h.value]?e[h.value]:e.type&&t.typeMap?.[e.type]?t.typeMap[e.type]:t.default||`mdi:circle-outline`},T=e=>{let t=_.value.iconConfig;return e.type&&t.colorMap?.[e.type]?t.colorMap[e.type]:`currentColor`},E=({option:t})=>{let n=t;return g(e,{name:C(n),size:18,color:T(n),class:`mr-3 flex-shrink-0`})},D=({option:e})=>{let n=e,r=t.statusConfigs?.map(e=>{let t=n[e.field],r=e.values[t];return r?.text?g(o,{type:r.type,size:`small`,class:`ml-2`,style:{fontSize:`12px`}},{default:()=>r.text}):null}).filter(Boolean)||[];return g(`div`,{class:`flex items-center flex-1 min-w-0 py-1`,style:{lineHeight:`1.5`}},[g(`span`,{class:`mr-3 font-medium text-sm`},n[p.value]),...r])},O=({option:t})=>{let r=t,o=(_.value.actions||[]).filter(e=>!e.show||e.show(r)).map(t=>{let a={size:`tiny`,type:t.type||`default`,secondary:!0,style:{padding:`4px 6px`,minWidth:`24px`,height:`24px`},onClick:e=>{e.stopPropagation(),N(t.key,r)}},o=g(e,{name:t.icon,size:12,title:t.text});return t.confirm?g(i,{onPositiveClick:()=>N(t.key,r)},{trigger:()=>g(n,{...a,onClick:e=>e.stopPropagation()},{icon:()=>o}),default:()=>t.confirm}):g(n,a,{icon:()=>o})});return g(`div`,{class:`tree-actions`,style:{display:`flex`,alignItems:`center`,marginLeft:`8px`,opacity:`0`,transition:`opacity 0.2s ease`}},[g(a,{size:4},{default:()=>o})])},k=()=>{d.value?(l.value=[],d.value=!1):(l.value=S(t.data),d.value=!0)},A=e=>{l.value=e,d.value=e.length===S(t.data).length},j=e=>{u.value=e,r(`node-select`,x.value,e)},M=e=>r(`node-drop`,e),N=(e,t)=>{e===`add`?r(`add`,t):r(`node-action`,e,t)};return{internalSearchPattern:s,expandedKeys:l,selectedKeys:u,isAllExpanded:d,treeData:v,currentSearchPattern:b,renderPrefix:E,renderLabel:D,renderSuffix:O,toggleExpandAll:k,handleExpandedKeysChange:A,handleSelectedKeysChange:j,handleDrop:M,handleAdd:()=>r(`add`),handleRefresh:()=>r(`refresh`),expose:{expandAll:()=>{l.value=S(t.data),d.value=!0},collapseAll:()=>{l.value=[],d.value=!1},selectNode:e=>{u.value=[e]},getSelectedNode:()=>x.value,expandedKeys:l,selectedKeys:u}}}const E={class:`c-tree`},D={key:0,class:`c-tree-toolbar`},O={class:`toolbar-left`},k={class:`toolbar-right`},A={class:`c-tree-container`};var j=t(h({name:`C_Tree`,__name:`index`,props:{data:{},mode:{default:`custom`},keyField:{default:`id`},labelField:{default:`name`},childrenField:{default:`children`},searchPattern:{default:``},searchable:{type:Boolean,default:!0},searchPlaceholder:{default:`搜索...`},draggable:{type:Boolean,default:!1},showLine:{type:Boolean,default:!0},showToolbar:{type:Boolean,default:!0},addable:{type:Boolean,default:!0},addText:{default:`新增`},refreshable:{type:Boolean,default:!0},iconField:{default:`icon`},iconConfig:{default:()=>({default:`mdi:circle-outline`,typeMap:{},colorMap:{}})},statusConfigs:{default:()=>[]},actions:{default:()=>[]},defaultExpandAll:{type:Boolean,default:!1},defaultExpandedKeys:{default:()=>[]},defaultSelectedKeys:{default:()=>[]}},emits:[`node-select`,`node-action`,`node-drop`,`add`,`refresh`],setup(t,{expose:i,emit:a}){let{internalSearchPattern:o,expandedKeys:c,selectedKeys:h,isAllExpanded:g,treeData:y,currentSearchPattern:w,renderPrefix:j,renderLabel:M,renderSuffix:N,toggleExpandAll:P,handleExpandedKeysChange:F,handleSelectedKeysChange:I,handleDrop:L,handleAdd:R,handleRefresh:z,expose:B}=T(t,a);return i(B),(t,i)=>(v(),d(`div`,E,[t.showToolbar?(v(),d(`div`,D,[f(`div`,O,[t.searchable?(v(),l(S(r),{key:0,value:S(o),"onUpdate:value":i[0]||=e=>_(o)?o.value=e:null,placeholder:t.searchPlaceholder,clearable:``,class:`search-input`},{prefix:C(()=>[m(e,{name:`mdi:magnify`,size:16})]),_:1},8,[`value`,`placeholder`])):u(`v-if`,!0)]),f(`div`,k,[b(t.$slots,`toolbar-actions`,{},()=>[t.addable?(v(),l(S(n),{key:0,type:`primary`,onClick:i[1]||=e=>S(R)()},{icon:C(()=>[m(e,{name:`mdi:plus`,size:16})]),default:C(()=>[p(` `+x(t.addText),1)]),_:1})):u(`v-if`,!0),m(S(n),{onClick:S(P)},{icon:C(()=>[m(e,{name:`mdi:file-tree`,size:16})]),default:C(()=>[p(` `+x(S(g)?`收起全部`:`展开全部`),1)]),_:1},8,[`onClick`]),t.refreshable?(v(),l(S(n),{key:1,onClick:S(z)},{icon:C(()=>[m(e,{name:`mdi:refresh`,size:16})]),default:C(()=>[i[2]||=p(` 刷新 `,-1)]),_:1,__:[2]},8,[`onClick`])):u(`v-if`,!0)],!0)])])):u(`v-if`,!0),f(`div`,A,[m(S(s),{data:S(y),pattern:S(w),"expanded-keys":S(c),"selected-keys":S(h),draggable:t.draggable,"show-line":t.showLine,"render-prefix":S(j),"render-suffix":S(N),"render-label":S(M),"key-field":t.keyField,"label-field":t.labelField,"children-field":t.childrenField,"onUpdate:expandedKeys":S(F),"onUpdate:selectedKeys":S(I),onDrop:S(L),class:`tree-instance`},null,8,[`data`,`pattern`,`expanded-keys`,`selected-keys`,`draggable`,`show-line`,`render-prefix`,`render-suffix`,`render-label`,`key-field`,`label-field`,`children-field`,`onUpdate:expandedKeys`,`onUpdate:selectedKeys`,`onDrop`])])]))}}),[[`__scopeId`,`data-v-2c548e72`]]);export{T as n,w as r,j as t};
|
|
441
2
|
//# sourceMappingURL=C_Tree2.js.map
|
package/dist/C_Tree2.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"C_Tree2.js","names":["C_Icon","showToolbar","searchable","searchPlaceholder","addable","addText","refreshable","draggable","showLine","keyField","labelField","childrenField"],"sources":["../src/components/C_Tree/data.ts","../src/components/C_Tree/composables/useTreeOperations.ts","../src/components/C_Tree/index.vue","../src/components/C_Tree/index.vue","../src/components/C_Tree/index.vue"],"sourcesContent":["import type { TreeMode, TreeProps } from \"./types\";\r\n\r\nexport const presetConfigs: Record<TreeMode, Partial<TreeProps>> = {\r\n menu: {\r\n draggable: true,\r\n showLine: true,\r\n iconConfig: {\r\n typeMap: {\r\n directory: \"mdi:folder\",\r\n menu: \"mdi:file-document\",\r\n button: \"mdi:button-cursor\",\r\n },\r\n },\r\n actions: [\r\n { key: \"add\", text: \"新增子菜单\", icon: \"mdi:plus\", type: \"primary\" },\r\n { key: \"edit\", text: \"编辑\", icon: \"mdi:pencil\", type: \"info\" },\r\n {\r\n key: \"delete\",\r\n text: \"删除\",\r\n icon: \"mdi:delete\",\r\n type: \"error\",\r\n confirm: \"确认删除该菜单吗?\",\r\n },\r\n ],\r\n },\r\n file: {\r\n draggable: false,\r\n showLine: false,\r\n iconConfig: {\r\n typeMap: {\r\n folder: \"mdi:folder\",\r\n file: \"mdi:file-document\",\r\n image: \"mdi:file-image\",\r\n video: \"mdi:file-video\",\r\n audio: \"mdi:file-music\",\r\n },\r\n },\r\n actions: [\r\n { key: \"open\", text: \"打开\", icon: \"mdi:folder-open\", type: \"primary\" },\r\n { key: \"rename\", text: \"重命名\", icon: \"mdi:rename-box\", type: \"info\" },\r\n {\r\n key: \"delete\",\r\n text: \"删除\",\r\n icon: \"mdi:delete\",\r\n type: \"error\",\r\n confirm: \"确认删除该文件吗?\",\r\n },\r\n ],\r\n },\r\n org: {\r\n draggable: false,\r\n showLine: true,\r\n iconConfig: {\r\n typeMap: {\r\n department: \"mdi:domain\",\r\n user: \"mdi:account\",\r\n manager: \"mdi:account-tie\",\r\n },\r\n },\r\n actions: [\r\n { key: \"add\", text: \"新增下级\", icon: \"mdi:plus\", type: \"primary\" },\r\n { key: \"edit\", text: \"编辑\", icon: \"mdi:pencil\", type: \"info\" },\r\n ],\r\n },\r\n custom: {},\r\n};\r\n","import { ref, computed, h } from \"vue\";\r\nimport { NTag, NButton, NPopconfirm, NSpace } from \"naive-ui\";\r\nimport C_Icon from \"../../C_Icon/index.vue\";\r\nimport { presetConfigs } from \"../data\";\r\nimport type {\r\n TreeOption,\r\n TreeNodeData,\r\n TreeProps,\r\n TreeExpose,\r\n DropInfo,\r\n} from \"../types\";\r\n\r\ntype EmitFn = {\r\n (\r\n event: \"node-select\",\r\n node: TreeNodeData | null,\r\n selectedKeys: (string | number)[],\r\n ): void;\r\n (event: \"node-action\", action: string, node: TreeNodeData): void;\r\n (event: \"node-drop\", info: DropInfo): void;\r\n (event: \"add\", parentNode?: TreeNodeData): void;\r\n (event: \"refresh\"): void;\r\n};\r\n\r\nexport function useTreeOperations(props: TreeProps, emit: EmitFn) {\r\n const internalSearchPattern = ref(\"\");\r\n const expandedKeys = ref<(string | number)[]>(\r\n props.defaultExpandedKeys ?? [],\r\n );\r\n const selectedKeys = ref<(string | number)[]>(\r\n props.defaultSelectedKeys ?? [],\r\n );\r\n const isAllExpanded = ref(props.defaultExpandAll ?? false);\r\n\r\n const keyField = computed(() => props.keyField ?? \"id\");\r\n const labelField = computed(() => props.labelField ?? \"name\");\r\n const childrenField = computed(() => props.childrenField ?? \"children\");\r\n const iconField = computed(() => props.iconField ?? \"icon\");\r\n\r\n const mergedConfig = computed(() => {\r\n const preset = presetConfigs[props.mode ?? \"custom\"] || {};\r\n return {\r\n ...preset,\r\n ...props,\r\n iconConfig: { ...preset.iconConfig, ...props.iconConfig },\r\n actions: props.actions?.length ? props.actions : preset.actions || [],\r\n };\r\n });\r\n\r\n const treeData = computed((): TreeOption[] => props.data as TreeOption[]);\r\n\r\n const currentSearchPattern = computed(\r\n () => props.searchPattern || internalSearchPattern.value,\r\n );\r\n\r\n const selectedNode = computed((): TreeNodeData | null => {\r\n if (selectedKeys.value.length === 0) return null;\r\n const findNode = (\r\n nodes: TreeNodeData[],\r\n id: string | number,\r\n ): TreeNodeData | null => {\r\n for (const node of nodes) {\r\n if (node[keyField.value] === id) return node;\r\n if (node[childrenField.value]) {\r\n const found = findNode(node[childrenField.value], id);\r\n if (found) return found;\r\n }\r\n }\r\n return null;\r\n };\r\n return findNode(props.data, selectedKeys.value[0]);\r\n });\r\n\r\n const getAllKeys = (nodes: TreeNodeData[]): (string | number)[] => {\r\n const keys: (string | number)[] = [];\r\n nodes.forEach((node) => {\r\n keys.push(node[keyField.value]);\r\n if (node[childrenField.value]) {\r\n keys.push(...getAllKeys(node[childrenField.value]));\r\n }\r\n });\r\n return keys;\r\n };\r\n\r\n const getNodeIcon = (node: TreeNodeData): string => {\r\n const config = mergedConfig.value.iconConfig!;\r\n if (node[iconField.value]) return node[iconField.value];\r\n if (node.type && config.typeMap?.[node.type])\r\n return config.typeMap[node.type];\r\n return config.default || \"mdi:circle-outline\";\r\n };\r\n\r\n const getNodeIconColor = (node: TreeNodeData): string => {\r\n const config = mergedConfig.value.iconConfig!;\r\n if (node.type && config.colorMap?.[node.type])\r\n return config.colorMap[node.type];\r\n return \"currentColor\";\r\n };\r\n\r\n const renderPrefix = ({ option }: { option: TreeOption }) => {\r\n const node = option as TreeNodeData;\r\n return h(C_Icon, {\r\n name: getNodeIcon(node),\r\n size: 18,\r\n color: getNodeIconColor(node),\r\n class: \"mr-3 flex-shrink-0\",\r\n });\r\n };\r\n\r\n const renderLabel = ({ option }: { option: TreeOption }) => {\r\n const node = option as TreeNodeData;\r\n const statusTags =\r\n props.statusConfigs\r\n ?.map((config) => {\r\n const value = node[config.field];\r\n const statusConfig = config.values[value];\r\n if (!statusConfig?.text) return null;\r\n return h(\r\n NTag,\r\n {\r\n type: statusConfig.type,\r\n size: \"small\",\r\n class: \"ml-2\",\r\n style: { fontSize: \"12px\" },\r\n },\r\n { default: () => statusConfig.text },\r\n );\r\n })\r\n .filter(Boolean) || [];\r\n\r\n return h(\r\n \"div\",\r\n {\r\n class: \"flex items-center flex-1 min-w-0 py-1\",\r\n style: { lineHeight: \"1.5\" },\r\n },\r\n [\r\n h(\r\n \"span\",\r\n { class: \"mr-3 font-medium text-sm\" },\r\n node[labelField.value],\r\n ),\r\n ...statusTags,\r\n ],\r\n );\r\n };\r\n\r\n const renderSuffix = ({ option }: { option: TreeOption }) => {\r\n const node = option as TreeNodeData;\r\n const actions = mergedConfig.value.actions || [];\r\n\r\n const actionButtons = actions\r\n .filter((action) => !action.show || action.show(node))\r\n .map((action) => {\r\n const buttonProps = {\r\n size: \"tiny\" as const,\r\n type: action.type || (\"default\" as const),\r\n secondary: true,\r\n style: { padding: \"4px 6px\", minWidth: \"24px\", height: \"24px\" },\r\n onClick: (e: Event) => {\r\n e.stopPropagation();\r\n handleNodeAction(action.key, node);\r\n },\r\n };\r\n const iconEl = h(C_Icon, {\r\n name: action.icon,\r\n size: 12,\r\n title: action.text,\r\n });\r\n\r\n if (action.confirm) {\r\n return h(\r\n NPopconfirm,\r\n { onPositiveClick: () => handleNodeAction(action.key, node) },\r\n {\r\n trigger: () =>\r\n h(\r\n NButton,\r\n {\r\n ...buttonProps,\r\n onClick: (e: Event) => e.stopPropagation(),\r\n },\r\n { icon: () => iconEl },\r\n ),\r\n default: () => action.confirm,\r\n },\r\n );\r\n }\r\n return h(NButton, buttonProps, { icon: () => iconEl });\r\n });\r\n\r\n return h(\r\n \"div\",\r\n {\r\n class: \"tree-actions\",\r\n style: {\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n marginLeft: \"8px\",\r\n opacity: \"0\",\r\n transition: \"opacity 0.2s ease\",\r\n },\r\n },\r\n [h(NSpace, { size: 4 }, { default: () => actionButtons })],\r\n );\r\n };\r\n\r\n const toggleExpandAll = (): void => {\r\n if (isAllExpanded.value) {\r\n expandedKeys.value = [];\r\n isAllExpanded.value = false;\r\n } else {\r\n expandedKeys.value = getAllKeys(props.data);\r\n isAllExpanded.value = true;\r\n }\r\n };\r\n\r\n const handleExpandedKeysChange = (keys: (string | number)[]): void => {\r\n expandedKeys.value = keys;\r\n isAllExpanded.value = keys.length === getAllKeys(props.data).length;\r\n };\r\n\r\n const handleSelectedKeysChange = (keys: (string | number)[]): void => {\r\n selectedKeys.value = keys;\r\n emit(\"node-select\", selectedNode.value, keys);\r\n };\r\n\r\n const handleDrop = (info: DropInfo): void => emit(\"node-drop\", info);\r\n\r\n const handleNodeAction = (action: string, node: TreeNodeData): void => {\r\n if (action === \"add\") {\r\n emit(\"add\", node);\r\n } else {\r\n emit(\"node-action\", action, node);\r\n }\r\n };\r\n\r\n const handleAdd = (): void => emit(\"add\");\r\n const handleRefresh = (): void => emit(\"refresh\");\r\n\r\n const expose: TreeExpose = {\r\n expandAll: () => {\r\n expandedKeys.value = getAllKeys(props.data);\r\n isAllExpanded.value = true;\r\n },\r\n collapseAll: () => {\r\n expandedKeys.value = [];\r\n isAllExpanded.value = false;\r\n },\r\n selectNode: (key: string | number) => {\r\n selectedKeys.value = [key];\r\n },\r\n getSelectedNode: () => selectedNode.value,\r\n expandedKeys,\r\n selectedKeys,\r\n };\r\n\r\n return {\r\n internalSearchPattern,\r\n expandedKeys,\r\n selectedKeys,\r\n isAllExpanded,\r\n treeData,\r\n currentSearchPattern,\r\n renderPrefix,\r\n renderLabel,\r\n renderSuffix,\r\n toggleExpandAll,\r\n handleExpandedKeysChange,\r\n handleSelectedKeysChange,\r\n handleDrop,\r\n handleAdd,\r\n handleRefresh,\r\n expose,\r\n };\r\n}\r\n","/* unplugin-vue-components disabled */<!--\r\n * @Author: ChenYu ycyplus@gmail.com\r\n * @Date: 2025-06-27\r\n * @Description: 树型组件 — 薄 UI 壳,逻辑由 useTreeOperations 驱动\r\n * @Migration: naive-ui-components 组件库迁移版本\r\n * Copyright (c) 2025 by CHENY, All Rights Reserved.\r\n-->\r\n<template>\r\n <div class=\"c-tree\">\r\n <div v-if=\"showToolbar\" class=\"c-tree-toolbar\">\r\n <div class=\"toolbar-left\">\r\n <NInput\r\n v-if=\"searchable\"\r\n v-model:value=\"internalSearchPattern\"\r\n :placeholder=\"searchPlaceholder\"\r\n clearable\r\n class=\"search-input\"\r\n >\r\n <template #prefix>\r\n <C_Icon name=\"mdi:magnify\" :size=\"16\" />\r\n </template>\r\n </NInput>\r\n </div>\r\n <div class=\"toolbar-right\">\r\n <slot name=\"toolbar-actions\">\r\n <NButton v-if=\"addable\" type=\"primary\" @click=\"handleAdd()\">\r\n <template #icon>\r\n <C_Icon name=\"mdi:plus\" :size=\"16\" />\r\n </template>\r\n {{ addText }}\r\n </NButton>\r\n <NButton @click=\"toggleExpandAll\">\r\n <template #icon>\r\n <C_Icon name=\"mdi:file-tree\" :size=\"16\" />\r\n </template>\r\n {{ isAllExpanded ? \"收起全部\" : \"展开全部\" }}\r\n </NButton>\r\n <NButton v-if=\"refreshable\" @click=\"handleRefresh\">\r\n <template #icon>\r\n <C_Icon name=\"mdi:refresh\" :size=\"16\" />\r\n </template>\r\n 刷新\r\n </NButton>\r\n </slot>\r\n </div>\r\n </div>\r\n\r\n <div class=\"c-tree-container\">\r\n <NTree\r\n :data=\"treeData\"\r\n :pattern=\"currentSearchPattern\"\r\n :expanded-keys=\"expandedKeys\"\r\n :selected-keys=\"selectedKeys\"\r\n :draggable=\"draggable\"\r\n :show-line=\"showLine\"\r\n :render-prefix=\"renderPrefix\"\r\n :render-suffix=\"renderSuffix\"\r\n :render-label=\"renderLabel\"\r\n :key-field=\"keyField\"\r\n :label-field=\"labelField\"\r\n :children-field=\"childrenField\"\r\n @update:expanded-keys=\"handleExpandedKeysChange\"\r\n @update:selected-keys=\"handleSelectedKeysChange\"\r\n @drop=\"handleDrop\"\r\n class=\"tree-instance\"\r\n />\r\n </div>\r\n </div>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { NInput, NButton, NTree } from \"naive-ui\";\r\nimport C_Icon from \"../C_Icon/index.vue\";\r\nimport { useTreeOperations } from \"./composables/useTreeOperations\";\r\nimport type { TreeProps, TreeEmits, TreeExpose } from \"./types\";\r\n\r\ndefineOptions({ name: \"C_Tree\" });\r\n\r\nconst props = withDefaults(defineProps<TreeProps>(), {\r\n mode: \"custom\",\r\n keyField: \"id\",\r\n labelField: \"name\",\r\n childrenField: \"children\",\r\n searchPattern: \"\",\r\n searchable: true,\r\n searchPlaceholder: \"搜索...\",\r\n draggable: false,\r\n showLine: true,\r\n showToolbar: true,\r\n addable: true,\r\n addText: \"新增\",\r\n refreshable: true,\r\n iconField: \"icon\",\r\n iconConfig: () => ({\r\n default: \"mdi:circle-outline\",\r\n typeMap: {},\r\n colorMap: {},\r\n }),\r\n statusConfigs: () => [],\r\n actions: () => [],\r\n defaultExpandAll: false,\r\n defaultExpandedKeys: () => [],\r\n defaultSelectedKeys: () => [],\r\n});\r\n\r\nconst emit = defineEmits<TreeEmits>();\r\n\r\nconst {\r\n internalSearchPattern,\r\n expandedKeys,\r\n selectedKeys,\r\n isAllExpanded,\r\n treeData,\r\n currentSearchPattern,\r\n renderPrefix,\r\n renderLabel,\r\n renderSuffix,\r\n toggleExpandAll,\r\n handleExpandedKeysChange,\r\n handleSelectedKeysChange,\r\n handleDrop,\r\n handleAdd,\r\n handleRefresh,\r\n expose,\r\n} = useTreeOperations(props, emit);\r\n\r\ndefineExpose<TreeExpose>(expose);\r\n</script>\r\n\r\n<style lang=\"scss\" scoped>\r\n@use \"./index.scss\";\r\n</style>\r\n","/* unplugin-vue-components disabled */<!--\r\n * @Author: ChenYu ycyplus@gmail.com\r\n * @Date: 2025-06-27\r\n * @Description: 树型组件 — 薄 UI 壳,逻辑由 useTreeOperations 驱动\r\n * @Migration: naive-ui-components 组件库迁移版本\r\n * Copyright (c) 2025 by CHENY, All Rights Reserved.\r\n-->\r\n<template>\r\n <div class=\"c-tree\">\r\n <div v-if=\"showToolbar\" class=\"c-tree-toolbar\">\r\n <div class=\"toolbar-left\">\r\n <NInput\r\n v-if=\"searchable\"\r\n v-model:value=\"internalSearchPattern\"\r\n :placeholder=\"searchPlaceholder\"\r\n clearable\r\n class=\"search-input\"\r\n >\r\n <template #prefix>\r\n <C_Icon name=\"mdi:magnify\" :size=\"16\" />\r\n </template>\r\n </NInput>\r\n </div>\r\n <div class=\"toolbar-right\">\r\n <slot name=\"toolbar-actions\">\r\n <NButton v-if=\"addable\" type=\"primary\" @click=\"handleAdd()\">\r\n <template #icon>\r\n <C_Icon name=\"mdi:plus\" :size=\"16\" />\r\n </template>\r\n {{ addText }}\r\n </NButton>\r\n <NButton @click=\"toggleExpandAll\">\r\n <template #icon>\r\n <C_Icon name=\"mdi:file-tree\" :size=\"16\" />\r\n </template>\r\n {{ isAllExpanded ? \"收起全部\" : \"展开全部\" }}\r\n </NButton>\r\n <NButton v-if=\"refreshable\" @click=\"handleRefresh\">\r\n <template #icon>\r\n <C_Icon name=\"mdi:refresh\" :size=\"16\" />\r\n </template>\r\n 刷新\r\n </NButton>\r\n </slot>\r\n </div>\r\n </div>\r\n\r\n <div class=\"c-tree-container\">\r\n <NTree\r\n :data=\"treeData\"\r\n :pattern=\"currentSearchPattern\"\r\n :expanded-keys=\"expandedKeys\"\r\n :selected-keys=\"selectedKeys\"\r\n :draggable=\"draggable\"\r\n :show-line=\"showLine\"\r\n :render-prefix=\"renderPrefix\"\r\n :render-suffix=\"renderSuffix\"\r\n :render-label=\"renderLabel\"\r\n :key-field=\"keyField\"\r\n :label-field=\"labelField\"\r\n :children-field=\"childrenField\"\r\n @update:expanded-keys=\"handleExpandedKeysChange\"\r\n @update:selected-keys=\"handleSelectedKeysChange\"\r\n @drop=\"handleDrop\"\r\n class=\"tree-instance\"\r\n />\r\n </div>\r\n </div>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { NInput, NButton, NTree } from \"naive-ui\";\r\nimport C_Icon from \"../C_Icon/index.vue\";\r\nimport { useTreeOperations } from \"./composables/useTreeOperations\";\r\nimport type { TreeProps, TreeEmits, TreeExpose } from \"./types\";\r\n\r\ndefineOptions({ name: \"C_Tree\" });\r\n\r\nconst props = withDefaults(defineProps<TreeProps>(), {\r\n mode: \"custom\",\r\n keyField: \"id\",\r\n labelField: \"name\",\r\n childrenField: \"children\",\r\n searchPattern: \"\",\r\n searchable: true,\r\n searchPlaceholder: \"搜索...\",\r\n draggable: false,\r\n showLine: true,\r\n showToolbar: true,\r\n addable: true,\r\n addText: \"新增\",\r\n refreshable: true,\r\n iconField: \"icon\",\r\n iconConfig: () => ({\r\n default: \"mdi:circle-outline\",\r\n typeMap: {},\r\n colorMap: {},\r\n }),\r\n statusConfigs: () => [],\r\n actions: () => [],\r\n defaultExpandAll: false,\r\n defaultExpandedKeys: () => [],\r\n defaultSelectedKeys: () => [],\r\n});\r\n\r\nconst emit = defineEmits<TreeEmits>();\r\n\r\nconst {\r\n internalSearchPattern,\r\n expandedKeys,\r\n selectedKeys,\r\n isAllExpanded,\r\n treeData,\r\n currentSearchPattern,\r\n renderPrefix,\r\n renderLabel,\r\n renderSuffix,\r\n toggleExpandAll,\r\n handleExpandedKeysChange,\r\n handleSelectedKeysChange,\r\n handleDrop,\r\n handleAdd,\r\n handleRefresh,\r\n expose,\r\n} = useTreeOperations(props, emit);\r\n\r\ndefineExpose<TreeExpose>(expose);\r\n</script>\r\n\r\n<style lang=\"scss\" scoped>\r\n@use \"./index.scss\";\r\n</style>\r\n","<!--\r\n * @Author: ChenYu ycyplus@gmail.com\r\n * @Date: 2025-06-27\r\n * @Description: 树型组件 — 薄 UI 壳,逻辑由 useTreeOperations 驱动\r\n * @Migration: naive-ui-components 组件库迁移版本\r\n * Copyright (c) 2025 by CHENY, All Rights Reserved.\r\n-->\r\n<template>\r\n <div class=\"c-tree\">\r\n <div v-if=\"showToolbar\" class=\"c-tree-toolbar\">\r\n <div class=\"toolbar-left\">\r\n <NInput\r\n v-if=\"searchable\"\r\n v-model:value=\"internalSearchPattern\"\r\n :placeholder=\"searchPlaceholder\"\r\n clearable\r\n class=\"search-input\"\r\n >\r\n <template #prefix>\r\n <C_Icon name=\"mdi:magnify\" :size=\"16\" />\r\n </template>\r\n </NInput>\r\n </div>\r\n <div class=\"toolbar-right\">\r\n <slot name=\"toolbar-actions\">\r\n <NButton v-if=\"addable\" type=\"primary\" @click=\"handleAdd()\">\r\n <template #icon>\r\n <C_Icon name=\"mdi:plus\" :size=\"16\" />\r\n </template>\r\n {{ addText }}\r\n </NButton>\r\n <NButton @click=\"toggleExpandAll\">\r\n <template #icon>\r\n <C_Icon name=\"mdi:file-tree\" :size=\"16\" />\r\n </template>\r\n {{ isAllExpanded ? \"收起全部\" : \"展开全部\" }}\r\n </NButton>\r\n <NButton v-if=\"refreshable\" @click=\"handleRefresh\">\r\n <template #icon>\r\n <C_Icon name=\"mdi:refresh\" :size=\"16\" />\r\n </template>\r\n 刷新\r\n </NButton>\r\n </slot>\r\n </div>\r\n </div>\r\n\r\n <div class=\"c-tree-container\">\r\n <NTree\r\n :data=\"treeData\"\r\n :pattern=\"currentSearchPattern\"\r\n :expanded-keys=\"expandedKeys\"\r\n :selected-keys=\"selectedKeys\"\r\n :draggable=\"draggable\"\r\n :show-line=\"showLine\"\r\n :render-prefix=\"renderPrefix\"\r\n :render-suffix=\"renderSuffix\"\r\n :render-label=\"renderLabel\"\r\n :key-field=\"keyField\"\r\n :label-field=\"labelField\"\r\n :children-field=\"childrenField\"\r\n @update:expanded-keys=\"handleExpandedKeysChange\"\r\n @update:selected-keys=\"handleSelectedKeysChange\"\r\n @drop=\"handleDrop\"\r\n class=\"tree-instance\"\r\n />\r\n </div>\r\n </div>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { NInput, NButton, NTree } from \"naive-ui\";\r\nimport C_Icon from \"../C_Icon/index.vue\";\r\nimport { useTreeOperations } from \"./composables/useTreeOperations\";\r\nimport type { TreeProps, TreeEmits, TreeExpose } from \"./types\";\r\n\r\ndefineOptions({ name: \"C_Tree\" });\r\n\r\nconst props = withDefaults(defineProps<TreeProps>(), {\r\n mode: \"custom\",\r\n keyField: \"id\",\r\n labelField: \"name\",\r\n childrenField: \"children\",\r\n searchPattern: \"\",\r\n searchable: true,\r\n searchPlaceholder: \"搜索...\",\r\n draggable: false,\r\n showLine: true,\r\n showToolbar: true,\r\n addable: true,\r\n addText: \"新增\",\r\n refreshable: true,\r\n iconField: \"icon\",\r\n iconConfig: () => ({\r\n default: \"mdi:circle-outline\",\r\n typeMap: {},\r\n colorMap: {},\r\n }),\r\n statusConfigs: () => [],\r\n actions: () => [],\r\n defaultExpandAll: false,\r\n defaultExpandedKeys: () => [],\r\n defaultSelectedKeys: () => [],\r\n});\r\n\r\nconst emit = defineEmits<TreeEmits>();\r\n\r\nconst {\r\n internalSearchPattern,\r\n expandedKeys,\r\n selectedKeys,\r\n isAllExpanded,\r\n treeData,\r\n currentSearchPattern,\r\n renderPrefix,\r\n renderLabel,\r\n renderSuffix,\r\n toggleExpandAll,\r\n handleExpandedKeysChange,\r\n handleSelectedKeysChange,\r\n handleDrop,\r\n handleAdd,\r\n handleRefresh,\r\n expose,\r\n} = useTreeOperations(props, emit);\r\n\r\ndefineExpose<TreeExpose>(expose);\r\n</script>\r\n\r\n<style lang=\"scss\" scoped>\r\n@use \"./index.scss\";\r\n</style>\r\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"C_Tree2.js","names":["C_Icon","showToolbar","searchable","searchPlaceholder","addable","addText","refreshable","draggable","showLine","keyField","labelField","childrenField"],"sources":["../src/components/C_Tree/data.ts","../src/components/C_Tree/composables/useTreeOperations.ts","../src/components/C_Tree/index.vue","../src/components/C_Tree/index.vue","../src/components/C_Tree/index.vue"],"sourcesContent":["import type { TreeMode, TreeProps } from \"./types\";\r\n\r\nexport const presetConfigs: Record<TreeMode, Partial<TreeProps>> = {\r\n menu: {\r\n draggable: true,\r\n showLine: true,\r\n iconConfig: {\r\n typeMap: {\r\n directory: \"mdi:folder\",\r\n menu: \"mdi:file-document\",\r\n button: \"mdi:button-cursor\",\r\n },\r\n },\r\n actions: [\r\n { key: \"add\", text: \"新增子菜单\", icon: \"mdi:plus\", type: \"primary\" },\r\n { key: \"edit\", text: \"编辑\", icon: \"mdi:pencil\", type: \"info\" },\r\n {\r\n key: \"delete\",\r\n text: \"删除\",\r\n icon: \"mdi:delete\",\r\n type: \"error\",\r\n confirm: \"确认删除该菜单吗?\",\r\n },\r\n ],\r\n },\r\n file: {\r\n draggable: false,\r\n showLine: false,\r\n iconConfig: {\r\n typeMap: {\r\n folder: \"mdi:folder\",\r\n file: \"mdi:file-document\",\r\n image: \"mdi:file-image\",\r\n video: \"mdi:file-video\",\r\n audio: \"mdi:file-music\",\r\n },\r\n },\r\n actions: [\r\n { key: \"open\", text: \"打开\", icon: \"mdi:folder-open\", type: \"primary\" },\r\n { key: \"rename\", text: \"重命名\", icon: \"mdi:rename-box\", type: \"info\" },\r\n {\r\n key: \"delete\",\r\n text: \"删除\",\r\n icon: \"mdi:delete\",\r\n type: \"error\",\r\n confirm: \"确认删除该文件吗?\",\r\n },\r\n ],\r\n },\r\n org: {\r\n draggable: false,\r\n showLine: true,\r\n iconConfig: {\r\n typeMap: {\r\n department: \"mdi:domain\",\r\n user: \"mdi:account\",\r\n manager: \"mdi:account-tie\",\r\n },\r\n },\r\n actions: [\r\n { key: \"add\", text: \"新增下级\", icon: \"mdi:plus\", type: \"primary\" },\r\n { key: \"edit\", text: \"编辑\", icon: \"mdi:pencil\", type: \"info\" },\r\n ],\r\n },\r\n custom: {},\r\n};\r\n","import { ref, computed, h } from \"vue\";\r\nimport { NTag, NButton, NPopconfirm, NSpace } from \"naive-ui\";\r\nimport C_Icon from \"../../C_Icon/index.vue\";\r\nimport { presetConfigs } from \"../data\";\r\nimport type {\r\n TreeOption,\r\n TreeNodeData,\r\n TreeProps,\r\n TreeExpose,\r\n DropInfo,\r\n} from \"../types\";\r\n\r\ntype EmitFn = {\r\n (\r\n event: \"node-select\",\r\n node: TreeNodeData | null,\r\n selectedKeys: (string | number)[],\r\n ): void;\r\n (event: \"node-action\", action: string, node: TreeNodeData): void;\r\n (event: \"node-drop\", info: DropInfo): void;\r\n (event: \"add\", parentNode?: TreeNodeData): void;\r\n (event: \"refresh\"): void;\r\n};\r\n\r\nexport function useTreeOperations(props: TreeProps, emit: EmitFn) {\r\n const internalSearchPattern = ref(\"\");\r\n const expandedKeys = ref<(string | number)[]>(\r\n props.defaultExpandedKeys ?? [],\r\n );\r\n const selectedKeys = ref<(string | number)[]>(\r\n props.defaultSelectedKeys ?? [],\r\n );\r\n const isAllExpanded = ref(props.defaultExpandAll ?? false);\r\n\r\n const keyField = computed(() => props.keyField ?? \"id\");\r\n const labelField = computed(() => props.labelField ?? \"name\");\r\n const childrenField = computed(() => props.childrenField ?? \"children\");\r\n const iconField = computed(() => props.iconField ?? \"icon\");\r\n\r\n const mergedConfig = computed(() => {\r\n const preset = presetConfigs[props.mode ?? \"custom\"] || {};\r\n return {\r\n ...preset,\r\n ...props,\r\n iconConfig: { ...preset.iconConfig, ...props.iconConfig },\r\n actions: props.actions?.length ? props.actions : preset.actions || [],\r\n };\r\n });\r\n\r\n const treeData = computed((): TreeOption[] => props.data as TreeOption[]);\r\n\r\n const currentSearchPattern = computed(\r\n () => props.searchPattern || internalSearchPattern.value,\r\n );\r\n\r\n const selectedNode = computed((): TreeNodeData | null => {\r\n if (selectedKeys.value.length === 0) return null;\r\n const findNode = (\r\n nodes: TreeNodeData[],\r\n id: string | number,\r\n ): TreeNodeData | null => {\r\n for (const node of nodes) {\r\n if (node[keyField.value] === id) return node;\r\n if (node[childrenField.value]) {\r\n const found = findNode(node[childrenField.value], id);\r\n if (found) return found;\r\n }\r\n }\r\n return null;\r\n };\r\n return findNode(props.data, selectedKeys.value[0]);\r\n });\r\n\r\n const getAllKeys = (nodes: TreeNodeData[]): (string | number)[] => {\r\n const keys: (string | number)[] = [];\r\n nodes.forEach((node) => {\r\n keys.push(node[keyField.value]);\r\n if (node[childrenField.value]) {\r\n keys.push(...getAllKeys(node[childrenField.value]));\r\n }\r\n });\r\n return keys;\r\n };\r\n\r\n const getNodeIcon = (node: TreeNodeData): string => {\r\n const config = mergedConfig.value.iconConfig!;\r\n if (node[iconField.value]) return node[iconField.value];\r\n if (node.type && config.typeMap?.[node.type])\r\n return config.typeMap[node.type];\r\n return config.default || \"mdi:circle-outline\";\r\n };\r\n\r\n const getNodeIconColor = (node: TreeNodeData): string => {\r\n const config = mergedConfig.value.iconConfig!;\r\n if (node.type && config.colorMap?.[node.type])\r\n return config.colorMap[node.type];\r\n return \"currentColor\";\r\n };\r\n\r\n const renderPrefix = ({ option }: { option: TreeOption }) => {\r\n const node = option as TreeNodeData;\r\n return h(C_Icon, {\r\n name: getNodeIcon(node),\r\n size: 18,\r\n color: getNodeIconColor(node),\r\n class: \"mr-3 flex-shrink-0\",\r\n });\r\n };\r\n\r\n const renderLabel = ({ option }: { option: TreeOption }) => {\r\n const node = option as TreeNodeData;\r\n const statusTags =\r\n props.statusConfigs\r\n ?.map((config) => {\r\n const value = node[config.field];\r\n const statusConfig = config.values[value];\r\n if (!statusConfig?.text) return null;\r\n return h(\r\n NTag,\r\n {\r\n type: statusConfig.type,\r\n size: \"small\",\r\n class: \"ml-2\",\r\n style: { fontSize: \"12px\" },\r\n },\r\n { default: () => statusConfig.text },\r\n );\r\n })\r\n .filter(Boolean) || [];\r\n\r\n return h(\r\n \"div\",\r\n {\r\n class: \"flex items-center flex-1 min-w-0 py-1\",\r\n style: { lineHeight: \"1.5\" },\r\n },\r\n [\r\n h(\r\n \"span\",\r\n { class: \"mr-3 font-medium text-sm\" },\r\n node[labelField.value],\r\n ),\r\n ...statusTags,\r\n ],\r\n );\r\n };\r\n\r\n const renderSuffix = ({ option }: { option: TreeOption }) => {\r\n const node = option as TreeNodeData;\r\n const actions = mergedConfig.value.actions || [];\r\n\r\n const actionButtons = actions\r\n .filter((action) => !action.show || action.show(node))\r\n .map((action) => {\r\n const buttonProps = {\r\n size: \"tiny\" as const,\r\n type: action.type || (\"default\" as const),\r\n secondary: true,\r\n style: { padding: \"4px 6px\", minWidth: \"24px\", height: \"24px\" },\r\n onClick: (e: Event) => {\r\n e.stopPropagation();\r\n handleNodeAction(action.key, node);\r\n },\r\n };\r\n const iconEl = h(C_Icon, {\r\n name: action.icon,\r\n size: 12,\r\n title: action.text,\r\n });\r\n\r\n if (action.confirm) {\r\n return h(\r\n NPopconfirm,\r\n { onPositiveClick: () => handleNodeAction(action.key, node) },\r\n {\r\n trigger: () =>\r\n h(\r\n NButton,\r\n {\r\n ...buttonProps,\r\n onClick: (e: Event) => e.stopPropagation(),\r\n },\r\n { icon: () => iconEl },\r\n ),\r\n default: () => action.confirm,\r\n },\r\n );\r\n }\r\n return h(NButton, buttonProps, { icon: () => iconEl });\r\n });\r\n\r\n return h(\r\n \"div\",\r\n {\r\n class: \"tree-actions\",\r\n style: {\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n marginLeft: \"8px\",\r\n opacity: \"0\",\r\n transition: \"opacity 0.2s ease\",\r\n },\r\n },\r\n [h(NSpace, { size: 4 }, { default: () => actionButtons })],\r\n );\r\n };\r\n\r\n const toggleExpandAll = (): void => {\r\n if (isAllExpanded.value) {\r\n expandedKeys.value = [];\r\n isAllExpanded.value = false;\r\n } else {\r\n expandedKeys.value = getAllKeys(props.data);\r\n isAllExpanded.value = true;\r\n }\r\n };\r\n\r\n const handleExpandedKeysChange = (keys: (string | number)[]): void => {\r\n expandedKeys.value = keys;\r\n isAllExpanded.value = keys.length === getAllKeys(props.data).length;\r\n };\r\n\r\n const handleSelectedKeysChange = (keys: (string | number)[]): void => {\r\n selectedKeys.value = keys;\r\n emit(\"node-select\", selectedNode.value, keys);\r\n };\r\n\r\n const handleDrop = (info: DropInfo): void => emit(\"node-drop\", info);\r\n\r\n const handleNodeAction = (action: string, node: TreeNodeData): void => {\r\n if (action === \"add\") {\r\n emit(\"add\", node);\r\n } else {\r\n emit(\"node-action\", action, node);\r\n }\r\n };\r\n\r\n const handleAdd = (): void => emit(\"add\");\r\n const handleRefresh = (): void => emit(\"refresh\");\r\n\r\n const expose: TreeExpose = {\r\n expandAll: () => {\r\n expandedKeys.value = getAllKeys(props.data);\r\n isAllExpanded.value = true;\r\n },\r\n collapseAll: () => {\r\n expandedKeys.value = [];\r\n isAllExpanded.value = false;\r\n },\r\n selectNode: (key: string | number) => {\r\n selectedKeys.value = [key];\r\n },\r\n getSelectedNode: () => selectedNode.value,\r\n expandedKeys,\r\n selectedKeys,\r\n };\r\n\r\n return {\r\n internalSearchPattern,\r\n expandedKeys,\r\n selectedKeys,\r\n isAllExpanded,\r\n treeData,\r\n currentSearchPattern,\r\n renderPrefix,\r\n renderLabel,\r\n renderSuffix,\r\n toggleExpandAll,\r\n handleExpandedKeysChange,\r\n handleSelectedKeysChange,\r\n handleDrop,\r\n handleAdd,\r\n handleRefresh,\r\n expose,\r\n };\r\n}\r\n","/* unplugin-vue-components disabled */<!--\r\n * @Author: ChenYu ycyplus@gmail.com\r\n * @Date: 2025-06-27\r\n * @Description: 树型组件 — 薄 UI 壳,逻辑由 useTreeOperations 驱动\r\n * @Migration: naive-ui-components 组件库迁移版本\r\n * Copyright (c) 2025 by CHENY, All Rights Reserved.\r\n-->\r\n<template>\r\n <div class=\"c-tree\">\r\n <div v-if=\"showToolbar\" class=\"c-tree-toolbar\">\r\n <div class=\"toolbar-left\">\r\n <NInput\r\n v-if=\"searchable\"\r\n v-model:value=\"internalSearchPattern\"\r\n :placeholder=\"searchPlaceholder\"\r\n clearable\r\n class=\"search-input\"\r\n >\r\n <template #prefix>\r\n <C_Icon name=\"mdi:magnify\" :size=\"16\" />\r\n </template>\r\n </NInput>\r\n </div>\r\n <div class=\"toolbar-right\">\r\n <slot name=\"toolbar-actions\">\r\n <NButton v-if=\"addable\" type=\"primary\" @click=\"handleAdd()\">\r\n <template #icon>\r\n <C_Icon name=\"mdi:plus\" :size=\"16\" />\r\n </template>\r\n {{ addText }}\r\n </NButton>\r\n <NButton @click=\"toggleExpandAll\">\r\n <template #icon>\r\n <C_Icon name=\"mdi:file-tree\" :size=\"16\" />\r\n </template>\r\n {{ isAllExpanded ? \"收起全部\" : \"展开全部\" }}\r\n </NButton>\r\n <NButton v-if=\"refreshable\" @click=\"handleRefresh\">\r\n <template #icon>\r\n <C_Icon name=\"mdi:refresh\" :size=\"16\" />\r\n </template>\r\n 刷新\r\n </NButton>\r\n </slot>\r\n </div>\r\n </div>\r\n\r\n <div class=\"c-tree-container\">\r\n <NTree\r\n :data=\"treeData\"\r\n :pattern=\"currentSearchPattern\"\r\n :expanded-keys=\"expandedKeys\"\r\n :selected-keys=\"selectedKeys\"\r\n :draggable=\"draggable\"\r\n :show-line=\"showLine\"\r\n :render-prefix=\"renderPrefix\"\r\n :render-suffix=\"renderSuffix\"\r\n :render-label=\"renderLabel\"\r\n :key-field=\"keyField\"\r\n :label-field=\"labelField\"\r\n :children-field=\"childrenField\"\r\n @update:expanded-keys=\"handleExpandedKeysChange\"\r\n @update:selected-keys=\"handleSelectedKeysChange\"\r\n @drop=\"handleDrop\"\r\n class=\"tree-instance\"\r\n />\r\n </div>\r\n </div>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { NInput, NButton, NTree } from \"naive-ui\";\r\nimport C_Icon from \"../C_Icon/index.vue\";\r\nimport { useTreeOperations } from \"./composables/useTreeOperations\";\r\nimport type { TreeProps, TreeEmits, TreeExpose } from \"./types\";\r\n\r\ndefineOptions({ name: \"C_Tree\" });\r\n\r\nconst props = withDefaults(defineProps<TreeProps>(), {\r\n mode: \"custom\",\r\n keyField: \"id\",\r\n labelField: \"name\",\r\n childrenField: \"children\",\r\n searchPattern: \"\",\r\n searchable: true,\r\n searchPlaceholder: \"搜索...\",\r\n draggable: false,\r\n showLine: true,\r\n showToolbar: true,\r\n addable: true,\r\n addText: \"新增\",\r\n refreshable: true,\r\n iconField: \"icon\",\r\n iconConfig: () => ({\r\n default: \"mdi:circle-outline\",\r\n typeMap: {},\r\n colorMap: {},\r\n }),\r\n statusConfigs: () => [],\r\n actions: () => [],\r\n defaultExpandAll: false,\r\n defaultExpandedKeys: () => [],\r\n defaultSelectedKeys: () => [],\r\n});\r\n\r\nconst emit = defineEmits<TreeEmits>();\r\n\r\nconst {\r\n internalSearchPattern,\r\n expandedKeys,\r\n selectedKeys,\r\n isAllExpanded,\r\n treeData,\r\n currentSearchPattern,\r\n renderPrefix,\r\n renderLabel,\r\n renderSuffix,\r\n toggleExpandAll,\r\n handleExpandedKeysChange,\r\n handleSelectedKeysChange,\r\n handleDrop,\r\n handleAdd,\r\n handleRefresh,\r\n expose,\r\n} = useTreeOperations(props, emit);\r\n\r\ndefineExpose<TreeExpose>(expose);\r\n</script>\r\n\r\n<style lang=\"scss\" scoped>\r\n@use \"./index.scss\";\r\n</style>\r\n","/* unplugin-vue-components disabled */<!--\r\n * @Author: ChenYu ycyplus@gmail.com\r\n * @Date: 2025-06-27\r\n * @Description: 树型组件 — 薄 UI 壳,逻辑由 useTreeOperations 驱动\r\n * @Migration: naive-ui-components 组件库迁移版本\r\n * Copyright (c) 2025 by CHENY, All Rights Reserved.\r\n-->\r\n<template>\r\n <div class=\"c-tree\">\r\n <div v-if=\"showToolbar\" class=\"c-tree-toolbar\">\r\n <div class=\"toolbar-left\">\r\n <NInput\r\n v-if=\"searchable\"\r\n v-model:value=\"internalSearchPattern\"\r\n :placeholder=\"searchPlaceholder\"\r\n clearable\r\n class=\"search-input\"\r\n >\r\n <template #prefix>\r\n <C_Icon name=\"mdi:magnify\" :size=\"16\" />\r\n </template>\r\n </NInput>\r\n </div>\r\n <div class=\"toolbar-right\">\r\n <slot name=\"toolbar-actions\">\r\n <NButton v-if=\"addable\" type=\"primary\" @click=\"handleAdd()\">\r\n <template #icon>\r\n <C_Icon name=\"mdi:plus\" :size=\"16\" />\r\n </template>\r\n {{ addText }}\r\n </NButton>\r\n <NButton @click=\"toggleExpandAll\">\r\n <template #icon>\r\n <C_Icon name=\"mdi:file-tree\" :size=\"16\" />\r\n </template>\r\n {{ isAllExpanded ? \"收起全部\" : \"展开全部\" }}\r\n </NButton>\r\n <NButton v-if=\"refreshable\" @click=\"handleRefresh\">\r\n <template #icon>\r\n <C_Icon name=\"mdi:refresh\" :size=\"16\" />\r\n </template>\r\n 刷新\r\n </NButton>\r\n </slot>\r\n </div>\r\n </div>\r\n\r\n <div class=\"c-tree-container\">\r\n <NTree\r\n :data=\"treeData\"\r\n :pattern=\"currentSearchPattern\"\r\n :expanded-keys=\"expandedKeys\"\r\n :selected-keys=\"selectedKeys\"\r\n :draggable=\"draggable\"\r\n :show-line=\"showLine\"\r\n :render-prefix=\"renderPrefix\"\r\n :render-suffix=\"renderSuffix\"\r\n :render-label=\"renderLabel\"\r\n :key-field=\"keyField\"\r\n :label-field=\"labelField\"\r\n :children-field=\"childrenField\"\r\n @update:expanded-keys=\"handleExpandedKeysChange\"\r\n @update:selected-keys=\"handleSelectedKeysChange\"\r\n @drop=\"handleDrop\"\r\n class=\"tree-instance\"\r\n />\r\n </div>\r\n </div>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { NInput, NButton, NTree } from \"naive-ui\";\r\nimport C_Icon from \"../C_Icon/index.vue\";\r\nimport { useTreeOperations } from \"./composables/useTreeOperations\";\r\nimport type { TreeProps, TreeEmits, TreeExpose } from \"./types\";\r\n\r\ndefineOptions({ name: \"C_Tree\" });\r\n\r\nconst props = withDefaults(defineProps<TreeProps>(), {\r\n mode: \"custom\",\r\n keyField: \"id\",\r\n labelField: \"name\",\r\n childrenField: \"children\",\r\n searchPattern: \"\",\r\n searchable: true,\r\n searchPlaceholder: \"搜索...\",\r\n draggable: false,\r\n showLine: true,\r\n showToolbar: true,\r\n addable: true,\r\n addText: \"新增\",\r\n refreshable: true,\r\n iconField: \"icon\",\r\n iconConfig: () => ({\r\n default: \"mdi:circle-outline\",\r\n typeMap: {},\r\n colorMap: {},\r\n }),\r\n statusConfigs: () => [],\r\n actions: () => [],\r\n defaultExpandAll: false,\r\n defaultExpandedKeys: () => [],\r\n defaultSelectedKeys: () => [],\r\n});\r\n\r\nconst emit = defineEmits<TreeEmits>();\r\n\r\nconst {\r\n internalSearchPattern,\r\n expandedKeys,\r\n selectedKeys,\r\n isAllExpanded,\r\n treeData,\r\n currentSearchPattern,\r\n renderPrefix,\r\n renderLabel,\r\n renderSuffix,\r\n toggleExpandAll,\r\n handleExpandedKeysChange,\r\n handleSelectedKeysChange,\r\n handleDrop,\r\n handleAdd,\r\n handleRefresh,\r\n expose,\r\n} = useTreeOperations(props, emit);\r\n\r\ndefineExpose<TreeExpose>(expose);\r\n</script>\r\n\r\n<style lang=\"scss\" scoped>\r\n@use \"./index.scss\";\r\n</style>\r\n","<!--\r\n * @Author: ChenYu ycyplus@gmail.com\r\n * @Date: 2025-06-27\r\n * @Description: 树型组件 — 薄 UI 壳,逻辑由 useTreeOperations 驱动\r\n * @Migration: naive-ui-components 组件库迁移版本\r\n * Copyright (c) 2025 by CHENY, All Rights Reserved.\r\n-->\r\n<template>\r\n <div class=\"c-tree\">\r\n <div v-if=\"showToolbar\" class=\"c-tree-toolbar\">\r\n <div class=\"toolbar-left\">\r\n <NInput\r\n v-if=\"searchable\"\r\n v-model:value=\"internalSearchPattern\"\r\n :placeholder=\"searchPlaceholder\"\r\n clearable\r\n class=\"search-input\"\r\n >\r\n <template #prefix>\r\n <C_Icon name=\"mdi:magnify\" :size=\"16\" />\r\n </template>\r\n </NInput>\r\n </div>\r\n <div class=\"toolbar-right\">\r\n <slot name=\"toolbar-actions\">\r\n <NButton v-if=\"addable\" type=\"primary\" @click=\"handleAdd()\">\r\n <template #icon>\r\n <C_Icon name=\"mdi:plus\" :size=\"16\" />\r\n </template>\r\n {{ addText }}\r\n </NButton>\r\n <NButton @click=\"toggleExpandAll\">\r\n <template #icon>\r\n <C_Icon name=\"mdi:file-tree\" :size=\"16\" />\r\n </template>\r\n {{ isAllExpanded ? \"收起全部\" : \"展开全部\" }}\r\n </NButton>\r\n <NButton v-if=\"refreshable\" @click=\"handleRefresh\">\r\n <template #icon>\r\n <C_Icon name=\"mdi:refresh\" :size=\"16\" />\r\n </template>\r\n 刷新\r\n </NButton>\r\n </slot>\r\n </div>\r\n </div>\r\n\r\n <div class=\"c-tree-container\">\r\n <NTree\r\n :data=\"treeData\"\r\n :pattern=\"currentSearchPattern\"\r\n :expanded-keys=\"expandedKeys\"\r\n :selected-keys=\"selectedKeys\"\r\n :draggable=\"draggable\"\r\n :show-line=\"showLine\"\r\n :render-prefix=\"renderPrefix\"\r\n :render-suffix=\"renderSuffix\"\r\n :render-label=\"renderLabel\"\r\n :key-field=\"keyField\"\r\n :label-field=\"labelField\"\r\n :children-field=\"childrenField\"\r\n @update:expanded-keys=\"handleExpandedKeysChange\"\r\n @update:selected-keys=\"handleSelectedKeysChange\"\r\n @drop=\"handleDrop\"\r\n class=\"tree-instance\"\r\n />\r\n </div>\r\n </div>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { NInput, NButton, NTree } from \"naive-ui\";\r\nimport C_Icon from \"../C_Icon/index.vue\";\r\nimport { useTreeOperations } from \"./composables/useTreeOperations\";\r\nimport type { TreeProps, TreeEmits, TreeExpose } from \"./types\";\r\n\r\ndefineOptions({ name: \"C_Tree\" });\r\n\r\nconst props = withDefaults(defineProps<TreeProps>(), {\r\n mode: \"custom\",\r\n keyField: \"id\",\r\n labelField: \"name\",\r\n childrenField: \"children\",\r\n searchPattern: \"\",\r\n searchable: true,\r\n searchPlaceholder: \"搜索...\",\r\n draggable: false,\r\n showLine: true,\r\n showToolbar: true,\r\n addable: true,\r\n addText: \"新增\",\r\n refreshable: true,\r\n iconField: \"icon\",\r\n iconConfig: () => ({\r\n default: \"mdi:circle-outline\",\r\n typeMap: {},\r\n colorMap: {},\r\n }),\r\n statusConfigs: () => [],\r\n actions: () => [],\r\n defaultExpandAll: false,\r\n defaultExpandedKeys: () => [],\r\n defaultSelectedKeys: () => [],\r\n});\r\n\r\nconst emit = defineEmits<TreeEmits>();\r\n\r\nconst {\r\n internalSearchPattern,\r\n expandedKeys,\r\n selectedKeys,\r\n isAllExpanded,\r\n treeData,\r\n currentSearchPattern,\r\n renderPrefix,\r\n renderLabel,\r\n renderSuffix,\r\n toggleExpandAll,\r\n handleExpandedKeysChange,\r\n handleSelectedKeysChange,\r\n handleDrop,\r\n handleAdd,\r\n handleRefresh,\r\n expose,\r\n} = useTreeOperations(props, emit);\r\n\r\ndefineExpose<TreeExpose>(expose);\r\n</script>\r\n\r\n<style lang=\"scss\" scoped>\r\n@use \"./index.scss\";\r\n</style>\r\n"],"mappings":"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"}
|
package/dist/C_Upload.cjs
CHANGED
|
@@ -1,12 +1 @@
|
|
|
1
|
-
Object.defineProperty(exports,
|
|
2
|
-
require('./C_Icon.js');
|
|
3
|
-
const require_C_Upload = require('./C_Upload.js');
|
|
4
|
-
|
|
5
|
-
exports.C_Upload = require_C_Upload.C_Upload_default;
|
|
6
|
-
exports.formatFileSize = require_C_Upload.formatFileSize;
|
|
7
|
-
exports.getFileIcon = require_C_Upload.getFileIcon;
|
|
8
|
-
exports.useChunkUpload = require_C_Upload.useChunkUpload;
|
|
9
|
-
exports.useDragDrop = require_C_Upload.useDragDrop;
|
|
10
|
-
exports.useFileHash = require_C_Upload.useFileHash;
|
|
11
|
-
exports.useUploadCore = require_C_Upload.useUploadCore;
|
|
12
|
-
exports.useUploadQueue = require_C_Upload.useUploadQueue;
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`}),require(`./C_Icon.js`);const e=require(`./C_Upload.js`);exports.C_Upload=e.t,exports.formatFileSize=e.s,exports.getFileIcon=e.c,exports.useChunkUpload=e.a,exports.useDragDrop=e.n,exports.useFileHash=e.o,exports.useUploadCore=e.r,exports.useUploadQueue=e.i;
|
package/dist/C_Upload.js
CHANGED
|
@@ -1,4 +1 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { a as useChunkUpload, c as getFileIcon, i as useUploadQueue, n as useDragDrop, o as useFileHash, r as useUploadCore, s as formatFileSize, t as C_Upload_default } from "./C_Upload2.js";
|
|
3
|
-
|
|
4
|
-
export { C_Upload_default as C_Upload, formatFileSize, getFileIcon, useChunkUpload, useDragDrop, useFileHash, useUploadCore, useUploadQueue };
|
|
1
|
+
import"./C_Icon2.js";import{a as e,c as t,i as n,n as r,o as i,r as a,s as o,t as s}from"./C_Upload2.js";export{s as C_Upload,o as formatFileSize,t as getFileIcon,e as useChunkUpload,r as useDragDrop,i as useFileHash,a as useUploadCore,n as useUploadQueue};
|