/**
 * 引用本文件，需注意：
 * 1. 控制弹窗是否打开的变量名为 visible 、 
 *    按钮loading 命名 btnLoading
 * 2. 表单整个表单的数据命名为 form
 * 3. 页面自己的 selfOption ， 在 created 或者 init 方法里，和 formOption 合并
 *    比较重要的有：selfOption.column ，具体的使用方法可参考 @/views/warehouse/components/modal
 * 4. ref 指向 formRef
 * 5. 清空页面数据的方法，命名 resetModalData、
 * 6. submit 方法，不处理参数，如需处理参数，请在页面写 处理数据 的方法，调用此方法
 * 7. 如果页面提交或者取消事件之后，需要其他处理，
 *    请在弹窗父页面的弹窗标签上，根据页面需求添加 ok 、 cancel 事件
 * 
 * 
 */

import { fetchList, addResult, getResult, delResult, putResult } from '@/api/commonApis'

export const GnFormMixin = {
  props: {
    
  },
  data() {
    return {
      visible: false,
      modalFlag: '',                    // 包含三种 add/edit/detail
      labelWidth: 120,                  // 表单属性项名宽度 ---- 建议根据属性项名实际宽度自定义
      
      form: {},
      btnLoading: false,
      formOption: {
        size: 'small',               
        submitText: '确定',
        // mockBtn: true,              // 是否显示数据模拟按钮
        //printBtn: true,             // 是否显示打印按钮
      },

      
      

    }
  },
  created() {
    
  },
  computed: {
    
  },
  watch: {
    visible: {
      handler(newVal, oldVal) {
        if(newVal === false) {
          this.resetModalData()
        }
      }
    }
  },
  methods: {
    submit(row) {
      this.$refs.formRef.validate((valid) => {
        if (!valid) return
        this.btnLoading = true
        let url = ''
        if(this.modalFlag === 'add') {
          url = this.url.addOne
        } else if(this.modalFlag === 'edit') {
          url = this.url.editOne
        }
        putResult(url, row).then(res => {
          if(res.data.code === 200) {
            this.$message.success('修改成功!')
            this.$emit('ok')
            this.isClose('1')
          } else {
            this.$message.warning('修改失败！原因：' + res.data.message)
          }
          this.btnLoading = false
        }).catch(err => {
          this.btnLoading = false
          this.$message.err("错误！原因：" + err)
        });
      })
    },
    handleCancel() {
      this.close()
      this.$emit('cancel')
    },
    close() {
      this.visible = false
    },

  }
}