@jari-ace/element-plus-component 0.3.4 → 0.4.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 (127) hide show
  1. package/dist/components/autoComplete/JaAutoComplete.vue.d.ts +543 -686
  2. package/dist/components/autoComplete/JaAutoComplete.vue.d.ts.map +1 -1
  3. package/dist/components/autoComplete/JaAutoComplete.vue.js +10 -2
  4. package/dist/components/autoComplete/JaAutoComplete.vue.js.map +1 -1
  5. package/dist/components/avatar/JaAvatar.vue.d.ts +4 -3
  6. package/dist/components/avatar/JaAvatar.vue.d.ts.map +1 -1
  7. package/dist/components/avatar/JaAvatar.vue.js +10 -2
  8. package/dist/components/avatar/JaAvatar.vue.js.map +1 -1
  9. package/dist/components/button/JaButton.vue.d.ts +184 -250
  10. package/dist/components/button/JaButton.vue.d.ts.map +1 -1
  11. package/dist/components/button/JaButton.vue.js +11 -3
  12. package/dist/components/button/JaButton.vue.js.map +1 -1
  13. package/dist/components/checkbox/JaCheckbox.vue.d.ts +164 -1068
  14. package/dist/components/checkbox/JaCheckbox.vue.d.ts.map +1 -1
  15. package/dist/components/checkbox/JaCheckbox.vue.js +9 -24
  16. package/dist/components/checkbox/JaCheckbox.vue.js.map +1 -1
  17. package/dist/components/checkboxGroup/JaCheckboxGroup.vue.d.ts +158 -163
  18. package/dist/components/checkboxGroup/JaCheckboxGroup.vue.d.ts.map +1 -1
  19. package/dist/components/checkboxGroup/JaCheckboxGroup.vue.js +14 -5
  20. package/dist/components/checkboxGroup/JaCheckboxGroup.vue.js.map +1 -1
  21. package/dist/components/datePicker/JaDatePicker.vue.d.ts +7 -4
  22. package/dist/components/datePicker/JaDatePicker.vue.d.ts.map +1 -1
  23. package/dist/components/datePicker/JaDatePicker.vue.js +18 -7
  24. package/dist/components/datePicker/JaDatePicker.vue.js.map +1 -1
  25. package/dist/components/dropdownButton/JaDropdownButton.vue.d.ts +324 -399
  26. package/dist/components/dropdownButton/JaDropdownButton.vue.d.ts.map +1 -1
  27. package/dist/components/dropdownButton/JaDropdownButton.vue.js +4 -2
  28. package/dist/components/dropdownButton/JaDropdownButton.vue.js.map +1 -1
  29. package/dist/components/form/JaForm.vue.d.ts +52 -3
  30. package/dist/components/form/JaForm.vue.d.ts.map +1 -1
  31. package/dist/components/form/JaForm.vue.js +4 -2
  32. package/dist/components/form/JaForm.vue.js.map +1 -1
  33. package/dist/components/formItem/JaFormItem.vue.d.ts +168 -133
  34. package/dist/components/formItem/JaFormItem.vue.d.ts.map +1 -1
  35. package/dist/components/formItem/JaFormItem.vue.js.map +1 -1
  36. package/dist/components/input/JaInput.vue.d.ts +274 -421
  37. package/dist/components/input/JaInput.vue.d.ts.map +1 -1
  38. package/dist/components/input/JaInput.vue.js +20 -60
  39. package/dist/components/input/JaInput.vue.js.map +1 -1
  40. package/dist/components/inputI18n/JaInputI18n.vue.d.ts +70 -70
  41. package/dist/components/inputNumber/JaInputNumber.vue.d.ts +203 -217
  42. package/dist/components/inputNumber/JaInputNumber.vue.d.ts.map +1 -1
  43. package/dist/components/inputNumber/JaInputNumber.vue.js +16 -37
  44. package/dist/components/inputNumber/JaInputNumber.vue.js.map +1 -1
  45. package/dist/components/radioGroup/JaRadioGroup.vue.d.ts +148 -121
  46. package/dist/components/radioGroup/JaRadioGroup.vue.d.ts.map +1 -1
  47. package/dist/components/radioGroup/JaRadioGroup.vue.js +14 -5
  48. package/dist/components/radioGroup/JaRadioGroup.vue.js.map +1 -1
  49. package/dist/components/scrollbar/Scrollbar.vue.d.ts +5 -2
  50. package/dist/components/scrollbar/Scrollbar.vue.d.ts.map +1 -1
  51. package/dist/components/scrollbar/Scrollbar.vue.js +11 -3
  52. package/dist/components/scrollbar/Scrollbar.vue.js.map +1 -1
  53. package/dist/components/select/JaSelect.vue.d.ts +70 -70
  54. package/dist/components/select/JaSelect.vue.js +14 -5
  55. package/dist/components/select/JaSelect.vue.js.map +1 -1
  56. package/dist/components/switch/JaSwitch.vue.d.ts +174 -205
  57. package/dist/components/switch/JaSwitch.vue.d.ts.map +1 -1
  58. package/dist/components/switch/JaSwitch.vue.js +13 -4
  59. package/dist/components/switch/JaSwitch.vue.js.map +1 -1
  60. package/dist/components/timePicker/JaTimePicker.vue.d.ts +5 -2
  61. package/dist/components/timePicker/JaTimePicker.vue.d.ts.map +1 -1
  62. package/dist/components/timePicker/JaTimePicker.vue.js +18 -7
  63. package/dist/components/timePicker/JaTimePicker.vue.js.map +1 -1
  64. package/dist/components/tip/index.d.ts +3 -12
  65. package/dist/components/tip/index.d.ts.map +1 -1
  66. package/dist/components/tip/src/AceTip.vue.d.ts +9 -3
  67. package/dist/components/tip/src/AceTip.vue.d.ts.map +1 -1
  68. package/dist/components/tip/src/AceTip.vue.js.map +1 -1
  69. package/dist/components/upload/FilePreviewer.vue.d.ts +59 -0
  70. package/dist/components/upload/FilePreviewer.vue.d.ts.map +1 -0
  71. package/dist/components/upload/FilePreviewer.vue.js +169 -0
  72. package/dist/components/upload/FilePreviewer.vue.js.map +1 -0
  73. package/dist/components/upload/JaUploader.vue.d.ts +74 -14
  74. package/dist/components/upload/JaUploader.vue.d.ts.map +1 -1
  75. package/dist/components/upload/JaUploader.vue.js +3 -5
  76. package/dist/components/upload/JaUploader.vue.js.map +1 -1
  77. package/dist/components/upload/index.d.ts +102 -25
  78. package/dist/components/upload/index.d.ts.map +1 -1
  79. package/dist/components/upload/index.js +2 -0
  80. package/dist/components/upload/index.js.map +1 -1
  81. package/dist/components/upload/uploader.vue.d.ts +16 -0
  82. package/dist/components/upload/uploader.vue.d.ts.map +1 -1
  83. package/dist/components/upload/uploader.vue.js +46 -41
  84. package/dist/components/upload/uploader.vue.js.map +1 -1
  85. package/lib/index.css +2 -2
  86. package/lib/index.js +7439 -6984
  87. package/lib/index.umd.cjs +34 -34
  88. package/package.json +1 -1
  89. package/packages/components/autoComplete/JaAutoComplete.vue +19 -9
  90. package/packages/components/autoComplete/README.md +35 -0
  91. package/packages/components/avatar/JaAvatar.vue +16 -7
  92. package/packages/components/avatar/README.md +45 -0
  93. package/packages/components/button/JaButton.vue +32 -7
  94. package/packages/components/button/README.md +57 -0
  95. package/packages/components/checkbox/JaCheckbox.vue +15 -25
  96. package/packages/components/checkbox/README.md +21 -0
  97. package/packages/components/checkboxGroup/JaCheckboxGroup.vue +16 -5
  98. package/packages/components/checkboxGroup/README.md +24 -0
  99. package/packages/components/datePicker/JaDatePicker.vue +23 -10
  100. package/packages/components/datePicker/README.md +21 -0
  101. package/packages/components/dropdownButton/JaDropdownButton.vue +25 -7
  102. package/packages/components/dropdownButton/README.md +30 -0
  103. package/packages/components/form/JaForm.vue +60 -20
  104. package/packages/components/form/README.md +30 -0
  105. package/packages/components/formItem/JaFormItem.vue +43 -7
  106. package/packages/components/formItem/README.md +28 -0
  107. package/packages/components/input/JaInput.vue +30 -66
  108. package/packages/components/input/README.md +23 -0
  109. package/packages/components/inputNumber/JaInputNumber.vue +25 -45
  110. package/packages/components/inputNumber/README.md +21 -0
  111. package/packages/components/radioGroup/JaRadioGroup.vue +16 -5
  112. package/packages/components/radioGroup/README.md +24 -0
  113. package/packages/components/scrollbar/README.md +23 -0
  114. package/packages/components/scrollbar/Scrollbar.vue +14 -3
  115. package/packages/components/select/JaSelect.vue +22 -10
  116. package/packages/components/select/README.md +24 -0
  117. package/packages/components/switch/JaSwitch.vue +16 -5
  118. package/packages/components/switch/README.md +21 -0
  119. package/packages/components/timePicker/JaTimePicker.vue +21 -8
  120. package/packages/components/timePicker/README.md +21 -0
  121. package/packages/components/tip/README.md +20 -0
  122. package/packages/components/tip/src/AceTip.vue +10 -2
  123. package/packages/components/upload/FilePreviewer.vue +245 -0
  124. package/packages/components/upload/JaUploader.vue +9 -8
  125. package/packages/components/upload/README.md +24 -0
  126. package/packages/components/upload/index.ts +2 -0
  127. package/packages/components/upload/uploader.vue +68 -44
