<template>
  <a-modal
    title='操作'
    style='top: 20px;'
    :width='800'
    v-model='visible'
    :confirmLoading='confirmLoading'
    @ok='handleSubmit'
  >
    <a-spin :spinning='spinning'>
      <a-form :form='form'>
        <a-form-item style='display:none'>
          <a-input v-decorator="['id']" />
        </a-form-item>
        <a-form-item :labelCol='labelCol' :wrapperCol='wrapperCol' label='用户名'>
          <a-input placeholder='用户名'
                   v-decorator="['username', {rules: [{ required: true, message: '请输入用户名' }]}]" />
        </a-form-item>

        <a-form-item :labelCol='labelCol' :wrapperCol='wrapperCol' label='昵称'>
          <a-input v-decorator="['nickname', {rules: [{ required: true, message: '请输入昵称' }]}] "
                   placeholder='起一个名字' />
        </a-form-item>

        <a-form-item :labelCol='labelCol' :wrapperCol='wrapperCol' label='手机'>
          <a-input placeholder='手机' v-decorator="['mobile', {rules: [{ required: true, message: '请输入手机' }]}]" />
        </a-form-item>

        <a-form-item :labelCol='labelCol' :wrapperCol='wrapperCol' label='状态'>
          <a-select v-decorator="['status', {initialValue:'0',rules: [{ required: true, message: '请选择状态' }]}]">
            <a-select-option :value="'0'">正常</a-select-option>
            <a-select-option :value="'1'">禁用</a-select-option>
          </a-select>
        </a-form-item>

        <a-form-item v-if='tenantId !== null' :labelCol='labelCol' :wrapperCol='wrapperCol' label='部门'>
          <a-tree-select
            v-decorator="['deptId', {rules: [{ required: true, message: '请选择部门' }]}]"
            :dropdownStyle="{ maxHeight: '400px', overflow: 'auto' }"
            :treeData='deptTree'
            @change='onChange'
            placeholder='部门'
            treeDefaultExpandAll
          >
          </a-tree-select>
        </a-form-item>
        <a-form-item :labelCol='labelCol' :wrapperCol='wrapperCol' label='拥有角色' hasFeedback>
          <a-select
            style='width: 100%'
            v-decorator="['roleIds', {rules: [{ required: true, message: '请选择角色' }]}]"
            :allowClear='true'
            mode='multiple'
            @change='roleSelectChange'
          >
            <a-select-option v-for='(action) in roleAll' :key='action.id' :disabled='selectRoleEnable'>
              {{ action.roleName
              }}
            </a-select-option>
          </a-select>
        </a-form-item>
        <a-form-item v-if='tenantShow' :labelCol='labelCol' :wrapperCol='wrapperCol' label='所属地区'>
          <a-select v-decorator="['tenantId', {rules: [{ required: true, message: '请选择所属地区' }]}]"
                    @change='selectTenant'>
            <a-select-option v-for='item in tenantData' :key='item.value'>{{ item.text }}</a-select-option>
          </a-select>
        </a-form-item>
        <a-form-item v-if='parkShow' :labelCol='labelCol' :wrapperCol='wrapperCol' label='所属园区'>
          <a-select v-decorator="['parkId', {rules: [{ required: true, message: '请选择所属园区' }]}]"
                    @change='selectPark'>
            <a-select-option v-for='item in parkData' :key='item.value'>{{ item.text }}</a-select-option>
          </a-select>
        </a-form-item>
        <a-form-item v-if='customerShow' :labelCol='labelCol' :wrapperCol='wrapperCol' label='选择企业'>
          <a-select v-decorator="['customerId', {rules: [{ required: true, message: '请选择企业' }]}]"
                    @change='selectEnterprise'>
            <a-select-option v-for='item in customerList' :key='item.value'>{{ item.text }}</a-select-option>
          </a-select>
        </a-form-item>
        <a-form-item v-if='selectUserShow' :labelCol='labelCol' :wrapperCol='wrapperCol' label='选择用户'>
          <a-select
            show-search
            v-decorator="['staffId', {rules: [{required: true, message: '请选择手机号码'}]}]"
            placeholder='请选择手机号码'
            style='width: 100%'
            :default-active-first-option='false'
            :show-arrow='false'
            :filter-option='false'
            :not-found-content='null'
            @search='handleSearch'
            @change='handleChange'
          >
            <a-select-option v-for='item in searchUserList' :value='item.id' :key='item.id'>
              {{ item.username }} -{{ item.mobile }}
            </a-select-option>
          </a-select>

        </a-form-item>


        <a-form-item :labelCol='labelCol' :wrapperCol='wrapperCol' label='描述'>
          <a-textarea :rows='3' placeholder='...' v-decorator="['remark']" />
        </a-form-item>
      </a-form>
    </a-spin>
  </a-modal>
