<template>
  <div class="app-container">
    <div class="app-container">
      <div class="filter-container">
        <el-input v-model="getdataListParm.parammaps.empCode" placeholder="用户名" style="width: 140px;" class="filter-item" />
        <el-input v-model="getdataListParm.parammaps.empname" placeholder="姓名" style="width: 140px;" class="filter-item" />
        <el-button v-waves class="filter-item" type="primary" icon="el-icon-search" @click="handleFilter">搜索</el-button>
        <el-button class="filter-item" style="margin-left: 10px;" type="primary" icon="el-icon-edit" @click="handleCreate"> 新增 </el-button>
      </div>
      <el-table
        v-loading="listLoading"
        element-loading-text="给我一点时间"
        :data="list"
        border
        fit
        highlight-current-row
        style="width: 100%;"
        :row-style="rowStyle"
        :cell-style="cellStyle"
        class="elTable"
        row-key="id"
        default-expand-all
        :tree-props="{children: 'children', hasChildren: 'hasChildren'}"
      >
        <el-table-column label="用户名称" header-align="center" width="120px" align="center">
          <template slot-scope="scope">
            <span>{{ scope.row.username }}</span>
          </template>
        </el-table-column>
        <el-table-column label="姓名" min-width="120px" header-align="center" align="center">
          <template slot-scope="scope">
            <span>{{ scope.row.empname }}</span>
          </template>
        </el-table-column>
        <el-table-column label="部门" min-width="120px" header-align="center" align="center">
          <template slot-scope="scope">
            <span>{{ scope.row.deptname }}</span>
          </template>
        </el-table-column>
        <el-table-column label="角色" min-width="120px" header-align="center" align="center">
          <template slot-scope="scope">
            <span>{{ scope.row.roleName }}</span>
          </template>
        </el-table-column>
        <el-table-column label="顺序" min-width="80px" header-align="center" align="center">
          <template slot-scope="scope">
            <span>{{ scope.row.sort }}</span>
          </template>
        </el-table-column>
        <el-table-column label="启用" min-width="80px" header-align="center" align="center">
          <template slot-scope="scope">
            <el-switch v-model="scope.row.enable" active-color="#13ce66" inactive-color="#ff4949" :active-value="1" :inactive-value="0" @change="handleEnableChange(scope.$index, scope.row)" />
          </template>
        </el-table-column>
        <el-table-column label="操作" header-align="center" align="center" width="260" class-name="small-padding fixed-width" fixed="right">
          <template slot-scope="{row}">
            <el-button type="warning" size="mini" @click="handleRole(row)"> 角色 </el-button>
            <el-button type="primary" size="mini" @click="handleUpdate(row)"> 编辑 </el-button>
            <el-button v-if="row.status!='已删'" size="mini" type="danger" @click="handleDelete(row)"> 删除 </el-button>
          </template>
        </el-table-column>
      </el-table>
      <pagination v-show="total>=0" :total="total" :page.sync="getdataListParm.offset" :limit.sync="getdataListParm.pagecount" @pagination="getList" />

      <!-- 编辑 -->
      <el-dialog :title="textMap[dialogStatus]" :visible.sync="dialogFormVisible" :close-on-click-modal="false">
        <el-form ref="dataForm" :rules="rules" :model="dataform" label-position="left" label-width="100px" style="width: 600px; margin-left:50px;">
          <el-form-item label="职工名" prop="empid">
            <el-autocomplete ref="empid" v-model="dataform.empname" value-key="empid" class="inline-input" :fetch-suggestions="formNameSearch" placeholder="请输入内容" style="width:80%" @select="handleformNameSelect">
              <template slot-scope="{ item }">
                <div class="name" style="display: inline;">姓名: {{ item.empname }}</div>
                <span class="addr"> 职位:{{ item.position }}</span>
              </template>
            </el-autocomplete>
          </el-form-item>

          <el-form-item label="用户名" prop="username">
            <el-input ref="username" v-model="dataform.username" />
          </el-form-item>
          <el-form-item label="顺序" prop="sort">
            <el-input ref="sort" v-model="dataform.sort" />
          </el-form-item>
          <el-form-item label="启用" prop="enable">
            <el-switch ref="enable" v-model="dataform.enable" active-color="#13ce66" inactive-color="#ff4949" :active-value="1" :inactive-value="0" />
          </el-form-item>
        </el-form>
        <div slot="footer" class="dialog-footer">
          <el-button type="primary" @click="updateData()"> 确认 </el-button>
          <el-button @click="dialogFormVisible = false"> 关闭 </el-button>
        </div>
      </el-dialog>

      <!-- 新增 -->
      <el-dialog :title="textMap[dialogStatus]" :visible.sync="dialogFormVisibleAdd" :close-on-click-modal="false">
        <el-form ref="dataForm" :rules="rules" :model="dataform" label-position="left" label-width="100px" style="width: 600px; margin-left:50px;">
          <el-form-item label="职工名" prop="empid">
            <el-autocomplete ref="empid" v-model="dataform.empname" value-key="empid" class="inline-input" :fetch-suggestions="formNameSearch" placeholder="请输入内容" style="width:100%" @select="handleformNameSelect">
              <template slot-scope="{ item }">
                <div class="name" style="display: inline;">姓名: {{ item.empname }}</div>
                <span class="addr"> 职位:{{ item.position }}</span>
              </template>
            </el-autocomplete>
          </el-form-item>
          <el-form-item label="用户名" prop="username">
            <el-input ref="username" v-model="dataform.username" />
          </el-form-item>
          <el-form-item label="角色" prop="rolename">
            <el-select filterable v-model="dataform.selectedRole" style="width:500px;" multiple placeholder="请选择">
              <el-option v-for="item in rolelist" :key="item.id" :label="item.name" :value="item.id" />
            </el-select>
          </el-form-item>
          <el-form-item label="启用" prop="enable">
            <el-switch ref="enable" v-model="dataform.enable" active-color="#13ce66" inactive-color="#ff4949" :active-value="1" :inactive-value="0" />
          </el-form-item>
        </el-form>
        <div slot="footer" class="dialog-footer">
          <el-button type="primary" @click="createData()"> 确认 </el-button>
          <el-button @click="dialogFormVisibleAdd = false"> 关闭 </el-button>
        </div>
      </el-dialog>

      <!-- 角色 -->
      <el-dialog :title="textMap['role']" :visible.sync="dialogRoleVisible" :close-on-click-modal="false">
        <el-form :rules="rules" label-position="left" label-width="100px" style="width: 600px; margin-left:50px;">
          <el-form-item label="角色" prop="rolename">
            <el-select filterable v-model="selectedRole" style="width:500px;" multiple placeholder="请选择">
              <el-option v-for="item in rolelist" :key="item.id" :label="item.name" :value="item.id" />
            </el-select>
          </el-form-item>
        </el-form>
        <div slot="footer" class="dialog-footer">
          <el-button type="primary" @click="updateRole()"> 确认 </el-button>
          <el-button @click="dialogRoleVisible = false"> 关闭 </el-button>
        </div>
      </el-dialog>
    </div>
  </div>