@@ -0,0 +1,30 @@
1
+ # JaDropdownButton 下拉按钮组件
2
+
3
+ `JaDropdownButton` 结合了按钮和下拉菜单,支持快捷键和工具提示。
4
+
5
+ ## 组件用途
6
+
7
+ 用于提供一个主按钮和附加的下拉菜单选项。
8
+
9
+ ## 属性 API
10
+
11
+ | 属性名 | 类型 | 默认值 | 说明 |
12
+ | :--- | :--- | :--- | :--- |
13
+ | `buttonText` | `string` | - | 按钮显示的文本 |
14
+ | `tooltip` | `string` | - | 按钮的文字提示 |
15
+ | `shortcut` | `string` | - | 快捷键 |
16
+ | `type` | `string` | `'default'` | 按钮类型 |
17
+ | `tooltipPlacement` | `'top' \| 'bottom'` | `'top'` | Tooltip 位置 |
18
+
19
+ ## 使用示例
20
+
21
+ ```vue
22
+ <ja-dropdown-button buttonText="更多操作" type="primary">
23
+ <template #dropdown>
24
+ <el-dropdown-menu>
25
+ <el-dropdown-item>Action 1</el-dropdown-item>
26
+ <el-dropdown-item>Action 2</el-dropdown-item>
27
+ </el-dropdown-menu>
28
+ </template>
29
+ </ja-dropdown-button>
30
+ ```
@@ -1,32 +1,81 @@
1
1
  <script setup lang="ts">
