@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,98 +1,98 @@
1
- <script setup lang="ts">
2
- import {inject, ref, watch, computed} from 'vue'
3
- import {ElInputNumber} from 'element-plus'
4
- import type {ValidationInstance} from '../../hooks/useBackendValidations'
5
- import {getValue, setValue} from "../../utils/objectUtils";
6
-
7
- const props = withDefaults(defineProps<{
8
- min?: number
9
- max?: number
10
- step?: number
11
- stepStrictly?: boolean
12
- precision?: number
13
- size?: 'large' | 'default' | 'small'
14
- readonly?: boolean
15
- disabled?: boolean
16
- controls?: boolean
17
- controlsPosition?: '' | 'right'
18
- name?: string
19
- label?: string
20
- ariaLabel?: string
21
- placeholder?: string
22
- id?: string
23
- valueOnClear?: number | null | 'min' | 'max'
24
- validateEvent?: boolean
25
- }>(), {
26
- min: -Infinity,
27
- max: Infinity,
28
- step: 1,
29
- stepStrictly: false,
30
- size: 'small',
31
- readonly: false,
32
- controls: true,
33
- validateEvent: true
34
- })
35
-
36
- const model = inject('aceFormModel') as Record<string, any>
37
- const prop = inject('aceFormItemProp') as string
38
- const validator = inject('aceFormValidator') as ValidationInstance
39
- const size = computed<'large' | 'default' | 'small' | undefined>(() => {
40
- return props.size ? props.size : inject("aceFormSize");
41
- });
42
- const input = ref<typeof ElInputNumber>()
43
- const emit = defineEmits<{
44
- blur: [evt: Event]
45
- focus: [evt: Event]
46
- change: [value?: number]
47
- }>()
48
- type ModelType = number;
49
-
50
- function onChange(value?: number) {
51
- validator.removeFieldError(prop)
52
- setValue(model.formData, prop, mv.value)
53
- emit('change', value)
54
- }
55
-
56
- const mv = ref(getValue(model.formData, prop) as ModelType);
57
- watch(() => model.formData, () => {
58
- mv.value = getValue(model.formData, prop) as ModelType
59
- }, {
60
- deep: true
61
- })
62
- defineExpose({
63
- focus() {
64
- input?.value?.focus()
65
- },
66
- blur() {
67
- input?.value?.blur()
68
- },
69
- elInputNumber: input
70
- })
71
- </script>
72
-
73
- <template>
74
- <el-input-number :min="min"
75
- :max="max"
76
- :label="label"
77
- :disabled="disabled"
78
- :id="id"
79
- :aria-label="ariaLabel"
80
- :controls="controls"
81
- :controls-position="controlsPosition"
82
- v-model="mv"
83
- :name="name"
84
- :placeholder="placeholder"
85
- :precision="precision"
86
- :readonly="readonly"
87
- :size="size"
88
- :step="step"
89
- :step-strictly="stepStrictly"
90
- :value-on-clear="valueOnClear"
91
- :validate-event="validateEvent"
92
- @change="onChange"
93
- @blur="evt => $emit('blur', evt)"
94
- @focus="evt => $emit('focus', evt)">
95
- <slot name="decrease-icon"></slot>
96
- <slot name="increase-icon"></slot>
97
- </el-input-number>
98
- </template>
1
+ <script setup lang="ts">
2
+ import {inject, ref, watch, computed} from 'vue'
3
+ import {ElInputNumber} from 'element-plus'
4
+ import type {ValidationInstance} from '../../hooks/useBackendValidations'
5
+ import {getValue, setValue} from "../../utils/objectUtils";
6
+
7
+ const props = withDefaults(defineProps<{
8
+ min?: number
9
+ max?: number
10
+ step?: number
11
+ stepStrictly?: boolean
12
+ precision?: number
13
+ size?: 'large' | 'default' | 'small'
14
+ readonly?: boolean
15
+ disabled?: boolean
16
+ controls?: boolean
17
+ controlsPosition?: '' | 'right'
18
+ name?: string
19
+ label?: string
20
+ ariaLabel?: string
21
+ placeholder?: string
22
+ id?: string
23
+ valueOnClear?: number | null | 'min' | 'max'
24
+ validateEvent?: boolean
25
+ }>(), {
26
+ min: -Infinity,
27
+ max: Infinity,
28
+ step: 1,
29
+ stepStrictly: false,
30
+ size: 'small',
31
+ readonly: false,
32
+ controls: true,
33
+ validateEvent: true
34
+ })
35
+
36
+ const model = inject('aceFormModel') as Record<string, any>
37
+ const prop = inject('aceFormItemProp') as string
38
+ const validator = inject('aceFormValidator') as ValidationInstance
39
+ const size = computed<'large' | 'default' | 'small' | undefined>(() => {
40
+ return props.size ? props.size : inject("aceFormSize");
41
+ });
42
+ const input = ref<typeof ElInputNumber>()
43
+ const emit = defineEmits<{
44
+ blur: [evt: Event]
45
+ focus: [evt: Event]
46
+ change: [value?: number]
47
+ }>()
48
+ type ModelType = number;
49
+
50
+ function onChange(value?: number) {
51
+ validator.removeFieldError(prop)
52
+ setValue(model.formData, prop, mv.value)
53
+ emit('change', value)
54
+ }
55
+
56
+ const mv = ref(getValue(model.formData, prop) as ModelType);
57
+ watch(() => model.formData, () => {
58
+ mv.value = getValue(model.formData, prop) as ModelType
59
+ }, {
60
+ deep: true
61
+ })
62
+ defineExpose({
63
+ focus() {
64
+ input?.value?.focus()
65
+ },
66
+ blur() {
67
+ input?.value?.blur()
68
+ },
69
+ elInputNumber: input
70
+ })
71
+ </script>
72
+
73
+ <template>
74
+ <el-input-number :min="min"
75
+ :max="max"
76
+ :label="label"
77
+ :disabled="disabled"
78
+ :id="id"
79
+ :aria-label="ariaLabel"
80
+ :controls="controls"
81
+ :controls-position="controlsPosition"
82
+ v-model="mv"
83
+ :name="name"
84
+ :placeholder="placeholder"
85
+ :precision="precision"
86
+ :readonly="readonly"
87
+ :size="size"
88
+ :step="step"
89
+ :step-strictly="stepStrictly"
90
+ :value-on-clear="valueOnClear"
91
+ :validate-event="validateEvent"
92
+ @change="onChange"
93
+ @blur="evt => $emit('blur', evt)"
94
+ @focus="evt => $emit('focus', evt)">
95
+ <slot name="decrease-icon"></slot>
96
+ <slot name="increase-icon"></slot>
97
+ </el-input-number>
98
+ </template>
@@ -1,4 +1,4 @@
1
- import {type SFCWithInstall, withInstall} from "../../utils/install";
2
- import InputNumber from "./JaInputNumber.vue";
3
- export const JaInputNumber:SFCWithInstall<typeof InputNumber> = withInstall(InputNumber);
4
- export default InputNumber;
1
+ import {type SFCWithInstall, withInstall} from "../../utils/install";
2
+ import InputNumber from "./JaInputNumber.vue";
3
+ export const JaInputNumber:SFCWithInstall<typeof InputNumber> = withInstall(InputNumber);
4
+ export default InputNumber;
@@ -1,35 +1,35 @@
1
- <script setup lang="ts">
2
- import {inject, watch, ref} from "vue";
3
- import {getValue, setValue} from "../../utils/objectUtils";
4
- import type {ValidationInstance} from "../../hooks/useBackendValidations";
5
- import MapItemListInput from "./MapItemListInput.vue";
6
-
7
- type ValueType = string | number | boolean | undefined;
8
- const model = inject('aceFormModel') as Record<string, never>
9
- const prop = inject('aceFormItemProp') as string
10
- const validator = inject('aceFormValidator') as ValidationInstance
11
- const emit = defineEmits<{
12
- change: [value: Record<string, ValueType>]
13
- }>()
14
-
15
- function onChange(value: Record<string, string>) {
16
- validator.removeFieldError(prop)
17
- setValue(model.formData, prop, mv.value);
18
- emit('change', value)
19
- }
20
-
21
- const mv = ref(getValue(model.formData, prop) as Record<string, ValueType> ?? {"": ""});
22
- watch(() => model.formData, () => {
23
- mv.value = getValue(model.formData, prop) as Record<string, ValueType> ?? {"": ""};
24
- })
25
- </script>
26
-
27
- <template>
28
- <map-item-list-input v-model="mv"
29
- @change="onChange"
30
- v-bind="$attrs"/>
31
- </template>
32
-
33
- <style scoped lang="scss">
34
-
35
- </style>
1
+ <script setup lang="ts">
2
+ import {inject, watch, ref} from "vue";
3
+ import {getValue, setValue} from "../../utils/objectUtils";
4
+ import type {ValidationInstance} from "../../hooks/useBackendValidations";
5
+ import MapItemListInput from "./MapItemListInput.vue";
6
+
7
+ type ValueType = string | number | boolean | undefined;
8
+ const model = inject('aceFormModel') as Record<string, never>
9
+ const prop = inject('aceFormItemProp') as string
10
+ const validator = inject('aceFormValidator') as ValidationInstance
11
+ const emit = defineEmits<{
12
+ change: [value: Record<string, ValueType>]
13
+ }>()
14
+
15
+ function onChange(value: Record<string, string>) {
16
+ validator.removeFieldError(prop)
17
+ setValue(model.formData, prop, mv.value);
18
+ emit('change', value)
19
+ }
20
+
21
+ const mv = ref(getValue(model.formData, prop) as Record<string, ValueType> ?? {"": ""});
22
+ watch(() => model.formData, () => {
23
+ mv.value = getValue(model.formData, prop) as Record<string, ValueType> ?? {"": ""};
24
+ })
25
+ </script>
26
+
27
+ <template>
28
+ <map-item-list-input v-model="mv"
29
+ @change="onChange"
30
+ v-bind="$attrs"/>
31
+ </template>
32
+
33
+ <style scoped lang="scss">
34
+
35
+ </style>
@@ -1,191 +1,191 @@
1
- <script setup lang="ts">
2
- import {Minus, Plus} from "@element-plus/icons-vue";
3
- import {watch, ref, onBeforeMount, type Component} from "vue";
4
- import {ElButton, ElDatePicker, ElInput, ElInputNumber, ElSelect, ElSwitch} from "element-plus";
5
-
6
- type ValueType = string | number | boolean | undefined;
7
-
8
- const props = withDefaults(defineProps<{
9
- modelValue: Record<string, ValueType>,
10
- enumValues?: Record<string, string>,
11
- valueType?: 'String' | 'Integer' | 'Long' | 'Decimal' | 'Enum' | 'Boolean' | 'DATE' | 'TIMESTAMP',
12
- size?: 'small' | 'large' | 'default'
13
- }>(), {
14
- valueType: 'String'
15
- })
16
- const emits = defineEmits(["update:modelValue", "change"])
17
-
18
- function removeValue(index: number) {
19
- values.value?.splice(index, 1);
20
- }
21
-
22
- function addValue() {
23
- values.value?.push({k: ""})
24
- }
25
-
26
- const values = ref<{
27
- k: string,
28
- v?: ValueType
29
- }[]>([])
30
-
31
- let initializing = false;
32
- let internalChangedValue = false;
33
-
34
- let valueCompType = ref<Component>();
35
- let valueCompProps = ref<object>({});
36
-
37
- function setupValueComponentType() {
38
- console.log('map item value comp type:', props.valueType);
39
- switch (props.valueType) {
40
- case "String":
41
- valueCompType.value = ElInput;
42
- valueCompProps.value = {}
43
- break;
44
- case "Integer":
45
- case "Long":
46
- valueCompType.value = ElInputNumber;
47
- break;
48
- case "Decimal":
49
- valueCompType.value = ElInputNumber;
50
- valueCompProps.value = {
51
- precision: 2,
52
- step: 0.1
53
- }
54
- break;
55
- case "Enum":
56
- valueCompType.value = ElSelect;
57
- break;
58
- case "Boolean":
59
- valueCompType.value = ElSwitch;
60
- break;
61
- case "DATE":
62
- valueCompType.value = ElDatePicker;
63
- valueCompProps.value = {
64
- type: "date"
65
- }
66
- break;
67
- case "TIMESTAMP":
68
- valueCompType.value = ElDatePicker;
69
- valueCompProps.value = {
70
- type: "datetime"
71
- }
72
- break;
73
- }
74
- }
75
-
76
- onBeforeMount(() => {
77
- initializeModelValue(props.modelValue)
78
- setupValueComponentType();
79
- })
80
-
81
- function initializeModelValue(n: Record<string, ValueType>) {
82
- if (internalChangedValue) {
83
- internalChangedValue = false;
84
- return;
85
- }
86
- if (n) {
87
- initializing = true;
88
- const keys = Object.keys(n);
89
- values.value = keys.map(k => {
90
- return {k: k, v: n[k]}
91
- });
92
- if (values.value.length == 0) {
93
- values.value.push({k: ""});
94
- }
95
- } else {
96
- values.value = [{k: ""}]
97
- }
98
- }
99
-
100
- watch(() => props.modelValue, (n: Record<string, ValueType>) => {
101
- initializeModelValue(n);
102
- }, {
103
- deep: true
104
- })
105
-
106
- watch(() => values.value, () => {
107
- if (initializing) {
108
- initializing = false;
109
- return;
110
- }
111
- internalChangedValue = true;
112
- const newValue = values.value?.filter(v => v.k && v.v)
113
- .reduce((r, c) => {
114
- r[c.k] = c.v;
115
- return r;
116
- }, {} as Record<string, ValueType>)
117
- emits("update:modelValue", newValue)
118
- emits("change", newValue)
119
- }, {deep: true})
120
-
121
- watch(() => props.valueType, () => {
122
- setupValueComponentType();
123
- })
124
- </script>
125
-
126
- <template>
127
- <div style="width: 100%;" class="ja-enum-list">
128
- <div class="ja-input-box" v-for="(v, index) in values" :key="index">
129
- <el-input v-model="v.k" :size="size" placeholder="键"></el-input>
130
- <div class="splitter">
131
- <el-text>:</el-text>
132
- </div>
133
- <component v-model="v.v" :size="size" placeholder="值" :is="valueCompType"
134
- v-bind="valueCompProps">
135
- <template v-if="props.valueType == 'Enum'">
136
- <el-option v-for="k in Object.keys(props.enumValues?? {})" :key="k"
137
- :label="k" :value="props.enumValues ? props.enumValues[k]: ''"
138
- ></el-option>
139
- </template>
140
- </component>
141
- <el-tooltip content="删除" placement="right">
142
- <div class="el-input-group__append" v-show="index < (values?.length ?? 0) - 1">
143
- <el-button link :icon="Minus" @click="removeValue(index)" :size="size">
144
- </el-button>
145
- </div>
146
- </el-tooltip>
147
- <el-tooltip content="添加" placement="right">
148
- <div class="el-input-group__append" v-show="index === (values?.length ?? 0) - 1">
149
- <el-button @click="addValue()" :size="size"
150
- link :icon="Plus">
151
- </el-button>
152
- </div>
153
- </el-tooltip>
154
- </div>
155
- </div>
156
- </template>
157
-
158
- <style scoped lang="scss">
159
- .ja-enum-list {
160
- display: flex;
161
- flex-direction: column;
162
- gap: 8px;
163
-
164
- .ja-input-box {
165
- display: flex;
166
- gap: 4px;
167
-
168
- .el-input-group__append {
169
- flex: none;
170
- margin-left: 0 !important;
171
- }
172
-
173
- .el-select {
174
- flex: auto;
175
- }
176
-
177
- .el-input-number {
178
- flex: auto;
179
- width: 100% !important;
180
- }
181
-
182
- .el-input {
183
- flex: auto;
184
- }
185
-
186
- .splitter {
187
- flex: none;
188
- }
189
- }
190
- }
191
- </style>
1
+ <script setup lang="ts">
2
+ import {Minus, Plus} from "@element-plus/icons-vue";
3
+ import {watch, ref, onBeforeMount, type Component} from "vue";
4
+ import {ElButton, ElDatePicker, ElInput, ElInputNumber, ElSelect, ElSwitch} from "element-plus";
5
+
6
+ type ValueType = string | number | boolean | undefined;
7
+
8
+ const props = withDefaults(defineProps<{
9
+ modelValue: Record<string, ValueType>,
10
+ enumValues?: Record<string, string>,
11
+ valueType?: 'String' | 'Integer' | 'Long' | 'Decimal' | 'Enum' | 'Boolean' | 'DATE' | 'TIMESTAMP',
12
+ size?: 'small' | 'large' | 'default'
13
+ }>(), {
14
+ valueType: 'String'
15
+ })
16
+ const emits = defineEmits(["update:modelValue", "change"])
17
+
18
+ function removeValue(index: number) {
19
+ values.value?.splice(index, 1);
20
+ }
21
+
22
+ function addValue() {
23
+ values.value?.push({k: ""})
24
+ }
25
+
26
+ const values = ref<{
27
+ k: string,
28
+ v?: ValueType
29
+ }[]>([])
30
+
31
+ let initializing = false;
32
+ let internalChangedValue = false;
33
+
34
+ let valueCompType = ref<Component>();
35
+ let valueCompProps = ref<object>({});
36
+
37
+ function setupValueComponentType() {
38
+ console.log('map item value comp type:', props.valueType);
39
+ switch (props.valueType) {
40
+ case "String":
41
+ valueCompType.value = ElInput;
42
+ valueCompProps.value = {}
43
+ break;
44
+ case "Integer":
45
+ case "Long":
46
+ valueCompType.value = ElInputNumber;
47
+ break;
48
+ case "Decimal":
49
+ valueCompType.value = ElInputNumber;
50
+ valueCompProps.value = {
51
+ precision: 2,
52
+ step: 0.1
53
+ }
54
+ break;
55
+ case "Enum":
56
+ valueCompType.value = ElSelect;
57
+ break;
58
+ case "Boolean":
59
+ valueCompType.value = ElSwitch;
60
+ break;
61
+ case "DATE":
62
+ valueCompType.value = ElDatePicker;
63
+ valueCompProps.value = {
64
+ type: "date"
65
+ }
66
+ break;
67
+ case "TIMESTAMP":
68
+ valueCompType.value = ElDatePicker;
69
+ valueCompProps.value = {
70
+ type: "datetime"
71
+ }
72
+ break;
73
+ }
74
+ }
75
+
76
+ onBeforeMount(() => {
77
+ initializeModelValue(props.modelValue)
78
+ setupValueComponentType();
79
+ })
80
+
81
+ function initializeModelValue(n: Record<string, ValueType>) {
82
+ if (internalChangedValue) {
83
+ internalChangedValue = false;
84
+ return;
85
+ }
86
+ if (n) {
87
+ initializing = true;
88
+ const keys = Object.keys(n);
89
+ values.value = keys.map(k => {
90
+ return {k: k, v: n[k]}
91
+ });
92
+ if (values.value.length == 0) {
93
+ values.value.push({k: ""});
94
+ }
95
+ } else {
96
+ values.value = [{k: ""}]
97
+ }
98
+ }
99
+
100
+ watch(() => props.modelValue, (n: Record<string, ValueType>) => {
101
+ initializeModelValue(n);
102
+ }, {
103
+ deep: true
104
+ })
105
+
106
+ watch(() => values.value, () => {
107
+ if (initializing) {
108
+ initializing = false;
109
+ return;
110
+ }
111
+ internalChangedValue = true;
112
+ const newValue = values.value?.filter(v => v.k && v.v)
113
+ .reduce((r, c) => {
114
+ r[c.k] = c.v;
115
+ return r;
116
+ }, {} as Record<string, ValueType>)
117
+ emits("update:modelValue", newValue)
118
+ emits("change", newValue)
119
+ }, {deep: true})
120
+
121
+ watch(() => props.valueType, () => {
122
+ setupValueComponentType();
123
+ })
124
+ </script>
125
+
126
+ <template>
127
+ <div style="width: 100%;" class="ja-enum-list">
128
+ <div class="ja-input-box" v-for="(v, index) in values" :key="index">
129
+ <el-input v-model="v.k" :size="size" placeholder="键"></el-input>
130
+ <div class="splitter">
131
+ <el-text>:</el-text>
132
+ </div>
133
+ <component v-model="v.v" :size="size" placeholder="值" :is="valueCompType"
134
+ v-bind="valueCompProps">
135
+ <template v-if="props.valueType == 'Enum'">
136
+ <el-option v-for="k in Object.keys(props.enumValues?? {})" :key="k"
137
+ :label="k" :value="props.enumValues ? props.enumValues[k]: ''"
138
+ ></el-option>
139
+ </template>
140
+ </component>
141
+ <el-tooltip content="删除" placement="right">
142
+ <div class="el-input-group__append" v-show="index < (values?.length ?? 0) - 1">
143
+ <el-button link :icon="Minus" @click="removeValue(index)" :size="size">
144
+ </el-button>
145
+ </div>
146
+ </el-tooltip>
147
+ <el-tooltip content="添加" placement="right">
148
+ <div class="el-input-group__append" v-show="index === (values?.length ?? 0) - 1">
149
+ <el-button @click="addValue()" :size="size"
150
+ link :icon="Plus">
151
+ </el-button>
152
+ </div>
153
+ </el-tooltip>
154
+ </div>
155
+ </div>
156
+ </template>
157
+
158
+ <style scoped lang="scss">
159
+ .ja-enum-list {
160
+ display: flex;
161
+ flex-direction: column;
162
+ gap: 8px;
163
+
164
+ .ja-input-box {
165
+ display: flex;
166
+ gap: 4px;
167
+
168
+ .el-input-group__append {
169
+ flex: none;
170
+ margin-left: 0 !important;
171
+ }
172
+
173
+ .el-select {
174
+ flex: auto;
175
+ }
176
+
177
+ .el-input-number {
178
+ flex: auto;
179
+ width: 100% !important;
180
+ }
181
+
182
+ .el-input {
183
+ flex: auto;
184
+ }
185
+
186
+ .splitter {
187
+ flex: none;
188
+ }
189
+ }
190
+ }
191
+ </style>