</template>
<script>
import { getRoleAll, saveUser, getUser } from '@/api/system'
import { saveCustomerContacts, getStaffList,  getStaffListByUser } from '@/api/admin/customer'

import {
  getCustomerList
} from '@/api/admin/meeting/roomContent'
import { getTenantList } from '@/api/tenant'
import { getParkList } from '@/api/admin/park'
import pick from 'lodash.pick'
import { mapGetters } from 'vuex'

export default {
  name: 'UserModal',
  props: {
    deptTree: {
      type: Array,
      required: true
    }
  },
  computed: {
    ...mapGetters(['parkId', 'tenantId'])
  },
  data() {
    return {
      description: '列表使用场景：后台管理中的权限管理以及角色管理，可用于基于 RBAC 设计的角色权限控制，颗粒度细到每一个操作类型。',
      visible: false,
      labelCol: {
        xs: { span: 24 },
        sm: { span: 5 }
      },
      wrapperCol: {
        xs: { span: 24 },
        sm: { span: 16 }
      },
      confirmLoading: false,
      roleAll: [],
      mdl: {},
      searchUserList: [],
      customerList: [],
      deptCheck: true,
      spinning: false,
      tenantData: [],
      parkData: [],
      form: this.$form.createForm(this),
      selectRoleEnable: false,
      tenantShow: false,
      parkShow: false,
      customerShow: false,
      selectUserShow: false
    }
  },
  beforeCreate() {
  },
  created() {
    // 地区
    getTenantList().then(res => {
      if (res.code === 0) {
        res.rows.forEach(r => {
          this.tenantData.push({ value: r.id, text: r.name })
        })
      }
    })
    this.loadRoleAll()
  },
  methods: {
    // 选择角色
    roleSelectChange(value) {
      console.log('roleSelectChange', value)
      // 清空数据
      this.searchUserList = []
      // 赋值
      this.mdl.roleIds = value
      // 角色判断
      if (value.length > 0) {
        this.selectRoleEnable = true
        // 判断角色
        if (value[0] == 4) { // 企业：4
          this.tenantShow = true
          this.parkShow = true
          this.customerShow = true

        } else if (value[0] == 5) { // 园区：5
          this.tenantShow = true
          this.parkShow = true

        } else {
          this.tenantShow = false
          this.parkShow = false
          this.customerShow = false
          this.selectUserShow = false
        }

      } else {
        this.selectRoleEnable = false
        //
        this.tenantShow = false
        this.parkShow = false
        this.customerShow = false
        this.selectUserShow = false
      }
    },
    // 选择地区 -> 查询园区
    selectTenant(id) {
      console.log('selectTenant', id)
      getParkList({
        tenantId: id
      }).then(res => {
        this.parkData = res.rows.map(item => {
          return {
            value: item.id,
            text: item.name
          }
        })
      })
      // 赋值
      this.mdl.tenantId = id
      // 清空数据
      this.searchUserList = []
      // 隐藏用户搜索
      this.selectUserShow = false
      // 清空园区、企业、用户
      this.mdl.parkId = null
      this.mdl.customerId = null
      this.mdl.staffId = null
      this.form.setFieldsValue({
        parkId: null,
        customerId: null,
        staffId: null
      })
    },
    // 选择园区 -> 查询企业
    selectPark(id) {
      getCustomerList({
        parkId: id
      }).then(res => {
        this.customerList = res.data.map(item => {
          return {
            value: item.id,
            text: item.name
          }
        })
      })
      // 赋值
      this.mdl.parkId = id
      // 清空数据
      this.searchUserList = []
      // 清空企业、用户
      this.mdl.customerId = null
      this.mdl.staffId = null
      this.form.setFieldsValue({
        customerId: null,
        staffId: null
      })
      // 园区角色显示用户并且查询用户
      console.log('this.mdl.roleIds', this.mdl.roleIds)
      if (this.mdl.roleIds[0] == 5) {
        this.selectUserShow = true
      } else {
        // 隐藏用户搜索
        this.selectUserShow = false
      }
    },
    // 选择企业
    selectEnterprise(id) {
      // 赋值
      this.mdl.customerId = id
      // 显示搜索用户
      this.selectUserShow = true
      // 清空数据
      this.searchUserList = []
      // 清空用户
      this.mdl.staffId = null
      this.form.setFieldsValue({
        staffId: null
      })
    },
    handleSearch(value) {
      let param = {
        mobile: value
      }
      // 判断角色
      if (this.mdl.roleIds[0] == 4) { // 企业：4
        param.customerId = this.mdl.customerId
      } else if (this.mdl.roleIds[0] == 5) { // 园区：5
        param.parkId = this.mdl.parkId
      } else {

      }
      getStaffList(param).then(res => {
        this.searchUserList = res.rows
      })
    },
    handleChange() {

    },
    add() {
      this.form.resetFields()
      this.mdl = Object.assign({}, { id: 0, deptId: '' })
      this.visible = true
      this.$nextTick(() => {
        this.form.setFieldsValue(pick(this.mdl, 'id', 'username', 'nickname', 'status', 'mobile', 'roleIds', 'staffId', 'customerId', 'remark', 'deptId', 'parkId', 'tenantId'))
      })
      // 初始化显示
      this.selectRoleEnable = false
      this.tenantShow = false
      this.parkShow = false
      this.customerShow = false
      this.selectUserShow = false
    },
    edit(record) {
      if (record.id > 0) {
        //
        this.spinning = true
        getUser(record.id).then(res => {
          this.mdl = Object.assign({}, res)
          let copyMdl = JSON.parse(JSON.stringify(this.mdl))
          this.visible = true
          this.$nextTick(() => {
            this.form.setFieldsValue(pick(this.mdl, 'id', 'username', 'nickname', 'status', 'mobile', 'roleIds', 'customerId', 'staffId', 'remark', 'deptId', 'parkId', 'tenantId'))
            this.spinning = false
            // this.form.setFieldsValue({ ...record })
          })
          // 判断角色
          if (this.mdl.roleIds[0] == 4) { // 企业：4
            // 选择地区 -> 查询园区
            this.mdl = JSON.parse(JSON.stringify(copyMdl))
            this.selectTenant(copyMdl.tenantId)
            // 选择园区 -> 查询企业
            this.mdl = JSON.parse(JSON.stringify(copyMdl))
            this.selectPark(copyMdl.parkId)
            // 查询用户
            this.mdl = JSON.parse(JSON.stringify(copyMdl))
            this.handleSearch(copyMdl.staffPhone)
            // 赋值
            this.mdl.customerId = copyMdl.customerId
            this.mdl.staffId = copyMdl.staffId
            // 显示
            this.tenantShow = true
            this.parkShow = true
            this.customerShow = true
            this.selectUserShow = true

          } else if (this.mdl.roleIds[0] == 5) { // 园区：5
            // 选择地区 -> 查询园区
            this.mdl = JSON.parse(JSON.stringify(copyMdl))
            this.selectTenant(copyMdl.tenantId)
            // 查询用户
            this.mdl = JSON.parse(JSON.stringify(copyMdl))
            this.handleSearch(copyMdl.staffPhone)
            // 赋值
            this.mdl.staffId = copyMdl.staffId
            // 显示
            this.tenantShow = true
            this.parkShow = true
            this.customerShow = false
            this.selectUserShow = true

          } else {
            this.tenantShow = false
            this.parkShow = false
            this.customerShow = false
            this.selectUserShow = false
          }
        })
      }
    },
    onChange(value, label, extra) {
      if (extra.triggerNode.$children.length > 0) {
        this.$message.error('不能选择父节点' + `${label}`)
        this.deptCheck = false
      } else {
        this.deptCheck = true
      }
    },
    loadRoleAll() {
      getRoleAll().then(res => {
        this.roleAll = res.rows
      })
    },
    handleSubmit(e) {
      e.preventDefault()
      if (!this.deptCheck) {
        this.$message.error('不能选择父节点')
        return
      }
      this.form.validateFields((err, values) => {
        if (!err) {
          console.log('Received values of form: ', values)
          this.confirmLoading = true
          saveUser(values).then(res => {
            if (res.code === 0) {
              this.$message.success('保存成功')
              this.$emit('ok')
              this.visible = false
            } else {
              this.$message.success(res.msg)
            }
          }).catch(() => {
            this.$message.error('系统错误，请稍后再试')
          }).finally(() => {
            this.confirmLoading = false
          })
        }
      })
    }
  }
}
</script>
