@mc20230601/keep-up 1.0.17 → 1.0.23
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/es/components/codeEditor/index.d.ts +163 -0
- package/es/components/codeEditor/index.mjs +74 -0
- package/es/components/codeEditor/index.mjs.map +1 -0
- package/es/components/commonDrawer/index.d.ts +24 -0
- package/es/components/commonDrawer/index.mjs +61 -0
- package/es/components/commonDrawer/index.mjs.map +1 -0
- package/es/components/commonDrawer/index.module.mjs +4 -0
- package/es/components/commonDrawer/interfaces.d.ts +7 -0
- package/es/components/commonDrawer/interfaces.mjs +2 -0
- package/es/components/commonDrawer/interfaces.mjs.map +1 -0
- package/es/components/commonLocations/constants.d.ts +28 -0
- package/es/components/commonLocations/constants.mjs +18 -0
- package/es/components/commonLocations/constants.mjs.map +1 -0
- package/es/components/commonLocations/index.d.ts +40 -0
- package/es/components/commonLocations/index.mjs +94 -0
- package/es/components/commonLocations/index.mjs.map +1 -0
- package/es/components/commonLocations/index.module.mjs +4 -0
- package/es/components/commonLocations/index.module.mjs.map +1 -0
- package/es/components/commonLocations/interfaces.d.ts +100 -0
- package/es/components/commonLocations/interfaces.mjs +2 -0
- package/es/components/commonLocations/interfaces.mjs.map +1 -0
- package/es/components/commonLocations/useLocations.d.ts +2 -0
- package/es/components/commonLocations/useLocations.mjs +151 -0
- package/es/components/commonLocations/useLocations.mjs.map +1 -0
- package/es/components/commonLocations/utils.d.ts +14 -0
- package/es/components/commonLocations/utils.mjs +73 -0
- package/es/components/commonLocations/utils.mjs.map +1 -0
- package/es/components/formilyCmps/formTab/index.d.ts +83 -0
- package/es/components/formilyCmps/formTab/index.mjs +146 -0
- package/es/components/formilyCmps/formTab/index.mjs.map +1 -0
- package/es/components/formilyCmps/formilyForm/constants.d.ts +39 -0
- package/es/components/formilyCmps/formilyForm/constants.mjs +41 -0
- package/es/components/formilyCmps/formilyForm/constants.mjs.map +1 -0
- package/es/components/formilyCmps/formilyForm/index.d.ts +131 -0
- package/es/components/formilyCmps/formilyForm/index.mjs +148 -0
- package/es/components/formilyCmps/formilyForm/index.mjs.map +1 -0
- package/es/components/formilyCmps/formilyForm/index.module.mjs +4 -0
- package/es/components/formilyCmps/formilyForm/index.module.mjs.map +1 -0
- package/es/components/formilyCmps/formilyForm/interfaces.d.ts +28 -0
- package/es/components/formilyCmps/formilyForm/interfaces.mjs +2 -0
- package/es/components/formilyCmps/formilyForm/interfaces.mjs.map +1 -0
- package/es/components/formilyCmps/formilyForm/utils.d.ts +3 -0
- package/es/components/formilyCmps/formilyForm/utils.mjs +14 -0
- package/es/components/formilyCmps/formilyForm/utils.mjs.map +1 -0
- package/es/components/formilyCmps/index.d.ts +3 -0
- package/es/components/formilyCmps/index.mjs +3 -0
- package/es/components/formilyCmps/index.mjs.map +1 -0
- package/es/components/formilyCmps/sectionTitle/index.d.ts +28 -0
- package/es/components/formilyCmps/sectionTitle/index.mjs +30 -0
- package/es/components/formilyCmps/sectionTitle/index.mjs.map +1 -0
- package/es/components/formilyCmps/sectionTitle/index.module.mjs +4 -0
- package/es/components/formilyCmps/sectionTitle/index.module.mjs.map +1 -0
- package/es/components/index.d.ts +5 -1
- package/es/components/index.mjs +5 -1
- package/es/components/index.mjs.map +1 -1
- package/es/components/radioGroup/constants.d.ts +371 -0
- package/es/components/radioGroup/constants.mjs +11 -0
- package/es/components/radioGroup/constants.mjs.map +1 -0
- package/es/components/radioGroup/index.d.ts +203 -0
- package/es/components/radioGroup/index.mjs +60 -0
- package/es/components/radioGroup/index.mjs.map +1 -0
- package/es/components/radioGroup/interfaces.d.ts +7 -0
- package/es/components/radioGroup/interfaces.mjs +2 -0
- package/es/components/radioGroup/interfaces.mjs.map +1 -0
- package/es/components/space/index.d.ts +60 -1
- package/es/components/space/index.mjs +51 -6
- package/es/components/space/index.mjs.map +1 -1
- package/es/constants/common.d.ts +4 -0
- package/es/constants/common.mjs +26 -0
- package/es/constants/common.mjs.map +1 -0
- package/es/index.d.ts +5 -1
- package/es/index.mjs +5 -1
- package/es/index.mjs.map +1 -1
- package/es/interfaces/common.d.ts +46 -0
- package/es/interfaces/common.mjs +2 -0
- package/es/interfaces/common.mjs.map +1 -0
- package/es/interfaces/commonPage.d.ts +88 -0
- package/es/interfaces/commonPage.mjs +2 -0
- package/es/interfaces/commonPage.mjs.map +1 -0
- package/es/interfaces/index.d.ts +2 -0
- package/es/styles/index.css +53 -4
- package/es/utils/common.d.ts +18 -0
- package/es/utils/common.mjs +14 -0
- package/es/utils/common.mjs.map +1 -0
- package/es/utils/emitter.d.ts +2 -0
- package/es/utils/emitter.mjs +6 -0
- package/es/utils/emitter.mjs.map +1 -0
- package/es/utils/index.d.ts +4 -0
- package/es/utils/index.mjs +5 -0
- package/es/utils/index.mjs.map +1 -0
- package/es/utils/shared.d.ts +2 -0
- package/es/utils/shared.mjs +6 -0
- package/es/utils/shared.mjs.map +1 -0
- package/es/utils/storage.d.ts +8 -0
- package/es/utils/storage.mjs +23 -0
- package/es/utils/storage.mjs.map +1 -0
- package/package.json +1 -5
- package/es/components/button/index.d.ts +0 -2
- package/es/components/button/index.mjs +0 -11
- package/es/components/button/index.mjs.map +0 -1
- package/es/components/space/index.module.mjs +0 -4
- package/es/directives/index.d.ts +0 -0
- package/es/keepUp/index.d.ts +0 -1
- /package/es/components/{space → commonDrawer}/index.module.mjs.map +0 -0
- /package/es/{directives → interfaces}/index.mjs +0 -0
- /package/es/{directives → interfaces}/index.mjs.map +0 -0
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import type { Ref, ComputedRef } from 'vue';
|
|
2
|
+
import type { Type } from './constants';
|
|
3
|
+
/** 位置(接口数据) */
|
|
4
|
+
export interface ILocationItem {
|
|
5
|
+
/** 节点id */
|
|
6
|
+
nodeId: string;
|
|
7
|
+
/** 所属地区id */
|
|
8
|
+
regionId: string;
|
|
9
|
+
/** 所属地区名称 */
|
|
10
|
+
regionName: string;
|
|
11
|
+
/** 所属省份 */
|
|
12
|
+
subdivision: string;
|
|
13
|
+
/** 所属城市 */
|
|
14
|
+
city: string;
|
|
15
|
+
/** 运营商唯一标识 */
|
|
16
|
+
asn: string;
|
|
17
|
+
/** 运营商 */
|
|
18
|
+
ispName: string;
|
|
19
|
+
/** 用于前端友好展示的区域名称,比如:浙江杭州电信 */
|
|
20
|
+
friendlyArea: string;
|
|
21
|
+
}
|
|
22
|
+
/** props */
|
|
23
|
+
export interface IProps {
|
|
24
|
+
/** value */
|
|
25
|
+
value: string[];
|
|
26
|
+
/** options,主要用于触发渲染时机 */
|
|
27
|
+
options: ILocationItem[];
|
|
28
|
+
}
|
|
29
|
+
/** useLocations出参 */
|
|
30
|
+
export interface IUseLocationsRes {
|
|
31
|
+
/** 格式化后的位置数据 */
|
|
32
|
+
locations: Ref<ILocations>;
|
|
33
|
+
/** 所有选中的和可选的leaf节点 */
|
|
34
|
+
allLocations: ComputedRef<ISelectedData>;
|
|
35
|
+
}
|
|
36
|
+
/** 转换后数据 */
|
|
37
|
+
/** 叶子节点 */
|
|
38
|
+
export interface ILeafNode extends Partial<ILocationItem> {
|
|
39
|
+
/** 标题 */
|
|
40
|
+
label: string;
|
|
41
|
+
/** 是否选中(废弃) */
|
|
42
|
+
selected: boolean;
|
|
43
|
+
/** 节点类型 */
|
|
44
|
+
type: Type.IS_LEAF;
|
|
45
|
+
/** 子节点 */
|
|
46
|
+
children: [];
|
|
47
|
+
/** 选中的子节点 */
|
|
48
|
+
selectedChildren: [];
|
|
49
|
+
/** 选中状态改变 */
|
|
50
|
+
onChange: () => void;
|
|
51
|
+
}
|
|
52
|
+
/** 根节点 */
|
|
53
|
+
interface IBasicGroupNode extends Partial<Omit<ILocationItem, 'nodeId' | 'regionName' | 'subdivision' | 'city' | 'ispName' | 'friendlyArea'>> {
|
|
54
|
+
/** 标题 */
|
|
55
|
+
label: string;
|
|
56
|
+
/** 选中部分 */
|
|
57
|
+
isHalfChecked: boolean;
|
|
58
|
+
/** 全选 */
|
|
59
|
+
isAllChecked: boolean;
|
|
60
|
+
/** 节点类型 */
|
|
61
|
+
type: Type;
|
|
62
|
+
/** 子节点 */
|
|
63
|
+
children: ILeafNode[];
|
|
64
|
+
/** 选中的子节点 */
|
|
65
|
+
selectedChildren: string[];
|
|
66
|
+
/** 根据子节点选中状态,检查更新自身的选中状态 */
|
|
67
|
+
onCheck: () => void;
|
|
68
|
+
/** 选中状态手动改变 */
|
|
69
|
+
onChange: (p?: any) => void;
|
|
70
|
+
}
|
|
71
|
+
/** 叶子节点的父节点(唯一) */
|
|
72
|
+
export interface IGroupNode extends IBasicGroupNode {
|
|
73
|
+
/** 节点类型 */
|
|
74
|
+
type: Type.IS_GROUP;
|
|
75
|
+
}
|
|
76
|
+
/** 运营商节点 */
|
|
77
|
+
export interface IIspNode extends IBasicGroupNode {
|
|
78
|
+
type: Type.IS_ISP;
|
|
79
|
+
}
|
|
80
|
+
/** 全选节点 */
|
|
81
|
+
export interface IAllNode extends Omit<IBasicGroupNode, 'children'> {
|
|
82
|
+
type: Type.IS_ALL;
|
|
83
|
+
/** 子节点 */
|
|
84
|
+
children: IIspNode[];
|
|
85
|
+
}
|
|
86
|
+
/** 用于渲染的数据结构 */
|
|
87
|
+
export type ILocations = {
|
|
88
|
+
all?: IAllNode;
|
|
89
|
+
} & {
|
|
90
|
+
[K in Exclude<string, 'all'>]: IGroupNode;
|
|
91
|
+
};
|
|
92
|
+
/** 转换后数据 */
|
|
93
|
+
/** 不同维度归类的数据Map */
|
|
94
|
+
export interface ISelectedData {
|
|
95
|
+
/** 所有可选的叶子结点 */
|
|
96
|
+
children: ILeafNode[];
|
|
97
|
+
/** 所有选中的叶子结点 */
|
|
98
|
+
selectedChildren: string[];
|
|
99
|
+
}
|
|
100
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interfaces.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
import { ref, computed, watch } from 'vue';
|
|
2
|
+
import { isEqual, isEmpty } from 'lodash';
|
|
3
|
+
import { getUtils } from './utils.mjs';
|
|
4
|
+
import { valueKey, TypeKey, Type } from './constants.mjs';
|
|
5
|
+
|
|
6
|
+
const useLocations = (props) => {
|
|
7
|
+
const locations = ref({});
|
|
8
|
+
const allLocations = computed(() => {
|
|
9
|
+
return Object.entries(locations.value).filter(([k]) => k !== "all").reduce(
|
|
10
|
+
(iniVal, [_, v]) => ({
|
|
11
|
+
selectedChildren: [
|
|
12
|
+
...iniVal.selectedChildren,
|
|
13
|
+
...v.selectedChildren || []
|
|
14
|
+
],
|
|
15
|
+
children: [...iniVal.children, ...v.children || []]
|
|
16
|
+
}),
|
|
17
|
+
{ children: [], selectedChildren: [] }
|
|
18
|
+
);
|
|
19
|
+
});
|
|
20
|
+
const { ispNodeOnCheck, groupNodeOnCheck, allNodeOnCheck, dispatchAllNodesOnCheck } = getUtils(
|
|
21
|
+
locations,
|
|
22
|
+
allLocations
|
|
23
|
+
);
|
|
24
|
+
const formatLocations = (curLocations = []) => {
|
|
25
|
+
const getLeafNode = (curItem) => ({
|
|
26
|
+
...curItem,
|
|
27
|
+
label: curItem.friendlyArea,
|
|
28
|
+
selected: false,
|
|
29
|
+
type: Type.IS_LEAF,
|
|
30
|
+
children: [],
|
|
31
|
+
selectedChildren: [],
|
|
32
|
+
onChange: () => {
|
|
33
|
+
console.log(
|
|
34
|
+
`\u3010\u{1F527} \u70B9\u51FB\u3011\u8282\u70B9\u7C7B\u578B\uFF1A\u53F6\u5B50\u8282\u70B9\u3002\u52A8\u4F5C: \u624B\u52A8\u5207\u6362\u3010${curItem.friendlyArea}\u3011\u5730\u533A\u7684\u9009\u4E2D\u72B6\u6001\u3002`
|
|
35
|
+
);
|
|
36
|
+
dispatchAllNodesOnCheck();
|
|
37
|
+
}
|
|
38
|
+
});
|
|
39
|
+
return curLocations.reduce((initVal, curItem) => {
|
|
40
|
+
var _a, _b, _c, _d, _e;
|
|
41
|
+
if (curItem[TypeKey[Type.IS_LEAF]] in initVal) {
|
|
42
|
+
(_b = (_a = initVal[curItem[TypeKey[Type.IS_LEAF]]].children) == null ? void 0 : _a.push) == null ? void 0 : _b.call(_a, getLeafNode(curItem));
|
|
43
|
+
} else {
|
|
44
|
+
initVal[curItem[TypeKey[Type.IS_GROUP]]] = {
|
|
45
|
+
label: curItem.regionName,
|
|
46
|
+
[TypeKey[Type.IS_GROUP]]: curItem[TypeKey[Type.IS_GROUP]],
|
|
47
|
+
isHalfChecked: false,
|
|
48
|
+
isAllChecked: false,
|
|
49
|
+
type: Type.IS_GROUP,
|
|
50
|
+
children: [getLeafNode(curItem)],
|
|
51
|
+
selectedChildren: [],
|
|
52
|
+
onCheck: () => {
|
|
53
|
+
console.log(
|
|
54
|
+
`\u3010\u{1F527} \u68C0\u67E5\u3011\u8282\u70B9\u7C7B\u578B\uFF1A\u7EC4\u8282\u70B9\u3002\u52A8\u4F5C: \u68C0\u67E5\u66F4\u65B0\u3010${curItem.regionName}\u3011\u5730\u533A\u7684\u9009\u4E2D\u72B6\u6001`
|
|
55
|
+
);
|
|
56
|
+
groupNodeOnCheck(curItem, Type.IS_GROUP);
|
|
57
|
+
},
|
|
58
|
+
onChange: (val) => {
|
|
59
|
+
console.log(
|
|
60
|
+
`\u3010\u{1F527} \u70B9\u51FB\u3011\u8282\u70B9\u7C7B\u578B\uFF1A\u7EC4\u8282\u70B9\u3002\u52A8\u4F5C: \u624B\u52A8\u5207\u6362\u3010${curItem.regionName}\u3011\u5730\u533A\u7684\u9009\u4E2D\u72B6\u6001`
|
|
61
|
+
);
|
|
62
|
+
locations.value[curItem[TypeKey[Type.IS_GROUP]]].selectedChildren = val ? locations.value[curItem[TypeKey[Type.IS_GROUP]]].children.map((v) => v[valueKey]) : [];
|
|
63
|
+
dispatchAllNodesOnCheck();
|
|
64
|
+
}
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
if (!("all" in initVal)) {
|
|
68
|
+
initVal["all"] = {
|
|
69
|
+
label: "\u5168\u9009",
|
|
70
|
+
isHalfChecked: false,
|
|
71
|
+
isAllChecked: false,
|
|
72
|
+
type: Type.IS_ALL,
|
|
73
|
+
children: [],
|
|
74
|
+
selectedChildren: [],
|
|
75
|
+
onCheck: () => {
|
|
76
|
+
console.log(`\u3010\u{1F527} \u68C0\u67E5\u3011\u8282\u70B9\u7C7B\u578B\uFF1A\u5168\u9009\u8282\u70B9\u3002\u52A8\u4F5C: \u68C0\u67E5\u66F4\u65B0\u5168\u9009\u8282\u70B9\u7684\u9009\u4E2D\u72B6\u6001`);
|
|
77
|
+
allNodeOnCheck();
|
|
78
|
+
},
|
|
79
|
+
onChange: (val) => {
|
|
80
|
+
console.log(`\u3010\u{1F527} \u70B9\u51FB\u3011\u8282\u70B9\u7C7B\u578B\uFF1A\u5168\u9009\u8282\u70B9\u3002\u52A8\u4F5C: \u624B\u52A8\u5207\u6362\u6240\u6709\u53F6\u5B50\u8282\u70B9\u7684\u9009\u4E2D\u72B6\u6001`);
|
|
81
|
+
Object.entries(locations.value).filter(([k, v]) => k !== "all").forEach(([k, v]) => {
|
|
82
|
+
v.selectedChildren = val ? v.children.map((v1) => v1[valueKey]) : [];
|
|
83
|
+
});
|
|
84
|
+
dispatchAllNodesOnCheck();
|
|
85
|
+
}
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
if (!(((_c = initVal["all"]) == null ? void 0 : _c.children) || []).find(
|
|
89
|
+
(v) => v[TypeKey[Type.IS_ISP]] === curItem[TypeKey[Type.IS_ISP]]
|
|
90
|
+
)) {
|
|
91
|
+
(_e = (_d = initVal["all"]) == null ? void 0 : _d.children) == null ? void 0 : _e.push({
|
|
92
|
+
label: curItem.ispName,
|
|
93
|
+
[TypeKey[Type.IS_ISP]]: curItem[TypeKey[Type.IS_ISP]],
|
|
94
|
+
/** 因为运营商的唯一值是asn,其余的叶子节点唯一值是regionId,所以在这里如果要把运营商模拟为叶子结点的话,需要把asn填进regionId */
|
|
95
|
+
[valueKey]: curItem[TypeKey[Type.IS_ISP]],
|
|
96
|
+
// 用唯一的asn,因为ui中将运营商节点放入leaf节点的位置,所以有了这个key
|
|
97
|
+
isHalfChecked: false,
|
|
98
|
+
isAllChecked: false,
|
|
99
|
+
type: Type.IS_ISP,
|
|
100
|
+
children: [],
|
|
101
|
+
selectedChildren: [],
|
|
102
|
+
onCheck: () => {
|
|
103
|
+
console.log(
|
|
104
|
+
`\u3010\u{1F527} \u68C0\u67E5\u3011\u8282\u70B9\u7C7B\u578B\uFF1A\u8FD0\u8425\u5546\u8282\u70B9\u3002\u52A8\u4F5C: \u68C0\u67E5\u66F4\u65B0\u3010${curItem.ispName}\u3011\u8FD0\u8425\u5546\u8282\u70B9\u7684\u9009\u4E2D\u72B6\u6001`
|
|
105
|
+
);
|
|
106
|
+
ispNodeOnCheck(curItem, Type.IS_ISP);
|
|
107
|
+
},
|
|
108
|
+
onChange: (val) => {
|
|
109
|
+
console.log(
|
|
110
|
+
`\u3010\u{1F527} \u70B9\u51FB\u3011\u8282\u70B9\u7C7B\u578B\uFF1A\u5168\u9009\u8282\u70B9\u3002\u52A8\u4F5C: \u624B\u52A8\u5207\u6362\u3010${curItem.ispName}\u3011\u8FD0\u8425\u5546\u8282\u70B9\u7684\u9009\u4E2D\u72B6\u6001`
|
|
111
|
+
);
|
|
112
|
+
Object.entries(locations.value).filter(([k, v]) => k !== "all").forEach(([k, v]) => {
|
|
113
|
+
v.selectedChildren = val ? v.children.filter((v1) => v1[TypeKey[Type.IS_ISP]] === curItem[TypeKey[Type.IS_ISP]]).map((v2) => v2[valueKey]) : [];
|
|
114
|
+
});
|
|
115
|
+
dispatchAllNodesOnCheck();
|
|
116
|
+
}
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
return initVal;
|
|
120
|
+
}, {});
|
|
121
|
+
};
|
|
122
|
+
const init = () => {
|
|
123
|
+
locations.value = formatLocations(props.options);
|
|
124
|
+
if (isEmpty(locations.value)) {
|
|
125
|
+
return;
|
|
126
|
+
}
|
|
127
|
+
Object.entries(locations.value).filter(([k]) => k !== "all").map(([_, v]) => {
|
|
128
|
+
const same = v.children.filter((v2) => props.value.includes(v2[valueKey])).map((v2) => v2[valueKey]);
|
|
129
|
+
if (same.length) {
|
|
130
|
+
v.selectedChildren = [...v.selectedChildren, ...same];
|
|
131
|
+
}
|
|
132
|
+
});
|
|
133
|
+
dispatchAllNodesOnCheck();
|
|
134
|
+
};
|
|
135
|
+
watch(
|
|
136
|
+
() => [props.options, props.value],
|
|
137
|
+
(newVal, oldVal) => {
|
|
138
|
+
if (!isEqual(newVal == null ? void 0 : newVal[0], oldVal == null ? void 0 : oldVal[0]) || !isEqual(newVal == null ? void 0 : newVal[1], oldVal == null ? void 0 : oldVal[1])) {
|
|
139
|
+
init();
|
|
140
|
+
}
|
|
141
|
+
},
|
|
142
|
+
{ immediate: true }
|
|
143
|
+
);
|
|
144
|
+
return {
|
|
145
|
+
locations,
|
|
146
|
+
allLocations
|
|
147
|
+
};
|
|
148
|
+
};
|
|
149
|
+
|
|
150
|
+
export { useLocations };
|
|
151
|
+
//# sourceMappingURL=useLocations.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useLocations.mjs","sources":["../../../../../packages/components/commonLocations/useLocations.ts"],"sourcesContent":["import { ref, computed, watch } from 'vue'\nimport { isEmpty, isEqual } from 'lodash'\nimport { getUtils } from './utils'\nimport { Type, TypeKey, valueKey } from './constants'\n\nimport type {\n IProps,\n IUseLocationsRes,\n ILocationItem,\n IAllNode,\n IIspNode,\n IGroupNode,\n ILeafNode,\n ILocations,\n ISelectedData,\n} from './interfaces'\n\nexport const useLocations = (props: IProps): IUseLocationsRes => {\n const locations = ref<ILocations>({})\n /** 获取所有选中的和可选的leaf节点 */\n const allLocations = computed<ISelectedData>(() => {\n return Object.entries(locations.value)\n .filter(([k]) => k !== 'all')\n .reduce(\n (iniVal, [_, v]) => ({\n selectedChildren: [\n ...iniVal.selectedChildren,\n ...((v as unknown as ILeafNode).selectedChildren || []),\n ],\n children: [...iniVal.children, ...((v as unknown as ILeafNode).children || [])],\n }),\n { children: [], selectedChildren: [] } as ISelectedData,\n )\n })\n const { ispNodeOnCheck, groupNodeOnCheck, allNodeOnCheck, dispatchAllNodesOnCheck } = getUtils(\n locations,\n allLocations,\n )\n /** 格式化locations */\n const formatLocations = (curLocations: ILocationItem[] = []): ILocations => {\n const getLeafNode = (curItem: ILeafNode): ILeafNode => ({\n ...curItem,\n label: curItem.friendlyArea,\n selected: false,\n type: Type.IS_LEAF,\n children: [],\n selectedChildren: [],\n onChange: () => {\n console.log(\n `【🔧 点击】节点类型:叶子节点。动作: 手动切换【${curItem.friendlyArea}】地区的选中状态。`,\n )\n dispatchAllNodesOnCheck()\n },\n })\n return curLocations.reduce((initVal, curItem) => {\n // 按regionName分组\n if (curItem[TypeKey[Type.IS_LEAF]] in initVal) {\n initVal[curItem[TypeKey[Type.IS_LEAF]]].children?.push?.(getLeafNode(curItem as ILeafNode))\n } else {\n initVal[curItem[TypeKey[Type.IS_GROUP]]] = {\n label: curItem.regionName,\n [TypeKey[Type.IS_GROUP]]: curItem[TypeKey[Type.IS_GROUP]],\n isHalfChecked: false,\n isAllChecked: false,\n type: Type.IS_GROUP,\n children: [getLeafNode(curItem as ILeafNode)],\n selectedChildren: [],\n onCheck: () => {\n console.log(\n `【🔧 检查】节点类型:组节点。动作: 检查更新【${curItem.regionName}】地区的选中状态`,\n )\n groupNodeOnCheck(curItem, Type.IS_GROUP)\n },\n onChange: (val: boolean) => {\n console.log(\n `【🔧 点击】节点类型:组节点。动作: 手动切换【${curItem.regionName}】地区的选中状态`,\n )\n locations.value[curItem[TypeKey[Type.IS_GROUP]]].selectedChildren = val\n ? locations.value[curItem[TypeKey[Type.IS_GROUP]]].children.map((v) => v[valueKey])\n : []\n /** 调用所有IGroupNode和IIspNode的onCheck */\n dispatchAllNodesOnCheck()\n },\n } as IGroupNode\n }\n // 全选\n if (!('all' in initVal)) {\n initVal['all'] = {\n label: '全选',\n isHalfChecked: false,\n isAllChecked: false,\n type: Type.IS_ALL,\n children: [],\n selectedChildren: [],\n onCheck: () => {\n console.log(`【🔧 检查】节点类型:全选节点。动作: 检查更新全选节点的选中状态`)\n allNodeOnCheck()\n },\n onChange: (val: boolean) => {\n console.log(`【🔧 点击】节点类型:全选节点。动作: 手动切换所有叶子节点的选中状态`)\n Object.entries(locations.value)\n .filter(([k, v]) => k !== 'all')\n .forEach(([k, v]) => {\n v.selectedChildren = val ? (v as IGroupNode).children.map((v1) => v1[valueKey]) : []\n })\n /** 调用所有IGroupNode和IIspNode的onCheck */\n dispatchAllNodesOnCheck()\n },\n } as IAllNode\n }\n // 运营商全选节点【布局方便,所以放进all的children中】\n if (\n !(initVal['all']?.children || []).find(\n (v) => v[TypeKey[Type.IS_ISP]] === curItem[TypeKey[Type.IS_ISP]],\n )\n ) {\n initVal['all']?.children?.push({\n label: curItem.ispName,\n [TypeKey[Type.IS_ISP]]: curItem[TypeKey[Type.IS_ISP]],\n /** 因为运营商的唯一值是asn,其余的叶子节点唯一值是regionId,所以在这里如果要把运营商模拟为叶子结点的话,需要把asn填进regionId */\n [valueKey]: curItem[TypeKey[Type.IS_ISP]], // 用唯一的asn,因为ui中将运营商节点放入leaf节点的位置,所以有了这个key\n isHalfChecked: false,\n isAllChecked: false,\n type: Type.IS_ISP,\n children: [],\n selectedChildren: [],\n onCheck: () => {\n console.log(\n `【🔧 检查】节点类型:运营商节点。动作: 检查更新【${curItem.ispName}】运营商节点的选中状态`,\n )\n ispNodeOnCheck(curItem, Type.IS_ISP)\n },\n onChange: (val: boolean) => {\n console.log(\n `【🔧 点击】节点类型:全选节点。动作: 手动切换【${curItem.ispName}】运营商节点的选中状态`,\n )\n Object.entries(locations.value)\n .filter(([k, v]) => k !== 'all')\n .forEach(([k, v]) => {\n v.selectedChildren = val\n ? (v as IGroupNode).children\n .filter((v1) => v1[TypeKey[Type.IS_ISP]] === curItem[TypeKey[Type.IS_ISP]])\n .map((v) => v[valueKey])\n : []\n })\n dispatchAllNodesOnCheck()\n },\n } as IIspNode)\n }\n return initVal\n }, {} as ILocations)\n }\n const init = () => {\n locations.value = formatLocations(props.options as ILocationItem[])\n if (isEmpty(locations.value)) {\n return\n }\n Object.entries(locations.value)\n .filter(([k]) => k !== 'all')\n .map(([_, v]) => {\n const same = v.children\n .filter((v) => props.value.includes(v[valueKey]))\n .map((v) => v[valueKey])\n if (same.length) {\n v.selectedChildren = [...v.selectedChildren, ...same]\n }\n })\n dispatchAllNodesOnCheck()\n }\n /** 配合formily的value/change模式 */\n watch(\n () => [props.options, props.value],\n (newVal, oldVal) => {\n if (!isEqual(newVal?.[0], oldVal?.[0]) || !isEqual(newVal?.[1], oldVal?.[1])) {\n init()\n }\n },\n { immediate: true },\n )\n return {\n locations,\n allLocations,\n }\n}\n"],"names":["v"],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { Type } from './constants';
|
|
2
|
+
import type { Ref, ComputedRef } from 'vue';
|
|
3
|
+
import type { ILocations, ILocationItem, ISelectedData } from './interfaces';
|
|
4
|
+
/** 获取状态检查函数 */
|
|
5
|
+
export declare const getUtils: (locations: Ref<ILocations>, allLocations: ComputedRef<ISelectedData>) => {
|
|
6
|
+
/** 运营商选中状态检查【运营商节点和all节点】 */
|
|
7
|
+
ispNodeOnCheck(curItem: ILocationItem, type: Type): void;
|
|
8
|
+
/** 组节点选中状态检查 */
|
|
9
|
+
groupNodeOnCheck(curItem: ILocationItem, type: Type): void;
|
|
10
|
+
/** 全选节点选中状态检查 */
|
|
11
|
+
allNodeOnCheck(): void;
|
|
12
|
+
/** 调用组节点/运营商节点/全选节点的onCheck */
|
|
13
|
+
dispatchAllNodesOnCheck(): void;
|
|
14
|
+
};
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { TypeKey, valueKey } from './constants.mjs';
|
|
2
|
+
|
|
3
|
+
const getUtils = (locations, allLocations) => {
|
|
4
|
+
return {
|
|
5
|
+
/** 运营商选中状态检查【运营商节点和all节点】 */
|
|
6
|
+
ispNodeOnCheck(curItem, type) {
|
|
7
|
+
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
8
|
+
const key = TypeKey[type];
|
|
9
|
+
const target = (_a = locations.value.all) == null ? void 0 : _a.children.find((v) => v[key] === curItem[key]);
|
|
10
|
+
const index = (_b = locations.value.all) == null ? void 0 : _b.selectedChildren.findIndex((v) => v === target[valueKey]);
|
|
11
|
+
const sameAsnLeafs = allLocations.value.children.filter((v) => v[key] === target[key]);
|
|
12
|
+
const selectedLeafs = sameAsnLeafs.filter((v) => allLocations.value.selectedChildren.includes(v[valueKey]));
|
|
13
|
+
if (!(selectedLeafs == null ? void 0 : selectedLeafs.length)) {
|
|
14
|
+
target.isAllChecked = false;
|
|
15
|
+
target.isHalfChecked = false;
|
|
16
|
+
if ((_c = locations.value.all) == null ? void 0 : _c.selectedChildren.includes(target[valueKey])) {
|
|
17
|
+
(_d = locations.value.all) == null ? void 0 : _d.selectedChildren.splice(index, 1);
|
|
18
|
+
}
|
|
19
|
+
} else if (selectedLeafs.length > 0 && (selectedLeafs == null ? void 0 : selectedLeafs.length) < sameAsnLeafs.length) {
|
|
20
|
+
target.isAllChecked = false;
|
|
21
|
+
target.isHalfChecked = true;
|
|
22
|
+
if ((_e = locations.value.all) == null ? void 0 : _e.selectedChildren.includes(target[valueKey])) {
|
|
23
|
+
(_f = locations.value.all) == null ? void 0 : _f.selectedChildren.splice(index, 1);
|
|
24
|
+
}
|
|
25
|
+
} else if (selectedLeafs.length === sameAsnLeafs.length) {
|
|
26
|
+
target.isAllChecked = true;
|
|
27
|
+
target.isHalfChecked = false;
|
|
28
|
+
if (!((_g = locations.value.all) == null ? void 0 : _g.selectedChildren.includes(target[valueKey]))) {
|
|
29
|
+
(_h = locations.value.all) == null ? void 0 : _h.selectedChildren.push(target[valueKey]);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
},
|
|
33
|
+
/** 组节点选中状态检查 */
|
|
34
|
+
groupNodeOnCheck(curItem, type) {
|
|
35
|
+
var _a, _b, _c, _d, _e, _f;
|
|
36
|
+
const key = TypeKey[type];
|
|
37
|
+
const target = locations.value[curItem[key]];
|
|
38
|
+
if (!((_a = target.selectedChildren) == null ? void 0 : _a.length)) {
|
|
39
|
+
target.isAllChecked = false;
|
|
40
|
+
target.isHalfChecked = false;
|
|
41
|
+
} else if (((_b = target.selectedChildren) == null ? void 0 : _b.length) > 0 && ((_c = target.selectedChildren) == null ? void 0 : _c.length) < ((_d = target.children) == null ? void 0 : _d.length)) {
|
|
42
|
+
target.isAllChecked = false;
|
|
43
|
+
target.isHalfChecked = true;
|
|
44
|
+
} else if (((_e = target.selectedChildren) == null ? void 0 : _e.length) === ((_f = target.children) == null ? void 0 : _f.length)) {
|
|
45
|
+
target.isAllChecked = true;
|
|
46
|
+
target.isHalfChecked = false;
|
|
47
|
+
}
|
|
48
|
+
},
|
|
49
|
+
/** 全选节点选中状态检查 */
|
|
50
|
+
allNodeOnCheck() {
|
|
51
|
+
var _a, _b;
|
|
52
|
+
if (!allLocations.value.selectedChildren.length) {
|
|
53
|
+
locations.value.all.isAllChecked = false;
|
|
54
|
+
locations.value.all.isHalfChecked = false;
|
|
55
|
+
} else if (allLocations.value.selectedChildren.length > 0 && allLocations.value.selectedChildren.length < ((_a = allLocations.value.children) == null ? void 0 : _a.length)) {
|
|
56
|
+
locations.value.all.isAllChecked = false;
|
|
57
|
+
locations.value.all.isHalfChecked = true;
|
|
58
|
+
} else if (allLocations.value.selectedChildren.length === ((_b = allLocations.value.children) == null ? void 0 : _b.length)) {
|
|
59
|
+
locations.value.all.isAllChecked = true;
|
|
60
|
+
locations.value.all.isHalfChecked = false;
|
|
61
|
+
}
|
|
62
|
+
},
|
|
63
|
+
/** 调用组节点/运营商节点/全选节点的onCheck */
|
|
64
|
+
dispatchAllNodesOnCheck() {
|
|
65
|
+
var _a;
|
|
66
|
+
(((_a = locations.value.all) == null ? void 0 : _a.children) || []).forEach((v) => v.onCheck());
|
|
67
|
+
Object.entries(locations.value).forEach(([k, v]) => v.onCheck());
|
|
68
|
+
}
|
|
69
|
+
};
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
export { getUtils };
|
|
73
|
+
//# sourceMappingURL=utils.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.mjs","sources":["../../../../../packages/components/commonLocations/utils.ts"],"sourcesContent":["import { Type, TypeKey, valueKey } from './constants'\n\nimport type { Ref, ComputedRef } from 'vue'\nimport type { \n ILocations,\n ILocationItem, \n ISelectedData,\n} from './interfaces'\n\n/** 获取状态检查函数 */\nexport const getUtils = (locations: Ref<ILocations>, allLocations: ComputedRef<ISelectedData>) => {\n return {\n /** 运营商选中状态检查【运营商节点和all节点】 */\n ispNodeOnCheck(curItem: ILocationItem, type: Type) {\n /** 因为运营商的唯一值是asn,其余的叶子节点唯一值是regionId,所以在这里如果要把运营商模拟为叶子结点的话,需要把asn填进regionId */\n const key = TypeKey[type]\n const target = locations.value.all?.children.find(v => v[key] === curItem[key]) // 当前节点\n const index = locations.value.all?.selectedChildren.findIndex(v => v === target[valueKey]) // 当前节点在selectedChildren中的下标\n const sameAsnLeafs = allLocations.value.children.filter(v => v[key] === target[key]) // 所有本运营商的leaf节点\n const selectedLeafs = sameAsnLeafs.filter(v => allLocations.value.selectedChildren.includes(v[valueKey])) // 本运营商中被选中的leaf节点\n if (!selectedLeafs?.length) {\n target.isAllChecked = false\n target.isHalfChecked = false\n if (locations.value.all?.selectedChildren.includes(target[valueKey])) {\n locations.value.all?.selectedChildren.splice(index, 1)\n }\n } else if (selectedLeafs.length > 0 && selectedLeafs?.length < sameAsnLeafs.length) {\n target.isAllChecked = false\n target.isHalfChecked = true\n if (locations.value.all?.selectedChildren.includes(target[valueKey])) {\n locations.value.all?.selectedChildren.splice(index, 1)\n }\n } else if (selectedLeafs.length === sameAsnLeafs.length) {\n target.isAllChecked = true\n target.isHalfChecked = false\n if (!locations.value.all?.selectedChildren.includes(target[valueKey])) {\n locations.value.all?.selectedChildren.push(target[valueKey])\n }\n }\n },\n /** 组节点选中状态检查 */\n groupNodeOnCheck (curItem: ILocationItem, type: Type) {\n const key = TypeKey[type]\n const target = locations.value[curItem[key]]\n if (!target.selectedChildren?.length) {\n target.isAllChecked = false\n target.isHalfChecked = false\n } else if (target.selectedChildren?.length > 0 && target.selectedChildren?.length < target.children?.length) {\n target.isAllChecked = false\n target.isHalfChecked = true\n } else if (target.selectedChildren?.length === target.children?.length) {\n target.isAllChecked = true\n target.isHalfChecked = false\n }\n },\n /** 全选节点选中状态检查 */\n allNodeOnCheck () {\n if (!allLocations.value.selectedChildren.length) {\n locations.value.all.isAllChecked = false\n locations.value.all.isHalfChecked = false\n } else if (allLocations.value.selectedChildren.length > 0 && allLocations.value.selectedChildren.length < allLocations.value.children?.length) {\n locations.value.all.isAllChecked = false\n locations.value.all.isHalfChecked = true\n } else if (allLocations.value.selectedChildren.length === allLocations.value.children?.length) {\n locations.value.all.isAllChecked = true\n locations.value.all.isHalfChecked = false\n }\n },\n /** 调用组节点/运营商节点/全选节点的onCheck */\n dispatchAllNodesOnCheck () {\n ;(locations.value.all?.children || []).forEach(v => v.onCheck())\n Object.entries(locations.value).forEach(([k, v]) => v.onCheck())\n }\n }\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import type { PropType } from 'vue';
|
|
2
|
+
export interface IFormTab {
|
|
3
|
+
activeKey: string;
|
|
4
|
+
setActiveKey(key: string): void;
|
|
5
|
+
}
|
|
6
|
+
export interface IFormTabProps {
|
|
7
|
+
formTab?: IFormTab;
|
|
8
|
+
}
|
|
9
|
+
export interface IFormTabPaneProps {
|
|
10
|
+
key: string | number;
|
|
11
|
+
}
|
|
12
|
+
export declare const composeFormTab: {
|
|
13
|
+
new (...args: any[]): import("vue").CreateComponentPublicInstanceWithMixins<Readonly<import("vue").ExtractPropTypes<{
|
|
14
|
+
formTab: {
|
|
15
|
+
type: PropType<IFormTab>;
|
|
16
|
+
};
|
|
17
|
+
value: {
|
|
18
|
+
type: StringConstructor;
|
|
19
|
+
};
|
|
20
|
+
customValue: {
|
|
21
|
+
type: StringConstructor;
|
|
22
|
+
};
|
|
23
|
+
disabled: {
|
|
24
|
+
type: BooleanConstructor;
|
|
25
|
+
};
|
|
26
|
+
}>> & Readonly<{
|
|
27
|
+
onInput?: (...args: any[]) => any;
|
|
28
|
+
}>, () => any, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, "input"[], import("vue").PublicProps, {
|
|
29
|
+
disabled: boolean;
|
|
30
|
+
}, true, {}, {}, import("vue").GlobalComponents, import("vue").GlobalDirectives, string, {}, any, import("vue").ComponentProvideOptions, {
|
|
31
|
+
P: {};
|
|
32
|
+
B: {};
|
|
33
|
+
D: {};
|
|
34
|
+
C: {};
|
|
35
|
+
M: {};
|
|
36
|
+
Defaults: {};
|
|
37
|
+
}, Readonly<import("vue").ExtractPropTypes<{
|
|
38
|
+
formTab: {
|
|
39
|
+
type: PropType<IFormTab>;
|
|
40
|
+
};
|
|
41
|
+
value: {
|
|
42
|
+
type: StringConstructor;
|
|
43
|
+
};
|
|
44
|
+
customValue: {
|
|
45
|
+
type: StringConstructor;
|
|
46
|
+
};
|
|
47
|
+
disabled: {
|
|
48
|
+
type: BooleanConstructor;
|
|
49
|
+
};
|
|
50
|
+
}>> & Readonly<{
|
|
51
|
+
onInput?: (...args: any[]) => any;
|
|
52
|
+
}>, () => any, {}, {}, {}, {
|
|
53
|
+
disabled: boolean;
|
|
54
|
+
}>;
|
|
55
|
+
__isFragment?: never;
|
|
56
|
+
__isTeleport?: never;
|
|
57
|
+
__isSuspense?: never;
|
|
58
|
+
} & import("vue").ComponentOptionsBase<Readonly<import("vue").ExtractPropTypes<{
|
|
59
|
+
formTab: {
|
|
60
|
+
type: PropType<IFormTab>;
|
|
61
|
+
};
|
|
62
|
+
value: {
|
|
63
|
+
type: StringConstructor;
|
|
64
|
+
};
|
|
65
|
+
customValue: {
|
|
66
|
+
type: StringConstructor;
|
|
67
|
+
};
|
|
68
|
+
disabled: {
|
|
69
|
+
type: BooleanConstructor;
|
|
70
|
+
};
|
|
71
|
+
}>> & Readonly<{
|
|
72
|
+
onInput?: (...args: any[]) => any;
|
|
73
|
+
}>, () => any, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, "input"[], "input", {
|
|
74
|
+
disabled: boolean;
|
|
75
|
+
}, {}, string, {}, import("vue").GlobalComponents, import("vue").GlobalDirectives, string, import("vue").ComponentProvideOptions> & import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps & {
|
|
76
|
+
TabPane: import("vue").DefineComponent<IFormTabPaneProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<IFormTabPaneProps> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
77
|
+
createFormTab: (defaultActiveKey?: string) => {
|
|
78
|
+
activeKey: string;
|
|
79
|
+
setActiveKey(key: string): void;
|
|
80
|
+
};
|
|
81
|
+
};
|
|
82
|
+
export { composeFormTab as FormTab };
|
|
83
|
+
export default composeFormTab;
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
import { defineComponent, computed, reactive } from 'vue';
|
|
2
|
+
import { observer } from '@formily/reactive-vue';
|
|
3
|
+
import { model } from '@formily/reactive';
|
|
4
|
+
import { useField, h, RecursionField, Fragment, useFieldSchema } from '@formily/vue';
|
|
5
|
+
import { ElTabs, ElTabPane, ElBadge } from 'element-plus';
|
|
6
|
+
|
|
7
|
+
const stylePrefix = "formily-element-plus";
|
|
8
|
+
function composeExport(s0, s1) {
|
|
9
|
+
return Object.assign(s0, s1);
|
|
10
|
+
}
|
|
11
|
+
const useTabs = () => {
|
|
12
|
+
const tabsField = useField();
|
|
13
|
+
const schema = useFieldSchema();
|
|
14
|
+
const tabs = reactive([]);
|
|
15
|
+
schema.value.mapProperties((schema2, name) => {
|
|
16
|
+
var _a, _b;
|
|
17
|
+
const field = tabsField.value.query(tabsField.value.address.concat(name)).take();
|
|
18
|
+
if ((field == null ? void 0 : field.display) === "none" || (field == null ? void 0 : field.display) === "hidden") return;
|
|
19
|
+
if (((_a = schema2["x-component"]) == null ? void 0 : _a.indexOf("TabPane")) > -1) {
|
|
20
|
+
tabs.push({
|
|
21
|
+
name,
|
|
22
|
+
props: {
|
|
23
|
+
name: ((_b = schema2 == null ? void 0 : schema2["x-component-props"]) == null ? void 0 : _b.name) || name,
|
|
24
|
+
...schema2 == null ? void 0 : schema2["x-component-props"]
|
|
25
|
+
},
|
|
26
|
+
schema: schema2
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
});
|
|
30
|
+
return tabs;
|
|
31
|
+
};
|
|
32
|
+
const createFormTab = (defaultActiveKey) => {
|
|
33
|
+
const formTab = model({
|
|
34
|
+
activeKey: defaultActiveKey,
|
|
35
|
+
setActiveKey(key) {
|
|
36
|
+
formTab.activeKey = key;
|
|
37
|
+
}
|
|
38
|
+
});
|
|
39
|
+
return formTab;
|
|
40
|
+
};
|
|
41
|
+
const FormTab = observer(
|
|
42
|
+
defineComponent({
|
|
43
|
+
inheritAttrs: false,
|
|
44
|
+
props: {
|
|
45
|
+
formTab: { type: Object },
|
|
46
|
+
value: {
|
|
47
|
+
type: String
|
|
48
|
+
},
|
|
49
|
+
customValue: {
|
|
50
|
+
type: String
|
|
51
|
+
},
|
|
52
|
+
disabled: {
|
|
53
|
+
type: Boolean
|
|
54
|
+
}
|
|
55
|
+
},
|
|
56
|
+
emits: ["input"],
|
|
57
|
+
setup(props, { attrs, emit }) {
|
|
58
|
+
const field = useField();
|
|
59
|
+
const prefixCls = `${stylePrefix}-form-tab`;
|
|
60
|
+
const formTabRef = computed(() => {
|
|
61
|
+
var _a;
|
|
62
|
+
return (_a = props.formTab) != null ? _a : createFormTab();
|
|
63
|
+
});
|
|
64
|
+
const takeActiveKey = (tabs) => {
|
|
65
|
+
var _a, _b;
|
|
66
|
+
return (props == null ? void 0 : props.value) || (props == null ? void 0 : props.customValue) || ((_a = formTabRef.value) == null ? void 0 : _a.activeKey) || ((_b = tabs == null ? void 0 : tabs[0]) == null ? void 0 : _b.name);
|
|
67
|
+
};
|
|
68
|
+
const badgedHeader = (key, props2) => {
|
|
69
|
+
const errors = field.value.form.queryFeedbacks({
|
|
70
|
+
type: "error",
|
|
71
|
+
address: `${field.value.address.concat(key)}.*`
|
|
72
|
+
});
|
|
73
|
+
if (errors == null ? void 0 : errors.length) {
|
|
74
|
+
return h(
|
|
75
|
+
ElBadge,
|
|
76
|
+
{
|
|
77
|
+
class: [`${prefixCls}-errors-badge`],
|
|
78
|
+
value: errors == null ? void 0 : errors.length
|
|
79
|
+
},
|
|
80
|
+
{ default: () => props2.label }
|
|
81
|
+
);
|
|
82
|
+
}
|
|
83
|
+
return props2.label;
|
|
84
|
+
};
|
|
85
|
+
const innerDisabled = props.disabled;
|
|
86
|
+
return () => {
|
|
87
|
+
const tabs = useTabs();
|
|
88
|
+
const activeKey = takeActiveKey(tabs);
|
|
89
|
+
field.value.setData({
|
|
90
|
+
setActiveKey: (activeKey2) => {
|
|
91
|
+
var _a, _b;
|
|
92
|
+
(_b = (_a = formTabRef.value).setActiveKey) == null ? void 0 : _b.call(_a, activeKey2);
|
|
93
|
+
}
|
|
94
|
+
});
|
|
95
|
+
return h(
|
|
96
|
+
ElTabs,
|
|
97
|
+
{
|
|
98
|
+
...attrs,
|
|
99
|
+
class: [prefixCls],
|
|
100
|
+
modelValue: activeKey,
|
|
101
|
+
onTabChange: (key) => {
|
|
102
|
+
var _a, _b;
|
|
103
|
+
if (typeof key !== "string") return;
|
|
104
|
+
emit("input", key);
|
|
105
|
+
(_b = (_a = formTabRef.value).setActiveKey) == null ? void 0 : _b.call(_a, key);
|
|
106
|
+
}
|
|
107
|
+
},
|
|
108
|
+
{
|
|
109
|
+
default: () => tabs.map(({ props: props2, schema, name }, key) => {
|
|
110
|
+
return h(
|
|
111
|
+
ElTabPane,
|
|
112
|
+
{
|
|
113
|
+
key,
|
|
114
|
+
...props2,
|
|
115
|
+
disabled: innerDisabled
|
|
116
|
+
},
|
|
117
|
+
{
|
|
118
|
+
default: () => h(RecursionField, { schema, name }, {}),
|
|
119
|
+
label: () => h(
|
|
120
|
+
"div",
|
|
121
|
+
{},
|
|
122
|
+
{ default: () => [badgedHeader(name, props2)] }
|
|
123
|
+
)
|
|
124
|
+
}
|
|
125
|
+
);
|
|
126
|
+
})
|
|
127
|
+
}
|
|
128
|
+
);
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
})
|
|
132
|
+
);
|
|
133
|
+
const FormTabPane = defineComponent({
|
|
134
|
+
name: "FFormTabPane",
|
|
135
|
+
inheritAttrs: false,
|
|
136
|
+
setup(_props, { slots }) {
|
|
137
|
+
return () => h(Fragment, {}, slots);
|
|
138
|
+
}
|
|
139
|
+
});
|
|
140
|
+
const composeFormTab = composeExport(FormTab, {
|
|
141
|
+
TabPane: FormTabPane,
|
|
142
|
+
createFormTab
|
|
143
|
+
});
|
|
144
|
+
|
|
145
|
+
export { composeFormTab as FormTab, composeFormTab, composeFormTab as default };
|
|
146
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../../../../../../packages/components/formilyCmps/formTab/index.ts"],"sourcesContent":["import { defineComponent, reactive, computed } from 'vue'\nimport { observer } from '@formily/reactive-vue'\nimport { model } from '@formily/reactive'\nimport {\n h,\n useField,\n useFieldSchema,\n RecursionField,\n Fragment,\n} from '@formily/vue'\nimport { Schema } from '@formily/json-schema'\nimport { ElTabs, ElTabPane, ElBadge } from 'element-plus'\n\nimport type { PropType } from 'vue'\nimport type { SchemaKey } from '@formily/json-schema'\n\nconst stylePrefix = 'formily-element-plus'\nfunction composeExport<T0 extends {}, T1 extends {}>(\n s0: T0,\n s1: T1\n): T0 & T1 {\n return Object.assign(s0, s1)\n}\n\nexport interface IFormTab {\n activeKey: string\n setActiveKey(key: string): void\n}\n\nexport interface IFormTabProps {\n formTab?: IFormTab\n}\n\nexport interface IFormTabPaneProps {\n key: string | number\n}\n\ntype Tabs = { name: SchemaKey; props: any; schema: Schema }[]\n\nconst useTabs = () => {\n const tabsField = useField()\n const schema = useFieldSchema()\n const tabs: Tabs = reactive([])\n schema.value.mapProperties((schema, name) => {\n const field = tabsField.value\n .query(tabsField.value.address.concat(name))\n .take()\n if (field?.display === 'none' || field?.display === 'hidden') return\n\n if (schema['x-component']?.indexOf('TabPane') > -1) {\n tabs.push({\n name,\n props: {\n name: schema?.['x-component-props']?.name || name,\n ...schema?.['x-component-props'],\n },\n schema,\n })\n }\n })\n return tabs\n}\n\nconst createFormTab = (defaultActiveKey?: string) => {\n const formTab = model({\n activeKey: defaultActiveKey,\n setActiveKey(key: string) {\n formTab.activeKey = key\n },\n })\n return formTab\n}\n\nconst FormTab = observer(\n defineComponent({\n inheritAttrs: false,\n props: {\n formTab: { type: Object as PropType<IFormTab> },\n value: {\n type: String,\n },\n customValue: {\n type: String,\n },\n disabled: {\n type: Boolean,\n },\n },\n emits: ['input'],\n setup(props, { attrs, emit }: any) {\n const field = useField()\n const prefixCls = `${stylePrefix}-form-tab`\n const formTabRef = computed(() => props.formTab ?? createFormTab())\n const takeActiveKey = (tabs: Tabs) => {\n return props?.value || props?.customValue || formTabRef.value?.activeKey || tabs?.[0]?.name\n }\n const badgedHeader = (key: SchemaKey, props: any) => {\n const errors = field.value.form.queryFeedbacks({\n type: 'error',\n address: `${field.value.address.concat(key)}.*`,\n })\n if (errors?.length) {\n return h(\n ElBadge,\n {\n class: [`${prefixCls}-errors-badge`],\n value: errors?.length,\n },\n { default: () => props.label }\n )\n }\n return props.label\n }\n const innerDisabled = props.disabled\n return () => {\n const tabs = useTabs()\n const activeKey = takeActiveKey(tabs)\n field.value.setData({\n setActiveKey: (activeKey: string) => {\n formTabRef.value.setActiveKey?.(activeKey)\n },\n })\n return h(\n ElTabs,\n {\n ...attrs,\n class: [prefixCls],\n modelValue: activeKey,\n onTabChange: (key: string) => {\n if (typeof key !== 'string') return\n\n emit('input', key)\n formTabRef.value.setActiveKey?.(key)\n },\n },\n {\n default: () =>\n tabs.map(({ props, schema, name }, key) => {\n return h(\n ElTabPane,\n {\n key,\n ...props,\n disabled: innerDisabled,\n },\n {\n default: () => h(RecursionField, { schema, name }, {}),\n label: () =>\n h(\n 'div',\n {},\n { default: () => [badgedHeader(name, props)] }\n ),\n }\n )\n }),\n }\n )\n }\n },\n })\n)\n\nconst FormTabPane = defineComponent<IFormTabPaneProps>({\n name: 'FFormTabPane',\n inheritAttrs: false,\n setup(_props, { slots }) {\n return () => h(Fragment, {}, slots)\n },\n})\n\nexport const composeFormTab = composeExport(FormTab, {\n TabPane: FormTabPane,\n createFormTab,\n})\n\nexport { composeFormTab as FormTab }\nexport default composeFormTab"],"names":["schema","props","activeKey"],"mappings":"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"}
|