export default {
  created() {
    // this.getData();
  },
  beforeDestroy() {
    clearTimeout(this.loadingTimer);
  },
  methods: {
    // 渲染前置处理
    beforeRender(data) {
      if (data.entity.attachmentPath) {
        data.entity.attachmentPathList = [
          {
            url: data.entity.attachmentPath,
            name: data.entity.attachmentPath,
          },
        ];
      }
      data.entity.inspect && data.entity.inspect == 0
        ? (data.entity.inspect = false)
        : (data.entity.inspect = true);
      this.$route.name == "staff/perform/summary/list"
        ? data.entity.remark && data.entity.remark != ""
          ? (data.entity.remark = data.entity.remark)
          : (data.entity.remark =
              "迟到:0 次,\n早退:0 次,\n缺卡:0 次,\n请假:0 次")
        : "";
      data.entity.remarkAdd && data.entity.remarkAdd != ""
        ? (data.entity.remarkAdd = JSON.parse(data.entity.remarkAdd))
        : "";
      return data;
    },
    // 渲染后置处理
    afterRender(data) {},
    // 提交表单的前置处理
    beforeSubmit(data) {
      data.attachmentPathList && data.attachmentPathList.length > 0
        ? (data.attachmentPath = data.attachmentPathList[0].url)
        : (data.attachmentPath = "");
      if (data.leavePerson == 0 || data.leavePerson) {
        if (this.dict.staffList) {
          data.leavePerson = this.dict.staffList[this.form.leavePerson];
          for (let key in this.dict.staffList) {
            if (this.dict.staffList[key] == data.leavePerson) {
              data.leavePersonId = Number(key);
            }
          }
        }
      }
      data.windowWorkmanPerformDetailList &&
      data.windowWorkmanPerformDetailList.length > 0
        ? (data.windowWorkmanPerformDetailList = data.windowWorkmanPerformDetailList.map(
            (v) => {
              v.bonusScore = Number(v.bonusScore);
              v.discipline = Number(v.discipline);
              v.specification = Number(v.specification);
              v.management = Number(v.management);
              v.efficiency = Number(v.efficiency);
              v.sumScore = Number(v.sumScore);
              return v;
            }
          ))
        : "";
      if (this.$route.name == "check/window/workman/perform/list") {
        let obj = {};
        obj.manageCheckDesc = data.manageCheckDesc ? data.manageCheckDesc : "";
        obj.manageCheckResult = data.manageCheckResult;
        obj.id = data.id;
        obj.windowWorkmanPerformDetailList =
          data.windowWorkmanPerformDetailList;
        // obj.windowWorkmanPerform = data;
        // obj.windowWorkmanPerform.id = obj.windowWorkmanPerform.recordId;
        data = obj;
      }
      this.urls.currUrl &&
      this.urls.currUrl.indexOf("attendance/leave/record") == 0
        ? (data.processStatus = 2)
        : "";
      if (data.remarkAdd && data.remarkAdd.length > 0) {
        data.remarkAdd = data.remarkAdd.filter((v) => v.name != "");
        data.remarkAdd = JSON.stringify(data.remarkAdd);
      } else {
        data.remarkAdd = JSON.stringify([{ name: "", score: 0 }]);
      }
      data.remark == "迟到:0 次,\n早退:0 次,\n缺卡:0 次,\n请假:0 次"
        ? (data.remark = "")
        : "";
      return data;
    },
    // 提交表单的后置处理, 会阻断默认的回退行为
    afterSubmit(data) {
      this.$router.go(-1);
    },

    // 开启、关闭
    changePath(path) {
      this.pageInfo.list = path + "/list";
      this.pageInfo.del = path + "/delete";
      this.pageInfo.add = path + "/add";
      this.pageInfo.edit = path + "/edit";
      this.pageInfo.view = path + "/view";
    },

    // 默认拉取数据
    getData() {
      this.loading = true;
      this.$get(this.urls.currUrl || this.pageInfo.currUrl, this.query)
        .then(({ data }) => {
          const res = this.beforeRender(data);
          //转化枚举类型字段的number值为arrays
          res.entity = this.util_toArrays(res.entity, this.toArrays);
          // 转化枚举类型字段的number值为string
          res.entity = this.util_toString(res.entity, this.toString);
          //
          res.entity = this.util_toDateStr(res.entity, this.toDate);
          this.form = Object.assign({}, this.form, res.entity);
          this.dict = Object.assign({}, this.dict, res.dict);
          this.$route.name == "window/owner/list"
            ? this.$post("/staff/list", { page: 1, size: -1 }).then((res) => {
                if (res.code == 1) {
                  this.dict.staffList = res.data.data;
                  this.afterRender(res);
                }
              })
            : this.afterRender(res);
        })

        .catch((error) => {
          this.$message.error(error.message);
          throw error;
        })
        .then((data) => {
          clearTimeout(this.loadingTimer);
          this.loadingTimer = setTimeout(() => {
            this.loading = false;
          }, 300);
        });
    },
    // 提交表单
    submitForm(ref) {
      let url = this.urls.saveUrl || this.pageInfo.saveUrl;
      if (url == "/staff/perform/stat/save") {
        url = "/perform/perpose/save";
      } else if (url == "/perform/rules/attend/save") {
        url = "/perform/rules/category/save";
      } else if (url == "/perform/staff/conf/save") {
        sessionStorage.getItem("type") == 1
          ? (url = "/perform/dept/conf/save")
          : sessionStorage.getItem("type") == 2
          ? (url = "/perform/staff/conf/save")
          : (url = "/window/owner/save");
      }
      const el = this.$refs.form;
      el.validate((valid) => {
        if (!valid) return;
        this.loading = true;
        this.form.leaveType
          ? (this.form.leaveType = this.form.leaveType.toString())
          : "";
        this.form.inspect ? (this.form.inspect = 1) : (this.form.inspect = 0);
        this.$post(url, this.beforeSubmit(this.form))
          .then((res) => {
            this.$message.success(res.msg);
            this.afterSubmit(res);
          })
          .catch((error) => {
            this.$message.error(error.message);
          })
          .then((data) => {
            clearTimeout(this.loadingTimer);
            this.loadingTimer = setTimeout(() => {
              this.loading = false;
            }, 200);
          });
      });
    },
    // 复制一个数组或对象
    util_copy(data) {
      return JSON.parse(JSON.stringify(data));
    },
    // 工具方法,把数字转化为字符串
    util_toString(data, array) {
      //原始数据
      const dataCopy = Object.assign({}, data);
      array.forEach((item) => {
        //如果相等做操作
        dataCopy[item] =
          dataCopy[item] === undefined ? "" : dataCopy[item] + "";
      });
      return dataCopy;
    },
    // 工具方法,把字符串转化为数组
    util_toArrays(data, array) {
      const dataCopy = Object.assign({}, data);
      array.forEach((item) => {
        dataCopy[item] =
          dataCopy[item] === undefined
            ? []
            : Array.isArray(dataCopy[item])
            ? dataCopy[item]
            : dataCopy[item].split(",");
      });
      return dataCopy;
    },
    // 工具方法,把字符串转化为格式化日期
    util_toDateStr(data, array) {
      const dataCopy = Object.assign({}, data);
      array.forEach((item) => {
        dataCopy[item] =
          dataCopy[item] === undefined
            ? ""
            : this.util_formatterDate(dataCopy[item]);
      });
      return dataCopy;
    },
    util_formatterDate(time) {
      let date = new Date(Number(time));
      let Y = date.getFullYear() + "-";
      let M =
        (date.getMonth() + 1 < 10
          ? "0" + (date.getMonth() + 1)
          : date.getMonth() + 1) + "-";
      let D = this.panLeft(date.getDate()) + " ";
      let h = this.panLeft(date.getHours()) + ":";
      let m = this.panLeft(date.getMinutes()) + ":";
      let s = this.panLeft(date.getSeconds());
      return Y + M + D + h + m + s;
    },
    panLeft(num) {
      return num < 10 ? "0" + num : num;
    },

    // 从dict字段暴力取值,取不到则返回原值
    util_formatter(key, val) {
      try {
        return this.dict[key][val];
      } catch (error) {
        return val;
      }
    },
    resetForm(refName) {
      setTimeout(() => {
        this.$nextTick(() => {
          if (this.$refs[refName]) {
            this.$refs[refName].resetFields();
          }
        });
      }, 0);
    },
  },
  computed: {
    pageInfo() {
      let currUrl = this.$route.path;
      let urlArray = currUrl.split("/");
      let type = urlArray.pop();
      urlArray.push("save");
      let saveUrl = urlArray.join("/");
      urlArray.pop();
      urlArray.push("edit");
      let editUrl = urlArray.join("/");
      urlArray.pop();
      urlArray.push("add");
      let addUrl = urlArray.join("/");
      urlArray.pop();
      urlArray.push("view");
      let viewUrl = urlArray.join("/");
      return {
        type,
        currUrl,
        saveUrl,
        editUrl,
        addUrl,
        viewUrl,
      };
    },
  },
  data() {
    return {
      loadingTimer: null,
      loading: false, // ajax请求状态
      query: this.$route.query, // ajax请求参数
      urls: {}, // 用户自定义的请求地址,内容和pageInfo等同
      form: {}, // 表单数据
      extendFormData: {}, // 额外的表单数据
      rules: {}, // 表单验证规则
      dict: {}, // 数据字典
      toString: [], // 需要把number转化为string的表单字段name数组
      toArrays: [], // 需要把number转化为arrays的表单字段name数组
      toDate: [], // 需要把number转化为date的表单字段name数组
    };
  },
};