@jari-ace/element-plus-component 0.1.0 → 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 (126) hide show
  1. package/README.md +18 -18
  2. package/dist/components/tip/index.d.ts +1 -35
  3. package/dist/components/tip/index.d.ts.map +1 -1
  4. package/dist/components/upload/index.d.ts +1 -1
  5. package/dist/components/upload/index.d.ts.map +1 -1
  6. package/dist/hooks/useBridage.d.ts +3 -3
  7. package/dist/hooks/useBridage.d.ts.map +1 -1
  8. package/dist/hooks/useBridage.js +29 -22
  9. package/dist/hooks/useBridage.js.map +1 -1
  10. package/dist/hooks/useUserRefQuery.d.ts +2 -2
  11. package/lib/index.css +1 -1
  12. package/lib/index.js +32 -28
  13. package/lib/index.umd.cjs +2 -2
  14. package/package.json +61 -61
  15. package/packages/components/autoComplete/JaAutoComplete.vue +47 -47
  16. package/packages/components/autoComplete/index.ts +5 -5
  17. package/packages/components/avatar/JaAvatar.vue +126 -126
  18. package/packages/components/avatar/avatarToken.ts +11 -11
  19. package/packages/components/avatar/defaultImg.ts +14 -14
  20. package/packages/components/avatar/index.ts +7 -7
  21. package/packages/components/button/JaButton.vue +51 -51
  22. package/packages/components/button/index.ts +4 -4
  23. package/packages/components/channelPicker/index.ts +7 -7
  24. package/packages/components/channelPicker/src/ChannelPicker.vue +43 -43
  25. package/packages/components/channelPicker/src/JaChannelPicker.vue +42 -42
  26. package/packages/components/checkbox/JaCheckbox.vue +73 -73
  27. package/packages/components/checkbox/index.ts +4 -4
  28. package/packages/components/checkboxGroup/JaCheckboxGroup.vue +45 -45
  29. package/packages/components/checkboxGroup/index.ts +4 -4
  30. package/packages/components/customGroupTree/index.ts +10 -10
  31. package/packages/components/customGroupTree/src/customGroupTree.vue +91 -91
  32. package/packages/components/datePicker/JaDatePicker.vue +52 -52
  33. package/packages/components/datePicker/index.ts +4 -4
  34. package/packages/components/departmentPicker/index.ts +4 -4
  35. package/packages/components/departmentPicker/src/DepartmentPicker.vue +107 -107
  36. package/packages/components/departmentPicker/src/consts.ts +2 -2
  37. package/packages/components/departmentTree/index.ts +10 -10
  38. package/packages/components/departmentTree/src/departmentTree.vue +135 -135
  39. package/packages/components/dropdownButton/JaDropdownButton.vue +59 -59
  40. package/packages/components/dropdownButton/index.ts +4 -4
  41. package/packages/components/enumList/EnumListInput.vue +107 -107
  42. package/packages/components/enumList/JaEnumList.vue +39 -39
  43. package/packages/components/enumList/index.ts +7 -7
  44. package/packages/components/form/JaForm.vue +126 -126
  45. package/packages/components/form/index.ts +5 -5
  46. package/packages/components/form/types.ts +4 -4
  47. package/packages/components/formItem/JaFormItem.vue +68 -68
  48. package/packages/components/formItem/index.ts +4 -4
  49. package/packages/components/index.ts +33 -33
  50. package/packages/components/input/JaInput.vue +143 -143
  51. package/packages/components/input/index.ts +4 -4
  52. package/packages/components/inputI18n/I18nBundleEditor.vue +76 -76
  53. package/packages/components/inputI18n/InputI18n.vue +142 -142
  54. package/packages/components/inputI18n/JaInputI18n.vue +50 -50
  55. package/packages/components/inputI18n/index.ts +8 -8
  56. package/packages/components/inputNumber/JaInputNumber.vue +98 -98
  57. package/packages/components/inputNumber/index.ts +4 -4
  58. package/packages/components/mapItemList/JaMapItemList.vue +35 -35
  59. package/packages/components/mapItemList/MapItemListInput.vue +191 -191
  60. package/packages/components/mapItemList/index.ts +7 -7
  61. package/packages/components/numberList/JaNumberList.vue +36 -36
  62. package/packages/components/numberList/NumberListInput.vue +111 -111
  63. package/packages/components/numberList/index.ts +7 -7
  64. package/packages/components/properyPicker/JaPropertyPicker.vue +38 -38
  65. package/packages/components/properyPicker/PropertyPicker.vue +314 -314
  66. package/packages/components/properyPicker/index.ts +7 -7
  67. package/packages/components/radioGroup/JaRadioGroup.vue +50 -50
  68. package/packages/components/radioGroup/index.ts +4 -4
  69. package/packages/components/rolePicker/RoleEditor.vue +129 -129
  70. package/packages/components/rolePicker/RolePicker.vue +44 -44
  71. package/packages/components/rolePicker/RolePickerRaw.vue +56 -56
  72. package/packages/components/rolePicker/baseRolePicker.vue +86 -86
  73. package/packages/components/rolePicker/index.ts +10 -10
  74. package/packages/components/scrollbar/Scrollbar.vue +89 -89
  75. package/packages/components/scrollbar/index.ts +5 -5
  76. package/packages/components/scrollbar/utils.ts +17 -17
  77. package/packages/components/select/JaSelect.vue +48 -48
  78. package/packages/components/select/index.ts +4 -4
  79. package/packages/components/stringList/JaStringList.vue +36 -36
  80. package/packages/components/stringList/StringListInput.vue +96 -96
  81. package/packages/components/stringList/index.ts +7 -7
  82. package/packages/components/switch/JaSwitch.vue +50 -50
  83. package/packages/components/switch/index.ts +4 -4
  84. package/packages/components/timePicker/JaTimePicker.vue +52 -52
  85. package/packages/components/timePicker/index.ts +5 -5
  86. package/packages/components/tip/index.ts +4 -4
  87. package/packages/components/tip/src/AceTip.vue +43 -43
  88. package/packages/components/upload/index.ts +6 -6
  89. package/packages/components/upload/src/Upload.vue +25 -25
  90. package/packages/components/upload/src/type.ts +3 -3
  91. package/packages/components/userGroupPicker/index.ts +4 -4
  92. package/packages/components/userGroupPicker/src/UserGroupPicker.vue +94 -94
  93. package/packages/components/userGroupTree/index.ts +10 -10
  94. package/packages/components/userGroupTree/src/userGroupTree.vue +149 -149
  95. package/packages/components/userPicker/index.ts +10 -10
  96. package/packages/components/userPicker/src/CustomGroupManager.vue +189 -189
  97. package/packages/components/userPicker/src/JaUserList.vue +283 -283
  98. package/packages/components/userPicker/src/JaUserPicker.vue +37 -37
  99. package/packages/components/userPicker/src/UserPicker.vue +366 -366
  100. package/packages/components/userSelectDialog/index.ts +6 -6
  101. package/packages/components/userSelectDialog/src/userSelectDialog.vue +447 -447
  102. package/packages/components/userTag/UserInfoTag.vue +397 -397
  103. package/packages/components/userTag/index.ts +6 -6
  104. package/packages/components/userTag/sharedAxios.ts +8 -8
  105. package/packages/directives/auth/index.ts +41 -41
  106. package/packages/directives/autofocus/index.ts +29 -29
  107. package/packages/directives/index.ts +10 -10
  108. package/packages/directives/shortcut/index.ts +192 -192
  109. package/packages/hooks/useAppInstances.ts +34 -34
  110. package/packages/hooks/useBackendValidations.ts +55 -55
  111. package/packages/hooks/useBridage.ts +157 -148
  112. package/packages/hooks/useDateTimeShortCuts.ts +65 -65
  113. package/packages/hooks/useTreeData.ts +45 -45
  114. package/packages/hooks/useUserRefQuery.ts +222 -222
  115. package/packages/index.ts +21 -21
  116. package/packages/list.json +7 -7
  117. package/packages/types/custom.d.ts +13 -13
  118. package/packages/types/window.d.ts +16 -16
  119. package/packages/utils/install.ts +43 -43
  120. package/packages/utils/objectUtils.ts +31 -31
  121. package/theme-style/fonts/iconfont.json +5196 -5196
  122. package/theme-style/index.scss +10 -10
  123. package/theme-style/styles/element-plus-var.scss +1419 -1419
  124. package/theme-style/styles/iconfont.css +2979 -2979
  125. package/theme-style/styles/theme-var.scss +72 -72
  126. 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;