uicore-web
Version:
web ui core
791 lines (784 loc) • 34.9 kB
JavaScript
import {getToken} from "../../utils/auth";
import common from "./common";
/**
* 已正式加入框架体系应用
* marked by deleteelf 20210713
*/
export default {
mixins: [common],//监听外部框架的大小改变事件
data() {
return {
loaded: false,
columnSize: 12,
formMap: {},
form: {
novali:[]
},
items: [],//表单项
rules: {},//验证规则
itemParams:{}
}
},
components:{
RichEditor: (resolve) => require([`../RichEditor`], resolve),
},created() {
},
methods: {
async updateForm(formItems,formData) {
this.columnSize = 24 / ((this.options.columnCount > 4 ? 4 : this.options.columnCount) || 2);//最大只允许4
if(!formItems)
formItems=this.items;
await this.initFormItem(formItems,formData);
this.loaded = true;
},async initFormItem(formItems, formData=[]) {
this.$d.debug().log("初始化表单");
this.formMap={};
for (let j=0;j<formItems.length;j++) {
let item = formItems[j];
this.formMap[item.code] = j;
let data = item.value != null ? item.value : item.defaultValue;
if (data) {
let tmp = data;
if (typeof tmp == "string" && tmp.indexOf("{") >= 0) {
tmp = tmp.urlFormat(this.form, true, true);
}
if (tmp)
tmp = this.$d.adapterData(tmp);
this.$set(this.form, item.code, tmp);
} else {
switch (item.type) {
case "image":
case "file":
case "transfer":
if (!data)
data = [];
break;
case "stepusers":
data = [];
break;
default:
data = "";
break;
}
this.$set(this.form, item.code, data);
}
}
for (let key in this.options.params) {//不论是否新增,都需要从地址栏获取传入参数
if (this.options.params[key])
this.form[key] = this.options.params[key];
}
formItems.forEach((item)=> {
if (item.linkageRule && typeof item.linkageRule == "string")
item.linkageRule = this.$d.adapterData(item.linkageRule);
if (item.url) {//尝试先从地址协议上获取配置规则
let params = this.$d.getParams(item.url);
let rule = {};
let keys = ["supportNullSelect", "triggers", "datas", "chooseShow", "always", "checkStrictly", "multiple"];
for (let k = 0; k < keys.length; k++) {
let key = keys[k];
if (params[key]) {
switch (key) {
case "triggers":
rule[key] = params[key].split(",");
break;
case "datas":
let names = params[key].split(",");
rule[key] = {};
for (let index in names) {
if (names[index])
rule[key][names[index]] = "{" + names[index] + "}";
}
break;
default:
rule[key] = this.$d.adapterData(params[key]);
break;
}
delete params[key];
}
}
if (Object.getOwnPropertyNames(rule).length > 0) {
item.linkageRule = this.$d.merge(rule, item.linkageRule);//融合参数支持
item.url = this.$d.replaceQueryString(this.$d.getPageAddress(item.url), params, false, true);//裁剪掉相关参数
}
if (item.always != null) {//如果配置了属性,则数据具备最高优先级
item.linkageRule = this.$d.merge(item.linkageRule, {always: item.always});//融合参数支持item.always;
}
}
});
//加载表单数据
let formMap = this.formMap;
for (let i=0;i<formData.length;i++) {
let item = formItems[formMap[formData[i].name]];
// this.$d.debug().log(item,formData[i].val);
if (formData[i].val) {
switch (item.type) {
case "text":
case "textarea":
case "sql":
case "html":
case "xml":
case "json":
if (typeof formData[i].val == "object")
this.$set(this.form, formData[i].name, JSON.stringify(formData[i].val));
else
this.$set(this.form, formData[i].name, formData[i].val);
break;
case "image":
case "file":
case "transfer":
case "stepusers":
case "transfer":
let data=this.$d.adapterData(formData[i].val);
if(this.$d.isArray(data)){
this.$set(this.form, formData[i].name, data);
}else{
this.$d.debug().warn("数据格式错误,强制修正!!!,需求数据为数组,目标数据为:",data);
this.$set(this.form, formData[i].name, []);
}
break;
case "editor":
this.$set(this.form, formData[i].name, this.$d.resameUrl(this.$store.state.api.axios.baseURL,formData[i].val));
break;
default:
this.$set(this.form, formData[i].name, this.$d.adapterData(formData[i].val));
break;
}
}else {//某些字段数据格式有要求,需要进行适配
if (item) {
switch (item.type) {
case "image":
case "file":
case "transfer":
case "stepusers":
case "transfer":
//如果不是有效的结果值,则维持原来的默认值
this.$set(this.form, formData[i].name, []);
break;
default://空字符串也是有效值
this.$set(this.form, formData[i].name, "");
break;
}
} else {
this.$d.debug().warn("item为空", formData[i].name, formMap);
}
}
}
//验证逻辑需要最后来加载,否则会报错
if (this.options.params.readonly !== true) {//页面处于只读状态时,无需加载验证规则
for (let i in formItems) {
let item = formItems[i];
if (item.isEmpty===false) {
this.setRequiredRule(item);
}else if(item.required) {
this.setRequiredRule(item);
}
let regex=item.validateRegex||item.regex;
if (regex) {
if (!this.rules[item.code]) {
this.$set(this.rules, item.code, []);
}
//兼容早期的eval
let rule = {
pattern: new RegExp(regex.replaceAll("\\\\", "\\")),
message: this.$_i18n(item.message||item.msg), trigger: 'blur'
};
this.rules[item.code].push(rule);
}
item.rule = this.rules[item.code];
}
}
this.items = formItems;
//对表单进行恢复视图
for (let i in formItems) {
let item = formItems[i];
switch (item.type) {
case "date":
case "datetime":
case "text":
case "textarea":
case "switch":
if (item.url) {
item.triggerHandler = async (formItem, val=undefined) => {//如果后续需要变化,是根据某些组件联动来实现的
if (this.loaded&&val!==undefined) {//加载完成才能触发值改变
this.$set(this.form, formItem.code, val);
}
let options = this.$d.extend({}, this.options.params, this.form);
let url = formItem.url.urlFormat(options, false, true);
await this.$async({url: url, keymap: {}}).then(async (res) => {
for(let i in res.data){
item.datas= res.data[i];
for (let key in res.data[i]){
if(key=="searchtime"){
this.changed(new Date(res.data[i][key]).format(item.formatString), item);
}else{
if(item.type=="switch"&&typeof res.data[i][key]!="boolean"){
let result=false;
if(this.$d.adapterData(res.data[i][key]))
result=true;
this.changed(result, item);//只对第一个值进行接收,所以不建议传递多值回来,如果需要传递多值,又能正确给值,建议
break;
}
//只对第一个值进行接收,所以不建议传递多值回来,如果需要传递多值,又能正确给值,建议使用带字段排序支持的json体
this.changed(res.data[i][key], item);
break;
}
}
}
});
}
//默认情况下只有新增数据才会加载默认值,除非是加了always
if( (!this.options.params.id&&!item.value) ||(item.linkageRule&&item.linkageRule.always)||this.form[item.code]===undefined){//如果没有默认值,才进行数据加载
await item.triggerHandler(item);
}
}
break;
case "content":
case "section":
item.content=item.defaultValue||item.name;
if (item.url && !this.form[item.code]) {//如果没有默认值,才进行时间数据加载,这2个控件都是富文本类型的,要考虑可能不是json
let options = this.$d.extend({}, this.options.params, this.form);
await this.$async({url: item.url.urlFormat(options,false)}).then(async (res) => {
item.content=res;
});
}
break;
case "select"://下拉
case "dropdownchecklist"://多选下拉
case "autocomplete"://自动完成
case "autocomplete_remote"://自动完成
case "checkbox"://自动完成
case "cascader"://级联
//expandTrigger="hover"
//multiple = true 开启多选 checkStrictly 关闭级联选择
//lazy=true lazyload=function()开启懒加载
case "transfer"://穿梭
case "processlist"://流程组件
case "steplist"://流程步骤组件
case "radio"://单选组件
if(item.type=="radio") {
this.$set(item,"options",this.booleanArray(item));
// item.options = this.booleanArray(item);
if(item.options.length)//如果配置了默认值,则不再执行远程加载
break;
}
if (item.type == "cascader" || item.type == "transfer") {
item.config = this.$d.merge({showFilter: true,key: "id",label: "name",value: "id"},
item.linkageRule || {});
} else {
item.linkageRule = this.$d.merge({}, item.linkageRule);
}
if (item.type == "processlist") {
await this.getProcessList(item, this.options.params.cid);
} else if (item.type == "steplist") {
item.linkageRule = this.$d.merge({triggers: ["users"],always:true,params:{ users:{url:"{url}",
allowChange:"{allow_change}"}}},item.linkageRule);
this.$d.debug().warn("步骤组件自动初始化联动目标users");
if(this.options.type=="workflow")
await this.getStepList(item);
else
await this.getProcessFirstStep(item);
}else {
if (item.url) {
item.triggerHandler = async (formItem, val=undefined) => {
this.$set(formItem, "options", []);
if (this.loaded&&val!==undefined) {//加载完成才能触发值改变
this.$set(this.form, formItem.code, val);
}
let options = this.$d.extend({}, this.options.params, this.form);
if(item.type=="autocomplete_remote"){
options.q=this.form[item.code];
}
let url = formItem.url.urlFormat(options, false, true);
let keymap = {};
if(item.linkageRule&&item.linkageRule.keymap)
keymap=item.linkageRule.keymap;
await this.$async({url: url, keymap: keymap}).then(async (res) => {
let data = res.data;
if (item.type == "cascader") {//只有级联数据需要转成树
data = this.$d.transform2TreeData(data, item.config.rootId || 0);
}
this.updateSelect(url, formItem, data);
});
}
await item.triggerHandler(item);
}
}
break;
case "stepusers"://步骤用户选择组件
item.config = this.$d.merge({showFilter: true,key: "id",label: "name",value: "id"},
item.linkageRule || {});
if(this.form.toStepId!=0)
this.setRequiredRule(item);
await this.getDefaultUsers(item);
item.dataUrl=this.$store.state.api.oa.getUsers;
item.triggerHandler = async (formItem, val=undefined) => {
this.$set(formItem, "options", []);
if (this.loaded && val !== undefined) {//加载完成才能触发值改变
this.$set(this.form, formItem.code, val);
}
let options = this.$d.extend({}, this.options.params, this.form);
let url = formItem.dataUrl.urlFormat(options, false, true);
let keymap = {};
if (item.linkageRule && item.linkageRule.keymap)
keymap = item.linkageRule.keymap;
await this.$async({url: url, keymap: keymap}).then(async (res) => {
let data = res.data;
this.updateSelect(url, formItem, data);
});
}
await item.triggerHandler(item);
break;
case "image":
case "file":
let rule = {
limit: 5, accept: "image/png,image/jpeg,image/apng,image/bmp,image/gif",
maxSize: 1024 * 512, desc: "只能上传jpg/png文件,且不超过500KB"
};
rule.data = {
app_id: this.$store.getters.appId, access_token: this.$store.getters.accessToken,
token: getToken()
}
if (item.type !== "image") {
rule.maxSize = 1024 * 1024 * 20;
rule.desc = "文件大小不超过20MB";
rule.accept = "";
}
item.linkageRule = this.$d.merge(rule, item.linkageRule);
if (item.url) {
item.url=this.$d.resameUrl(this.$store.state.api.axios.baseURL,item.url);
// if (!this.$d.isExternal(item.url)) {
// item.url = this.$store.state.api.axios.baseURL + item.url;
// }
// } else {
// item.url = this.$store.state.api.upload;
}
break;
case "editor":
item.config = this.$d.merge({readonly: this.checkDisable(item)}, item.linkageRule);
break;
default:
break;
}
}
return formItems;
// this.items = formItems;
// //传递由地址过来的值用于覆盖结果
// this.loaded = true;
},async changed(data, item) {
// this.$d.debug().log("探测到值改变事件",data,item);
//如果需要拦截数据改变,在这边做
this.form[item.code] = data;
if (item && item.linkageRule) {
if(this.loaded||item.linkageRule.always) {//常规模式下,表单初始化加载并不进行数据联动,仅当配置了always后,才会一直实时同步
let dataObj = null;
if (item.options) {//说明是下拉类的数据
for (let i in item.options) {
if (item.options[i].id == data) {
dataObj = item.options[i];
break;
}
}
}
if (item.datas) {//对文本类注入的数据也进行支持
dataObj = item.datas;
}
let rule = item.linkageRule;
let params = this.$d.extend({}, this.form, dataObj);
if (rule.params) {//增加对联动参数的支持
for (let targetItem in rule.params) { //因为加载顺序的问题,这个时间组件还不存在
if (!this.itemParams[targetItem])
this.itemParams[targetItem] = {};
for (let key in rule.params[targetItem]) {
if (typeof rule.params[targetItem][key] == "string")
this.itemParams[targetItem][key] = this.$d.adapterData(rule.params[targetItem][key].urlFormat(params, true, false));
else
this.itemParams[targetItem][key] = rule.params[targetItem][key];
}
}
}
// this.$d.debug().log("收到值改变事件",item.code,this.form, this.options.params, data, item);
await this.linkageData(rule, this.loaded, this.form, params);
//todo:这里还有一种需求,当部分数据变更时,需要改变一些组件的显示状态
//要求,该组件的数据中,就包含了需要隐藏与显示的字段,hide:[],show:[]
if (rule.chooseShow == true && item.options) {//除非要求选择显示功能打开
let dataItem = null;
for (let i in item.options) {
if (item.options[i].id == data) {
dataItem = item.options[i];
break;
}
}
if (dataItem) {
if (dataItem.hide) {
if (typeof dataItem.hide == "string")
dataItem.hide = this.$d.adapterData(dataItem.hide);
this.handleShow(dataItem.hide, false);
}
if (dataItem.show) {
if (typeof dataItem.show == "string")
dataItem.show = this.$d.adapterData(dataItem.show);
this.handleShow(dataItem.show, true);
}
}
}
}
}
},async getProcessList(formItem,cid){ //此方法属于oa的专有扩展属性,用于支持processlist组件
let url=this.$store.state.api.oa.getCategoryProcessList;
await this.$async({url: url, keymap: {},data:{cid:cid}}).then(async (res) => {
let data = res.data;
if(res.data.length) {//如果有数据,则设置必填
this.setRequiredRule(formItem);
}else {//如果没有加载流程列表,说明没有配置流程列表,则不用显示
formItem.isVisible = false;
}
this.updateSelect(url, formItem, data);
});
}, async getDefaultUsers(item, data = []) {
let options = this.$d.extend({}, this.options.params, this.form);
if(options.toStepId) {
//如果配置了专属默认用户来源则最高优先,其次表单重写,否则使用流程默认用户
let url=(this.itemParams["users"]&&this.itemParams["users"].url)||item.url||this.$store.state.api.oa.getStepDefaultUsers;
url = url.urlFormat(options, false, true);
await this.$async({url:url, data: {toStepId:options.toStepId}})
.then(async (res1) => {
if (!this.itemParams["users"]||this.itemParams["users"].allowChange!==true) {//如果允许修改,则新增只读关闭
item.disable = true;
this.$d.debug().log("步骤禁止修改审批人!!");
if(res1.data.length==0) {
this.$d.debug().warn("流程因没有配置有效的步骤用户,强制激活可配功能!");
item.disable = false;
}
}else{
item.disable = false;
}
if(item.disable) {
item.values = res1.data;
}
for (let j in res1.data) {
if (res1.data[j] && res1.data[j].id)//追加有效的默认审批人
data.push(res1.data[j].id)
}
await this.getStepUsers(item,data);
})
item.isVisible=true;
}else{
item.isVisible=false
}
return data;
}, async getStepUsers(item, defaultUsers= []) {
let toStepId=this.form.toStepId|| this.options.params.toStepId;
let infoId=this.form.infoId|| this.options.params.infoId;
let data=[];
await this.$async({url: this.$store.state.api.oa.getStepUsers, data: {toStepId:toStepId,infoId:infoId}})
.then(async (res1) => {
for (let j in res1.data) {
if (res1.data[j] && res1.data[j].id)//追加有效的默认审批人
data.push(res1.data[j].id)
}
if(item.disable){
if(res1.data.length>0)
item.values=res1.data;
}
if(data.length)
this.$set(this.form,item.code,data);
else
this.$set(this.form,item.code,defaultUsers);
})
return data;
},async getStepList(formItem){ //此方法属于oa的专有扩展属性,用于支持steplist组件
let url=this.$store.state.api.oa.getStepOptions;
await this.$async({url: url, keymap: {},data:{stepId:this.form.stepId}})
.then(async (res) => {
let data = res.data;
if(data.length>0) { //如果有数据,则设置必填
this.setRequiredRule(formItem);
}else{
this.clearRequiredRule(formItem);
}
this.$set(formItem,"disable",data.length<=1);
this.updateSelect(url, formItem, data);
});
},async getProcessFirstStep(formItem){ //此方法属于oa的专有扩展属性,用于支持steplist组件
let url= this.$store.state.api.oa.getProcessFirstStep;
await this.$async({url:url,data: {proId: this.form.proId}, keymap: {}})
.then(async (res) => {
let data = res.data;
if(data.length>0) {//如果有数据,则设置必填
this.setRequiredRule(formItem);
}else
this.clearRequiredRule(formItem);
this.$set(formItem,"disable",data.length<=1);
this.updateSelect(url, formItem, data);
});
},setRequiredRule(item) {
if (!this.rules[item.code]) {
this.$set(this.rules, item.code, []);
}
this.rules[item.code].push({
required: true,
message: this.$_i18n(item.name) + this.$t('form.required'), trigger: 'blur'
});
},clearRequiredRule(item){
let rule=this.rules[item.code];
if(rule){
for(let i in rule){
if(rule[i].required===true) {
rule[i].required = false;
break;
}
}
}
},checkDisable(item) {
if (this.options.params.readonly) {
return true;
}else if(item.disable===true) {//业务干预 //某些情况下,需要由代码业务逻辑来控制禁用
return true;
}else if(item.readonly===true){//业务干预 //某些情况下,需要由代码业务逻辑来控制只读
return true;
} else {
if (this.options.params.id) {
return item.modReadonly;
} else {
return item.addReadonly;
}
}
return false;
},isArrayControl(item){
return item.type == "dropdownchecklist" || item.type == "file" || item.type == "image" ||
item.type == "stepusers"||item.type=="transfer"||
(item.type == "cascader" && item.linkageRule && item.linkageRule.emitPath !== false);
},isTextControl(item){
return item.type == "text" || item.type == "password" || item.type == "json" ;
},updateSelect(url, item, data=[]) {
for (let i in data) {//针对部分数据可能是json的适配
data[i].id = this.$d.adapterData(data[i].id);
}
item.options = data;
if (item.linkageRule&&item.linkageRule.supportNullSelect === true) {
item.options.unshift({id: "", name: "请选择"});//插入到第一条
}
if (item.options&&item.options.length > 0) {
if (this.form[item.code]) {//如果有值尝试还原
if (this.isArrayControl(item)) {
if (!this.$d.isArray(this.form[item.code])) {//数据结果里,如果不是数组,则认为值无效
this.form[item.code] = [];
} else {//否则需要检查目前的结果值是否在可选范围
if(item.type=="dropdownchecklist") {//多选下拉才需要从结果回复视图
let re = this.form[item.code].filter((val) => item.options.find((op) => op.id == val));
this.form[item.code] = re;
}
}
}
} else {//多选和模糊搜索,需要用户自己选择
if (item.type == "select" || item.type == "steplist" || item.type == "processlist") {//如果下拉没有默认数据,则自动选择第一个
this.$set(this.form, item.code, item.options[0].id);
} else if (item.type == "dropdownchecklist" || item.type == "file" || item.type == "image" ||
(item.type == "cascader" && item.linkageRule && item.linkageRule.emitPath !== false)) {
if (!this.$d.isArray(this.form[item.code])) {//数据结果里,如果不是数组,则认为值无效
this.form[item.code] = [];
}
}
}
this.changed(this.form[item.code], item);
} else {
this.changed(null, item);
}
},booleanArray(item) {
// if(!item.formatString)
// item.formatString=item.booleanText;
if (!item.url&&!item.formatString)//如果bool
item.formatString = "是|否";
let result = [];
if(item.formatString) {
let temp = item.formatString.split("|");
for (let i in temp) {
result.push({id: i == 0, name: temp[i]});
}
}
return result;
},async linkageData(rule,loaded,result,params){
//触发需要改变的控件,需要判断控件是否已经加载
//工具栏没有加载完成时,加载过程逻辑会自动执行对应最新数据获取
//工具栏加载完成时,需要手动触发对应的控件进行重新加载
if (loaded||(rule &&(rule.always||rule.chooseShow))) {
if (rule.datas) { //触发需要改变的值
for (let key in rule.datas) {
let targetItem = this.items[this.formMap[key]];
if (loaded&&targetItem&&targetItem.type == "stepusers") {
let data = [];
await this.getDefaultUsers(targetItem, data);
this.$set(result, key, data);
} else {
if(typeof rule.datas[key]=="string"&&rule.datas[key].indexOf("{")>=0) {
let val=rule.datas[key].urlFormat(params, true, true);
if(targetItem && this.isArrayControl(targetItem)&&typeof val=="string"){
this.$set(result, key,val.split(","));//如果联动的目标是个数组,则进行数据切割
}else {
if(this.isTextControl(targetItem))
this.$set(result, key,val);
else
this.$set(result, key,this.$d.adapterData(val));
}
}else
this.$set(result, key, rule.datas[key]||params[key]);
}
}
}
if (rule.triggers) {
for (let i in rule.triggers) {
let formItem = this.items[this.formMap[rule.triggers[i]]];
if (formItem) {
if (formItem.triggerHandler) {
await formItem.triggerHandler(formItem);
// } else {
// this.$nextTick(() => { //触发点击事件
// this.handleClick(formItem);
// })
}
}
}
}
}
}, beforeUpload(file, item) {
if (file) {
if (file.size > item.linkageRule.maxSize) {
this.$message.error(item.linkageRule.desc);
return false;
}
return true;
}
return false;
}, handleExceed(files, fileList, item) {
this.$message.warning(`当前限制只能上传${item.linkageRule.limit}个文件,本次选择了${files.length}个文件,已上传${fileList.length}个文件`);
}, beforeRemove(file, fileList) {
if(file.status=="ready")//因上传验证失败的会处于准备就绪的状态,上传成功的都是success的状态
return true;
return this.$confirm(`确定移除 ${file.name}?`);
}, handleUploadSuccess(response, file, fileList, item) {
let url = response.url;
// if (!this.$d.isExternal(url))
// url = this.$store.state.api.axios.baseURL+"/" + response.url;
this.form[item.code].push({name: response.name, url: url, uid: file.uid, status: file.status,
id:response.id,userName:response.uname,userId:response.uid,type:response.type,
time:new Date(response.time||file.uid).format("yyyy-MM-dd HH:mm:ss")});
// this.handleFileChanged(file,fileList,item);
this.$d.debug().log("上传成功", response, file, fileList, item, this.form[item.code]);
}, handleUploadError(response, file, fileList, item) {
this.$d.debug().log("上传失败,如果需要处理,请优化", response, file, fileList, item, this.form[item.code]);
}, handleUploadRemove(file, fileList, item) {
for (let i in this.form[item.code]) {
if (this.form[item.code][i].uid == file.uid) {
this.removeItem(item,i);
break;
}
}
this.$d.debug().log("删除成功", file, fileList, this.form[item.code]);
}, handleRemote(query, item) {
this.$set(item, "loading", true);
if (item.timeoutHandler) {
clearTimeout(item.timeoutHandler);
item.timeoutHandler = null;
}
item.timeoutHandler = setTimeout(() => {
let options = this.$d.extend({}, this.options.params, this.form, {q: query});
let url = item.url.urlFormat(options, false, true);
this.$http({url: url}).then(async (res) => {
item.loading = false;
this.updateSelect(url, item, res.data)
});
}, 300);//延迟300毫秒,在快速输入时,减少交互
}, handleShow(items, isShow) {
if (!this.loaded) {
setTimeout(this.handleShow, 50, items, isShow);
return;
}
for (let i in items) {
this.items[this.formMap[items[i]]].isVisible = isShow;
let index = this.form.novali.findIndex((col) => col == items[i]);
if (isShow) {//加入验证
if (!this.rules[items[i]] && this.items[this.formMap[items[i]]].rule)
this.rules[items[i]] = this.items[this.formMap[items[i]]].rule;
if (index > -1)
this.form.novali.splice(index, 1);
} else {//移除验证
delete this.rules[items[i]];
if (index == -1)
this.form.novali.push(items[i]);
}
}
},checkVisible(item){ //此方法重写了page.js的方法,如果以后需要性能提升时,分离stepview和formview的页面逻辑
return item.isVisible!==false&&item.type!=='hidden';
},placeholderAdapter(item) {
if(!this.form.readonly) {
switch (item.type) {
case "text":
case "editor":
case "textarea":
return this.$_i18n(item.remark) || (this.checkDisable(item) ?
this.$_i18n(item.name) + this.$t("form.system_build") :
this.$t("form.write") + this.$_i18n(item.name));
break;
case "select":
case "dropdownchecklist":
return this.$t("form.select");
case "autocomplete":
case "autocomplete_remote":
return this.$t("form.autocomplete");
default:
return this.$_i18n(item.remark);
}
}else{
return "";
}
},setControlTitle(item) {
switch (item.type) {
case "text":
case "editor":
case "textarea":
return this.$_i18n(item.remark) || (this.checkDisable(item) ?
"" : this.$t("form.write") + this.$_i18n(item.name));
break;
default:
return this.$_i18n(item.remark) || (this.checkDisable(item) ?
"" : this.$t("form.select") + this.$_i18n(item.name));
break;
}
}, removeFile(item,file){
let data=this.form[item.code];
if(this.$d.isArray(data)){
let index= data.findIndex((d,index)=>{return d.uid==file.uid;})
if(data.length>index){
data.splice(index,1);
}
}else{
this.form[item.code]=[];
}
}, removeItem(item,index){
let data=this.form[item.code];
if(this.$d.isArray(data)){
if(data.length>index){
data.splice(index,1);
}
}else{
this.form[item.code]=[];
}
// item.linkageRule.hideAdd=false;
},perview(urlFormat,row){
if(urlFormat)
return urlFormat.urlFormat(row,false);
},handleFileChanged(file,fileList,item){
// if(this.form[item.code].length>=item.linkageRule.limit){
// item.linkageRule.hideAdd=true;
// }else{
// item.linkageRule.hideAdd=false;
// }
return true;
},clearable(item){
if(item.linkageRule&&item.linkageRule.clearable!=null)
return item.linkageRule.clearable;
else
return item.isEmpty||false;
}
}
}