@jari-ace/element-plus-component 0.1.9 → 0.2.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 (140) hide show
  1. package/README.md +18 -18
  2. package/dist/components/userPicker/src/UserPicker.vue.d.ts +17 -0
  3. package/dist/components/userPicker/src/UserPicker.vue.d.ts.map +1 -1
  4. package/dist/components/userPicker/src/UserPicker.vue.js +15 -0
  5. package/dist/components/userPicker/src/UserPicker.vue.js.map +1 -1
  6. package/dist/components/userSelectDialog/src/userSelectDialog.vue.d.ts +17 -0
  7. package/dist/components/userSelectDialog/src/userSelectDialog.vue.d.ts.map +1 -1
  8. package/dist/components/userSelectDialog/src/userSelectDialog.vue.js +15 -0
  9. package/dist/components/userSelectDialog/src/userSelectDialog.vue.js.map +1 -1
  10. package/dist/hooks/useClassificationLevels.d.ts +21 -0
  11. package/dist/hooks/useClassificationLevels.d.ts.map +1 -0
  12. package/dist/hooks/useClassificationLevels.js +55 -0
  13. package/dist/hooks/useClassificationLevels.js.map +1 -0
  14. package/dist/hooks/useUserRefQuery.d.ts +6 -0
  15. package/dist/hooks/useUserRefQuery.d.ts.map +1 -1
  16. package/dist/hooks/useUserRefQuery.js +4 -0
  17. package/dist/hooks/useUserRefQuery.js.map +1 -1
  18. package/dist/index.d.ts +0 -1
  19. package/dist/index.d.ts.map +1 -1
  20. package/dist/index.js +0 -1
  21. package/dist/index.js.map +1 -1
  22. package/lib/index.css +1 -1
  23. package/lib/index.js +740 -723
  24. package/lib/index.umd.cjs +2 -2
  25. package/package.json +61 -61
  26. package/packages/components/autoComplete/JaAutoComplete.vue +47 -47
  27. package/packages/components/autoComplete/index.ts +5 -5
  28. package/packages/components/avatar/JaAvatar.vue +126 -126
  29. package/packages/components/avatar/avatarToken.ts +11 -11
  30. package/packages/components/avatar/defaultImg.ts +14 -14
  31. package/packages/components/avatar/index.ts +7 -7
  32. package/packages/components/button/JaButton.vue +51 -51
  33. package/packages/components/button/index.ts +4 -4
  34. package/packages/components/channelPicker/index.ts +7 -7
  35. package/packages/components/channelPicker/src/ChannelPicker.vue +43 -43
  36. package/packages/components/channelPicker/src/JaChannelPicker.vue +42 -42
  37. package/packages/components/checkbox/JaCheckbox.vue +73 -73
  38. package/packages/components/checkbox/index.ts +4 -4
  39. package/packages/components/checkboxGroup/JaCheckboxGroup.vue +45 -45
  40. package/packages/components/checkboxGroup/index.ts +4 -4
  41. package/packages/components/customGroupTree/index.ts +10 -10
  42. package/packages/components/customGroupTree/src/customGroupTree.vue +91 -91
  43. package/packages/components/datePicker/JaDatePicker.vue +52 -52
  44. package/packages/components/datePicker/index.ts +4 -4
  45. package/packages/components/departmentPicker/index.ts +4 -4
  46. package/packages/components/departmentPicker/src/DepartmentPicker.vue +107 -107
  47. package/packages/components/departmentPicker/src/consts.ts +2 -2
  48. package/packages/components/departmentTree/index.ts +10 -10
  49. package/packages/components/departmentTree/src/departmentTree.vue +135 -135
  50. package/packages/components/dropdownButton/JaDropdownButton.vue +59 -59
  51. package/packages/components/dropdownButton/index.ts +4 -4
  52. package/packages/components/enumList/EnumListInput.vue +107 -107
  53. package/packages/components/enumList/JaEnumList.vue +39 -39
  54. package/packages/components/enumList/index.ts +7 -7
  55. package/packages/components/enumPicker/index.ts +5 -5
  56. package/packages/components/enumPicker/src/EnumPicker.vue +103 -103
  57. package/packages/components/form/JaForm.vue +186 -186
  58. package/packages/components/form/index.ts +5 -5
  59. package/packages/components/form/types.ts +4 -4
  60. package/packages/components/formItem/JaFormItem.vue +68 -68
  61. package/packages/components/formItem/index.ts +4 -4
  62. package/packages/components/index.ts +34 -34
  63. package/packages/components/input/JaInput.vue +143 -143
  64. package/packages/components/input/index.ts +4 -4
  65. package/packages/components/inputI18n/I18nBundleEditor.vue +76 -76
  66. package/packages/components/inputI18n/InputI18n.vue +146 -146
  67. package/packages/components/inputI18n/JaInputI18n.vue +50 -50
  68. package/packages/components/inputI18n/index.ts +8 -8
  69. package/packages/components/inputNumber/JaInputNumber.vue +98 -98
  70. package/packages/components/inputNumber/index.ts +4 -4
  71. package/packages/components/mapItemList/JaMapItemList.vue +35 -35
  72. package/packages/components/mapItemList/MapItemListInput.vue +191 -191
  73. package/packages/components/mapItemList/index.ts +7 -7
  74. package/packages/components/numberList/JaNumberList.vue +36 -36
  75. package/packages/components/numberList/NumberListInput.vue +111 -111
  76. package/packages/components/numberList/index.ts +7 -7
  77. package/packages/components/properyPicker/JaPropertyPicker.vue +38 -38
  78. package/packages/components/properyPicker/PropertyPicker.vue +314 -314
  79. package/packages/components/properyPicker/index.ts +7 -7
  80. package/packages/components/radioGroup/JaRadioGroup.vue +50 -50
  81. package/packages/components/radioGroup/index.ts +4 -4
  82. package/packages/components/rolePicker/RoleEditor.vue +129 -129
  83. package/packages/components/rolePicker/RolePicker.vue +44 -44
  84. package/packages/components/rolePicker/RolePickerRaw.vue +56 -56
  85. package/packages/components/rolePicker/baseRolePicker.vue +87 -87
  86. package/packages/components/rolePicker/index.ts +10 -10
  87. package/packages/components/scrollbar/Scrollbar.vue +89 -89
  88. package/packages/components/scrollbar/index.ts +5 -5
  89. package/packages/components/scrollbar/utils.ts +17 -17
  90. package/packages/components/select/JaSelect.vue +48 -48
  91. package/packages/components/select/index.ts +4 -4
  92. package/packages/components/stringList/JaStringList.vue +36 -36
  93. package/packages/components/stringList/StringListInput.vue +96 -96
  94. package/packages/components/stringList/index.ts +7 -7
  95. package/packages/components/switch/JaSwitch.vue +50 -50
  96. package/packages/components/switch/index.ts +4 -4
  97. package/packages/components/timePicker/JaTimePicker.vue +52 -52
  98. package/packages/components/timePicker/index.ts +5 -5
  99. package/packages/components/tip/index.ts +4 -4
  100. package/packages/components/tip/src/AceTip.vue +43 -43
  101. package/packages/components/upload/index.ts +6 -6
  102. package/packages/components/upload/src/Upload.vue +25 -25
  103. package/packages/components/upload/src/type.ts +3 -3
  104. package/packages/components/userGroupPicker/index.ts +4 -4
  105. package/packages/components/userGroupPicker/src/UserGroupPicker.vue +94 -94
  106. package/packages/components/userGroupTree/index.ts +10 -10
  107. package/packages/components/userGroupTree/src/userGroupTree.vue +149 -149
  108. package/packages/components/userPicker/index.ts +10 -10
  109. package/packages/components/userPicker/src/CustomGroupManager.vue +189 -189
  110. package/packages/components/userPicker/src/JaUserList.vue +283 -283
  111. package/packages/components/userPicker/src/JaUserPicker.vue +37 -37
  112. package/packages/components/userPicker/src/UserPicker.vue +376 -368
  113. package/packages/components/userSelectDialog/index.ts +6 -6
  114. package/packages/components/userSelectDialog/src/userSelectDialog.vue +462 -455
  115. package/packages/components/userTag/UserInfoTag.vue +397 -397
  116. package/packages/components/userTag/index.ts +6 -6
  117. package/packages/components/userTag/sharedAxios.ts +8 -8
  118. package/packages/directives/auth/index.ts +41 -41
  119. package/packages/directives/autofocus/index.ts +29 -29
  120. package/packages/directives/index.ts +10 -10
  121. package/packages/directives/shortcut/index.ts +192 -192
  122. package/packages/hooks/useAppInstances.ts +34 -34
  123. package/packages/hooks/useBridage.ts +157 -157
  124. package/packages/hooks/useClassificationLevels.ts +62 -0
  125. package/packages/hooks/useDateTimeShortCuts.ts +65 -65
  126. package/packages/hooks/useRealms.ts +28 -28
  127. package/packages/hooks/useTreeData.ts +45 -45
  128. package/packages/hooks/useUserRefQuery.ts +232 -224
  129. package/packages/index.ts +21 -22
  130. package/packages/list.json +7 -7
  131. package/packages/types/custom.d.ts +13 -13
  132. package/packages/types/window.d.ts +16 -16
  133. package/packages/utils/install.ts +43 -43
  134. package/packages/utils/objectUtils.ts +31 -31
  135. package/theme-style/fonts/iconfont.json +5196 -5196
  136. package/theme-style/index.scss +10 -10
  137. package/theme-style/styles/element-plus-var.scss +1419 -1419
  138. package/theme-style/styles/iconfont.css +2979 -2979
  139. package/theme-style/styles/theme-var.scss +72 -72
  140. package/theme-style/styles/transition.scss +122 -122
