@form-create/tdesign
Version:
TDesign版本低代码表单|FormCreate 是一个可以通过 JSON 生成具有动态渲染、数据收集、验证和提交功能的低代码表单生成组件。支持6个UI框架,适配移动端,并且支持生成任何 Vue 组件。内置20种常用表单组件和自定义组件,再复杂的表单都可以轻松搞定。
64 lines (58 loc) • 1.83 kB
JavaScript
import is from '@form-create/utils/lib/type';
const required = {
name: 'required',
load(inject, rule, api) {
const val = parseVal(inject.getValue());
let _title = undefined;
if (val.required === false) {
inject.clearProp();
api.clearValidateState([rule.field]);
} else {
const validate = {
trigger: 'change',
validator(v) {
updateMessage();
return !is.empty(v);
},
...val,
};
const updateMessage = () => {
const title = rule.__fc__.refRule.__$title?.value;
if (_title === title) {
return;
}
_title = title;
if (!val.message) {
validate.message = api.t('required', {title}) || (title + (api.getLocale() === 'en' ? ' is required' : '不能为空'));
} else {
const match = val.message.match(/^\{\{\s*\$t\.(.+)\s*\}\}$/);
if (match) {
validate.message = api.t(match[1], {title});
}
}
}
updateMessage();
inject.getProp().validate = [validate];
}
api.sync(rule);
},
watch(...args) {
required.load(...args);
}
}
function parseVal(val) {
if (is.Boolean(val)) {
return {required: val}
} else if (is.String(val)) {
return {message: val};
} else if (is.Undef(val)) {
return {required: false};
} else if (is.Function(val)) {
return {asyncValidator: val};
} else if (!is.Object(val)) {
return {};
} else {
return val;
}
}
export default required