vue单页模式下, 多个页面import同一js,数据被覆盖

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);
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值