@@ -1,146 +1,146 @@
1
- <script setup lang="ts">
2
- import {ElInput, ElOption, ElSelect} from "element-plus";
3
- import {nextTick, onUnmounted, ref, watch} from "vue"
4
- import {
5
- createAxiosWithoutCache,
6
- useAppMessageApi,
7
- useLoginUser
8
- } from "@jari-ace/app-bolts";
9
- import MessageEditor from "./I18nBundleEditor.vue"
10
- import {trim} from "lodash-es";
11
- import {useAppInstances} from "../../hooks/useAppInstances";
12
- import debounce from "lodash-es/debounce";
13
- import {JaButton} from "../button";
14
-
15
- const props = withDefaults(defineProps<{
16
- appId?: string,
17
- size?: 'default' | 'large' | 'small',
18
- textarea?: boolean,
19
- disabled?: boolean
20
- }>(), {
21
- size: 'default',
22
- textarea: false
23
- })
24
- const model = defineModel<string>({
25
- default: ""
26
- })
27
- const axios = createAxiosWithoutCache()
28
- const api = useAppMessageApi(axios)
29
- const locale = useLoginUser().locale
30
- const messageKeys = ref<string[]>()
31
- const focused = ref(false)
32
- const editorVisible = ref(false)
33
- const select = ref<InstanceType<typeof ElSelect>>()
34
- const appName = ref("");
35
- const appInstances = await useAppInstances();
36
- const filterKey = ref("")
37
- const i18nTxt = ref("")
38
- const selectI18n = ref<InstanceType<typeof ElSelect>>();
39
- const emits = defineEmits(["change", "focus", "blur"])
40
- const debounceLoadMessage = debounce(loadMessage, 500)
41
- let timeoutHandle: number | undefined = undefined;
42
-
43
- async function loadMessage(val?: string) {
44
- if (!val) val = model.value;
45
- if (!props.appId) return
46
- const app = await appInstances.getById(props.appId)
47
- appName.value = app.name
48
- if (!val || !appName.value) {
49
- i18nTxt.value = "";
50
- return;
51
- }
52
- i18nTxt.value = val
53
- let key = val;
54
- if (val && val.length > 0) {
55
- key = trim(key);
56
- if (key.startsWith('{') && key.endsWith('}')) {
57
- key = key.substring(1, key.length - 1);
58
- }
59
- }
60
- const messages = await api.getByKey(appName.value, key, {
61
- cancelDuplicatedRequest: false
62
- });
63
- const message = messages.find(m => m.locale === locale)
64
- if (message) {
65
- i18nTxt.value = message.message
66
- }
67
- }
68
-
69
- async function filterMessages(filterName: string) {
70
- filterKey.value = filterName
71
- messageKeys.value = await api.searchKeys(appName.value, filterName)
72
- }
73
-
74
- async function onFocus() {
75
- focused.value = true;
76
- await nextTick()
77
- emits("focus")
78
- select.value?.focus()
79
- }
80
-
81
- function onBlur() {
82
- timeoutHandle = setTimeout(() => {
83
- focused.value = false
84
- }, 200)
85
- emits("blur")
86
- }
87
-
88
- onUnmounted(() => {
89
- debounceLoadMessage.cancel()
90
- if (timeoutHandle) {
91
- clearTimeout(timeoutHandle)
92
- }
93
- })
94
-
95
- watch(model, () => {
96
- debounceLoadMessage();
97
- }, {
98
- deep: true,
99
- immediate: true
100
- })
101
-
102
- function onChange(value: string) {
103
- emits('change', value)
104
- }
105
-
106
- async function onNewI18nCreated(messageKey: string) {
107
- await filterMessages(filterKey.value);
108
- model.value = "{" + messageKey + "}";
109
- selectI18n.value.focus
110
- }
111
-
112
- defineExpose({
113
- focus() {
114
- selectI18n?.value.focus()
115
- },
116
- blur() {
117
- select?.value.blur()
118
- }
119
- })
120
- </script>
121
-
122
- <template>
123
- <el-input ref="selectI18n" @focus="onFocus" v-show="!focused" v-model="i18nTxt" :size="size"
124
- :disabled="disabled"
125
- :type="textarea ? 'textarea': undefined">
126
- </el-input>
127
- <el-select ref="select" filterable remote :remote-method="filterMessages" v-show="focused"
128
- :disabled="disabled" default-first-option
129
- remote-show-suffix @change="onChange" :size="size" allow-create clearable
130
- @blur="onBlur" v-model="model">
131
- <el-option v-for="k in messageKeys" :key="k" :value="'{' + k +'}'"
132
- :label="'{' + k +'}'"></el-option>
133
- <template #footer>
134
- <ja-button link :style="{width: '100%'}" type="primary" @click="editorVisible=true"
135
- shortcut="Alt+I">
136
- 新建国际化文本(Alt+I)
137
- </ja-button>
138
- </template>
139
- </el-select>
140
- <message-editor :app-id="appId" :pre-key="filterKey" v-model="editorVisible"
141
- @success="onNewI18nCreated"></message-editor>
142
- </template>
143
-
144
- <style scoped lang="scss">
145
-
146
- </style>
1
+ <script setup lang="ts">
2
+ import {ElInput, ElOption, ElSelect} from "element-plus";
3
+ import {nextTick, onUnmounted, ref, watch} from "vue"
4
+ import {
5
+ createAxiosWithoutCache,
6
+ useAppMessageApi,
7
+ useLoginUser
8
+ } from "@jari-ace/app-bolts";
9
+ import MessageEditor from "./I18nBundleEditor.vue"
10
+ import {trim} from "lodash-es";
11
+ import {useAppInstances} from "../../hooks/useAppInstances";
12
+ import debounce from "lodash-es/debounce";
13
+ import {JaButton} from "../button";
14
+
15
+ const props = withDefaults(defineProps<{
16
+ appId?: string,
17
+ size?: 'default' | 'large' | 'small',
18
+ textarea?: boolean,
19
+ disabled?: boolean
20
+ }>(), {
21
+ size: 'default',
22
+ textarea: false
23
+ })
24
+ const model = defineModel<string>({
25
+ default: ""
26
+ })
27
+ const axios = createAxiosWithoutCache()
28
+ const api = useAppMessageApi(axios)
29
+ const locale = useLoginUser().locale
30
+ const messageKeys = ref<string[]>()
31
+ const focused = ref(false)
32
+ const editorVisible = ref(false)
33
+ const select = ref<InstanceType<typeof ElSelect>>()
34
+ const appName = ref("");
35
+ const appInstances = await useAppInstances();
36
+ const filterKey = ref("")
37
+ const i18nTxt = ref("")
38
+ const selectI18n = ref<InstanceType<typeof ElSelect>>();
39
+ const emits = defineEmits(["change", "focus", "blur"])
40
+ const debounceLoadMessage = debounce(loadMessage, 500)
41
+ let timeoutHandle: number | undefined = undefined;
42
+
43
+ async function loadMessage(val?: string) {
44
+ if (!val) val = model.value;
45
+ if (!props.appId) return
46
+ const app = await appInstances.getById(props.appId)
47
+ appName.value = app.name
48
+ if (!val || !appName.value) {
49
+ i18nTxt.value = "";
50
+ return;
51
+ }
52
+ i18nTxt.value = val
53
+ let key = val;
54
+ if (val && val.length > 0) {
55
+ key = trim(key);
56
+ if (key.startsWith('{') && key.endsWith('}')) {
57
+ key = key.substring(1, key.length - 1);
58
+ }
59
+ }
60
+ const messages = await api.getByKey(appName.value, key, {
61
+ cancelDuplicatedRequest: false
62
+ });
63
+ const message = messages.find(m => m.locale === locale)
64
+ if (message) {
65
+ i18nTxt.value = message.message
66
+ }
67
+ }
68
+
69
+ async function filterMessages(filterName: string) {
70
+ filterKey.value = filterName
71
+ messageKeys.value = await api.searchKeys(appName.value, filterName)
72
+ }
73
+
74
+ async function onFocus() {
75
+ focused.value = true;
76
+ await nextTick()
77
+ emits("focus")
78
+ select.value?.focus()
79
+ }
80
+
81
+ function onBlur() {
82
+ timeoutHandle = setTimeout(() => {
83
+ focused.value = false
84
+ }, 200)
85
+ emits("blur")
86
+ }
87
+
88
+ onUnmounted(() => {
89
+ debounceLoadMessage.cancel()
90
+ if (timeoutHandle) {
91
+ clearTimeout(timeoutHandle)
92
+ }
93
+ })
94
+
95
+ watch(model, () => {
96
+ debounceLoadMessage();
97
+ }, {
98
+ deep: true,
99
+ immediate: true
100
+ })
101
+
102
+ function onChange(value: string) {
103
+ emits('change', value)
104
+ }
105
+
106
+ async function onNewI18nCreated(messageKey: string) {
107
+ await filterMessages(filterKey.value);
108
+ model.value = "{" + messageKey + "}";
109
+ selectI18n.value.focus
110
+ }
111
+
112
+ defineExpose({
113
+ focus() {
114
+ selectI18n?.value.focus()
115
+ },
116
+ blur() {
117
+ select?.value.blur()
118
+ }
119
+ })
120
+ </script>
121
+
122
+ <template>
123
+ <el-input ref="selectI18n" @focus="onFocus" v-show="!focused" v-model="i18nTxt" :size="size"
124
+ :disabled="disabled"
125
+ :type="textarea ? 'textarea': undefined">
126
+ </el-input>
127
+ <el-select ref="select" filterable remote :remote-method="filterMessages" v-show="focused"
128
+ :disabled="disabled" default-first-option
129
+ remote-show-suffix @change="onChange" :size="size" allow-create clearable
130
+ @blur="onBlur" v-model="model">
131
+ <el-option v-for="k in messageKeys" :key="k" :value="'{' + k +'}'"
132
+ :label="'{' + k +'}'"></el-option>
133
+ <template #footer>
134
+ <ja-button link :style="{width: '100%'}" type="primary" @click="editorVisible=true"
135
+ shortcut="Alt+I">
136
+ 新建国际化文本(Alt+I)
137
+ </ja-button>
138
+ </template>
139
+ </el-select>
140
+ <message-editor :app-id="appId" :pre-key="filterKey" v-model="editorVisible"
141
+ @success="onNewI18nCreated"></message-editor>
142
+ </template>
143
+
144
+ <style scoped lang="scss">
145
+
146
+ </style>
@@ -1,50 +1,50 @@
1
- <script setup lang="ts">
2
- import type {ValidationInstance} from '../../hooks/useBackendValidations'
3
- import {inject, ref, watch} from "vue";
4
- import {ElSelect} from "element-plus";
5
- import {getValue, setValue} from "../../utils/objectUtils";
6
- import InputI18n from "./InputI18n.vue";
7
-
8
- const input = ref<typeof ElSelect>({} as typeof ElSelect)
9
- const model = inject('aceFormModel') as Record<string, any>
10
- const prop = inject('aceFormItemProp') as string
11
- const validator = inject('aceFormValidator') as ValidationInstance
12
- const emit = defineEmits<{
13
- change: [value: string]
14
- }>()
15
- const props = defineProps<{
16
- appId: string
17
- }>()
18
-
19
- function onChange(value: string) {
20
- validator.removeFieldError(prop)
21
- setValue(model.formData, prop, value);
22
- emit('change', value)
23
- }
24
-
25
- type modelType = string;
26
-
27
- const mv = ref<modelType>();
28
- watch(() => model.formData, () => {
29
- const v = getValue(model.formData, prop) as modelType
30
- mv.value = v;
31
- }, {
32
- immediate: true,
33
- deep: true
34
- })
35
-
36
- defineExpose({
37
- focus: () => input.value.focus(),
38
- blur: () => input.value.blur(),
39
- elSelect: input
40
- })
41
- </script>
42
-
43
- <template>
44
- <input-i18n
45
- ref="input"
46
- v-model="mv"
47
- @change="onChange"
48
- v-bind="$attrs" :app-id="props.appId">
49
- </input-i18n>
50
- </template>
1
+ <script setup lang="ts">
2
+ import type {ValidationInstance} from '../../hooks/useBackendValidations'
3
+ import {inject, ref, watch} from "vue";
4
+ import {ElSelect} from "element-plus";
5
+ import {getValue, setValue} from "../../utils/objectUtils";
6
+ import InputI18n from "./InputI18n.vue";
7
+
8
+ const input = ref<typeof ElSelect>({} as typeof ElSelect)
9
+ const model = inject('aceFormModel') as Record<string, any>
10
+ const prop = inject('aceFormItemProp') as string
11
+ const validator = inject('aceFormValidator') as ValidationInstance
12
+ const emit = defineEmits<{
13
+ change: [value: string]
14
+ }>()
15
+ const props = defineProps<{
16
+ appId: string
17
+ }>()
18
+
19
+ function onChange(value: string) {
20
+ validator.removeFieldError(prop)
21
+ setValue(model.formData, prop, value);
22
+ emit('change', value)
23
+ }
24
+
25
+ type modelType = string;
26
+
27
+ const mv = ref<modelType>();
28
+ watch(() => model.formData, () => {
29
+ const v = getValue(model.formData, prop) as modelType
30
+ mv.value = v;
31
+ }, {
32
+ immediate: true,
33
+ deep: true
34
+ })
35
+
36
+ defineExpose({
37
+ focus: () => input.value.focus(),
38
+ blur: () => input.value.blur(),
39
+ elSelect: input
40
+ })
41
+ </script>
42
+
43
+ <template>
44
+ <input-i18n
45
+ ref="input"
46
+ v-model="mv"
47
+ @change="onChange"
48
+ v-bind="$attrs" :app-id="props.appId">
49
+ </input-i18n>
50
+ </template>
@@ -1,8 +1,8 @@
1
- import {type SFCWithInstall, withInstall} from "../../utils/install";
2
- import InputI18n from "./InputI18n.vue";
3
- import _JaInputI18n from "./JaInputI18n.vue";
4
-
5
- // 存在绑定的model watch不响应的问题,需用点击第二次watch才响应mv变化,这个问题无法解决
6
- // export const JaInputI18n: SFCWithInstall<typeof _JaInputI18n> = withInstall(_JaInputI18n);
7
-
8
- export const JaInputI18nRaw: SFCWithInstall<typeof InputI18n> = withInstall(InputI18n);
1
+ import {type SFCWithInstall, withInstall} from "../../utils/install";
2
+ import InputI18n from "./InputI18n.vue";
3
+ import _JaInputI18n from "./JaInputI18n.vue";
4
+
5
+ // 存在绑定的model watch不响应的问题,需用点击第二次watch才响应mv变化,这个问题无法解决
6
+ // export const JaInputI18n: SFCWithInstall<typeof _JaInputI18n> = withInstall(_JaInputI18n);
7
+
8
+ export const JaInputI18nRaw: SFCWithInstall<typeof InputI18n> = withInstall(InputI18n);
@@ -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;