@jari-ace/element-plus-component 0.2.2 → 0.3.0

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 (171) hide show
  1. package/README.md +1 -1
  2. package/dist/components/autoComplete/JaAutoComplete.vue.d.ts +18 -18
  3. package/dist/components/button/JaButton.vue.d.ts +24 -24
  4. package/dist/components/customGroupTree/src/customGroupTree.vue.d.ts +1 -1
  5. package/dist/components/departmentPicker/src/DepartmentPicker.vue.d.ts +2 -2
  6. package/dist/components/departmentTree/src/departmentTree.vue.d.ts +1 -1
  7. package/dist/components/dropdownButton/JaDropdownButton.vue.d.ts +55 -55
  8. package/dist/components/enumList/EnumListInput.vue.d.ts +2 -2
  9. package/dist/components/enumPicker/src/EnumPicker.vue.d.ts +1 -1
  10. package/dist/components/form/JaForm.vue.d.ts +1 -1
  11. package/dist/components/formItem/JaFormItem.vue.d.ts +12 -12
  12. package/dist/components/input/JaInput.vue.d.ts +18 -18
  13. package/dist/components/inputI18n/I18nBundleEditor.vue.d.ts +1 -1
  14. package/dist/components/inputI18n/InputI18n.vue.d.ts +2 -2
  15. package/dist/components/inputI18n/JaInputI18n.vue.d.ts +70 -70
  16. package/dist/components/inputNumber/JaInputNumber.vue.d.ts +12 -12
  17. package/dist/components/mapItemList/MapItemListInput.vue.d.ts +2 -2
  18. package/dist/components/numberList/NumberListInput.vue.d.ts +2 -2
  19. package/dist/components/rolePicker/RoleEditor.vue.d.ts +1 -1
  20. package/dist/components/rolePicker/baseRolePicker.vue.d.ts +1 -1
  21. package/dist/components/rolePicker/baseRolePicker.vue.d.ts.map +1 -1
  22. package/dist/components/rolePicker/baseRolePicker.vue.js +4 -2
  23. package/dist/components/rolePicker/baseRolePicker.vue.js.map +1 -1
  24. package/dist/components/scrollbar/Scrollbar.vue.d.ts +8 -8
  25. package/dist/components/select/JaSelect.vue.d.ts +70 -70
  26. package/dist/components/stringList/StringListInput.vue.d.ts +2 -2
  27. package/dist/components/tip/index.d.ts +6 -6
  28. package/dist/components/tip/src/AceTip.vue.d.ts +1 -1
  29. package/dist/components/upload/index.d.ts +23 -4
  30. package/dist/components/upload/index.d.ts.map +1 -1
  31. package/dist/components/upload/index.js +1 -3
  32. package/dist/components/upload/index.js.map +1 -1
  33. package/dist/components/upload/pdf-viewer/PdfViewerModal.vue.d.ts +27 -0
  34. package/dist/components/upload/pdf-viewer/PdfViewerModal.vue.d.ts.map +1 -0
  35. package/dist/components/upload/pdf-viewer/PdfViewerModal.vue.js +94 -0
  36. package/dist/components/upload/pdf-viewer/PdfViewerModal.vue.js.map +1 -0
  37. package/dist/components/upload/uploader-locale-zh-cn.d.ts +223 -0
  38. package/dist/components/upload/uploader-locale-zh-cn.d.ts.map +1 -0
  39. package/dist/components/upload/uploader-locale-zh-cn.js +224 -0
  40. package/dist/components/upload/uploader-locale-zh-cn.js.map +1 -0
  41. package/dist/components/upload/uploader.vue.d.ts +42 -0
  42. package/dist/components/upload/uploader.vue.d.ts.map +1 -0
  43. package/dist/components/upload/uploader.vue.js +713 -0
  44. package/dist/components/upload/uploader.vue.js.map +1 -0
  45. package/dist/components/userGroupPicker/src/UserGroupPicker.vue.d.ts +2 -2
  46. package/dist/components/userPicker/src/UserPicker.vue.d.ts +3 -3
  47. package/dist/components/userSelectDialog/src/userSelectDialog.vue.d.ts +1 -1
  48. package/dist/components/userTag/UserInfoTag.vue.d.ts +2 -2
  49. package/lib/index.css +9 -1
  50. package/lib/index.js +37354 -2740
  51. package/lib/index.umd.cjs +407 -2
  52. package/package.json +70 -61
  53. package/packages/components/autoComplete/JaAutoComplete.vue +47 -47
  54. package/packages/components/autoComplete/index.ts +5 -5
  55. package/packages/components/avatar/JaAvatar.vue +126 -126
  56. package/packages/components/avatar/avatarToken.ts +11 -11
  57. package/packages/components/avatar/defaultImg.ts +14 -14
  58. package/packages/components/avatar/index.ts +7 -7
  59. package/packages/components/button/JaButton.vue +51 -51
  60. package/packages/components/button/index.ts +4 -4
  61. package/packages/components/channelPicker/index.ts +7 -7
  62. package/packages/components/channelPicker/src/ChannelPicker.vue +43 -43
  63. package/packages/components/channelPicker/src/JaChannelPicker.vue +42 -42
  64. package/packages/components/checkbox/JaCheckbox.vue +73 -73
  65. package/packages/components/checkbox/index.ts +4 -4
  66. package/packages/components/checkboxGroup/JaCheckboxGroup.vue +45 -45
  67. package/packages/components/checkboxGroup/index.ts +4 -4
  68. package/packages/components/customGroupTree/index.ts +10 -10
  69. package/packages/components/customGroupTree/src/customGroupTree.vue +91 -91
  70. package/packages/components/datePicker/JaDatePicker.vue +52 -52
  71. package/packages/components/datePicker/index.ts +4 -4
  72. package/packages/components/departmentPicker/index.ts +4 -4
  73. package/packages/components/departmentPicker/src/DepartmentPicker.vue +107 -107
  74. package/packages/components/departmentPicker/src/consts.ts +2 -2
  75. package/packages/components/departmentTree/index.ts +10 -10
  76. package/packages/components/departmentTree/src/departmentTree.vue +135 -135
  77. package/packages/components/dropdownButton/JaDropdownButton.vue +59 -59
  78. package/packages/components/dropdownButton/index.ts +4 -4
  79. package/packages/components/enumList/EnumListInput.vue +107 -107
  80. package/packages/components/enumList/JaEnumList.vue +39 -39
  81. package/packages/components/enumList/index.ts +7 -7
  82. package/packages/components/enumPicker/index.ts +5 -5
  83. package/packages/components/enumPicker/src/EnumPicker.vue +103 -103
  84. package/packages/components/form/JaForm.vue +146 -146
  85. package/packages/components/form/index.ts +5 -5
  86. package/packages/components/form/types.ts +4 -4
  87. package/packages/components/formItem/JaFormItem.vue +87 -87
  88. package/packages/components/formItem/index.ts +4 -4
  89. package/packages/components/index.ts +34 -34
  90. package/packages/components/input/JaInput.vue +143 -143
  91. package/packages/components/input/index.ts +4 -4
  92. package/packages/components/inputI18n/I18nBundleEditor.vue +76 -76
  93. package/packages/components/inputI18n/InputI18n.vue +146 -146
  94. package/packages/components/inputI18n/JaInputI18n.vue +50 -50
  95. package/packages/components/inputI18n/index.ts +8 -8
  96. package/packages/components/inputNumber/JaInputNumber.vue +98 -98
  97. package/packages/components/inputNumber/index.ts +4 -4
  98. package/packages/components/mapItemList/JaMapItemList.vue +35 -35
  99. package/packages/components/mapItemList/MapItemListInput.vue +191 -191
  100. package/packages/components/mapItemList/index.ts +7 -7
  101. package/packages/components/numberList/JaNumberList.vue +36 -36
  102. package/packages/components/numberList/NumberListInput.vue +111 -111
  103. package/packages/components/numberList/index.ts +7 -7
  104. package/packages/components/properyPicker/JaPropertyPicker.vue +38 -38
  105. package/packages/components/properyPicker/PropertyPicker.vue +314 -314
  106. package/packages/components/properyPicker/index.ts +7 -7
  107. package/packages/components/radioGroup/JaRadioGroup.vue +50 -50
  108. package/packages/components/radioGroup/index.ts +4 -4
  109. package/packages/components/rolePicker/RoleEditor.vue +129 -129
  110. package/packages/components/rolePicker/RolePicker.vue +44 -44
  111. package/packages/components/rolePicker/RolePickerRaw.vue +56 -56
  112. package/packages/components/rolePicker/baseRolePicker.vue +91 -87
  113. package/packages/components/rolePicker/index.ts +10 -10
  114. package/packages/components/scrollbar/Scrollbar.vue +89 -89
  115. package/packages/components/scrollbar/index.ts +5 -5
  116. package/packages/components/scrollbar/utils.ts +17 -17
  117. package/packages/components/select/JaSelect.vue +48 -48
  118. package/packages/components/select/index.ts +4 -4
  119. package/packages/components/stringList/JaStringList.vue +36 -36
  120. package/packages/components/stringList/StringListInput.vue +96 -96
  121. package/packages/components/stringList/index.ts +7 -7
  122. package/packages/components/switch/JaSwitch.vue +50 -50
  123. package/packages/components/switch/index.ts +4 -4
  124. package/packages/components/timePicker/JaTimePicker.vue +52 -52
  125. package/packages/components/timePicker/index.ts +5 -5
  126. package/packages/components/tip/index.ts +4 -4
  127. package/packages/components/tip/src/AceTip.vue +43 -43
  128. package/packages/components/upload/index.ts +4 -6
  129. package/packages/components/upload/pdf-viewer/PdfViewerModal.vue +32 -0
  130. package/packages/components/upload/uploader-locale-zh-cn.ts +223 -0
  131. package/packages/components/upload/uploader.vue +513 -0
  132. package/packages/components/userGroupPicker/index.ts +4 -4
  133. package/packages/components/userGroupPicker/src/UserGroupPicker.vue +94 -94
  134. package/packages/components/userGroupTree/index.ts +10 -10
  135. package/packages/components/userGroupTree/src/userGroupTree.vue +149 -149
  136. package/packages/components/userPicker/index.ts +10 -10
  137. package/packages/components/userPicker/src/CustomGroupManager.vue +189 -189
  138. package/packages/components/userPicker/src/JaUserList.vue +317 -317
  139. package/packages/components/userPicker/src/JaUserPicker.vue +40 -40
  140. package/packages/components/userPicker/src/UserPicker.vue +472 -472
  141. package/packages/components/userSelectDialog/index.ts +6 -6
  142. package/packages/components/userSelectDialog/src/userSelectDialog.vue +462 -462
  143. package/packages/components/userTag/UserInfoTag.vue +397 -397
  144. package/packages/components/userTag/index.ts +6 -6
  145. package/packages/components/userTag/sharedAxios.ts +8 -8
  146. package/packages/directives/auth/index.ts +41 -41
  147. package/packages/directives/autofocus/index.ts +29 -29
  148. package/packages/directives/index.ts +10 -10
  149. package/packages/directives/shortcut/index.ts +192 -192
  150. package/packages/hooks/useAppInstances.ts +34 -34
  151. package/packages/hooks/useBackendValidations.ts +81 -81
  152. package/packages/hooks/useBridage.ts +157 -157
  153. package/packages/hooks/useClassificationLevels.ts +62 -62
  154. package/packages/hooks/useDateTimeShortCuts.ts +65 -65
  155. package/packages/hooks/useRealms.ts +28 -28
  156. package/packages/hooks/useTreeData.ts +45 -45
  157. package/packages/hooks/useUserRefQuery.ts +232 -232
  158. package/packages/index.ts +24 -24
  159. package/packages/list.json +7 -7
  160. package/packages/types/custom.d.ts +13 -13
  161. package/packages/types/window.d.ts +16 -16
  162. package/packages/utils/install.ts +43 -43
  163. package/packages/utils/objectUtils.ts +31 -31
  164. package/theme-style/fonts/iconfont.json +5196 -5196
  165. package/theme-style/index.scss +10 -10
  166. package/theme-style/styles/element-plus-var.scss +1419 -1419
  167. package/theme-style/styles/iconfont.css +2979 -2979
  168. package/theme-style/styles/theme-var.scss +72 -72
  169. package/theme-style/styles/transition.scss +122 -122
  170. package/packages/components/upload/src/Upload.vue +0 -25
  171. package/packages/components/upload/src/type.ts +0 -3
