<template>
  <a-modal
    centered
    class="departUser-modal"
    :footer="null"
    :maskClosable="false"
    title="选择审批人员"
    v-model="isShow"
    @cancel="cancel"
    :width="700">
    <a-spin :spinning="spinning" tip="Loading...">
      <div>
        <div class="departUser-con">
          <a-form-model
            id="departUser-form"
            ref="ruleForm"
            :model="form"
            :rules="rules"
            :label-col="formItemLayout.labelCol"
            :wrapper-col="formItemLayout.wrapperCol">
            <a-form-model-item label="申请人员" prop="applyPersonSn">
              <employee style="width: 100%;" @change="employeeChange" id="departUser-Employee" v-model="form.applyPersonSn"></employee>
            </a-form-model-item>
            <a-form-model-item label="审批人员" prop="approvers">
              <dingDepartUser
                ref="departUserApp"
                @loaded="uploading=false"
                id="departUser-approvers"
                :disabled="uploading"
                v-model="form.approvers"
                @change="changeApprovers"
                allowClear
                placeholder="请选择审批人员"
              ></dingDepartUser>
            </a-form-model-item>
            <a-form-model-item label="抄送人" prop="ccList">
              <dingDepartUser
                ref="departUserCc"
                @loaded="uploading=false"
                :disabled="uploading"
                id="departUser-ccList"
                v-model="form.ccList"
                allowClear
                placeholder="请选择抄送人"
              ></dingDepartUser>
            </a-form-model-item>
          </a-form-model>
        </div>
        <div class="btn-cont">
          <a-button type="primary" id="departUser-save" @click="handleSave">确定</a-button>
          <a-button :loading="uploading" style="margin-left: 15px;" @click="updateUser">刷新人员</a-button>
          <a-button id="departUser-back" @click="cancel" style="margin-left: 15px;">取消</a-button>
        </div>
      </div>
    </a-spin>
  </a-modal>
</template>

<script>
import { VSelect, Upload } from '@/components'
import dingDepartUser from '@/views/common/dingDepartUser.js'
import employee from '@/views/expenseManagement/expenseReimbursement/employee.js'
import { sign } from 'core-js/fn/number'
export default {
  name: 'ChooseDepartUserModal',
  components: { dingDepartUser, employee, VSelect, Upload },
  props: {
    openModal: { //  弹框显示状态
      type: Boolean,
      default: false
    }
  },
  data () {
    return {
      uploading: false,
      spinning: false,
      isShow: this.openModal, //  是否打开弹框
      formItemLayout: {
        labelCol: { span: 4 },
        wrapperCol: { span: 16 }
      },
      form: {
        applyPersonSn: undefined,
        approvers: [], // 审批人
        ccList: [] // 抄送人
      },
      rules: {
        applyPersonSn: [
          { required: true, message: '请选择申请人员', trigger: 'change' }
        ],
        approvers: [
          { required: true, type: 'array', message: '请选择审批人员', trigger: 'change' }
        ]
      }
    }
  },
  methods: {
    // 申请人员
    employeeChange (v, r) {
      this.$nextTick(() => {
        this.$refs.ruleForm.validateField(['applyPersonSn'])
      })
    },
    updateUser () {
      this.uploading = true
      this.$refs.departUserApp.updateDeptUser()
      this.$refs.departUserCc.updateDeptUser()
    },
    changeApprovers (value) {
      this.form.approvers = value
      this.$refs.ruleForm.clearValidate()
    },
    getTreeVal (data) {
      const ret = []
      data.map(item => {
        ret.push(item.value)
      })
      return ret.join(',')
    },
    // 确定
    handleSave (e) {
      e.preventDefault()
      const _this = this
      this.$refs.ruleForm.validate(valid => {
        if (valid) {
          const form = JSON.parse(JSON.stringify(_this.form))
          if (form.approvers) {
            form.approvers = this.getTreeVal(form.approvers)
          }
          if (form.ccList) {
            form.ccList = this.getTreeVal(form.ccList)
          }
          this.$emit('submit', form)
          this.$emit('close')
        } else {
          return false
        }
      })
    },
    getDetail (data) {
      this.form = Object.assign(this.form, {
        applyPersonSn: data.applyPersonSn
      })
    },
    resetForm () {
      this.$nextTick(() => {
        this.$refs.ruleForm.resetFields()
      })
      this.form = {
        applyPersonSn: undefined,
        ccList: undefined,
        approvers: undefined
      }
    },
    cancel () {
      this.isShow = false
    }
  },
  watch: {
    //  父页面传过来的弹框状态
    openModal (newValue, oldValue) {
      this.isShow = newValue
    },
    //  重定义的弹框状态
    isShow (newValue, oldValue) {
      if (!newValue) {
        this.$emit('close')
        this.resetForm()
      }
    }
  }
}
</script>

<style lang="less">
  .departUser-modal{
    .ant-modal-body {
      padding: 30px 40px 24px;
    }
    .btn-cont {
      text-align: center;
      margin: 35px 0 10px;
    }
  }
</style>
