<template>
  <a-modal
    :title="modalTitle"
    :width="900"
    :visible="visible"
    :confirmLoading="confirmLoading"
    @ok="handleSubmit"
    @cancel="handleCancel"
  >
    <a-spin :spinning="confirmLoading">
      <a-divider orientation="left">基本信息</a-divider>
      <a-row :gutter="24">
        <a-col :md="12" :sm="24">
          <a-form :form="form">
            <a-form-item style="display: none;">
              <a-input v-decorator="['id']" />
            </a-form-item>

            <a-form-item style="display: none;">
              <a-input v-decorator="['userId']" />
            </a-form-item>

            <a-form-item
              label="用户名"
              :labelCol="labelCol"
              :wrapperCol="wrapperCol"
              has-feedback
            >
              <a-input placeholder="请输入用户名" :disabled="registerDisabled" v-decorator="['userName', {rules: [{required: true, min: 5, message: '请输入至少五个字符的账号！'}]}]" />
            </a-form-item>
          </a-form>
        </a-col>
        <a-col :md="12" :sm="24" >
          <a-form :form="form">
            <a-form-item
              label="姓名"
              :labelCol="labelCol"
              :wrapperCol="wrapperCol"
              has-feedback
            >
              <a-input placeholder="请输入姓名" :disabled="registerDisabled" v-decorator="['name', {rules: [{required: true, message: '请输入姓名！'}]}]" />
            </a-form-item>
          </a-form>
        </a-col>
      </a-row>
      <a-row :gutter="24">
        <a-col :md="12" :sm="24">
          <a-form :form="form">
            <a-form-item
              label="身份证"
              :labelCol="labelCol"
              :wrapperCol="wrapperCol"
              has-feedback
            >
              <a-input placeholder="请输入身份证" v-decorator="['idCardNo', {rules: [{required: true, message: '请输入身份证！'}]}]" @blur="idCardNoBlur"/>
            </a-form-item>
          </a-form>
        </a-col>
        <a-col :md="12" :sm="24">
          <a-form :form="form">
            <a-form-item
              label="年龄"
              :labelCol="labelCol"
              :wrapperCol="wrapperCol"
              has-feedback
            >
              <a-input readOnly v-decorator="['age']" />
            </a-form-item>
          </a-form>
        </a-col>
      </a-row>
      <a-row :gutter="24">
        <a-col :md="12" :sm="24">
          <a-form :form="form">
            <a-form-item
              label="性别"
              :labelCol="labelCol"
              :wrapperCol="wrapperCol"
            >
              <a-radio-group readOnly v-decorator="['sex',{rules: [{ required: true, message: '请选择性别！' }]}]" >
                <a-radio :value="1">男</a-radio>
                <a-radio :value="2">女</a-radio>
              </a-radio-group>
            </a-form-item>
          </a-form>
        </a-col>
        <a-col :md="12" :sm="24">
          <a-form :form="form">
            <a-form-item
              label="手机号"
              :labelCol="labelCol"
              :wrapperCol="wrapperCol"
              has-feedback
            >
              <a-input placeholder="请输入手机号" v-decorator="['phone',{rules: [{ required: true, message: '请输入手机号！' }]}]" />
            </a-form-item>
          </a-form>
        </a-col>
      </a-row>
      <a-row :gutter="24">
        <a-col :md="24" :sm="24">
          <a-form :form="form">
            <a-form-item
              label="岗位"
              :labelCol="{span: 3}"
              :wrapperCol="{span: 20}"
              has-feedback
            >
              <a-select style="width: 100%" placeholder="请选择岗位" v-decorator="['jobs',{rules: [{ required: true, message: '请选择岗位！' }]}]" >
                <a-select-option v-for="(item,index) in jobsData" :key="index" :value="item.value" >{{ item.name }}</a-select-option>
              </a-select>
            </a-form-item>
          </a-form>
        </a-col>
      </a-row>
      <a-row :gutter="24">
        <a-col :md="12" :sm="24">
          <a-form :form="form">
            <a-form-item
              label="工种"
              :labelCol="labelCol"
              :wrapperCol="wrapperCol"
              has-feedback
            >
              <a-select style="width: 100%" placeholder="请选择工种" v-decorator="['workType',{rules: [{ required: true, message: '请选择工种！' }]}]" >
                <a-select-option v-for="(item,index) in workTypeData" :key="index" :value="item.value" >{{ item.name }}</a-select-option>
              </a-select>
            </a-form-item>
          </a-form>
        </a-col>
        <a-col :md="12" :sm="24">
          <a-form :form="form">
            <a-form-item
              label="学历"
              :labelCol="labelCol"
              :wrapperCol="wrapperCol"
              has-feedback
            >
              <a-select style="width: 100%" placeholder="请选择学历" v-decorator="['degreeId',{rules: [{ required: true, message: '请选择学历！' }]}]" >
                <a-select-option v-for="(item,index) in degreeData" :key="index" :value="item.value" >{{ item.name }}</a-select-option>
              </a-select>
            </a-form-item>
          </a-form>
        </a-col>
      </a-row>
      <a-row :gutter="24">
        <a-col :md="24" :sm="24">
          <a-form :form="form">
            <a-form-item
              label="人员类型"
              :labelCol="{span: 3}"
              :wrapperCol="{span: 20}"
            >
              <a-checkbox-group v-decorator="['type',{rules: [{ required: true, message: '请选择人员类型！' }]}]">
                <a-checkbox name="type" v-for="(item,index) in typeData" :key="index" :value="item.value" >
                  {{ item.name }}
                </a-checkbox>
              </a-checkbox-group>
            </a-form-item>
          </a-form>
        </a-col>
      </a-row>
      <a-row :gutter="24">
        <a-col :md="12" :sm="24">
          <a-form :form="form">
            <a-form-item
              label="部门信息"
              :labelCol="labelCol"
              :wrapperCol="wrapperCol"
              has-feedback
            >
              <a-input readOnly @click="openOrgTree" :disabled="registerDisabled" v-decorator="['orgName',{rules: [{ required: true, message: '请选择机构！' }]}]" />
            </a-form-item>
            <a-form-item style="display: none;">
              <a-input v-decorator="['orgId']" />
            </a-form-item>
          </a-form>
        </a-col>
      </a-row>

      <a-divider orientation="left">上传身份证</a-divider>
      <a-row :gutter="24">
        <a-col :md="12" :sm="24">
          <a-form :form="form">
            <a-form-item
              label="身份证正面"
              :labelCol="labelCol"
              :wrapperCol="wrapperCol">
              <db-upload v-model="fileList" max="1"></db-upload>
            </a-form-item>
          </a-form>
        </a-col>
        <a-col :md="12" :sm="24">
          <a-form :form="form">
            <a-form-item
              label="身份证反面"
              :labelCol="labelCol"
              :wrapperCol="wrapperCol">
              <db-upload v-model="fileList2" max="1"></db-upload>
            </a-form-item>
          </a-form>
        </a-col>
      </a-row>

    </a-spin>

    <org-tree @selectOrg="selectOrg($event)" ref="orgModal"/>

  </a-modal>
