@agile-team/wl-skills-kit 2.3.4 → 2.3.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (96) hide show
  1. package/CHANGELOG.md +44 -0
  2. package/README.md +16 -10
  3. package/files/.cursor/mcp.json +8 -8
  4. package/files/.github/guides/README.md +13 -13
  5. package/files/.github/guides/architecture.md +555 -555
  6. package/files/.github/guides/mcp-setup.md +109 -109
  7. package/files/.github/guides/usage.md +184 -184
  8. package/files/.github/reports/README.md +65 -65
  9. package/files/.github/reports/SYS_DICT_INFO.md +50 -50
  10. package/files/.github/reports/SYS_MENU_INFO.md +247 -247
  11. package/files/.github/reports/SYS_PERMISSION_INFO.md +20 -20
  12. package/files/.github/reports//347/273/204/344/273/266/346/217/220/345/217/226/345/273/272/350/256/256.md +33 -33
  13. package/files/.github/reports//350/247/204/350/214/203/345/256/241/346/237/245/346/212/245/345/221/212.md +44 -44
  14. package/files/.github/skills/_compat/README.md +108 -108
  15. package/files/.github/skills/_compat/headers/agents.txt +8 -8
  16. package/files/.github/skills/_compat/headers/claude-code.txt +7 -7
  17. package/files/.github/skills/_compat/headers/cline.txt +7 -7
  18. package/files/.github/skills/_compat/headers/cursor-mdc.txt +16 -16
  19. package/files/.github/skills/_compat/headers/cursor-rules.txt +7 -7
  20. package/files/.github/skills/_compat/headers/github-copilot.txt +1 -1
  21. package/files/.github/skills/_compat/headers/kiro.txt +10 -10
  22. package/files/.github/skills/_compat/headers/qoder.txt +8 -8
  23. package/files/.github/skills/_compat/headers/trae.txt +11 -11
  24. package/files/.github/skills/_compat/headers/windsurf.txt +7 -7
  25. package/files/.github/skills/_registry.md +81 -81
  26. package/files/.github/skills/core/api-contract/SKILL.md +344 -344
  27. package/files/.github/skills/core/api-contract/USAGE.md +110 -110
  28. package/files/.github/skills/core/convention-audit/SKILL.md +189 -189
  29. package/files/.github/skills/core/convention-audit/USAGE.md +99 -99
  30. package/files/.github/skills/core/page-codegen/SKILL.md +973 -973
  31. package/files/.github/skills/core/page-codegen/USAGE.md +102 -102
  32. package/files/.github/skills/core/page-codegen/templates/_index.md +46 -46
  33. package/files/.github/skills/core/page-codegen/templates/domains/_CONTRIBUTING.md +107 -107
  34. package/files/.github/skills/core/page-codegen/templates/domains/produce/TPL-OPERATION-STATION.md +442 -442
  35. package/files/.github/skills/core/page-codegen/templates/domains/sale/README.md +26 -26
  36. package/files/.github/skills/core/page-codegen/templates/universal/TPL-CHANGE-HISTORY.md +276 -276
  37. package/files/.github/skills/core/page-codegen/templates/universal/TPL-DETAIL-TABS.md +1145 -1145
  38. package/files/.github/skills/core/page-codegen/templates/universal/TPL-DRIVEN.md +309 -309
  39. package/files/.github/skills/core/page-codegen/templates/universal/TPL-FORM-ROUTE.md +436 -436
  40. package/files/.github/skills/core/page-codegen/templates/universal/TPL-LIST.md +191 -191
  41. package/files/.github/skills/core/page-codegen/templates/universal/TPL-MASTER-DETAIL.md +148 -148
  42. package/files/.github/skills/core/page-codegen/templates/universal/TPL-RECORD-FORM.md +376 -376
  43. package/files/.github/skills/core/page-codegen/templates/universal/TPL-TREE-LIST.md +186 -186
  44. package/files/.github/skills/core/prototype-scan/SKILL.md +498 -498
  45. package/files/.github/skills/core/prototype-scan/USAGE.md +95 -95
  46. package/files/.github/skills/core/template-extract/SKILL.md +139 -139
  47. package/files/.github/skills/core/template-extract/USAGE.md +93 -93
  48. package/files/.github/skills/domain/README.md +51 -51
  49. package/files/.github/skills/sync/env.local.json +0 -5
  50. package/files/.github/skills/sync/menu-sync/SKILL.md +263 -263
  51. package/files/.github/skills/sync/menu-sync/USAGE.md +104 -104
  52. package/files/.github/skills/sync/menu-sync/env/env.local.json +7 -7
  53. package/files/.github/skills/sync/menu-sync/env/guide.md +99 -99
  54. package/files/.github/skills/sync/permission-sync/SKILL.md +239 -0
  55. package/files/.github/skills/sync/permission-sync/USAGE.md +93 -0
  56. package/files/.github/standards/01-toolchain.md +57 -57
  57. package/files/.github/standards/02-code-structure.md +111 -111
  58. package/files/.github/standards/03-comments.md +53 -53
  59. package/files/.github/standards/04-coding-basics.md +33 -33
  60. package/files/.github/standards/05-logging.md +38 -38
  61. package/files/.github/standards/06-security.md +44 -44
  62. package/files/.github/standards/07-config.md +52 -52
  63. package/files/.github/standards/08-git.md +60 -60
  64. package/files/.github/standards/09-typescript.md +71 -71
  65. package/files/.github/standards/10-pinia.md +57 -57
  66. package/files/.github/standards/11-form-validation.md +81 -81
  67. package/files/.github/standards/12-base-table.md +153 -153
  68. package/files/.github/standards/13-platform-components.md +123 -123
  69. package/files/.github/standards/index.md +89 -89
  70. package/files/.kiro/settings/mcp.json +8 -8
  71. package/files/.mcp.json +8 -8
  72. package/files/.vscode/mcp.json +9 -9
  73. package/files/demo/produce/aiflow/mmwr-customer-apply-change-history/data.ts +196 -196
  74. package/files/demo/produce/aiflow/mmwr-customer-apply-change-history/index.scss +150 -150
  75. package/files/demo/produce/aiflow/mmwr-customer-apply-change-history/index.vue +79 -79
  76. package/files/docs/jh-date-range.md +257 -257
  77. package/files/docs/jh-date.md +222 -222
  78. package/files/docs/jh-dept-picker.md +190 -190
  79. package/files/docs/jh-drag-row.md +590 -590
  80. package/files/docs/jh-file-upload.md +216 -216
  81. package/files/docs/jh-picker.md +218 -218
  82. package/files/docs/jh-select.md +148 -148
  83. package/files/docs/jh-text.md +248 -248
  84. package/files/docs/jh-user-picker.md +197 -197
  85. package/files/src/components/global/C_RightToolbar/data.ts +228 -228
  86. package/files/src/components/global/C_RightToolbar/index.scss +44 -44
  87. package/files/src/components/global/C_Splitter/index.scss +61 -61
  88. package/files/src/components/global/C_SvgIcon/index.scss +15 -15
  89. package/files/src/components/global/C_TagStatus/index.scss +20 -20
  90. package/files/src/components/global/C_Tree/data.ts +61 -61
  91. package/files/src/components/local/c_listModal/index.scss +4 -4
  92. package/mcp/api/roleApi.js +60 -0
  93. package/mcp/server.js +125 -5
  94. package/mcp/tools/permissionSync.js +321 -0
  95. package/package.json +1 -1
  96. package/files/.github/skills/sync/permission-sync/SKILL.draft.md +0 -91
