mirror of
https://github.com/vbenjs/vue-vben-admin.git
synced 2025-08-27 18:53:01 +08:00
fix(form): fix form verification and console error message issues
This commit is contained in:
@@ -23,6 +23,7 @@
|
|||||||
|
|
||||||
- 修复 tree 文本超出挡住操作按钮问题
|
- 修复 tree 文本超出挡住操作按钮问题
|
||||||
- 修复通过 useRedo 刷新页面参数丢失问题
|
- 修复通过 useRedo 刷新页面参数丢失问题
|
||||||
|
- 修复表单校验先设置在校验及控制台错误信息问题
|
||||||
|
|
||||||
### 🎫 Chores
|
### 🎫 Chores
|
||||||
|
|
||||||
|
@@ -71,17 +71,17 @@
|
|||||||
const schemaRef = ref<Nullable<FormSchema[]>>(null);
|
const schemaRef = ref<Nullable<FormSchema[]>>(null);
|
||||||
const formElRef = ref<Nullable<FormActionType>>(null);
|
const formElRef = ref<Nullable<FormActionType>>(null);
|
||||||
|
|
||||||
const getRowWrapStyleRef = computed((): any => {
|
|
||||||
const { baseRowStyle } = unref(getProps);
|
|
||||||
return baseRowStyle || {};
|
|
||||||
});
|
|
||||||
|
|
||||||
const getMergePropsRef = computed(
|
const getMergePropsRef = computed(
|
||||||
(): FormProps => {
|
(): FormProps => {
|
||||||
return deepMerge(cloneDeep(props), unref(propsRef));
|
return deepMerge(cloneDeep(props), unref(propsRef));
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
|
const getRowWrapStyleRef = computed((): any => {
|
||||||
|
const { baseRowStyle } = unref(getMergePropsRef);
|
||||||
|
return baseRowStyle || {};
|
||||||
|
});
|
||||||
|
|
||||||
// 获取表单基本配置
|
// 获取表单基本配置
|
||||||
const getProps = computed(
|
const getProps = computed(
|
||||||
(): FormProps => {
|
(): FormProps => {
|
||||||
@@ -103,7 +103,7 @@
|
|||||||
const schemas: FormSchema[] = unref(schemaRef) || (unref(getProps).schemas as any);
|
const schemas: FormSchema[] = unref(schemaRef) || (unref(getProps).schemas as any);
|
||||||
for (const schema of schemas) {
|
for (const schema of schemas) {
|
||||||
const { defaultValue, component } = schema;
|
const { defaultValue, component } = schema;
|
||||||
if (defaultValue && dateItemType.includes(component!)) {
|
if (defaultValue && dateItemType.includes(component)) {
|
||||||
if (!Array.isArray(defaultValue)) {
|
if (!Array.isArray(defaultValue)) {
|
||||||
schema.defaultValue = moment(defaultValue);
|
schema.defaultValue = moment(defaultValue);
|
||||||
} else {
|
} else {
|
||||||
|
@@ -17,6 +17,7 @@ import { upperFirst, cloneDeep } from 'lodash-es';
|
|||||||
import { useItemLabelWidth } from './hooks/useLabelWidth';
|
import { useItemLabelWidth } from './hooks/useLabelWidth';
|
||||||
import { ComponentType } from './types';
|
import { ComponentType } from './types';
|
||||||
import { isNumber } from '/@/utils/is';
|
import { isNumber } from '/@/utils/is';
|
||||||
|
import { useI18n } from '/@/hooks/web/useI18n';
|
||||||
|
|
||||||
export default defineComponent({
|
export default defineComponent({
|
||||||
name: 'BasicFormItem',
|
name: 'BasicFormItem',
|
||||||
@@ -46,6 +47,8 @@ export default defineComponent({
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
setup(props, { slots }) {
|
setup(props, { slots }) {
|
||||||
|
const { t } = useI18n('component.form');
|
||||||
|
// @ts-ignore
|
||||||
const itemLabelWidthRef = useItemLabelWidth(toRef(props, 'schema'), toRef(props, 'formProps'));
|
const itemLabelWidthRef = useItemLabelWidth(toRef(props, 'schema'), toRef(props, 'formProps'));
|
||||||
|
|
||||||
const getValuesRef = computed(() => {
|
const getValuesRef = computed(() => {
|
||||||
@@ -132,7 +135,7 @@ export default defineComponent({
|
|||||||
let rules: ValidationRule[] = cloneDeep(defRules) as ValidationRule[];
|
let rules: ValidationRule[] = cloneDeep(defRules) as ValidationRule[];
|
||||||
|
|
||||||
if ((!rules || rules.length === 0) && required) {
|
if ((!rules || rules.length === 0) && required) {
|
||||||
rules = [{ required }];
|
rules = [{ required, type: 'string' }];
|
||||||
}
|
}
|
||||||
|
|
||||||
const requiredRuleIndex: number = rules.findIndex(
|
const requiredRuleIndex: number = rules.findIndex(
|
||||||
@@ -142,6 +145,9 @@ export default defineComponent({
|
|||||||
if (requiredRuleIndex !== -1) {
|
if (requiredRuleIndex !== -1) {
|
||||||
const rule = rules[requiredRuleIndex];
|
const rule = rules[requiredRuleIndex];
|
||||||
if (rule.required && component) {
|
if (rule.required && component) {
|
||||||
|
if (!Reflect.has(rule, 'type')) {
|
||||||
|
rule.type = 'string';
|
||||||
|
}
|
||||||
const joinLabel = Reflect.has(props.schema, 'rulesMessageJoinLabel')
|
const joinLabel = Reflect.has(props.schema, 'rulesMessageJoinLabel')
|
||||||
? rulesMessageJoinLabel
|
? rulesMessageJoinLabel
|
||||||
: globalRulesMessageJoinLabel;
|
: globalRulesMessageJoinLabel;
|
||||||
@@ -157,11 +163,9 @@ export default defineComponent({
|
|||||||
component.includes('TimePicker')
|
component.includes('TimePicker')
|
||||||
) {
|
) {
|
||||||
rule.type = 'object';
|
rule.type = 'object';
|
||||||
}
|
} else if (component.includes('RangePicker') || component.includes('Upload')) {
|
||||||
if (component.includes('RangePicker') || component.includes('Upload')) {
|
|
||||||
rule.type = 'array';
|
rule.type = 'array';
|
||||||
}
|
} else if (component.includes('InputNumber')) {
|
||||||
if (component.includes('InputNumber')) {
|
|
||||||
rule.type = 'number';
|
rule.type = 'number';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -171,7 +175,7 @@ export default defineComponent({
|
|||||||
const characterInx = rules.findIndex((val) => val.max);
|
const characterInx = rules.findIndex((val) => val.max);
|
||||||
if (characterInx !== -1 && !rules[characterInx].validator) {
|
if (characterInx !== -1 && !rules[characterInx].validator) {
|
||||||
rules[characterInx].message =
|
rules[characterInx].message =
|
||||||
rules[characterInx].message || `字符数应小于${rules[characterInx].max}位`;
|
rules[characterInx].message || t('maxTip', [rules[characterInx].max]);
|
||||||
}
|
}
|
||||||
return rules;
|
return rules;
|
||||||
}
|
}
|
||||||
@@ -237,6 +241,7 @@ export default defineComponent({
|
|||||||
const bindValue = {
|
const bindValue = {
|
||||||
[valueField || (isCheck ? 'checked' : 'value')]: handleValue(component, field),
|
[valueField || (isCheck ? 'checked' : 'value')]: handleValue(component, field),
|
||||||
};
|
};
|
||||||
|
|
||||||
if (!renderComponentContent) {
|
if (!renderComponentContent) {
|
||||||
return <Comp {...propsData} {...on} {...bindValue} />;
|
return <Comp {...propsData} {...on} {...bindValue} />;
|
||||||
}
|
}
|
||||||
|
@@ -79,9 +79,7 @@ export function useFormAction({
|
|||||||
validKeys.push(key);
|
validKeys.push(key);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
// if (formEl) {
|
validateFields(validKeys);
|
||||||
// formEl.validateFields(validKeys);
|
|
||||||
// }
|
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* @description: Delete based on field name
|
* @description: Delete based on field name
|
||||||
|
@@ -19,11 +19,11 @@ export function useFormValues({
|
|||||||
formModel,
|
formModel,
|
||||||
}: UseFormValuesContext) {
|
}: UseFormValuesContext) {
|
||||||
// Processing form values
|
// Processing form values
|
||||||
function handleFormValues(values: any) {
|
function handleFormValues(values: Record<string, any>) {
|
||||||
if (!isObject(values)) {
|
if (!isObject(values)) {
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
const resMap: any = {};
|
const resMap: Record<string, any> = {};
|
||||||
for (const item of Object.entries(values)) {
|
for (const item of Object.entries(values)) {
|
||||||
let [, value] = item;
|
let [, value] = item;
|
||||||
const [key] = item;
|
const [key] = item;
|
||||||
@@ -49,7 +49,7 @@ export function useFormValues({
|
|||||||
/**
|
/**
|
||||||
* @description: Processing time interval parameters
|
* @description: Processing time interval parameters
|
||||||
*/
|
*/
|
||||||
function handleRangeTimeValue(values: any) {
|
function handleRangeTimeValue(values: Record<string, any>) {
|
||||||
const fieldMapToTime = unref(fieldMapToTimeRef);
|
const fieldMapToTime = unref(fieldMapToTimeRef);
|
||||||
|
|
||||||
if (!fieldMapToTime || !Array.isArray(fieldMapToTime)) {
|
if (!fieldMapToTime || !Array.isArray(fieldMapToTime)) {
|
||||||
@@ -72,7 +72,7 @@ export function useFormValues({
|
|||||||
|
|
||||||
function initDefault() {
|
function initDefault() {
|
||||||
const schemas = unref(getSchema);
|
const schemas = unref(getSchema);
|
||||||
const obj: any = {};
|
const obj: Record<string, any> = {};
|
||||||
schemas.forEach((item) => {
|
schemas.forEach((item) => {
|
||||||
if (item.defaultValue) {
|
if (item.defaultValue) {
|
||||||
obj[item.field] = item.defaultValue;
|
obj[item.field] = item.defaultValue;
|
||||||
|
@@ -6,4 +6,6 @@ export default {
|
|||||||
|
|
||||||
input: 'Please Input',
|
input: 'Please Input',
|
||||||
choose: 'Please Choose',
|
choose: 'Please Choose',
|
||||||
|
|
||||||
|
maxTip: 'The number of characters should be less than {0}',
|
||||||
};
|
};
|
||||||
|
@@ -6,4 +6,6 @@ export default {
|
|||||||
|
|
||||||
input: '请输入',
|
input: '请输入',
|
||||||
choose: '请选择',
|
choose: '请选择',
|
||||||
|
|
||||||
|
maxTip: '字符数应小于{0}位',
|
||||||
};
|
};
|
||||||
|
Reference in New Issue
Block a user