/**
|
* 生成一条表单条目
|
* @param {String} _label 标签名称
|
* @param {String} _name 字段名称
|
* @param {String} _type 输入类型 (text: 输入框; switch: 切换按钮; picker: 下拉框选项; cascader: 级联选择)
|
* @param {Boolean} _required 是否为必填项
|
* @param {Array} _options 当输入类型为picker或cascader时,提供可选项
|
* @param {Array} cascaderTitles 当输入类型为cascader时,提供每层选项的标题
|
* @param {Array} referItems 当输入类型为cascader时,提供关联的属性name
|
*/
|
function baseInputItem(
|
_label,
|
_name,
|
_required,
|
_type = 'text',
|
_options = [],
|
cascaderTitles,
|
referItems,
|
) {
|
return {
|
required: _required,
|
label: _label,
|
placeholder: (_type == 'text' ? '请输入' : '请选择') + _label,
|
name: _name,
|
value: null,
|
status: 'success',
|
tips: _label + '不能为空',
|
inputType: _type,
|
options: _options,
|
cascaderTitles: cascaderTitles,
|
referItems: referItems,
|
visible: false,
|
};
|
}
|
|
/**
|
* 隐藏条目,一般是上传时的必要条目信息,但是不需要展示给用户做修改
|
* @param {String} _label
|
* @param {String} _name
|
*/
|
function hideInputItem(_label, _name) {
|
const item = baseInputItem(_label, _name);
|
item.hide = true;
|
return item;
|
}
|
|
/**
|
* 填充初始数据
|
* @param {Array} items 表单条目数组
|
* @param {Object} defaultValue 初始数据
|
*/
|
function setDefaultValue(items, defaultValue) {
|
if (typeof defaultValue === 'object') {
|
items.forEach(e => {
|
// 文本和开关类型直接赋值
|
if (e.inputType == 'text' || e.inputType == 'switch') {
|
if (defaultValue.hasOwnProperty(e.name)) {
|
e.value = defaultValue[e.name];
|
}
|
}
|
// 下拉框除了赋值,需要额外赋值属性_value(数组类型,组件t-picker的特性)
|
else if (e.inputType == 'picker') {
|
if (
|
defaultValue.hasOwnProperty(e.name) &&
|
defaultValue[e.name] != null &&
|
defaultValue[e.name] != undefined
|
) {
|
e.value = defaultValue[e.name] + '';
|
e._value = [e.value];
|
const op = e.options.find(o => {
|
return o.value == e.value;
|
});
|
e._label = op.label;
|
}
|
}
|
// 级联选择器,根据属性referItems找到对应的初始数据
|
else if (e.inputType == 'cascader') {
|
const selectedOptions = [];
|
let value,
|
note,
|
options = e.options;
|
e.referItems.forEach(r => {
|
if (
|
defaultValue.hasOwnProperty(r) &&
|
defaultValue[r] != null &&
|
defaultValue[r] != undefined
|
) {
|
const o = options.find(v => {
|
return v.value == defaultValue[r];
|
});
|
selectedOptions.push(o);
|
options = options[0].children;
|
}
|
});
|
if (selectedOptions.length > 0) {
|
value = selectedOptions[selectedOptions.length - 1].value;
|
note = cascaderNote(selectedOptions);
|
const v = selectedOptions.map(v => {
|
return v.value;
|
});
|
e.value = v;
|
e._value = value;
|
e.note = note;
|
}
|
}
|
});
|
}
|
}
|
|
/**
|
* 级联选择器选择结果格式化
|
* @param {Array} v
|
*/
|
function cascaderNote(v) {
|
let note = '';
|
v.forEach(o => {
|
if (note != o.label) {
|
if (note != '') {
|
note += '/';
|
}
|
note += o.label;
|
}
|
});
|
return note;
|
}
|
|
export { baseInputItem, hideInputItem, setDefaultValue, cascaderNote };
|