option.js
const baseOption = {
labelPosition: "top",
enter: false,
submitBtn: false,
emptyBtn: false,
menuBtn: true,
column: [
{
label: "报告人",
prop: "person",
readonly: true,
span: 8,
rules: [
{
message: "请输入您的姓名",
trigger: "blur"
}
]
},
{
label: "联系方式",
prop: "phone",
readonly: true,
span: 8,
rules: [
{
message: "请输入您的联系方式",
trigger: "blur"
}
]
},
{
label: "工作单位",
prop: "organ",
readonly: true,
span: 8,
rules: [
{
message: "请输入您的工作单位",
trigger: "blur"
}
]
},
{
label: "事件发生时的当地时间",
prop: "occurTime",
readonly: true,
type: "datetime",
span: 8,
rules: [
{
message: "请输入发生时间",
trigger: "blur"
}
]
},
{
label: "事件发生的地点",
prop: "occurLocation",
readonly: true,
span: 16,
rules: [
{
message: "请输入发生地点",
trigger: "blur"
}
]
},
{
label: "所属作业流程",
prop: "operatingProcedure",
readonly: true,
span: 8,
rules: [
{
message: "请输入作业程序",
trigger: "blur"
}
]
},
{
label: "事件发生时的岗位",
prop: "job",
disabled: true,
readonly: true,
type: "select",
span: 8,
dicUrl: "/api/blade-system/dict-biz/dictionary?code=cas_job",
props: {
label: "dictValue",
value: "dictKey"
},
rules: [
{
message: "请输入所在岗位",
trigger: "blur"
}
]
},
{
label: "岗位描述",
prop: "jobDesc",
readonly: true,
span: 8,
rules: [
{
message: "请输入您的岗位描述",
trigger: "blur"
}
]
},
{
label: "航班号",
prop: "flight",
readonly: true,
span: 8,
rules: [
{
message: "请输入航班号",
trigger: "blur"
}
]
},
{
label: "机型",
prop: "airplane",
readonly: true,
span: 8,
rules: [
{
message: "请输入机型",
trigger: "blur"
}
]
},
{
label: "航班其他信息",
prop: "flightInfo",
readonly: true,
span: 8,
rules: [
{
message: "请输入航班其他信息",
trigger: "blur"
}
]
},
{
label: "事件经过",
prop: "eventDesc",
component: "rich-viewer",
span: 24
}]
};
const group1 = [
{
label: "反馈要求",
icon: "el-icon-info",
column: [
{
label: "责任单位",
prop: "responDept",
type: "tree",
span: 8,
dicData:[],
props: {
label: "title"
},
rules: [
{
required: true,
message: "请输入责任单位",
trigger: "blur"
}
]
},
{
label: "反馈时限",
prop: "responTime",
type: "date",
span: 8,
rules: [
{
required: true,
message: "请输入反馈时限",
trigger: "blur"
}
]
},
{
label: "反馈要求",
prop: "responClaims",
type: "textarea",
span: 24,
rules: [
{
required: true,
message: "请输入反馈要求",
trigger: "blur"
}
]
}
]
}
];
const group2 = [
{
label: "反馈信息",
icon: "el-icon-info",
column: [
{
label: "调查情况",
prop: "dcqk",
type: "textarea",
span: 24,
rules: [
{
required: true,
message: "请输入调查情况",
trigger: "blur"
}
]
},
{
label: "相关措施",
prop: "xgcs",
type: "textarea",
span: 24,
rules: [
{
required: true,
message: "请输入相关措施",
trigger: "blur"
}
]
},
{
label: "主管领导评审意见",
prop: "ldyj",
type: "textarea",
span: 24,
rules: [
{
required: true,
message: "请输入主管领导评审意见",
trigger: "blur"
}
]
}
]
}
];
export function getFormOption(taskDef){
let group;
switch(taskDef){
case 'accept':
group = [...group1];
break;
case 'handle':
group = [...group1];
group[0].column[0].disabled = true;
group[0].column.map((element, idx) => {
element.option= {readonly:true}
element.readonly = true;
});
group = group.concat(group2);
group[1].column[2].readonly = true;
break;
case 'dept-audit':
group = [...group1];
group[0].column[0].disabled = true;
group[0].column.map((element, idx) => {
element.option= {readonly:true}
element.readonly = true;
});
group = group.concat(group2);
group[1].column[0].readonly = true;
group[1].column[1].readonly = true;
break;
default:
group = [...group1, ...group2];
group[0].column[0].disabled = true;
group[0].column.map((element, idx) => {
element.option= {readonly:true}
element.readonly = true;
});
group[1].column.map((element, idx) => {
element.option= {readonly:true}
element.readonly = true;
});
break;
}
group.map((g, i)=>{
g.column.map((element, idx) => {
if(element.readonly){
element.rules=null;
}
});
})
return Object.assign({group:group}, baseOption);
}
多个vue页面中引用:
import { getFormOption, getTaskOption } from "./option";
在页面之间切换,结果导致baseOption 中的数据被覆盖。解决方案是,将js中定义的变量放到方法内部。
export function getFormOption(taskDef){
const baseOption = {
labelPosition: "top",
enter: false,
submitBtn: false,
emptyBtn: false,
menuBtn: true,
column: [
{
label: "报告人",
prop: "person",
readonly: true,
span: 8,
rules: [
{
message: "请输入您的姓名",
trigger: "blur"
}
]
},
{
label: "联系方式",
prop: "phone",
readonly: true,
span: 8,
rules: [
{
message: "请输入您的联系方式",
trigger: "blur"
}
]
},
{
label: "工作单位",
prop: "organ",
readonly: true,
span: 8,
rules: [
{
message: "请输入您的工作单位",
trigger: "blur"
}
]
},
{
label: "事件发生时的当地时间",
prop: "occurTime",
readonly: true,
type: "datetime",
span: 8,
rules: [
{
message: "请输入发生时间",
trigger: "blur"
}
]
},
{
label: "事件发生的地点",
prop: "occurLocation",
readonly: true,
span: 16,
rules: [
{
message: "请输入发生地点",
trigger: "blur"
}
]
},
{
label: "所属作业流程",
prop: "operatingProcedure",
readonly: true,
span: 8,
rules: [
{
message: "请输入作业程序",
trigger: "blur"
}
]
},
{
label: "事件发生时的岗位",
prop: "job",
disabled: true,
readonly: true,
type: "select",
span: 8,
dicUrl: "/api/blade-system/dict-biz/dictionary?code=cas_job",
props: {
label: "dictValue",
value: "dictKey"
},
rules: [
{
message: "请输入所在岗位",
trigger: "blur"
}
]
},
{
label: "岗位描述",
prop: "jobDesc",
readonly: true,
span: 8,
rules: [
{
message: "请输入您的岗位描述",
trigger: "blur"
}
]
},
{
label: "航班号",
prop: "flight",
readonly: true,
span: 8,
rules: [
{
message: "请输入航班号",
trigger: "blur"
}
]
},
{
label: "机型",
prop: "airplane",
readonly: true,
span: 8,
rules: [
{
message: "请输入机型",
trigger: "blur"
}
]
},
{
label: "航班其他信息",
prop: "flightInfo",
readonly: true,
span: 8,
rules: [
{
message: "请输入航班其他信息",
trigger: "blur"
}
]
},
{
label: "事件经过",
prop: "eventDesc",
component: "rich-viewer",
span: 24
}]
};
const group1 = [
{
label: "反馈要求",
icon: "el-icon-info",
column: [
{
label: "责任单位",
prop: "responDept",
type: "tree",
span: 8,
dicData:[],
props: {
label: "title"
},
rules: [
{
required: true,
message: "请输入责任单位",
trigger: "blur"
}
]
},
{
label: "反馈时限",
prop: "responTime",
type: "date",
span: 8,
rules: [
{
required: true,
message: "请输入反馈时限",
trigger: "blur"
}
]
},
{
label: "反馈要求",
prop: "responClaims",
type: "textarea",
span: 24,
rules: [
{
required: true,
message: "请输入反馈要求",
trigger: "blur"
}
]
}
]
}
];
const group2 = [
{
label: "反馈信息",
icon: "el-icon-info",
column: [
{
label: "调查情况",
prop: "dcqk",
type: "textarea",
span: 24,
rules: [
{
required: true,
message: "请输入调查情况",
trigger: "blur"
}
]
},
{
label: "相关措施",
prop: "xgcs",
type: "textarea",
span: 24,
rules: [
{
required: true,
message: "请输入相关措施",
trigger: "blur"
}
]
},
{
label: "主管领导评审意见",
prop: "ldyj",
type: "textarea",
span: 24,
rules: [
{
required: true,
message: "请输入主管领导评审意见",
trigger: "blur"
}
]
}
]
}
];
let group;
switch(taskDef){
case 'accept':
group = [...group1];
break;
case 'handle':
group = [...group1];
group[0].column[0].disabled = true;
group[0].column.map((element, idx) => {
element.option= {readonly:true}
element.readonly = true;
});
group = group.concat(group2);
group[1].column[2].readonly = true;
break;
case 'dept-audit':
group = [...group1];
group[0].column[0].disabled = true;
group[0].column.map((element, idx) => {
element.option= {readonly:true}
element.readonly = true;
});
group = group.concat(group2);
group[1].column[0].readonly = true;
group[1].column[1].readonly = true;
break;
default:
group = [...group1, ...group2];
group[0].column[0].disabled = true;
group[0].column.map((element, idx) => {
element.option= {readonly:true}
element.readonly = true;
});
group[1].column.map((element, idx) => {
element.option= {readonly:true}
element.readonly = true;
});
break;
}
group.map((g, i)=>{
g.column.map((element, idx) => {
if(element.readonly){
element.rules=null;
}
});
})
return Object.assign({group:group}, baseOption);
}