@@ -1,135 +1,135 @@
1
- <template>
2
- <el-tree
3
- ref="deptTree"
4
- v-loading="loading"
5
- :data="state.departments"
6
- size="default"
7
- node-key="id"
8
- default-expand-all
9
- highlight-current
10
- :current-node-key="id"
11
- :expand-on-click-node="false"
12
- @current-change="currentChange"
13
- :props="{
14
- class: (node: TreeNodeData) => selected?.id === node.id? 'selected-group': 'group',
15
- }"
16
- ></el-tree>
17
- </template>
18
-
19
- <script setup lang="ts">
20
- import {ref, shallowReactive} from "vue";
21
- import {
22
- type ProjectedDepartment,
23
- useDepartmentApi,
24
- FromDeptSelect,
25
- useLoading, createAxiosWithoutCache
26
- } from "@jari-ace/app-bolts";
27
- import {useTreeData, type TreeNodeType} from "../../../hooks/useTreeData";
28
- import {computed, watch} from "vue";
29
- import {ALL_DEPARTMENT, NO_DEPARTMENT} from "../../departmentPicker/src/consts";
30
- import {ElTree, vLoading} from "element-plus";
31
- import type {TreeNodeData} from "element-plus/es/components/tree/src/tree.type";
32
-
33
- interface Props {
34
- realmId?: string;
35
- /**
36
- * 是否显示无部门节点,用于筛选无归属部门用户
37
- */
38
- showNoDepartment?: boolean;
39
- multiple?: boolean;
40
- }
41
-
42
- const deptTree = ref<typeof ElTree>();
43
- const axios = createAxiosWithoutCache()
44
- const loading = useLoading(axios);
45
- const departmentApi = useDepartmentApi(axios);
46
- const props = withDefaults(defineProps<Props>(), {
47
- showNoDepartment: false
48
- });
49
-
50
- const emits = defineEmits(["change", "loaded"]);
51
- const selected = defineModel<ProjectedDepartment | null>();
52
-
53
- const id = computed({
54
- get() {
55
- return selected.value?.id;
56
- },
57
- set(val) {
58
- selected.value = state.departments.find(x => x.id === val) ?? null;
59
- }
60
- })
61
-
62
- const state = shallowReactive<{
63
- departments: (TreeNodeType & ProjectedDepartment)[];
64
- }>({
65
- departments: []
66
- });
67
-
68
- const getList = async () => {
69
- if (!props.realmId) return;
70
- const res = await departmentApi.getNormal(props.realmId, FromDeptSelect.BT);
71
- state.departments = [
72
- {
73
- id: ALL_DEPARTMENT,
74
- label: "所有部门",
75
- name: "所有部门",
76
- shortCode: "",
77
- children: [],
78
- hasChildren: false,
79
- sortIndex: -1,
80
- sortPath: "",
81
- dataVersion: 0,
82
- entity: false,
83
- attributes: {}
84
- },
85
- ...(
86
- props.showNoDepartment ? [{
87
- id: NO_DEPARTMENT,
88
- label: "无归属部门",
89
- name: "无归属部门",
90
- shortCode: "",
91
- children: [],
92
- hasChildren: false,
93
- sortIndex: -100,
94
- sortPath: "no_dept",
95
- dataVersion: 0,
96
- entity: false,
97
- attributes: {}
98
- }] : []
99
- ),
100
- ...useTreeData<ProjectedDepartment>(res, "name"),
101
- ];
102
- id.value = state.departments[0].id;
103
- emits("loaded", state.departments);
104
- };
105
-
106
- const currentChange = (data: TreeNodeType & ProjectedDepartment) => {
107
- selected.value = data;
108
- emits("change", data);
109
- };
110
-
111
- watch(
112
- () => props.realmId,
113
- () => {
114
- //重新获取
115
- getList();
116
- }
117
- );
118
-
119
- defineExpose({
120
- reload: getList
121
- });
122
-
123
- getList();
124
- </script>
125
-
126
- <style lang="scss" scoped>
127
-
128
- :deep(.group) {
129
- background-color: #fff;
130
- }
131
-
132
- :deep(.selected-group) {
133
- background-color: var(--el-tree-node-hover-bg-color) !important;
134
- }
135
- </style>
1
+ <template>
2
+ <el-tree
3
+ ref="deptTree"
4
+ v-loading="loading"
5
+ :data="state.departments"
6
+ size="default"
7
+ node-key="id"
8
+ default-expand-all
9
+ highlight-current
10
+ :current-node-key="id"
11
+ :expand-on-click-node="false"
12
+ @current-change="currentChange"
13
+ :props="{
14
+ class: (node: TreeNodeData) => selected?.id === node.id? 'selected-group': 'group',
15
+ }"
16
+ ></el-tree>
17
+ </template>
18
+
19
+ <script setup lang="ts">
20
+ import {ref, shallowReactive} from "vue";
21
+ import {
22
+ type ProjectedDepartment,
23
+ useDepartmentApi,
24
+ FromDeptSelect,
25
+ useLoading, createAxiosWithoutCache
26
+ } from "@jari-ace/app-bolts";
27
+ import {useTreeData, type TreeNodeType} from "../../../hooks/useTreeData";
28
+ import {computed, watch} from "vue";
29
+ import {ALL_DEPARTMENT, NO_DEPARTMENT} from "../../departmentPicker/src/consts";
30
+ import {ElTree, vLoading} from "element-plus";
31
+ import type {TreeNodeData} from "element-plus/es/components/tree/src/tree.type";
32
+
33
+ interface Props {
34
+ realmId?: string;
35
+ /**
36
+ * 是否显示无部门节点,用于筛选无归属部门用户
37
+ */
38
+ showNoDepartment?: boolean;
39
+ multiple?: boolean;
40
+ }
41
+
42
+ const deptTree = ref<typeof ElTree>();
43
+ const axios = createAxiosWithoutCache()
44
+ const loading = useLoading(axios);
45
+ const departmentApi = useDepartmentApi(axios);
46
+ const props = withDefaults(defineProps<Props>(), {
47
+ showNoDepartment: false
48
+ });
49
+
50
+ const emits = defineEmits(["change", "loaded"]);
51
+ const selected = defineModel<ProjectedDepartment | null>();
52
+
53
+ const id = computed({
54
+ get() {
55
+ return selected.value?.id;
56
+ },
57
+ set(val) {
58
+ selected.value = state.departments.find(x => x.id === val) ?? null;
59
+ }
60
+ })
61
+
62
+ const state = shallowReactive<{
63
+ departments: (TreeNodeType & ProjectedDepartment)[];
64
+ }>({
65
+ departments: []
66
+ });
67
+
68
+ const getList = async () => {
69
+ if (!props.realmId) return;
70
+ const res = await departmentApi.getNormal(props.realmId, FromDeptSelect.BT);
71
+ state.departments = [
72
+ {
73
+ id: ALL_DEPARTMENT,
74
+ label: "所有部门",
75
+ name: "所有部门",
76
+ shortCode: "",
77
+ children: [],
78
+ hasChildren: false,
79
+ sortIndex: -1,
80
+ sortPath: "",
81
+ dataVersion: 0,
82
+ entity: false,
83
+ attributes: {}
84
+ },
85
+ ...(
86
+ props.showNoDepartment ? [{
87
+ id: NO_DEPARTMENT,
88
+ label: "无归属部门",
89
+ name: "无归属部门",
90
+ shortCode: "",
91
+ children: [],
92
+ hasChildren: false,
93
+ sortIndex: -100,
94
+ sortPath: "no_dept",
95
+ dataVersion: 0,
96
+ entity: false,
97
+ attributes: {}
98
+ }] : []
99
+ ),
100
+ ...useTreeData<ProjectedDepartment>(res, "name"),
101
+ ];
102
+ id.value = state.departments[0].id;
103
+ emits("loaded", state.departments);
104
+ };
105
+
106
+ const currentChange = (data: TreeNodeType & ProjectedDepartment) => {
107
+ selected.value = data;
108
+ emits("change", data);
109
+ };
110
+
111
+ watch(
112
+ () => props.realmId,
113
+ () => {
114
+ //重新获取
115
+ getList();
116
+ }
117
+ );
118
+
119
+ defineExpose({
120
+ reload: getList
121
+ });
122
+
123
+ getList();
124
+ </script>
125
+
126
+ <style lang="scss" scoped>
127
+
128
+ :deep(.group) {
129
+ background-color: #fff;
130
+ }
131
+
132
+ :deep(.selected-group) {
133
+ background-color: var(--el-tree-node-hover-bg-color) !important;
134
+ }
135
+ </style>
@@ -1,59 +1,59 @@
1
- <script setup lang="ts">
2
- import dShortcut from "../../directives/shortcut";
3
- import {ElButton, ElTooltip, ElDropdown, ElIcon} from "element-plus";
4
- import {ref} from "vue";
5
- import {ArrowDown} from "@element-plus/icons-vue";
6
-
7
- const input = ref<typeof ElButton>()
8
- const dropdown = ref<typeof ElDropdown>()
9
- const props = withDefaults(defineProps<{
10
- tooltip?: string
11
- shortcut?: string
12
- buttonText?: string
13
- tooltipPlacement?: 'top' | 'bottom'
14
- type?: "default" | "success" | "warning" | "info" | "text" | "primary" | "danger"
15
- }>(), {
16
- tooltipPlacement: 'top',
17
- type: "default"
18
- })
19
-
20
- const vShortcut = dShortcut
21
-
22
- defineExpose({
23
- elButton: input,
24
- elDropdown: dropdown
25
- })
26
-
27
- function onShortCut(el: HTMLElement) {
28
- el.focus()
29
- }
30
- </script>
31
-
32
- <template>
33
- <el-tooltip :placement="tooltipPlacement">
34
- <el-dropdown
35
- size="default"
36
- ref="dropdown"
37
- trigger="click"
38
- v-bind="$attrs">
39
- <el-button ref="input" :type="type" size="default" v-bind="$attrs"
40
- v-shortcut:[shortcut]="onShortCut">
41
- <template #default>
42
- {{ props.buttonText }}
43
- <el-icon class="el-icon--right">
44
- <arrow-down/>
45
- </el-icon>
46
- </template>
47
- </el-button>
48
- <template v-for="(_, name) in $slots" v-slot:[name]>
49
- <slot :name="name"></slot>
50
- </template>
51
- </el-dropdown>
52
- <template #content>
53
- {{
54
- `${props.tooltip ?? ''} ${props.tooltip ? "(" : ""}${props.shortcut
55
- ?? ""}${props.tooltip ? ")" : ""}`
56
- }}
57
- </template>
58
- </el-tooltip>
59
- </template>
1
+ <script setup lang="ts">
2
+ import dShortcut from "../../directives/shortcut";
3
+ import {ElButton, ElTooltip, ElDropdown, ElIcon} from "element-plus";
4
+ import {ref} from "vue";
5
+ import {ArrowDown} from "@element-plus/icons-vue";
6
+
7
+ const input = ref<typeof ElButton>()
8
+ const dropdown = ref<typeof ElDropdown>()
9
+ const props = withDefaults(defineProps<{
10
+ tooltip?: string
11
+ shortcut?: string
12
+ buttonText?: string
13
+ tooltipPlacement?: 'top' | 'bottom'
14
+ type?: "default" | "success" | "warning" | "info" | "text" | "primary" | "danger"
15
+ }>(), {
16
+ tooltipPlacement: 'top',
17
+ type: "default"
18
+ })
19
+
20
+ const vShortcut = dShortcut
21
+
22
+ defineExpose({
23
+ elButton: input,
24
+ elDropdown: dropdown
25
+ })
26
+
27
+ function onShortCut(el: HTMLElement) {
28
+ el.focus()
29
+ }
30
+ </script>
31
+
32
+ <template>
33
+ <el-tooltip :placement="tooltipPlacement">
34
+ <el-dropdown
35
+ size="default"
36
+ ref="dropdown"
37
+ trigger="click"
38
+ v-bind="$attrs">
39
+ <el-button ref="input" :type="type" size="default" v-bind="$attrs"
40
+ v-shortcut:[shortcut]="onShortCut">
41
+ <template #default>
42
+ {{ props.buttonText }}
43
+ <el-icon class="el-icon--right">
44
+ <arrow-down/>
45
+ </el-icon>
46
+ </template>
47
+ </el-button>
48
+ <template v-for="(_, name) in $slots" v-slot:[name]>
49
+ <slot :name="name"></slot>
50
+ </template>
51
+ </el-dropdown>
52
+ <template #content>
53
+ {{
54
+ `${props.tooltip ?? ''} ${props.tooltip ? "(" : ""}${props.shortcut
55
+ ?? ""}${props.tooltip ? ")" : ""}`
56
+ }}
57
+ </template>
58
+ </el-tooltip>
59
+ </template>
@@ -1,4 +1,4 @@
1
- import {type SFCWithInstall, withInstall} from "../../utils/install";
2
- import DropdownButton from "./JaDropdownButton.vue";
3
- export const JaDropdownButton:SFCWithInstall<typeof DropdownButton> = withInstall(DropdownButton);
4
- export default DropdownButton;
1
+ import {type SFCWithInstall, withInstall} from "../../utils/install";
2
+ import DropdownButton from "./JaDropdownButton.vue";
3
+ export const JaDropdownButton:SFCWithInstall<typeof DropdownButton> = withInstall(DropdownButton);
4
+ export default DropdownButton;
@@ -1,107 +1,107 @@
1
- <script setup lang="ts">
2
- import {Minus, Plus} from "@element-plus/icons-vue";
3
- import {watch, ref, onBeforeMount} from "vue";
4
- import {ElButton, ElSelect} from "element-plus";
5
-
6
- const props = withDefaults(defineProps<{
7
- modelValue: string[],
8
- enumValues: Record<string, string>,
9
- size?: 'small' | 'large' | 'default'
10
- }>(), {})
11
- const emits = defineEmits(["update:modelValue", "change"])
12
-
13
- function removeValue(index: number) {
14
- values.value.splice(index, 1);
15
- }
16
-
17
- function addValue() {
18
- values.value.push({v: ""})
19
- }
20
-
21
- const values = ref(props.modelValue?.map(v => {
22
- return {v}
23
- }) ?? [{
24
- v: ""
25
- }])
26
-
27
- let initializing = false;
28
- let internalChangedValue = false;
29
-
30
- onBeforeMount(() => initializeModelValue(props.modelValue))
31
-
32
- function initializeModelValue(n: string[]) {
33
- if (internalChangedValue) {
34
- internalChangedValue = false;
35
- return;
36
- }
37
- initializing = true;
38
- values.value = n.map(v => {
39
- return {v}
40
- });
41
- if (values.value.length == 0) {
42
- values.value.push({v: ""});
43
- }
44
- }
45
-
46
- watch(() => props.modelValue, (n: string[]) => {
47
- initializeModelValue(n);
48
- })
49
-
50
- watch(() => values.value, () => {
51
- if (initializing) {
52
- initializing = false;
53
- return;
54
- }
55
- internalChangedValue = true;
56
- const newValue = values.value.map(item => item.v).filter(v => v && v.length > 0)
57
- emits("update:modelValue", newValue)
58
- emits("change", newValue)
59
- }, {deep: true})
60
- </script>
61
-
62
- <template>
63
- <div style="width: 100%;" class="ja-enum-list">
64
- <div class="ja-input-box" v-for="(v, index) in values" :key="index">
65
- <el-select v-model="v.v" :size="size">
66
- <el-option v-for="k in Object.keys(props.enumValues)" :key="k"
67
- :label="k" :value="props.enumValues[k]"
68
- ></el-option>
69
- </el-select>
70
- <el-tooltip content="删除" placement="right">
71
- <div class="el-input-group__append" v-show="index < (values?.length ?? 0) - 1">
72
- <el-button link :icon="Minus" @click="removeValue(index)" :size="size">
73
- </el-button>
74
- </div>
75
- </el-tooltip>
76
- <el-tooltip content="添加" placement="right">
77
- <div class="el-input-group__append" v-show="index === (values?.length ?? 0) - 1">
78
- <el-button @click="addValue()" :size="size"
79
- link :icon="Plus">
80
- </el-button>
81
- </div>
82
- </el-tooltip>
83
- </div>
84
- </div>
85
- </template>
86
-
87
- <style scoped lang="scss">
88
- .ja-enum-list {
89
- display: flex;
90
- flex-direction: column;
91
- gap: 8px;
92
-
93
- .ja-input-box {
94
- display: flex;
95
- gap: 4px;
96
-
97
- .el-input-group__append {
98
- flex: none;
99
- margin-left: 0 !important;
100
- }
101
-
102
- .el-select {
103
- flex: auto;
104
- }
105
- }
106
- }
107
- </style>
1
+ <script setup lang="ts">
2
+ import {Minus, Plus} from "@element-plus/icons-vue";
3
+ import {watch, ref, onBeforeMount} from "vue";
4
+ import {ElButton, ElSelect} from "element-plus";
5
+
6
+ const props = withDefaults(defineProps<{
7
+ modelValue: string[],
8
+ enumValues: Record<string, string>,
9
+ size?: 'small' | 'large' | 'default'
10
+ }>(), {})
11
+ const emits = defineEmits(["update:modelValue", "change"])
12
+
13
+ function removeValue(index: number) {
14
+ values.value.splice(index, 1);
15
+ }
16
+
17
+ function addValue() {
18
+ values.value.push({v: ""})
19
+ }
20
+
21
+ const values = ref(props.modelValue?.map(v => {
22
+ return {v}
23
+ }) ?? [{
24
+ v: ""
25
+ }])
26
+
27
+ let initializing = false;
28
+ let internalChangedValue = false;
29
+
30
+ onBeforeMount(() => initializeModelValue(props.modelValue))
31
+
32
+ function initializeModelValue(n: string[]) {
33
+ if (internalChangedValue) {
34
+ internalChangedValue = false;
35
+ return;
36
+ }
37
+ initializing = true;
38
+ values.value = n.map(v => {
39
+ return {v}
40
+ });
41
+ if (values.value.length == 0) {
42
+ values.value.push({v: ""});
43
+ }
44
+ }
45
+
46
+ watch(() => props.modelValue, (n: string[]) => {
47
+ initializeModelValue(n);
48
+ })
49
+
50
+ watch(() => values.value, () => {
51
+ if (initializing) {
52
+ initializing = false;
53
+ return;
54
+ }
55
+ internalChangedValue = true;
56
+ const newValue = values.value.map(item => item.v).filter(v => v && v.length > 0)
57
+ emits("update:modelValue", newValue)
58
+ emits("change", newValue)
59
+ }, {deep: true})
60
+ </script>
61
+
62
+ <template>
63
+ <div style="width: 100%;" class="ja-enum-list">
64
+ <div class="ja-input-box" v-for="(v, index) in values" :key="index">
65
+ <el-select v-model="v.v" :size="size">
66
+ <el-option v-for="k in Object.keys(props.enumValues)" :key="k"
67
+ :label="k" :value="props.enumValues[k]"
68
+ ></el-option>
69
+ </el-select>
70
+ <el-tooltip content="删除" placement="right">
71
+ <div class="el-input-group__append" v-show="index < (values?.length ?? 0) - 1">
72
+ <el-button link :icon="Minus" @click="removeValue(index)" :size="size">
73
+ </el-button>
74
+ </div>
75
+ </el-tooltip>
76
+ <el-tooltip content="添加" placement="right">
77
+ <div class="el-input-group__append" v-show="index === (values?.length ?? 0) - 1">
78
+ <el-button @click="addValue()" :size="size"
79
+ link :icon="Plus">
80
+ </el-button>
81
+ </div>
82
+ </el-tooltip>
83
+ </div>
84
+ </div>
85
+ </template>
86
+
87
+ <style scoped lang="scss">
88
+ .ja-enum-list {
89
+ display: flex;
90
+ flex-direction: column;
91
+ gap: 8px;
92
+
93
+ .ja-input-box {
94
+ display: flex;
95
+ gap: 4px;
96
+
97
+ .el-input-group__append {
98
+ flex: none;
99
+ margin-left: 0 !important;
100
+ }
101
+
102
+ .el-select {
103
+ flex: auto;
104
+ }
105
+ }
106
+ }
107
+ </style>