</template>

<script>
import waves from '@/directive/waves' // waves directive
import { isIntegerZero } from '@/utils/validate'
import { PostDataByName, GetDataByName, GetDataByNames, UpdateDataRelation, ExecDataByConfig } from '@/api/common'
import Pagination from '@/components/Pagination' // secondary package based on el-pagination
import { MessageBox } from 'element-ui'
import Cookies from 'js-cookie'
export default {
  name: 'User',
  components: { Pagination },
  directives: { waves },
  data() {
    return {
      tableKey: 0,
      list: [{ sqlname: '', id: 0, sqlstr: '' }],
      total: 0,
      listLoading: true,
      requestParam: {
        name: 'createapisql',
        offset: 0,
        pagecount: 0,
        params: []
      },
      requestParams: [
        { name: 'getRoleall', offset: 0, pagecount: 0, parammaps: { pastureid: Cookies.get('pastureid') }},
        { name: 'getEmpall', offset: 0, pagecount: 0, params: [] }
      ],
      requestFilterParams: {
        returntype: 'Map',
        parammaps: {}
      },
      UpdateDataRelationParam: {
        name: '',
        dataname: '',
        datavalue: '',
        valuename: '',
        values: []
      },
      dataform: {
        empname: '',
        position: '',
        username: '',
        fullname: '',
        empid: '',
        id: '',
        sort: '',
        enable: 1,
        selectedRole: ''
      },
      temp1: {
        empname: '',
        empid: '',
        position: ''
      },
      rolelist: [],
      emplist: [],
      getdataListParm: {
        name: 'getuserallL',
        offset: 1,
        pagecount: 10,
        returntype: 'Map',
        parammaps: {
          pastureId: Cookies.get('pastureid'),
          empCode: '',
          empname: ''
        }
      },
      rules: {
        empid: [{ required: true, message: '用户名必填', trigger: 'blur' }],
        username: [{ type: 'string', required: true, message: '用户名必填', trigger: 'change' }],
        empname: [{ type: 'string', required: true, message: '职工名必填', trigger: 'change' }],
        // rolename: [{ required: true, message: '角色必填', trigger: 'blur' }],

        sort: [{ validator: isIntegerZero, trigger: 'blur' }]
      },
      dialogFormVisible: false,
      dialogRoleVisible: false,
      selectedRole: '',
      dialogStatus: '',
      textMap: {
        update: '编辑',
        create: '新增',
        role: '选择角色'
      },
      dialogFormVisibleAdd: false,
      postDataPramas: {},
      rowStyle: { maxHeight: 50 + 'px', height: 45 + 'px' },
      cellStyle: { padding: 0 + 'px' }
    }
  },
  created() {
    this.getList()
  },
  methods: {
    deptenter() {
      this.$nextTick(() => {
        this.$refs['remark'].focus()
      })
    },
    getList() {
      this.listLoading = true
      GetDataByNames(this.requestParams).then(response => {
        this.rolelist = response.data.getRoleall.list
        this.emplist = response.data.getEmpall.list
        GetDataByName(this.getdataListParm).then(response => {
          this.list = response.data.list
          this.total = response.data.total
          setTimeout(() => {
            this.listLoading = false
          }, 0.5 * 1000)
        })
      })
    },
    handleFilter() {
      this.listLoading = true
      this.getdataListParm.offset = 1
      this.getList()
    },
    resetRequestParam() {
      this.dataform.username = ''
      this.dataform.fullname = ''
      this.dataform.empid = ''
      this.dataform.id = ''
      this.dataform.empname = ''
      this.dataform.position = ''
      this.dataform.sort = '0'
      this.dataform.enable = 1
      this.dataform.selectedRole = ''
    },
    handleCreate() {
      this.resetRequestParam()
      this.dialogStatus = 'create'
      this.dialogFormVisibleAdd = true
    },
    createData() {
      var role_Array = []
      for (let i = 0; i < this.dataform.selectedRole.length; i++) {
        var role_obj = {}
        this.$set(role_obj, 'role_id', this.dataform.selectedRole[i])
        role_Array.push(role_obj)
      }
      this.dataform.selectedRole = role_Array
      console.log(this.dataform)
      this.$refs['dataForm'].validate(valid => {
        if (valid) {
          if (this.dataform.selectedRole.length <= 0) {
            this.$message({ type: 'warning', message: '请检查角色是否未填写', duration: 2000 })
            return false
          } else {
            this.postDataPramas.common = { 'returnmap': '0' }
            this.postDataPramas.data = []
            this.postDataPramas.data[0] = { 'name': 'createUser', 'type': 'e', 'parammaps': {
              username: this.dataform.username,
              empid: this.dataform.empid,
              sort: '0',
              enable: this.dataform.enable
            }}
            this.postDataPramas.data[1] = { 'name': 'insertSpotList', 'resultmaps': { 'list': this.dataform.selectedRole }}
            this.postDataPramas.data[1].children = []
            this.postDataPramas.data[1].children[0] = { 'name': 'insertUserRole', 'type': 'e', 'parammaps': {
              user_id: '@createUser.LastInsertId',
              role_id: '@insertSpotList.role_id'
            }}
            ExecDataByConfig(this.postDataPramas).then(response => {
              console.log('新增保存发送参数', this.postDataPramas)
              if (response.msg === 'fail') {
                var username = new RegExp('username')
                if (username.test(response.data)) {
                  this.$notify({
                    title: '',
                    message: '该用户名称已存在',
                    type: 'warning',
                    duration: 2000
                  })
                } else {
                  this.$notify({
                    title: '失败',
                    message: response.data,
                    type: 'warning',
                    duration: 2000
                  })
                }
              } else {
                this.dialogFormVisibleAdd = false
                this.getList()
                this.$notify({
                  title: '',
                  message: '保存成功',
                  type: 'success',
                  duration: 2000
                })
              }
            })
          }
        }
      })
    },
    createData_again() {
      this.$refs['dataForm'].validate(valid => {
        if (valid) {
          this.requestParam.name = 'createUser'
          this.requestParam.params = []
          this.requestParam.params[0] = this.dataform.username
          this.requestParam.params[1] = this.dataform.empid
          this.requestParam.params[2] = this.dataform.sort
          this.requestParam.params[3] = this.dataform.enable
          PostDataByName(this.requestParam).then(response => {
            if (response.msg !== 'fail') {
              this.getList()
              this.resetRequestParam()
              this.$notify({
                title: '成功',
                message: '新增成功',
                type: 'success',
                duration: 2000
              })
            } else {
              var username = new RegExp('username')
              if (username.test(response.data)) {
                this.$notify({
                  title: '',
                  message: '该用户名称已存在',
                  type: 'warning',
                  duration: 2000
                })
              } else {
                this.$notify({
                  title: '失败',
                  message: response.data,
                  type: 'warning',
                  duration: 2000
                })
              }
            }
          })
        }
      })
    },
    handleRole(row) {
      this.requestParam.name = 'getRoleByUser'
      this.requestParam.params = []
      this.requestParam.params[0] = row.id
      this.requestParam.pagecount = 0
      this.requestParam.returntype = 'list'
      this.dataform.id = row.id
      this.dialogRoleVisible = true
      GetDataByName(this.requestParam).then(response => {
        this.selectedRole = response.data.lists.role_id
      })
    },
    updateRole() {
      this.UpdateDataRelationParam.name = 'user_role'
      this.UpdateDataRelationParam.dataname = 'user_id'
      this.UpdateDataRelationParam.datavalue = this.dataform.id
      this.UpdateDataRelationParam.valuename = 'role_id'
      this.UpdateDataRelationParam.values = this.selectedRole

      UpdateDataRelation(this.UpdateDataRelationParam).then(() => {
        this.dialogRoleVisible = false
        this.$notify({
          title: '成功',
          message: '修改成功',
          type: 'success',
          duration: 2000
        })
        this.getList()
      })
    },
    handleUpdate(row) {
      this.dataform.id = row.id
      this.dataform.username = row.username
      this.dataform.empid = row.empid
      this.dataform.sort = row.sort
      this.dataform.enable = row.enable
      this.dataform.empname = row.empname
      this.dataform.position = row.position
      this.dialogStatus = 'update'
      this.dialogFormVisible = true
      this.$nextTick(() => {
        this.$refs['dataForm'].clearValidate()
      })
    },
    updateData() {
      this.$refs['dataForm'].validate(valid => {
        if (valid) {
          this.requestParam.name = 'updateUser'
          this.requestParam.params = []
          this.requestParam.params[0] = this.dataform.username
          this.requestParam.params[1] = this.dataform.empid
          this.requestParam.params[2] = this.dataform.sort
          this.requestParam.params[3] = this.dataform.enable
          this.requestParam.params[4] = this.dataform.id
          PostDataByName(this.requestParam).then(() => {
            this.$nextTick(() => {
              this.getList()
              this.resetRequestParam()
            })
            this.dialogFormVisible = false
          })
        }
      })
    },
    handleEnableChange(index, row) {
      this.requestParam.name = 'updateUser'
      this.requestParam.params = []
      this.requestParam.params[0] = row.username
      this.requestParam.params[1] = row.empid
      this.requestParam.params[2] = row.sort
      this.requestParam.params[3] = row.enable
      this.requestParam.params[4] = row.id
      PostDataByName(this.requestParam).then(() => {
        this.$notify({
          title: '成功',
          message: '修改成功',
          type: 'success',
          duration: 2000
        })
      })
    },
    handleDelete(row) {
      MessageBox.confirm('确认删除?', {
        confirmButtonText: '确认',
        cancelButtonText: '取消',
        type: 'warning'
      }).then(() => {
        this.requestParam.name = 'deleteUser'
        this.requestParam.params = []
        this.requestParam.params[0] = row.id
        PostDataByName(this.requestParam).then(() => {
          this.getList()
          this.resetRequestParam()
          this.dialogFormVisible = false
          this.$notify({
            title: '成功',
            message: '删除成功',
            type: 'success',
            duration: 2000
          })
        })
      })
    },

    formNameSearch(queryString, cb) {
      this.requestFilterParams.name = 'userSolr'
      this.requestFilterParams.parammaps['pastureId'] = this.$store.state.user.pastureid
      this.requestFilterParams.parammaps['empname'] = queryString
      GetDataByName(this.requestFilterParams).then(response => {
        cb(response.data.list)
      })
    },
    handleformNameSelect(item) {
      this.dataform.username = item.empCode
      this.dataform.empid = item.id
      this.$set(this.dataform, 'empname', item.empname)
      this.$set(this.dataform, 'position', item.position)
      // this.dataform.empname = item.empname
      // this.dataform.position = item.position
    }
  }
}
</script>