formdialog.js 5.58 KB
export default {
  created() {
   // this.getData();
  },
  beforeDestroy() {
    clearTimeout(this.loadingTimer);
  },
  methods: {
    // 渲染前置处理
    beforeRender(data) {
      return data
    },
    // 渲染后置处理
    afterRender(data) {

    },
    // 提交表单的前置处理
    beforeSubmit(data) {
      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.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) {
      const el = this.$refs.form;
      // console.log(this.form);
      el.validate((valid) => {
        if (!valid) return;
        this.loading = true;
        this.$post(this.urls.saveUrl || this.pageInfo.saveUrl, 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 ? [] : 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数组
    }
  }
}