@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.
- package/dist/components/autoComplete/JaAutoComplete.vue.d.ts +543 -686
- package/dist/components/autoComplete/JaAutoComplete.vue.d.ts.map +1 -1
- package/dist/components/autoComplete/JaAutoComplete.vue.js +10 -2
- package/dist/components/autoComplete/JaAutoComplete.vue.js.map +1 -1
- package/dist/components/avatar/JaAvatar.vue.d.ts +4 -3
- package/dist/components/avatar/JaAvatar.vue.d.ts.map +1 -1
- package/dist/components/avatar/JaAvatar.vue.js +10 -2
- package/dist/components/avatar/JaAvatar.vue.js.map +1 -1
- package/dist/components/button/JaButton.vue.d.ts +184 -250
- package/dist/components/button/JaButton.vue.d.ts.map +1 -1
- package/dist/components/button/JaButton.vue.js +11 -3
- package/dist/components/button/JaButton.vue.js.map +1 -1
- package/dist/components/checkbox/JaCheckbox.vue.d.ts +164 -1068
- package/dist/components/checkbox/JaCheckbox.vue.d.ts.map +1 -1
- package/dist/components/checkbox/JaCheckbox.vue.js +9 -24
- package/dist/components/checkbox/JaCheckbox.vue.js.map +1 -1
- package/dist/components/checkboxGroup/JaCheckboxGroup.vue.d.ts +158 -163
- package/dist/components/checkboxGroup/JaCheckboxGroup.vue.d.ts.map +1 -1
- package/dist/components/checkboxGroup/JaCheckboxGroup.vue.js +14 -5
- package/dist/components/checkboxGroup/JaCheckboxGroup.vue.js.map +1 -1
- package/dist/components/datePicker/JaDatePicker.vue.d.ts +7 -4
- package/dist/components/datePicker/JaDatePicker.vue.d.ts.map +1 -1
- package/dist/components/datePicker/JaDatePicker.vue.js +18 -7
- package/dist/components/datePicker/JaDatePicker.vue.js.map +1 -1
- package/dist/components/dropdownButton/JaDropdownButton.vue.d.ts +324 -399
- package/dist/components/dropdownButton/JaDropdownButton.vue.d.ts.map +1 -1
- package/dist/components/dropdownButton/JaDropdownButton.vue.js +4 -2
- package/dist/components/dropdownButton/JaDropdownButton.vue.js.map +1 -1
- package/dist/components/form/JaForm.vue.d.ts +52 -3
- package/dist/components/form/JaForm.vue.d.ts.map +1 -1
- package/dist/components/form/JaForm.vue.js +4 -2
- package/dist/components/form/JaForm.vue.js.map +1 -1
- package/dist/components/formItem/JaFormItem.vue.d.ts +168 -133
- package/dist/components/formItem/JaFormItem.vue.d.ts.map +1 -1
- package/dist/components/formItem/JaFormItem.vue.js.map +1 -1
- package/dist/components/input/JaInput.vue.d.ts +274 -421
- package/dist/components/input/JaInput.vue.d.ts.map +1 -1
- package/dist/components/input/JaInput.vue.js +20 -60
- package/dist/components/input/JaInput.vue.js.map +1 -1
- package/dist/components/inputI18n/JaInputI18n.vue.d.ts +70 -70
- package/dist/components/inputNumber/JaInputNumber.vue.d.ts +203 -217
- package/dist/components/inputNumber/JaInputNumber.vue.d.ts.map +1 -1
- package/dist/components/inputNumber/JaInputNumber.vue.js +16 -37
- package/dist/components/inputNumber/JaInputNumber.vue.js.map +1 -1
- package/dist/components/radioGroup/JaRadioGroup.vue.d.ts +148 -121
- package/dist/components/radioGroup/JaRadioGroup.vue.d.ts.map +1 -1
- package/dist/components/radioGroup/JaRadioGroup.vue.js +14 -5
- package/dist/components/radioGroup/JaRadioGroup.vue.js.map +1 -1
- package/dist/components/scrollbar/Scrollbar.vue.d.ts +5 -2
- package/dist/components/scrollbar/Scrollbar.vue.d.ts.map +1 -1
- package/dist/components/scrollbar/Scrollbar.vue.js +11 -3
- package/dist/components/scrollbar/Scrollbar.vue.js.map +1 -1
- package/dist/components/select/JaSelect.vue.d.ts +70 -70
- package/dist/components/select/JaSelect.vue.js +14 -5
- package/dist/components/select/JaSelect.vue.js.map +1 -1
- package/dist/components/switch/JaSwitch.vue.d.ts +174 -205
- package/dist/components/switch/JaSwitch.vue.d.ts.map +1 -1
- package/dist/components/switch/JaSwitch.vue.js +13 -4
- package/dist/components/switch/JaSwitch.vue.js.map +1 -1
- package/dist/components/timePicker/JaTimePicker.vue.d.ts +5 -2
- package/dist/components/timePicker/JaTimePicker.vue.d.ts.map +1 -1
- package/dist/components/timePicker/JaTimePicker.vue.js +18 -7
- package/dist/components/timePicker/JaTimePicker.vue.js.map +1 -1
- package/dist/components/tip/index.d.ts +3 -12
- package/dist/components/tip/index.d.ts.map +1 -1
- package/dist/components/tip/src/AceTip.vue.d.ts +9 -3
- package/dist/components/tip/src/AceTip.vue.d.ts.map +1 -1
- package/dist/components/tip/src/AceTip.vue.js.map +1 -1
- package/dist/components/upload/FilePreviewer.vue.d.ts +59 -0
- package/dist/components/upload/FilePreviewer.vue.d.ts.map +1 -0
- package/dist/components/upload/FilePreviewer.vue.js +169 -0
- package/dist/components/upload/FilePreviewer.vue.js.map +1 -0
- package/dist/components/upload/JaUploader.vue.d.ts +74 -14
- package/dist/components/upload/JaUploader.vue.d.ts.map +1 -1
- package/dist/components/upload/JaUploader.vue.js +3 -5
- package/dist/components/upload/JaUploader.vue.js.map +1 -1
- package/dist/components/upload/index.d.ts +102 -25
- package/dist/components/upload/index.d.ts.map +1 -1
- package/dist/components/upload/index.js +2 -0
- package/dist/components/upload/index.js.map +1 -1
- package/dist/components/upload/uploader.vue.d.ts +16 -0
- package/dist/components/upload/uploader.vue.d.ts.map +1 -1
- package/dist/components/upload/uploader.vue.js +46 -41
- package/dist/components/upload/uploader.vue.js.map +1 -1
- package/lib/index.css +2 -2
- package/lib/index.js +7439 -6984
- package/lib/index.umd.cjs +34 -34
- package/package.json +1 -1
- package/packages/components/autoComplete/JaAutoComplete.vue +19 -9
- package/packages/components/autoComplete/README.md +35 -0
- package/packages/components/avatar/JaAvatar.vue +16 -7
- package/packages/components/avatar/README.md +45 -0
- package/packages/components/button/JaButton.vue +32 -7
- package/packages/components/button/README.md +57 -0
- package/packages/components/checkbox/JaCheckbox.vue +15 -25
- package/packages/components/checkbox/README.md +21 -0
- package/packages/components/checkboxGroup/JaCheckboxGroup.vue +16 -5
- package/packages/components/checkboxGroup/README.md +24 -0
- package/packages/components/datePicker/JaDatePicker.vue +23 -10
- package/packages/components/datePicker/README.md +21 -0
- package/packages/components/dropdownButton/JaDropdownButton.vue +25 -7
- package/packages/components/dropdownButton/README.md +30 -0
- package/packages/components/form/JaForm.vue +60 -20
- package/packages/components/form/README.md +30 -0
- package/packages/components/formItem/JaFormItem.vue +43 -7
- package/packages/components/formItem/README.md +28 -0
- package/packages/components/input/JaInput.vue +30 -66
- package/packages/components/input/README.md +23 -0
- package/packages/components/inputNumber/JaInputNumber.vue +25 -45
- package/packages/components/inputNumber/README.md +21 -0
- package/packages/components/radioGroup/JaRadioGroup.vue +16 -5
- package/packages/components/radioGroup/README.md +24 -0
- package/packages/components/scrollbar/README.md +23 -0
- package/packages/components/scrollbar/Scrollbar.vue +14 -3
- package/packages/components/select/JaSelect.vue +22 -10
- package/packages/components/select/README.md +24 -0
- package/packages/components/switch/JaSwitch.vue +16 -5
- package/packages/components/switch/README.md +21 -0
- package/packages/components/timePicker/JaTimePicker.vue +21 -8
- package/packages/components/timePicker/README.md +21 -0
- package/packages/components/tip/README.md +20 -0
- package/packages/components/tip/src/AceTip.vue +10 -2
- package/packages/components/upload/FilePreviewer.vue +245 -0
- package/packages/components/upload/JaUploader.vue +9 -8
- package/packages/components/upload/README.md +24 -0
- package/packages/components/upload/index.ts +2 -0
- 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
|
-
|
|
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
|
|
82
|
-
formRef.value
|
|
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
|
|
98
|
-
await formRef.value
|
|
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
|
-
|
|
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
|
-
|
|
11
|
-
|
|
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
|
-
|
|
9
|
-
|
|
10
|
-
maxLength?: number
|
|
11
|
-
minLength?: number
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
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
|
|
32
|
+
const input = ref<InstanceType<typeof ElInput>>()
|
|
55
33
|
const emit = defineEmits<{
|
|
56
|
-
blur: [evt:
|
|
57
|
-
focus: [evt:
|
|
34
|
+
blur: [evt: FocusEvent]
|
|
35
|
+
focus: [evt: FocusEvent]
|
|
58
36
|
change: [value: string]
|
|
59
37
|
input: [value: string]
|
|
60
|
-
clear: [
|
|
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
|
|
73
|
+
input.value?.focus()
|
|
84
74
|
},
|
|
85
75
|
blur() {
|
|
86
|
-
input.value
|
|
76
|
+
input.value?.blur()
|
|
87
77
|
},
|
|
88
78
|
select() {
|
|
89
|
-
input.value
|
|
79
|
+
input.value?.select()
|
|
90
80
|
},
|
|
91
81
|
clear() {
|
|
92
|
-
input.value
|
|
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
|
-
|
|
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
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
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:
|
|
46
|
-
focus: [evt:
|
|
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
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
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
|
|
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
|
|
35
|
-
blur: () => input.value
|
|
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="
|
|
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>
|