2
2
  import {type PropType, provide, ref, computed, watch} from "vue";
3
3
  import {ElForm, type FormInstance, type FormRules} from "element-plus";
4
+ import type { FormProps } from "element-plus";
4
5
  import {type ValidationInstance} from "../../hooks/useBackendValidations";
5
6
  import type {JaFormModel} from "./types";
6
7
  import {mergeRules} from '../../utils/formUtils'
7
- interface Props {
8
+
9
+ export interface JaFormProps extends Partial<Omit<FormProps, 'model' | 'rules'>> {
10
+ /**
11
+ * 表单数据模型
12
+ */
8
13
  model: JaFormModel,
14
+ /**
15
+ * 行内表单模式
16
+ */
9
17
  inline?:boolean,
18
+ /**
19
+ * 标签位置
20
+ */
10
21
  labelPosition?: "left" | "top" | "right",
22
+ /**
23
+ * 标签宽度
24
+ */
11
25
  labelWidth?: string | number,
26
+ /**
27
+ * 标签后缀
28
+ */
12
29
  labelSuffix?: string,
30
+ /**
31
+ * 隐藏必填星号
32
+ */
13
33
  hideRequiredAsterisk?: boolean,
34
+ /**
35
+ * 显示校验错误信息
36
+ */
14
37
  showMessage?: boolean,
38
+ /**
39
+ * 以行内形式展示校验信息
40
+ */
15
41
  inlineMessage?: boolean,
42
+ /**
43
+ * 显示校验状态图标
44
+ */
16
45
  statusIcon?: boolean,
46
+ /**
47
+ * 在规则改变时执行校验
48
+ */
17
49
  validateOnRuleChange?: boolean,
50
+ /**
51
+ * 表单验证规则
52
+ */
18
53
  rules?: FormRules,
54
+ /**
55
+ * 尺寸
56
+ */
19
57
  size?: "small" | "default" | "large",
58
+ /**
59
+ * 是否禁用
60
+ */
20
61
  disabled?: boolean,
62
+ /**
63
+ * 滚动到错误项
64
+ */
21
65
  scrollToError?: boolean,
66
+ /**
67
+ * 验证器实例
68
+ */
22
69
  validator: ValidationInstance,
70
+ /**
71
+ * 必填星号位置
72
+ */
23
73
  requiredPosition?: 'left' | 'right'
24
74
  }
25
75
 
26
76
  const formRef = ref<FormInstance | undefined>(undefined);
27
77
 
28
-
29
- const props = withDefaults(defineProps<Props>(),{
78
+ const props = withDefaults(defineProps<JaFormProps>(),{
30
79
  inline:false,
31
80
  labelPosition:'top',
32
81
  hideRequiredAsterisk:true,
@@ -39,10 +88,6 @@ const props = withDefaults(defineProps<Props>(),{
39
88
  requiredPosition:'right',
40
89
  })
41
90
 
42
-
43
-
44
-
45
-
46
91
  defineEmits(["validate", "click"]);
47
92
  provide("aceFormValidator", props.validator);
48
93
  provide("aceFormModel", props.model);
@@ -54,13 +99,11 @@ const model = computed(() => {
54
99
  return props.model.formData?props.model.formData:props.model;
55
100
  });
56
101
 
57
-
58
-
59
102
  defineExpose({
60
103
  elForm: formRef,
61
104
  getElForm:():FormInstance|undefined=>formRef.value,
62
105
  validate:async (submit: () => Promise<any>, onFail?: () => void) => {
63
- if(!formRef)return;
106
+ if(!formRef.value)return;
64
107
  //先清空之前的校验
65
108
  formRef.value.clearValidate();
66
109
  //判断是否有传入rules如果有则先执行 formRef.value!.validate()
@@ -78,8 +121,8 @@ defineExpose({
78
121
  .catch(() => {
79
122
  //失败
80
123
  //合并rules
81
- rules.value = mergeRules(props.rules, props.validator.rules);
82
- formRef.value.validate();
124
+ rules.value = mergeRules(props.rules!, props.validator.rules);
125
+ formRef.value!.validate();
83
126
  if (onFail) onFail();
84
127
  });
85
128
  }else{
@@ -94,29 +137,26 @@ defineExpose({
94
137
  .catch(async () => {
95
138
  //失败
96
139
  //合并rules
97
- rules.value = mergeRules(props.rules, props.validator.rules);
98
- await formRef.value.validate();
140
+ rules.value = mergeRules(props.rules!, props.validator.rules);
141
+ await formRef.value!.validate();
99
142
  if (onFail) onFail();
100
143
  });
101
144
  }
102
-
103
-
104
-
105
145
  },
106
146
  getRules: () => rules.value,
107
147
  });
108
148
 
109
-
110
149
  watch(() => props.model.formData, () => {
111
150
  props.validator?.clearFiledErrors();
112
151
  })
113
152
 
114
153
  watch(() => props.rules, () => {
115
154
  //合并rules
116
- rules.value = mergeRules(props.rules, props.validator.rules);
155
+ if (props.rules) {
156
+ rules.value = mergeRules(props.rules, props.validator.rules);
157
+ }
117
158
  }, { immediate: true })
118
159
 
119
-
120
160
  </script>
121
161
 
122
162
  <template>
@@ -0,0 +1,30 @@
1
+ # JaForm 表单组件
2
+
3
+ `JaForm` 是对 Element Plus `ElForm` 的封装,提供了表单数据模型注入和增强的验证功能。
4
+
5
+ ## 组件用途
6
+
7
+ 用于构建表单,管理数据模型和验证规则。
8
+
9
+ ## 属性 API
10
+
11
+ 该组件继承了 [ElForm](https://element-plus.org/zh-CN/component/form.html#form-attributes) 的大部分属性。
12
+
13
+ | 属性名 | 类型 | 默认值 | 说明 |
14
+ | :--- | :--- | :--- | :--- |
15
+ | `model` | `JaFormModel` | - | 表单数据模型对象 |
16
+ | `inline` | `boolean` | `false` | 是否为行内表单 |
17
+ | `labelPosition` | `'left' \| 'top' \| 'right'` | `'top'` | 标签位置 |
18
+ | `hideRequiredAsterisk` | `boolean` | `true` | 是否隐藏必填星号(组件内部自行处理) |
19
+ | `validator` | `ValidationInstance` | - | 验证器实例 |
20
+ | `requiredPosition` | `'left' \| 'right'` | `'right'` | 必填星号位置 |
21
+
22
+ ## 使用示例
23
+
24
+ ```vue
25
+ <ja-form :model="formData" :validator="validator">
26
+ <ja-form-item prop="name" label="Name">
27
+ <ja-input />
28
+ </ja-form-item>
29
+ </ja-form>
30
+ ```
@@ -1,27 +1,65 @@
1
1
  <script setup lang="ts">
2
2
  import { provide, ref, withDefaults, defineProps, defineExpose, inject, computed } from "vue";
3
3
  import {ElFormItem, ElIcon, ElText, type FormItemRule, ElTooltip} from 'element-plus'
4
+ import type { FormItemProps } from 'element-plus'
4
5
  import {QuestionFilled} from "@element-plus/icons-vue";
5
6
 
6
7
  type RequiredPosition = 'left' | 'right'
7
8
 
9
+ const aceFormRequiredPosition = inject('aceFormRequiredPosition') as RequiredPosition | undefined
8
10
 
9
-
10
- const aceFormRequiredPosition = inject('aceFormRequiredPosition')
11
- const props = withDefaults(defineProps<{
11
+ export interface JaFormItemProps extends Partial<FormItemProps> {
12
+ /**
13
+ * 字段名
14
+ */
12
15
  prop?: string | string[]
16
+ /**
17
+ * 验证规则
18
+ */
13
19
  rules?: FormItemRule | FormItemRule[]
20
+ /**
21
+ * 标签文本
22
+ */
14
23
  label?: string
24
+ /**
25
+ * 标签宽度
26
+ */
15
27
  labelWidth?: string | number
28
+ /**
29
+ * 标签说明(Tooltip)
30
+ */
16
31
  labelRemark?: string
32
+ /**
33
+ * 是否必填
34
+ */
17
35
  required?: boolean
36
+ /**
37
+ * 错误信息
38
+ */
18
39
  error?: string
40
+ /**
41
+ * 显示校验信息
42
+ */
19
43
  showMessage?: boolean
44
+ /**
45
+ * 行内显示校验信息
46
+ */
20
47
  inlineMessage?: boolean
48
+ /**
49
+ * 尺寸
50
+ */
21
51
  size?: 'small' | 'default' | 'large'
52
+ /**
53
+ * 必填星号位置
54
+ */
22
55
  requiredPosition?: RequiredPosition
56
+ /**
57
+ * 标签间隔
58
+ */
23
59
  labelGap?:string
24
- }>(), {
60
+ }
61
+
62
+ const props = withDefaults(defineProps<JaFormItemProps>(), {
25
63
  required: false,
26
64
  showMessage: true,
27
65
  inlineMessage: true,
@@ -35,8 +73,7 @@ const requiredPosition = computed(()=>{
35
73
  return props.requiredPosition || aceFormRequiredPosition
36
74
  })
37
75
 
38
-
39
- const formItem = ref<typeof ElFormItem | null>(null)
76
+ const formItem = ref<InstanceType<typeof ElFormItem> | null>(null)
40
77
  defineExpose({
41
78
  resetField: () => {
42
79
  formItem.value!.resetField()
@@ -84,4 +121,3 @@ defineExpose({
84
121
  <slot name="error"></slot>
85
122
  </el-form-item>
86
123
  </template>
87
-
@@ -0,0 +1,28 @@
1
+ # JaFormItem 表单项组件
2
+
3
+ `JaFormItem` 是对 Element Plus `ElFormItem` 的封装,增强了标签显示和验证提示。
4
+
5
+ ## 组件用途
6
+
7
+ 用于在 `JaForm` 中包裹表单控件,提供标签、验证错误显示等功能。
8
+
9
+ ## 属性 API
10
+
11
+ 该组件继承了 [ElFormItem](https://element-plus.org/zh-CN/component/form.html#form-item-attributes) 的所有属性。
12
+
13
+ | 属性名 | 类型 | 默认值 | 说明 |
14
+ | :--- | :--- | :--- | :--- |
15
+ | `prop` | `string \| string[]` | - | 字段名,对应模型中的路径 |
16
+ | `label` | `string` | - | 标签文本 |
17
+ | `labelRemark` | `string` | - | 标签说明,显示为问号图标和 Tooltip |
18
+ | `required` | `boolean` | `false` | 是否必填 |
19
+ | `labelGap` | `string` | `'4px'` | 标签与说明图标的间距 |
20
+ | `requiredPosition` | `'left' \| 'right'` | - | 必填星号位置(默认跟随 Form 配置) |
21
+
22
+ ## 使用示例
23
+
24
+ ```vue
25
+ <ja-form-item prop="email" label="Email" required labelRemark="请输入公司邮箱">
26
+ <ja-input />
27
+ </ja-form-item>
28
+ ```
@@ -1,40 +1,18 @@
1
1
  <script setup lang="ts">
2
- import {type Component, inject, type StyleValue, ref, watch} from 'vue'
2
+ import {type Component, inject, type StyleValue, ref, watch, computed} from 'vue'
3
3
  import {ElInput} from 'element-plus'
4
+ import type { InputProps } from 'element-plus'
4
5
  import type {ValidationInstance} from '../../hooks/useBackendValidations'
5
6
  import type {EpPropMergeType} from "element-plus/es/utils";
6
7
  import {getValue, setValue} from "../../utils/objectUtils";
7
8
 
8
- const props = withDefaults(defineProps<{
9
- type?: string
10
- maxLength?: number
11
- minLength?: number
12
- showWordLimit?: boolean
13
- placeholder?: string
14
- clearable?: boolean
15
- formatter?: (value: string | number) => string
16
- parser?: (value: string) => string
17
- showPassword?: boolean
18
- disabled?: boolean
19
- size?: 'large' | 'default' | 'small'
20
- prefixIcon?: string | Component
21
- suffixIcon?: string | Component
22
- rows?: number
23
- autosize?: boolean | object
24
- autocomplete?: AutoFill
25
- name?: string
26
- readonly?: boolean,
27
- max?: any
28
- min?: any
29
- step?: any
30
- resize?: 'none' | 'both' | 'horizontal' | 'vertical'
31
- autofocus?: boolean
32
- form?: string
33
- label?: string
34
- tabindex?: string | number
35
- validateEvent?: boolean
36
- inputStyle?: StyleValue
37
- }>(), {
9
+ export interface JaInputProps extends Partial<InputProps> {
10
+ // Maintain backward compatibility for props that might differ in case or are custom aliases
11
+ maxLength?: number | string
12
+ minLength?: number | string
13
+ }
14
+
15
+ const props = withDefaults(defineProps<JaInputProps>(), {
38
16
  type: 'text',
39
17
  showWordLimit: false,
40
18
  clearable: false,
@@ -51,13 +29,13 @@ const props = withDefaults(defineProps<{
51
29
  const model = inject('aceFormModel') as Record<string, any>
52
30
  const prop = inject('aceFormItemProp') as string
53
31
  const validator = inject('aceFormValidator') as ValidationInstance
54
- const input = ref<typeof ElInput>({} as typeof ElInput)
32
+ const input = ref<InstanceType<typeof ElInput>>()
55
33
  const emit = defineEmits<{
56
- blur: [evt: Event]
57
- focus: [evt: Event]
34
+ blur: [evt: FocusEvent]
35
+ focus: [evt: FocusEvent]
58
36
  change: [value: string]
59
37
  input: [value: string]
60
- clear: [void]
38
+ clear: []
61
39
  }>()
62
40
 
63
41
  function onChange(value: string) {
@@ -78,18 +56,30 @@ watch(() => model.formData, () => {
78
56
  deep: true
79
57
  })
80
58
 
59
+ const elementProps = computed(() => {
60
+ const { modelValue, maxLength, minLength, ...rest } = props
61
+ // Map maxLength/minLength to maxlength/minlength if needed, or rely on ElInput handling
62
+ // ElInput expects 'maxlength'. If props has 'maxlength' (from InputProps), use it.
63
+ // If props has 'maxLength' (custom), map it to 'maxlength' if 'maxlength' is undefined.
64
+ return {
65
+ ...rest,
66
+ maxlength: props.maxlength ?? props.maxLength,
67
+ minlength: props.minlength ?? props.minLength
68
+ }
69
+ })
70
+
81
71
  defineExpose({
82
72
  focus() {
83
- input.value.focus()
73
+ input.value?.focus()
84
74
  },
85
75
  blur() {
86
- input.value.blur()
76
+ input.value?.blur()
87
77
  },
88
78
  select() {
89
- input.value.select()
79
+ input.value?.select()
90
80
  },
91
81
  clear() {
92
- input.value.clear()
82
+ input.value?.clear()
93
83
  },
94
84
  elInput: input
95
85
  })
@@ -98,34 +88,8 @@ defineExpose({
98
88
  <template>
99
89
  <el-input
100
90
  ref="input"
101
- :type="type"
102
91
  v-model="mv"
103
- :maxlength="maxLength"
104
- :minLength="minLength"
105
- :show-word-limit="showWordLimit"
106
- :placeholder="placeholder"
107
- :clearable="clearable"
108
- :formatter="formatter"
109
- :parser="parser"
110
- :show-password="showPassword"
111
- :disabled="disabled"
112
- :size="size"
113
- :prefix-icon="prefixIcon"
114
- :suffix-icon="suffixIcon"
115
- :rows="rows"
116
- :autosize="autosize"
117
- :autocomplete="autocomplete"
118
- :name="name"
119
- :readonly="readonly"
120
- :max="max"
121
- :min="min"
122
- :step="step"
123
- :resize="resize"
124
- :autofocus="autofocus"
125
- :form="form"
126
- :label="label"
127
- :tabindex="tabindex"
128
- :validate-event="validateEvent"
92
+ v-bind="{ ...elementProps, ...$attrs }"
129
93
  @blur="evt => $emit('blur', evt)"
130
94
  @focus="evt => $emit('focus', evt)"
131
95
  @change="onChange"
@@ -0,0 +1,23 @@
1
+ # JaInput 输入框组件
2
+
3
+ `JaInput` 是对 Element Plus `ElInput` 的封装,集成了 `JaForm` 表单上下文注入。
4
+
5
+ ## 组件用途
6
+
7
+ 用于在 `JaForm` 中输入文本,自动绑定数据模型。
8
+
9
+ ## 属性 API
10
+
11
+ 该组件继承了 [ElInput](https://element-plus.org/zh-CN/component/input.html#input-attributes) 的所有属性。
12
+
13
+ | 属性名 | 类型 | 默认值 | 说明 |
14
+ | :--- | :--- | :--- | :--- |
15
+ | `maxLength` | `number \| string` | - | `maxlength` 的别名,用于兼容性 |
16
+ | `minLength` | `number \| string` | - | `minlength` 的别名,用于兼容性 |
17
+ | - | - | - | 支持所有 ElInput 属性 |
18
+
19
+ ## 使用示例
20
+
21
+ ```vue
22
+ <ja-input placeholder="Please input" />
23
+ ```
@@ -1,29 +1,16 @@
1
1
  <script setup lang="ts">
2
2
  import {inject, ref, watch, computed} from 'vue'
3
3
  import {ElInputNumber} from 'element-plus'
4
+ import type { InputNumberProps } from 'element-plus'
4
5
  import type {ValidationInstance} from '../../hooks/useBackendValidations'
5
6
  import {getValue, setValue} from "../../utils/objectUtils";
6
7
 
7
8
  type ModelType = number | null | undefined;
8
- const props = withDefaults(defineProps<{
9
- min?: number
10
- max?: number
11
- step?: number
12
- stepStrictly?: boolean
13
- precision?: number
14
- size?: 'large' | 'default' | 'small'
15
- readonly?: boolean
16
- disabled?: boolean
17
- controls?: boolean
18
- controlsPosition?: '' | 'right'
19
- name?: string
20
- label?: string
21
- ariaLabel?: string
22
- placeholder?: string
23
- id?: string
24
- valueOnClear?: number | null | 'min' | 'max'
25
- validateEvent?: boolean
26
- }>(), {
9
+
10
+ export interface JaInputNumberProps extends Partial<InputNumberProps> {
11
+ }
12
+
13
+ const props = withDefaults(defineProps<JaInputNumberProps>(), {
27
14
  min: -Infinity,
28
15
  max: Infinity,
29
16
  step: 1,
@@ -40,10 +27,10 @@ const validator = inject('aceFormValidator') as ValidationInstance
40
27
  const size = computed<'large' | 'default' | 'small' | undefined>(() => {
41
28
  return props.size ? props.size : inject("aceFormSize");
42
29
  });
43
- const input = ref<typeof ElInputNumber>()
30
+ const input = ref<InstanceType<typeof ElInputNumber>>()
44
31
  const emit = defineEmits<{
45
- blur: [evt: Event]
46
- focus: [evt: Event]
32
+ blur: [evt: FocusEvent]
33
+ focus: [evt: FocusEvent]
47
34
  change: [value?: ModelType]
48
35
  }>()
49
36
 
@@ -60,39 +47,32 @@ watch(() => model.formData, () => {
60
47
  }, {
61
48
  deep: true
62
49
  })
50
+
51
+ const elementProps = computed(() => {
52
+ const { modelValue, ...rest } = props
53
+ return rest
54
+ })
55
+
63
56
  defineExpose({
64
57
  focus() {
65
- input?.value?.focus()
58
+ input?.value?.focus?.()
66
59
  },
67
60
  blur() {
68
- input?.value?.blur()
61
+ input?.value?.blur?.()
69
62
  },
70
63
  elInputNumber: input
71
64
  })
72
65
  </script>
73
66
 
74
67
  <template>
75
- <el-input-number :min="min"
76
- :max="max"
77
- :label="label"
78
- :disabled="disabled"
79
- :id="id"
80
- :aria-label="ariaLabel"
81
- :controls="controls"
82
- :controls-position="controlsPosition"
83
- v-model.number="mv"
84
- :name="name"
85
- :placeholder="placeholder"
86
- :precision="precision"
87
- :readonly="readonly"
88
- :size="size"
89
- :step="step"
90
- :step-strictly="stepStrictly"
91
- :value-on-clear="valueOnClear"
92
- :validate-event="validateEvent"
93
- @change="onChange"
94
- @blur="evt => $emit('blur', evt)"
95
- @focus="evt => $emit('focus', evt)">
68
+ <el-input-number
69
+ ref="input"
70
+ v-model.number="mv"
71
+ v-bind="{ ...elementProps, ...$attrs }"
72
+ :size="size"
73
+ @change="onChange"
74
+ @blur="evt => $emit('blur', evt)"
75
+ @focus="evt => $emit('focus', evt)">
96
76
  <slot name="decrease-icon"></slot>
97
77
  <slot name="increase-icon"></slot>
98
78
  </el-input-number>
@@ -0,0 +1,21 @@
1
+ # JaInputNumber 数字输入框组件
2
+
3
+ `JaInputNumber` 是对 Element Plus `ElInputNumber` 的封装,集成了 `JaForm` 表单上下文注入。
4
+
5
+ ## 组件用途
6
+
7
+ 用于在 `JaForm` 中输入数字,自动绑定数据模型。
8
+
9
+ ## 属性 API
10
+
11
+ 该组件继承了 [ElInputNumber](https://element-plus.org/zh-CN/component/input-number.html#inputnumber-attributes) 的所有属性。
12
+
13
+ | 属性名 | 类型 | 默认值 | 说明 |
14
+ | :--- | :--- | :--- | :--- |
15
+ | - | - | - | 支持所有 ElInputNumber 属性 |
16
+
17
+ ## 使用示例
18
+
19
+ ```vue
20
+ <ja-input-number :min="1" :max="10" />
21
+ ```
@@ -1,11 +1,12 @@
1
1
  <script setup lang="ts">
2
2
  import type {ValidationInstance} from '../../hooks/useBackendValidations'
3
- import {inject, ref, watch} from "vue";
3
+ import {inject, ref, watch, computed} from "vue";
4
4
  import {ElRadioGroup} from "element-plus";
5
+ import type { RadioGroupProps } from 'element-plus'
5
6
  import type {EpPropMergeType} from "element-plus/es/utils";
6
7
  import {getValue, setValue} from "../../utils/objectUtils";
7
8
 
8
- const input = ref<typeof ElRadioGroup>({} as typeof ElRadioGroup)
9
+ const input = ref<InstanceType<typeof ElRadioGroup>>()
9
10
  const model = inject('aceFormModel') as Record<string, any>
10
11
  const prop = inject('aceFormItemProp') as string
11
12
  const validator = inject('aceFormValidator') as ValidationInstance
@@ -13,6 +14,11 @@ const emit = defineEmits<{
13
14
  change: [value: string | number | boolean | undefined]
14
15
  }>()
15
16
 
17
+ export interface JaRadioGroupProps extends Partial<RadioGroupProps> {
18
+ }
19
+
20
+ const props = defineProps<JaRadioGroupProps>()
21
+
16
22
  function onChange(val: string | number | boolean | undefined) {
17
23
  validator.removeFieldError(prop)
18
24
  setValue(model.formData, prop, mv.value);
@@ -30,9 +36,14 @@ watch(() => model.formData, () => {
30
36
  deep: true
31
37
  })
32
38
 
39
+ const elementProps = computed(() => {
40
+ const { modelValue, ...rest } = props
41
+ return rest
42
+ })
43
+
33
44
  defineExpose({
34
- focus: () => input.value.focus(),
35
- blur: () => input.value.blur(),
45
+ focus: () => (input.value as any)?.focus?.(), // Optional chaining
46
+ blur: () => (input.value as any)?.blur?.(), // Check if method exists
36
47
  elRadioGroup: input
37
48
  })
38
49
  </script>
@@ -42,7 +53,7 @@ defineExpose({
42
53
  ref="input"
43
54
  v-model="mv"
44
55
  @change="onChange"
45
- v-bind="$attrs">
56
+ v-bind="{ ...elementProps, ...$attrs }">
46
57
  <template v-for="(_, name) in $slots" v-slot:[name]>
47
58
  <slot :name="name"></slot>
48
59
  </template>