/** * 生成一条表单条目 * @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)) { 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)) { 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 };