</template>

<script>
  import { personAddOrUpdate, personGet } from '@/api/person/person'
  import { dictionaryDropDown } from '@/api/sys/dictionaryItem'
  import OrgTree from '../org/OrgTree'
  import DbUpload from '@/components/DbUpload/DbUpload.vue'
  export default {
    components: {
      OrgTree,
      DbUpload
    },
    data () {
      return {
        labelCol: {
          xs: { span: 24 },
          sm: { span: 6 }
        },
        wrapperCol: {
          xs: { span: 24 },
          sm: { span: 16 }
        },
        modalTitle: '新增人员',
        visible: false,
        confirmLoading: false,
        registerDisabled: false,
        form: this.$form.createForm(this),
        jobsData: [],
        workTypeData: [],
        degreeData: [],
        typeData: [],
        fileList: [],
        fileList2: []
      }
    },
    mounted () {
      this.dictionaryDropDown()
    },
    methods: {
      // 注册信息编辑 新增人员初始化方法
      registerEdit (record) {
        this.modalTitle = '新增人员'
        this.confirmLoading = true
        this.visible = true

        this.registerDisabled = true
        setTimeout(() => {
           // 基本信息加入表单
           this.form.setFieldsValue(
             {
               name: record.name,
               userName: record.userName,
               phone: record.phone,
               orgId: record.orgId,
               orgName: record.orgName
             }
           )
        }, 100)

        this.confirmLoading = false
      },
      // 编辑初始化方法
      edit (record) {
        this.modalTitle = '编辑人员'
        this.confirmLoading = true
        this.visible = true

        this.registerDisabled = true

        // 基本信息加入表单
        personGet({ id: record.id }).then((res) => {
         if (res.code === 200) {
           const data = res.data
           // 默认选中的多选框
           const type = data.type.split(',')
           const typeIntArr = []// 保存转换后的整型字符串
           type.forEach(item => {
               typeIntArr.push(+item)
           })
           this.form.getFieldDecorator('type', { valuePropName: 'checked', initialValue: typeIntArr })

          if (data.idPhotoFace) {
            this.fileList = JSON.parse(data.idPhotoFace)
          }
          if (data.idPhotoBack) {
            this.fileList2 = JSON.parse(data.idPhotoBack)
          }
           this.form.setFieldsValue(
             {
               id: data.id,
               userId: data.userId,
               name: data.name,
               userName: data.userName,
               idCardNo: data.idCardNo,
               // age: data.age,
               // sex: data.sex,
               phone: data.phone,
               jobs: parseInt(data.jobs),
               workType: parseInt(data.workType),
               degreeId: data.degreeId,
               orgId: data.orgId,
               orgName: data.orgName
             }
           )
           // 动态赋值年龄和性别
           this.analyzeIdCardNo(data.idCardNo)
         } else {
           this.$message.error('查询失败：' + res.msg)
         }
        })
        this.confirmLoading = false
      },
      /**
       * 获取字典数据
       */
      dictionaryDropDown () {
        this.formLoading = true
        // 岗位
        dictionaryDropDown({ dictionaryCode: '0002' }).then((res) => {
          this.jobsData = res.data
        })
        // 工种
        dictionaryDropDown({ dictionaryCode: '0003' }).then((res) => {
          this.workTypeData = res.data
        })
        // 学历
        dictionaryDropDown({ dictionaryCode: '0004' }).then((res) => {
          this.degreeData = res.data
        })
        // 人员类型
        dictionaryDropDown({ dictionaryCode: '0005' }).then((res) => {
          this.typeData = res.data
          this.formLoading = false
        })
      },
      handleSubmit () {
        const { form: { validateFields } } = this
        this.confirmLoading = true
        validateFields((errors, values) => {
          if (!errors) {
            values.type = values.type.join(',')
            values.idPhotoFace = JSON.stringify(this.fileList)
            values.idPhotoBack = JSON.stringify(this.fileList2)
            personAddOrUpdate(values).then((res) => {
              this.confirmLoading = false
              if (res.code === 200) {
                this.$message.success('操作成功')
                this.$emit('ok', values)

                this.handleCancel()
              } else {
                this.$message.error('操作失败：' + res.msg)
              }
            }, (err) => {
              this.$message.error(err)
            })
          } else {
            this.confirmLoading = false
          }
        })
      },
      idCardNoBlur (event) {
        const idCardNo = event.target.value
        this.analyzeIdCardNo(idCardNo)
      },
      analyzeIdCardNo (idCardNo) {
        // 如果用户身份证号码为undefined则返回空
        if (!idCardNo) {
          return
        }

        // 获取性别
        if (parseInt(idCardNo.substr(16, 1)) % 2 === 1) {
          this.form.setFieldsValue({ sex: 1 })
        } else {
          this.form.setFieldsValue({ sex: 2 })
        }

        // 获取出生日期
        var yearBirth = idCardNo.substring(6, 10)
        var monthBirth = idCardNo.substring(10, 12)
        var dayBirth = idCardNo.substring(12, 14)
        // 获取当前年月日并计算年龄
        var myDate = new Date()
        var monthNow = myDate.getMonth() + 1
        var dayNow = myDate.getDate()
        var age = myDate.getFullYear() - yearBirth
        if (monthNow < monthBirth || (monthNow === monthBirth && dayNow < dayBirth)) {
          age--
        }
        // 得到年龄
        this.form.setFieldsValue({ age })
      },
      openOrgTree () {
        this.$refs.orgModal.loadOrg()
      },
      selectOrg (orgData) {
        this.form.setFieldsValue({ orgId: orgData.id })
        this.form.setFieldsValue({ orgName: orgData.name })
      },
      handleCancel () {
        this.form.resetFields()
        this.fileList = []
        this.fileList2 = []
        this.visible = false
      }
    }
  }
</script>