@@ -1,228 +1,228 @@
1
- import { ref, computed, watch, nextTick } from "vue";
2
- import { postAction, getAction } from "@jhlc/common-core/src/api/action";
3
- import Sortable from "sortablejs";
4
- import { deepClone } from "@/util";
5
- import { useI18n } from "vue-i18n";
6
-
7
- // ===== 类型定义 =====
8
- export interface RightToolbarProps {
9
- proVisible?: boolean;
10
- showSearch?: boolean;
11
- columns?: any[];
12
- tableId?: string;
13
- initialColumns?: any[];
14
- id?: string;
15
- propsValue?: any[];
16
- disabled?: boolean;
17
- showRefreshTool?: boolean;
18
- showSearchTool?: boolean;
19
- showColumnTool?: boolean;
20
- }
21
-
22
- // ===== 组件逻辑 =====
23
- export function createRightToolbar(
24
- props: RightToolbarProps,
25
- emits: (event: string, ...args: any[]) => void,
26
- ) {
27
- const { t } = useI18n();
28
-
29
- const transferRef = ref<any>(null);
30
- const data = ref<any[]>([]);
31
- const title = ref(t("设置显示字段"));
32
- const open = ref(false);
33
- const showFields = ref("");
34
- const hideFields = ref("");
35
- const defaultColumns = ref<any[]>([]);
36
- const columnId = ref("");
37
- const emitTemp = ref<any[]>([]);
38
- const submitLoading = ref(false);
39
-
40
- const modelValue = ref<any[]>([]);
41
- watch(
42
- () => props.propsValue,
43
- (newVal) => {
44
- modelValue.value = newVal ?? [];
45
- },
46
- { immediate: true },
47
- );
48
-
49
- const columnsProp = computed(() => props.columns);
50
- const showSearchProp = computed(() => props.showSearch);
51
-
52
- const temp = computed(() => data.value.filter((item) => item.visible));
53
-
54
- // 搜索
55
- function toggleSearch() {
56
- emits("update:showSearch", !props.showSearch);
57
- }
58
-
59
- // 刷新
60
- function refresh() {
61
- emits("queryTable");
62
- }
63
-
64
- // 关闭弹窗
65
- const closeDialog = () => {
66
- initColumns();
67
- };
68
-
69
- // 穿梭变化
70
- function dataChange(val: any[]) {
71
- if (val) {
72
- data.value.forEach((item) => {
73
- const index = val.findIndex((ele) => ele === item.key);
74
- item.visible = index === -1;
75
- });
76
- }
77
- }
78
-
79
- // 打开显隐列dialog
80
- function showColumn() {
81
- open.value = true;
82
- data.value = [];
83
- defaultColumns.value = [];
84
- props.columns?.forEach((item) => {
85
- defaultColumns.value.push(deepClone(item));
86
- data.value.push(deepClone(item));
87
- });
88
- nextTick(() => {
89
- const transfer = transferRef.value.$el;
90
- const leftPanel = transfer
91
- .getElementsByClassName("el-transfer-panel")[0]
92
- .getElementsByClassName("el-transfer-panel__body")[0];
93
- const leftEl = leftPanel.getElementsByClassName(
94
- "el-transfer-panel__list",
95
- )[0];
96
- Sortable.create(leftEl, {
97
- onEnd: (evt: any) => {
98
- const { oldIndex, newIndex } = evt;
99
- const visible = data.value.filter((item) => item.visible);
100
- const [moved] = visible.splice(oldIndex, 1);
101
- visible.splice(newIndex, 0, moved);
102
- const hidden = data.value.filter((item) => !item.visible);
103
- data.value = [...visible, ...hidden];
104
- },
105
- });
106
- });
107
- }
108
-
109
- // 恢复工具
110
- function recoverTool(recoverData: any[]) {
111
- const dataTemp: any[] = [];
112
- const modelValueTemp: any[] = [];
113
- recoverData.forEach((item) => {
114
- dataTemp.push(deepClone(item));
115
- if (!item.visible) modelValueTemp.push(item.key);
116
- });
117
- data.value = dataTemp;
118
- modelValue.value = modelValueTemp;
119
- }
120
-
121
- function initColumns() {
122
- recoverTool(defaultColumns.value);
123
- }
124
-
125
- function clearValue() {
126
- recoverTool(props.initialColumns ?? []);
127
- }
128
-
129
- function cancelBtn() {
130
- initColumns();
131
- open.value = false;
132
- }
133
-
134
- function submitBtn() {
135
- showFields.value = "";
136
- hideFields.value = "";
137
- temp.value.forEach((item) => {
138
- showFields.value += `${item.key},`;
139
- });
140
- hideFields.value = modelValue.value.join();
141
- const paramsList = {
142
- id: columnId.value || props.id,
143
- tableId: props.tableId,
144
- showFields: showFields.value,
145
- hideFields: hideFields.value,
146
- };
147
- submitLoading.value = true;
148
- postAction("system/pageShowFields/saveOrUpdate", paramsList)
149
- .then((res: any) => {
150
- temp.value.forEach((item) => emitTemp.value.push(item));
151
- data.value.forEach((item) => {
152
- if (!item.visible) emitTemp.value.push(item);
153
- });
154
- columnId.value = res.data.id;
155
- emits("update:columns", emitTemp.value);
156
- emits("update:propsValue", modelValue.value);
157
- emitTemp.value = [];
158
- })
159
- .catch(() => initColumns())
160
- .finally(() => {
161
- submitLoading.value = false;
162
- open.value = false;
163
- });
164
- }
165
-
166
- function getColumns(columnsInfo: any) {
167
- const _columnsInfo = deepClone(columnsInfo);
168
- _columnsInfo.propsValue = [];
169
- return getAction(
170
- `/system/pageShowFields/getByTableIdAndUserNo?tableId=${_columnsInfo.tableId}`,
171
- ).then((res: any) => {
172
- if (res.data) {
173
- _columnsInfo.id = res.data.id;
174
- let showArr: string[] | undefined;
175
- if (res.data.showFields) showArr = res.data.showFields.split(",");
176
- let hideArr: string[] | undefined;
177
- if (res.data.hideFields) hideArr = res.data.hideFields.split(",");
178
-
179
- let flag: any[] = [];
180
- if (showArr) {
181
- flag = showArr.reduce((acc: any[], key: string) => {
182
- const value = _columnsInfo.columns.find((v: any) => v.key === key);
183
- if (value) acc.push(value);
184
- return acc;
185
- }, []);
186
- }
187
- const result: any[] = [...new Set(flag.concat(_columnsInfo.columns))];
188
- _columnsInfo.columns = result;
189
-
190
- _columnsInfo.columns.forEach((item: any) => {
191
- if (showArr) {
192
- item.visible = showArr.includes(item.key) ? true : item.visible;
193
- }
194
- if (hideArr) {
195
- item.visible = hideArr.includes(item.key) ? false : item.visible;
196
- }
197
- });
198
-
199
- if (hideArr) {
200
- hideArr.forEach((item: string) => _columnsInfo.propsValue.push(item));
201
- }
202
- return _columnsInfo;
203
- }
204
- });
205
- }
206
-
207
- return {
208
- transferRef,
209
- data,
210
- title,
211
- open,
212
- modelValue,
213
- columnsProp,
214
- showSearchProp,
215
- temp,
216
- submitLoading,
217
- toggleSearch,
218
- refresh,
219
- closeDialog,
220
- dataChange,
221
- showColumn,
222
- initColumns,
223
- clearValue,
224
- cancelBtn,
225
- submitBtn,
226
- getColumns,
227
- };
228
- }
1
+ import { ref, computed, watch, nextTick } from "vue";
2
+ import { postAction, getAction } from "@jhlc/common-core/src/api/action";
3
+ import Sortable from "sortablejs";
4
+ import { deepClone } from "@/util";
5
+ import { useI18n } from "vue-i18n";
6
+
7
+ // ===== 类型定义 =====
8
+ export interface RightToolbarProps {
9
+ proVisible?: boolean;
10
+ showSearch?: boolean;
11
+ columns?: any[];
12
+ tableId?: string;
13
+ initialColumns?: any[];
14
+ id?: string;
15
+ propsValue?: any[];
16
+ disabled?: boolean;
17
+ showRefreshTool?: boolean;
18
+ showSearchTool?: boolean;
19
+ showColumnTool?: boolean;
20
+ }
21
+
22
+ // ===== 组件逻辑 =====
23
+ export function createRightToolbar(
24
+ props: RightToolbarProps,
25
+ emits: (event: string, ...args: any[]) => void,
26
+ ) {
27
+ const { t } = useI18n();
28
+
29
+ const transferRef = ref<any>(null);
30
+ const data = ref<any[]>([]);
31
+ const title = ref(t("设置显示字段"));
32
+ const open = ref(false);
33
+ const showFields = ref("");
34
+ const hideFields = ref("");
35
+ const defaultColumns = ref<any[]>([]);
36
+ const columnId = ref("");
37
+ const emitTemp = ref<any[]>([]);
38
+ const submitLoading = ref(false);
39
+
40
+ const modelValue = ref<any[]>([]);
41
+ watch(
42
+ () => props.propsValue,
43
+ (newVal) => {
44
+ modelValue.value = newVal ?? [];
45
+ },
46
+ { immediate: true },
47
+ );
48
+
49
+ const columnsProp = computed(() => props.columns);
50
+ const showSearchProp = computed(() => props.showSearch);
51
+
52
+ const temp = computed(() => data.value.filter((item) => item.visible));
53
+
54
+ // 搜索
55
+ function toggleSearch() {
56
+ emits("update:showSearch", !props.showSearch);
57
+ }
58
+
59
+ // 刷新
60
+ function refresh() {
61
+ emits("queryTable");
62
+ }
63
+
64
+ // 关闭弹窗
65
+ const closeDialog = () => {
66
+ initColumns();
67
+ };
68
+
69
+ // 穿梭变化
70
+ function dataChange(val: any[]) {
71
+ if (val) {
72
+ data.value.forEach((item) => {
73
+ const index = val.findIndex((ele) => ele === item.key);
74
+ item.visible = index === -1;
75
+ });
76
+ }
77
+ }
78
+
79
+ // 打开显隐列dialog
80
+ function showColumn() {
81
+ open.value = true;
82
+ data.value = [];
83
+ defaultColumns.value = [];
84
+ props.columns?.forEach((item) => {
85
+ defaultColumns.value.push(deepClone(item));
86
+ data.value.push(deepClone(item));
87
+ });
88
+ nextTick(() => {
89
+ const transfer = transferRef.value.$el;
90
+ const leftPanel = transfer
91
+ .getElementsByClassName("el-transfer-panel")[0]
92
+ .getElementsByClassName("el-transfer-panel__body")[0];
93
+ const leftEl = leftPanel.getElementsByClassName(
94
+ "el-transfer-panel__list",
95
+ )[0];
96
+ Sortable.create(leftEl, {
97
+ onEnd: (evt: any) => {
98
+ const { oldIndex, newIndex } = evt;
99
+ const visible = data.value.filter((item) => item.visible);
100
+ const [moved] = visible.splice(oldIndex, 1);
101
+ visible.splice(newIndex, 0, moved);
102
+ const hidden = data.value.filter((item) => !item.visible);
103
+ data.value = [...visible, ...hidden];
104
+ },
105
+ });
106
+ });
107
+ }
108
+
109
+ // 恢复工具
110
+ function recoverTool(recoverData: any[]) {
111
+ const dataTemp: any[] = [];
112
+ const modelValueTemp: any[] = [];
113
+ recoverData.forEach((item) => {
114
+ dataTemp.push(deepClone(item));
115
+ if (!item.visible) modelValueTemp.push(item.key);
116
+ });
117
+ data.value = dataTemp;
118
+ modelValue.value = modelValueTemp;
119
+ }
120
+
121
+ function initColumns() {
122
+ recoverTool(defaultColumns.value);
123
+ }
124
+
125
+ function clearValue() {
126
+ recoverTool(props.initialColumns ?? []);
127
+ }
128
+
129
+ function cancelBtn() {
130
+ initColumns();
131
+ open.value = false;
132
+ }
133
+
134
+ function submitBtn() {
135
+ showFields.value = "";
136
+ hideFields.value = "";
137
+ temp.value.forEach((item) => {
138
+ showFields.value += `${item.key},`;
139
+ });
140
+ hideFields.value = modelValue.value.join();
141
+ const paramsList = {
142
+ id: columnId.value || props.id,
143
+ tableId: props.tableId,
144
+ showFields: showFields.value,
145
+ hideFields: hideFields.value,
146
+ };
147
+ submitLoading.value = true;
148
+ postAction("system/pageShowFields/saveOrUpdate", paramsList)
149
+ .then((res: any) => {
150
+ temp.value.forEach((item) => emitTemp.value.push(item));
151
+ data.value.forEach((item) => {
152
+ if (!item.visible) emitTemp.value.push(item);
153
+ });
154
+ columnId.value = res.data.id;
155
+ emits("update:columns", emitTemp.value);
156
+ emits("update:propsValue", modelValue.value);
157
+ emitTemp.value = [];
158
+ })
159
+ .catch(() => initColumns())
160
+ .finally(() => {
161
+ submitLoading.value = false;
162
+ open.value = false;
163
+ });
164
+ }
165
+
166
+ function getColumns(columnsInfo: any) {
167
+ const _columnsInfo = deepClone(columnsInfo);
168
+ _columnsInfo.propsValue = [];
169
+ return getAction(
170
+ `/system/pageShowFields/getByTableIdAndUserNo?tableId=${_columnsInfo.tableId}`,
171
+ ).then((res: any) => {
172
+ if (res.data) {
173
+ _columnsInfo.id = res.data.id;
174
+ let showArr: string[] | undefined;
175
+ if (res.data.showFields) showArr = res.data.showFields.split(",");
176
+ let hideArr: string[] | undefined;
177
+ if (res.data.hideFields) hideArr = res.data.hideFields.split(",");
178
+
179
+ let flag: any[] = [];
180
+ if (showArr) {
181
+ flag = showArr.reduce((acc: any[], key: string) => {
182
+ const value = _columnsInfo.columns.find((v: any) => v.key === key);
183
+ if (value) acc.push(value);
184
+ return acc;
185
+ }, []);
186
+ }
187
+ const result: any[] = [...new Set(flag.concat(_columnsInfo.columns))];
188
+ _columnsInfo.columns = result;
189
+
190
+ _columnsInfo.columns.forEach((item: any) => {
191
+ if (showArr) {
192
+ item.visible = showArr.includes(item.key) ? true : item.visible;
193
+ }
194
+ if (hideArr) {
195
+ item.visible = hideArr.includes(item.key) ? false : item.visible;
196
+ }
197
+ });
198
+
199
+ if (hideArr) {
200
+ hideArr.forEach((item: string) => _columnsInfo.propsValue.push(item));
201
+ }
202
+ return _columnsInfo;
203
+ }
204
+ });
205
+ }
206
+
207
+ return {
208
+ transferRef,
209
+ data,
210
+ title,
211
+ open,
212
+ modelValue,
213
+ columnsProp,
214
+ showSearchProp,
215
+ temp,
216
+ submitLoading,
217
+ toggleSearch,
218
+ refresh,
219
+ closeDialog,
220
+ dataChange,
221
+ showColumn,
222
+ initColumns,
223
+ clearValue,
224
+ cancelBtn,
225
+ submitBtn,
226
+ getColumns,
227
+ };
228
+ }
@@ -1,44 +1,44 @@
1
- :deep(.rightToolBarDialog .el-dialog-body) {
2
- display: flex !important;
3
- justify-content: center !important;
4
- }
5
- :deep(.el-transfer__button) {
6
- display: block;
7
- }
8
-
9
- :deep(.el-transfer__button:first-child) {
10
- margin-bottom: 10px;
11
- }
12
- :deep(.el-transfer__button:nth-child(2)) {
13
- margin-left: 0px !important;
14
- }
15
-
16
- .my-el-transfer {
17
- text-align: center;
18
- }
19
-
20
- :deep(
21
- .el-transfer-panel
22
- .el-transfer-panel__header
23
- .el-checkbox
24
- .el-checkbox__label
25
- span
26
- ) {
27
- position: static;
28
- }
29
-
30
- :deep(.el-transfer-panel__footer button) {
31
- position: absolute;
32
- right: 5px;
33
- top: 12px;
34
- }
35
-
36
- :deep(.el-transfer-panel:first-child .el-checkbox__label) {
37
- cursor: move !important;
38
- }
39
- :deep(.el-transfer-panel) {
40
- width: 40%;
41
- }
42
- :deep(.el-transfer__buttons) {
43
- width: 20%;
44
- }
1
+ :deep(.rightToolBarDialog .el-dialog-body) {
2
+ display: flex !important;
3
+ justify-content: center !important;
4
+ }
5
+ :deep(.el-transfer__button) {
6
+ display: block;
7
+ }
8
+
9
+ :deep(.el-transfer__button:first-child) {
10
+ margin-bottom: 10px;
11
+ }
12
+ :deep(.el-transfer__button:nth-child(2)) {
13
+ margin-left: 0px !important;
14
+ }
15
+
16
+ .my-el-transfer {
17
+ text-align: center;
18
+ }
19
+
20
+ :deep(
21
+ .el-transfer-panel
22
+ .el-transfer-panel__header
23
+ .el-checkbox
24
+ .el-checkbox__label
25
+ span
26
+ ) {
27
+ position: static;
28
+ }
29
+
30
+ :deep(.el-transfer-panel__footer button) {
31
+ position: absolute;
32
+ right: 5px;
33
+ top: 12px;
34
+ }
35
+
36
+ :deep(.el-transfer-panel:first-child .el-checkbox__label) {
37
+ cursor: move !important;
38
+ }
39
+ :deep(.el-transfer-panel) {
40
+ width: 40%;
41
+ }
42
+ :deep(.el-transfer__buttons) {
43
+ width: 20%;
44
+ }
@@ -1,61 +1,61 @@
1
- .my-splitter-container {
2
- display: flex;
3
- width: 100%;
4
- height: 100%;
5
- overflow: hidden;
6
- }
7
-
8
- .is-horizontal {
9
- flex-direction: row;
10
- }
11
- .is-vertical {
12
- flex-direction: column;
13
- }
14
-
15
- .splitter-item {
16
- overflow: auto;
17
- }
18
-
19
- .splitter-trigger {
20
- background-color: #f0f2f5;
21
- display: flex;
22
- align-items: center;
23
- justify-content: center;
24
- transition: background-color 0.2s;
25
- z-index: 10;
26
- }
27
-
28
- .splitter-trigger:hover {
29
- background-color: #409eff;
30
- }
31
-
32
- /* 水平线 */
33
- .is-horizontal > .splitter-trigger {
34
- width: 4px;
35
- cursor: col-resize;
36
- }
37
- .is-horizontal .trigger-line {
38
- width: 1px;
39
- height: 20px;
40
- background: #dcdfe6;
41
- }
42
-
43
- /* 垂直线 */
44
- .is-vertical > .splitter-trigger {
45
- height: 8px;
46
- cursor: row-resize;
47
- background-color: #f5f5f5;
48
- flex-shrink: 0;
49
- display: flex;
50
- align-items: center;
51
- justify-content: center;
52
- }
53
- .is-vertical .trigger-line {
54
- width: 30px;
55
- height: 3px;
56
- background: #d9d9d9;
57
- border-radius: 2px;
58
- }
59
- .is-vertical > .splitter-trigger:hover .trigger-line {
60
- background: #409eff;
61
- }
1
+ .my-splitter-container {
2
+ display: flex;
3
+ width: 100%;
4
+ height: 100%;
5
+ overflow: hidden;
6
+ }
7
+
8
+ .is-horizontal {
9
+ flex-direction: row;
10
+ }
11
+ .is-vertical {
12
+ flex-direction: column;
13
+ }
14
+
15
+ .splitter-item {
16
+ overflow: auto;
17
+ }
18
+
19
+ .splitter-trigger {
20
+ background-color: #f0f2f5;
21
+ display: flex;
22
+ align-items: center;
23
+ justify-content: center;
24
+ transition: background-color 0.2s;
25
+ z-index: 10;
26
+ }
27
+
28
+ .splitter-trigger:hover {
29
+ background-color: #409eff;
30
+ }
31
+
32
+ /* 水平线 */
33
+ .is-horizontal > .splitter-trigger {
34
+ width: 4px;
35
+ cursor: col-resize;
36
+ }
37
+ .is-horizontal .trigger-line {
38
+ width: 1px;
39
+ height: 20px;
40
+ background: #dcdfe6;
41
+ }
42
+
43
+ /* 垂直线 */
44
+ .is-vertical > .splitter-trigger {
45
+ height: 8px;
46
+ cursor: row-resize;
47
+ background-color: #f5f5f5;
48
+ flex-shrink: 0;
49
+ display: flex;
50
+ align-items: center;
51
+ justify-content: center;
52
+ }
53
+ .is-vertical .trigger-line {
54
+ width: 30px;
55
+ height: 3px;
56
+ background: #d9d9d9;
57
+ border-radius: 2px;
58
+ }
59
+ .is-vertical > .splitter-trigger:hover .trigger-line {
60
+ background: #409eff;
61
+ }