@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,39 +1,39 @@
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 EnumListInput from "./EnumListInput.vue";
6
-
7
- const model = inject('aceFormModel') as Record<string, never>
8
- const prop = inject('aceFormItemProp') as string
9
- const validator = inject('aceFormValidator') as ValidationInstance
10
- const emit = defineEmits<{
11
- change: [value: string[]]
12
- }>()
13
-
14
- const props = defineProps<{ enumValues: Record<string, string> }>()
15
-
16
- function onChange(value: string[]) {
17
- validator.removeFieldError(prop)
18
- setValue(model.formData, prop, mv.value);
19
- emit('change', value)
20
- }
21
-
22
- const mv = ref(getValue(model.formData, prop) as string[] ?? [""]);
23
- watch(() => model.formData, () => {
24
- mv.value = getValue(model.formData, prop) as string[] ?? [""]
25
- }, {
26
- deep: true
27
- })
28
- </script>
29
-
30
- <template>
31
- <enum-list-input v-model="mv"
32
- :enum-values="enumValues"
33
- @change="onChange"
34
- v-bind="$attrs"/>
35
- </template>
36
-
37
- <style scoped lang="scss">
38
-
39
- </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 EnumListInput from "./EnumListInput.vue";
6
+
7
+ const model = inject('aceFormModel') as Record<string, never>
8
+ const prop = inject('aceFormItemProp') as string
9
+ const validator = inject('aceFormValidator') as ValidationInstance
10
+ const emit = defineEmits<{
11
+ change: [value: string[]]
12
+ }>()
13
+
14
+ const props = defineProps<{ enumValues: Record<string, string> }>()
15
+
16
+ function onChange(value: string[]) {
17
+ validator.removeFieldError(prop)
18
+ setValue(model.formData, prop, mv.value);
19
+ emit('change', value)
20
+ }
21
+
22
+ const mv = ref(getValue(model.formData, prop) as string[] ?? [""]);
23
+ watch(() => model.formData, () => {
24
+ mv.value = getValue(model.formData, prop) as string[] ?? [""]
25
+ }, {
26
+ deep: true
27
+ })
28
+ </script>
29
+
30
+ <template>
31
+ <enum-list-input v-model="mv"
32
+ :enum-values="enumValues"
33
+ @change="onChange"
34
+ v-bind="$attrs"/>
35
+ </template>
36
+
37
+ <style scoped lang="scss">
38
+
39
+ </style>
@@ -1,7 +1,7 @@
1
- import {type SFCWithInstall, withInstall} from "../../utils/install";
2
- import EnumList from "./JaEnumList.vue";
3
- import EnumListInput from "./EnumListInput.vue";
4
-
5
- export const JaEnumList: SFCWithInstall<typeof EnumList> = withInstall(EnumList);
6
-
7
- export const JaEnumListRaw: SFCWithInstall<typeof EnumListInput> = withInstall(EnumListInput);
1
+ import {type SFCWithInstall, withInstall} from "../../utils/install";
2
+ import EnumList from "./JaEnumList.vue";
3
+ import EnumListInput from "./EnumListInput.vue";
4
+
5
+ export const JaEnumList: SFCWithInstall<typeof EnumList> = withInstall(EnumList);
6
+
7
+ export const JaEnumListRaw: SFCWithInstall<typeof EnumListInput> = withInstall(EnumListInput);
@@ -1,5 +1,5 @@
1
-
2
- import {type SFCWithInstall, withInstall} from "../../utils/install";
3
- import EnumPicker from "./src/EnumPicker.vue";
4
-
5
- export const JaEnumPicker: SFCWithInstall<typeof EnumPicker> = withInstall(EnumPicker);
1
+
2
+ import {type SFCWithInstall, withInstall} from "../../utils/install";
3
+ import EnumPicker from "./src/EnumPicker.vue";
4
+
5
+ export const JaEnumPicker: SFCWithInstall<typeof EnumPicker> = withInstall(EnumPicker);
@@ -1,103 +1,103 @@
1
- <script setup lang="ts">
2
- import type { EnumValueDefinition } from '@jari-ace/app-bolts';
3
-
4
- import { computed, ref, watch } from 'vue';
5
-
6
- import { createAxiosWithoutCache } from '@jari-ace/app-bolts';
7
- import { useEnumApi } from '@jari-ace/app-bolts';
8
- import { ElOption, ElSelect } from 'element-plus';
9
- // 遍历出EnumValueDefinition类型的KEY 并排除掉
10
- type KeyFields = 'id' | 'text' | 'value';
11
-
12
- interface ModelValue {
13
- value?: string;
14
- text?: string;
15
- id?: string;
16
- }
17
- const props = withDefaults(
18
- defineProps<{
19
- clearable?: boolean; // 是否可清空
20
- filterable?: boolean; // 是否可筛选
21
- keyField?: KeyFields;
22
- multiple?: boolean; // 是否多选
23
- name: string; // 枚举名称,用于获取枚举数据
24
- serviceName: string;
25
- }>(),
26
- {
27
- multiple: false,
28
- clearable: true,
29
- filterable: true,
30
- keyField: 'value',
31
- },
32
- );
33
-
34
- const enums = ref<EnumValueDefinition[]>([]);
35
- const loading = ref<boolean>(false);
36
- const model = defineModel<ModelValue[]>({
37
- default: () => [],
38
- });
39
-
40
- const axios = createAxiosWithoutCache();
41
- const api = useEnumApi(axios);
42
- async function loadData() {
43
- if (!props.name || !props.serviceName) return;
44
- loading.value = true;
45
- api
46
- .queryByName(props.serviceName, props.name)
47
- .then((res) => {
48
- enums.value = res.values;
49
- })
50
- .finally(() => {
51
- loading.value = false;
52
- });
53
- }
54
-
55
- const modelValue = computed((): string | string[] | undefined => {
56
- if (props.multiple) {
57
- return model.value.map((m) => m[props.keyField] as string) || [];
58
- } else {
59
- if (model.value[0] !== undefined) {
60
- return model.value[0][props.keyField];
61
- }
62
- }
63
- return '';
64
- });
65
-
66
- const handleChange = (value: string | string[]) => {
67
- if (typeof value === 'string') {
68
- const obj = enums.value.find((e) => e[props.keyField] === value);
69
- model.value = obj ? [obj] : [];
70
- } else {
71
- model.value = enums.value.filter((e) => value.includes(e[props.keyField]));
72
- }
73
- };
74
-
75
- // function filter(queryName: string) {
76
- // bindingChannels.value = channels.value?.filter(c => c.name.indexOf(queryName) > -1) ?? [];
77
- // }
78
-
79
- loadData();
80
-
81
- watch(() => props.name, loadData);
82
- watch(() => props.serviceName, loadData);
83
- </script>
84
-
85
- <template>
86
- <ElSelect
87
- v-loading="loading"
88
- :model-value="modelValue"
89
- :filterable="props.filterable"
90
- :multiple="props.multiple"
91
- :clearable="props.clearable"
92
- @change="handleChange"
93
- >
94
- <ElOption
95
- v-for="item in enums"
96
- :key="item.id"
97
- :value="item[props.keyField]"
98
- :label="item.text"
99
- />
100
- </ElSelect>
101
- </template>
102
-
103
- <style scoped lang="scss"></style>
1
+ <script setup lang="ts">
2
+ import type { EnumValueDefinition } from '@jari-ace/app-bolts';
3
+
4
+ import { computed, ref, watch } from 'vue';
5
+
6
+ import { createAxiosWithoutCache } from '@jari-ace/app-bolts';
7
+ import { useEnumApi } from '@jari-ace/app-bolts';
8
+ import { ElOption, ElSelect } from 'element-plus';
9
+ // 遍历出EnumValueDefinition类型的KEY 并排除掉
10
+ type KeyFields = 'id' | 'text' | 'value';
11
+
12
+ interface ModelValue {
13
+ value?: string;
14
+ text?: string;
15
+ id?: string;
16
+ }
17
+ const props = withDefaults(
18
+ defineProps<{
19
+ clearable?: boolean; // 是否可清空
20
+ filterable?: boolean; // 是否可筛选
21
+ keyField?: KeyFields;
22
+ multiple?: boolean; // 是否多选
23
+ name: string; // 枚举名称,用于获取枚举数据
24
+ serviceName: string;
25
+ }>(),
26
+ {
27
+ multiple: false,
28
+ clearable: true,
29
+ filterable: true,
30
+ keyField: 'value',
31
+ },
32
+ );
33
+
34
+ const enums = ref<EnumValueDefinition[]>([]);
35
+ const loading = ref<boolean>(false);
36
+ const model = defineModel<ModelValue[]>({
37
+ default: () => [],
38
+ });
39
+
40
+ const axios = createAxiosWithoutCache();
41
+ const api = useEnumApi(axios);
42
+ async function loadData() {
43
+ if (!props.name || !props.serviceName) return;
44
+ loading.value = true;
45
+ api
46
+ .queryByName(props.serviceName, props.name)
47
+ .then((res) => {
48
+ enums.value = res.values;
49
+ })
50
+ .finally(() => {
51
+ loading.value = false;
52
+ });
53
+ }
54
+
55
+ const modelValue = computed((): string | string[] | undefined => {
56
+ if (props.multiple) {
57
+ return model.value.map((m) => m[props.keyField] as string) || [];
58
+ } else {
59
+ if (model.value[0] !== undefined) {
60
+ return model.value[0][props.keyField];
61
+ }
62
+ }
63
+ return '';
64
+ });
65
+
66
+ const handleChange = (value: string | string[]) => {
67
+ if (typeof value === 'string') {
68
+ const obj = enums.value.find((e) => e[props.keyField] === value);
69
+ model.value = obj ? [obj] : [];
70
+ } else {
71
+ model.value = enums.value.filter((e) => value.includes(e[props.keyField]));
72
+ }
73
+ };
74
+
75
+ // function filter(queryName: string) {
76
+ // bindingChannels.value = channels.value?.filter(c => c.name.indexOf(queryName) > -1) ?? [];
77
+ // }
78
+
79
+ loadData();
80
+
81
+ watch(() => props.name, loadData);
82
+ watch(() => props.serviceName, loadData);
83
+ </script>
84
+
85
+ <template>
86
+ <ElSelect
87
+ v-loading="loading"
88
+ :model-value="modelValue"
89
+ :filterable="props.filterable"
90
+ :multiple="props.multiple"
91
+ :clearable="props.clearable"
92
+ @change="handleChange"
93
+ >
94
+ <ElOption
95
+ v-for="item in enums"
96
+ :key="item.id"
97
+ :value="item[props.keyField]"
98
+ :label="item.text"
99
+ />
100
+ </ElSelect>
101
+ </template>
102
+
103
+ <style scoped lang="scss"></style>
@@ -1,146 +1,146 @@
1
- <script setup lang="ts">
2
- import {type PropType, provide, ref, computed, watch} from "vue";
3
- import {ElForm, type FormInstance, type FormRules} from "element-plus";
4
- import {type ValidationInstance} from "../../hooks/useBackendValidations";
5
- import type {JaFormModel} from "./types";
6
- import {mergeRules} from '../../utils/formUtils'
7
- interface Props {
8
- model: JaFormModel,
9
- inline?:boolean,
10
- labelPosition?: "left" | "top" | "right",
11
- labelWidth?: string | number,
12
- labelSuffix?: string,
13
- hideRequiredAsterisk?: boolean,
14
- showMessage?: boolean,
15
- inlineMessage?: boolean,
16
- statusIcon?: boolean,
17
- validateOnRuleChange?: boolean,
18
- rules?: FormRules,
19
- size?: "small" | "default" | "large",
20
- disabled?: boolean,
21
- scrollToError?: boolean,
22
- validator: ValidationInstance,
23
- requiredPosition?: 'left' | 'right'
24
- }
25
-
26
- const formRef = ref<FormInstance | undefined>(undefined);
27
-
28
-
29
- const props = withDefaults(defineProps<Props>(),{
30
- inline:false,
31
- labelPosition:'top',
32
- hideRequiredAsterisk:true,
33
- showMessage:true,
34
- inlineMessage:true,
35
- statusIcon:false,
36
- validateOnRuleChange:true,
37
- size:'small',
38
- scrollToError:true,
39
- requiredPosition:'right',
40
- })
41
-
42
-
43
-
44
-
45
-
46
- defineEmits(["validate", "click"]);
47
- provide("aceFormValidator", props.validator);
48
- provide("aceFormModel", props.model);
49
- provide("aceFormSize", props.size);
50
- provide("aceFormRequiredPosition", props.requiredPosition);
51
- const rules = ref<FormRules>({})
52
-
53
- const model = computed(() => {
54
- return props.model.formData?props.model.formData:props.model;
55
- });
56
-
57
-
58
-
59
- defineExpose({
60
- elForm: formRef,
61
- getElForm:():FormInstance|undefined=>formRef.value,
62
- validate:async (submit: () => Promise<any>, onFail?: () => void) => {
63
- if(!formRef)return;
64
- //先清空之前的校验
65
- formRef.value.clearValidate();
66
- //判断是否有传入rules如果有则先执行 formRef.value!.validate()
67
- if(props.rules && Object.keys(props.rules).length>0){
68
- await formRef.value.validate((valid,fields)=>{
69
- //判断校验是否成功
70
- if(valid){
71
- //前端校验已成功,执行异步submit
72
- submit()
73
- .then(() => {
74
- //成功
75
- //校验通过清楚所有的错误校验信息
76
- props.validator?.clearFiledErrors();
77
- })
78
- .catch(() => {
79
- //失败
80
- //合并rules
81
- rules.value = mergeRules(props.rules, props.validator.rules);
82
- formRef.value.validate();
83
- if (onFail) onFail();
84
- });
85
- }else{
86
- console.log('error submit!',fields)
87
- }
88
- })
89
- }else{
90
- submit()
91
- .then(() => {
92
- props.validator?.clearFiledErrors();
93
- })
94
- .catch(async () => {
95
- //失败
96
- //合并rules
97
- rules.value = mergeRules(props.rules, props.validator.rules);
98
- await formRef.value.validate();
99
- if (onFail) onFail();
100
- });
101
- }
102
-
103
-
104
-
105
- },
106
- getRules: () => rules.value,
107
- });
108
-
109
-
110
- watch(() => props.model.formData, () => {
111
- props.validator?.clearFiledErrors();
112
- })
113
-
114
- watch(() => props.rules, () => {
115
- //合并rules
116
- rules.value = mergeRules(props.rules, props.validator.rules);
117
- }, { immediate: true })
118
-
119
-
120
- </script>
121
-
122
- <template>
123
- <el-form
124
- ref="formRef"
125
- :model="model"
126
- :rules="rules"
127
- :inline="inline"
128
- :label-position="labelPosition"
129
- :label-width="labelWidth"
130
- :label-suffix="labelSuffix"
131
- :hide-required-asterisk="hideRequiredAsterisk"
132
- :show-message="showMessage"
133
- :inline-message="inlineMessage"
134
- :status-icon="statusIcon"
135
- :validate-on-rule-change="validateOnRuleChange"
136
- :size="size"
137
- :disabled="disabled"
138
- :scroll-to-error="scrollToError"
139
- @validate="(prop, isValid, message) => $emit('validate', prop, isValid,message)"
140
- @click="() => $emit('click')"
141
- >
142
- <slot></slot>
143
- </el-form>
144
- </template>
145
-
146
- <style scoped lang="scss"></style>
1
+ <script setup lang="ts">
2
+ import {type PropType, provide, ref, computed, watch} from "vue";
3
+ import {ElForm, type FormInstance, type FormRules} from "element-plus";
4
+ import {type ValidationInstance} from "../../hooks/useBackendValidations";
5
+ import type {JaFormModel} from "./types";
6
+ import {mergeRules} from '../../utils/formUtils'
7
+ interface Props {
8
+ model: JaFormModel,
9
+ inline?:boolean,
10
+ labelPosition?: "left" | "top" | "right",
11
+ labelWidth?: string | number,
12
+ labelSuffix?: string,
13
+ hideRequiredAsterisk?: boolean,
14
+ showMessage?: boolean,
15
+ inlineMessage?: boolean,
16
+ statusIcon?: boolean,
17
+ validateOnRuleChange?: boolean,
18
+ rules?: FormRules,
19
+ size?: "small" | "default" | "large",
20
+ disabled?: boolean,
21
+ scrollToError?: boolean,
22
+ validator: ValidationInstance,
23
+ requiredPosition?: 'left' | 'right'
24
+ }
25
+
26
+ const formRef = ref<FormInstance | undefined>(undefined);
27
+
28
+
29
+ const props = withDefaults(defineProps<Props>(),{
30
+ inline:false,
31
+ labelPosition:'top',
32
+ hideRequiredAsterisk:true,
33
+ showMessage:true,
34
+ inlineMessage:true,
35
+ statusIcon:false,
36
+ validateOnRuleChange:true,
37
+ size:'small',
38
+ scrollToError:true,
39
+ requiredPosition:'right',
40
+ })
41
+
42
+
43
+
44
+
45
+
46
+ defineEmits(["validate", "click"]);
47
+ provide("aceFormValidator", props.validator);
48
+ provide("aceFormModel", props.model);
49
+ provide("aceFormSize", props.size);
50
+ provide("aceFormRequiredPosition", props.requiredPosition);
51
+ const rules = ref<FormRules>({})
52
+
53
+ const model = computed(() => {
54
+ return props.model.formData?props.model.formData:props.model;
55
+ });
56
+
57
+
58
+
59
+ defineExpose({
60
+ elForm: formRef,
61
+ getElForm:():FormInstance|undefined=>formRef.value,
62
+ validate:async (submit: () => Promise<any>, onFail?: () => void) => {
63
+ if(!formRef)return;
64
+ //先清空之前的校验
65
+ formRef.value.clearValidate();
66
+ //判断是否有传入rules如果有则先执行 formRef.value!.validate()
67
+ if(props.rules && Object.keys(props.rules).length>0){
68
+ await formRef.value.validate((valid,fields)=>{
69
+ //判断校验是否成功
70
+ if(valid){
71
+ //前端校验已成功,执行异步submit
72
+ submit()
73
+ .then(() => {
74
+ //成功
75
+ //校验通过清楚所有的错误校验信息
76
+ props.validator?.clearFiledErrors();
77
+ })
78
+ .catch(() => {
79
+ //失败
80
+ //合并rules
81
+ rules.value = mergeRules(props.rules, props.validator.rules);
82
+ formRef.value.validate();
83
+ if (onFail) onFail();
84
+ });
85
+ }else{
86
+ console.log('error submit!',fields)
87
+ }
88
+ })
89
+ }else{
90
+ submit()
91
+ .then(() => {
92
+ props.validator?.clearFiledErrors();
93
+ })
94
+ .catch(async () => {
95
+ //失败
96
+ //合并rules
97
+ rules.value = mergeRules(props.rules, props.validator.rules);
98
+ await formRef.value.validate();
99
+ if (onFail) onFail();
100
+ });
101
+ }
102
+
103
+
104
+
105
+ },
106
+ getRules: () => rules.value,
107
+ });
108
+
109
+
110
+ watch(() => props.model.formData, () => {
111
+ props.validator?.clearFiledErrors();
112
+ })
113
+
114
+ watch(() => props.rules, () => {
115
+ //合并rules
116
+ rules.value = mergeRules(props.rules, props.validator.rules);
117
+ }, { immediate: true })
118
+
119
+
120
+ </script>
121
+
122
+ <template>
123
+ <el-form
124
+ ref="formRef"
125
+ :model="model"
126
+ :rules="rules"
127
+ :inline="inline"
128
+ :label-position="labelPosition"
129
+ :label-width="labelWidth"
130
+ :label-suffix="labelSuffix"
131
+ :hide-required-asterisk="hideRequiredAsterisk"
132
+ :show-message="showMessage"
133
+ :inline-message="inlineMessage"
134
+ :status-icon="statusIcon"
135
+ :validate-on-rule-change="validateOnRuleChange"
136
+ :size="size"
137
+ :disabled="disabled"
138
+ :scroll-to-error="scrollToError"
139
+ @validate="(prop, isValid, message) => $emit('validate', prop, isValid,message)"
140
+ @click="() => $emit('click')"
141
+ >
142
+ <slot></slot>
143
+ </el-form>
144
+ </template>
145
+
146
+ <style scoped lang="scss"></style>
@@ -1,5 +1,5 @@
1
- import {withInstall, type SFCWithInstall} from "../../utils/install";
2
- import Form from "./JaForm.vue";
3
- export const JaForm: SFCWithInstall<typeof Form> = withInstall(Form);
4
- export * from "./types"
5
- export default Form;
1
+ import {withInstall, type SFCWithInstall} from "../../utils/install";
2
+ import Form from "./JaForm.vue";
3
+ export const JaForm: SFCWithInstall<typeof Form> = withInstall(Form);
4
+ export * from "./types"
5
+ export default Form;
@@ -1,4 +1,4 @@
1
- export interface JaFormModel {
2
- formData: Record<string, any>,
3
- [key: string | number | symbol]: any
4
- }
1
+ export interface JaFormModel {
2
+ formData: Record<string, any>,
3
+ [key: string | number | symbol]: any
4
+ }