@jari-ace/element-plus-component 0.0.2 → 0.1.1

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