<template>
  <div class="timedTask from-clues">
    <div class="from-clues-header">
      <el-form ref="ruleForm" :model="form" label-width="100px">
        <el-row class="mb-5">
          <el-col :span="3">
            <el-select v-model="selectType" placeholder="请选择" class="select">
              <el-option v-for="item in typeOptions" :key="item.value" :label="item.label" :value="item.value" />
            </el-select>
          </el-col>
          <el-col :span="3">
            <el-input v-model="queryName" class="selectName" clearable placeholder="请输入">
              <el-button slot="append" icon="el-icon-search" @click="searchQuery()" />
            </el-input>
          </el-col>
          <!-- 按钮操作 -->
          <el-col :span="6" class="btnColRight">
            <el-form-item>
              <btn nativeType="cz" @click="handleAdd">添加人员</btn>
              <btn nativeType="cx" @click="resetPassword(selectionRows)">重置密码</btn>
              <btn nativeType="sb" @click="resetSearch()">重置</btn>
            </el-form-item>
          </el-col>

        </el-row>
      </el-form>
    </div>
    <div class="from-clues-content">
      <vxe-table ref="xTree" v-loading="loading" class="header-bg-type1" :data="tableData" show-overflow border
        :checkbox-config="{ highlight: true }" :empty-render="{ name: 'NotData' }" highlight-hover-row max-height="90%"
        @checkbox-all="selectAllEvent" @checkbox-change="selectChangeEvent">
        <template #empty>
          <table-empty />
        </template>
        <vxe-table-column type="checkbox" width="36" align="center" fixed="left" />
        <vxe-table-column field="code" title="工号" width="80" align="left" show-header-overflow="tooltip"
          show-overflow="tooltip" fixed="left" />
        <vxe-table-column title="姓名" width="140" align="left" show-header-overflow="tooltip" show-overflow="tooltip"
          fixed="left">
          <template slot-scope="scope">
            <svg-icon :icon-class="
              scope.row.sex === '0'
                ? 'male'
                : scope.row.sex === '1'
                  ? 'female'
                  : 'secrecy'
            " />
            {{ scope.row.name }}
          </template>
        </vxe-table-column>
        <vxe-table-column field="loginName" title="用户名" width="110" align="left" show-header-overflow="tooltip"
          show-overflow="tooltip" fixed="left" />
        <vxe-table-column title="负责人" align="left" show-header-overflow="tooltip" show-overflow="tooltip">
          <template slot-scope="scope">
            <i v-if="scope.row.isDuty" class="el-icon-check" />
          </template>
        </vxe-table-column>
        <vxe-table-column field="departmentName" title="所属部门" align="left" width="140" min-width="140"
          show-header-overflow="tooltip" show-overflow="tooltip" />
        <vxe-table-column field="jobLevel" :formatter="formatterjobLevel" title="职位" align="left" width="140"
          min-width="140" show-header-overflow="tooltip" show-overflow="tooltip" />
        <vxe-table-column field="mobilePhone" title="电话" width="140" show-header-overflow="tooltip"
          show-overflow="tooltip" align="left" />
        <vxe-table-column title="状态" width="50">
          <template scope="scope">
            <el-switch v-model="scope.row.switch" class="switch" active-color="#32BAD4" inactive-color="#B1B9C5"
              active-text="启" inactive-text="禁" @change="changeStatus(scope.row)" />
          </template>
        </vxe-table-column>
        <vxe-table-column title="排序" width="148" min-width="148" align="left" fixed="right">
          <template #header>
            <p class="ml8">排序</p>
          </template>
          <template slot-scope="scope">
            <sort-table :scope-data="scope" :sort-url="tableUrl" @sortOk="getTableList" />
          </template>
        </vxe-table-column>
        <vxe-table-column title="操作" width="148" min-width="148" align="left" fixed="right">
          <template #header>
            <p class="ml8">操作</p>
          </template>
          <template slot-scope="scope">
            <el-button type="text" size="small">
              <el-tooltip class="item" effect="dark" content="解锁" placement="top">
                <i class="icon-platform-unlock iconfont" @click="updateLock(scope.row.id, scope.row.name)" />
              </el-tooltip>
              <el-tooltip class="item" effect="dark" content="重置" placement="top">
                <i class="icon-platform-reset iconfont" @click="resetPassword(scope.row.id)" />
              </el-tooltip>
              <el-tooltip class="item" effect="dark" content="修改" placement="top">
                <i class="icon-platform-edit iconfont" @click="handleEdit(scope.row)" />
              </el-tooltip>
              <el-tooltip class="item" effect="dark" content="删除" placement="top">
                <i class="icon-platform-delete iconfont" @click="handleDelete(scope.row.id, scope.row.name)" />
              </el-tooltip>
            </el-button>
          </template>
        </vxe-table-column>
      </vxe-table>
    </div>
  </div>
</template>
<script>
// 定时任务
export default {
  name: "users",
  components: {},
  data () {
    return {
      title: '',
      queryParam: {},
      selectType: '0',
      queryName: '',
      organizationId: '', // 组织机构ID
      departmentId: '', // 部门ID
      departmentList: [], // 部门列表
      levelList: [], // 职务级别
      tableData: [],
      sexList: [],
      typeOptions: [
        {
          value: '0',
          label: '姓名'
        },
        {
          value: '1',
          label: '工号'
        },
        {
          value: '2',
          label: '部门'
        },
        {
          value: '3',
          label: '机构'
        }
      ],
      // tableUrl: api.users, // 接口地址,

      pageData: {
        total: 0,
        pageSize: 15,
        current: 1,
      },
    };
  },
  created () {
    // 获取区域和组织机构id
    eventBus.$on('getSelectedId', (res) => {
      if (!res.organizationId) {
        this.tableData = []
        this.organizationId = ''
        this.departmentId = ''
      } else {
        this.organizationId = res.organizationId
        this.departmentId = res.departmentId
        this.getTableList()
        this.getDepartData()
      }
      this.initDictConfig()
    })
  },
  updated () {
    this.tableData.forEach((element) => {
      element.switch = element.status === 'ACTIVE'
    })
  },
  methods: {
    initDictConfig () {
      getDictItems('XB').then((res) => {
        if (res.status === 1) {
          this.sexList = res.content
        } else {
          this.$message.error({ message: res.message, showClose: true })
        }
      })
      getDictItems('ZWJB').then((res) => {
        if (res.status === 1) {
          this.levelList = res.content
        } else {
          this.$message.error({ message: res.message, showClose: true })
        }
      })
    },
    getDepartData () {
      getDeptsByIdAction(this.organizationId).then((res) => {
        if (res.status === 1) {
          this.departmentList = res.content
        } else {
          this.$message.error({ message: res.message, showClose: true })
        }
      })
    },
    getTableList () {
      this.loading = true
      this.queryParam = {
        organizationId: this.organizationId,
        departmentId: this.departmentId
      }
      getUserList(this.queryParam).then((res) => {
        if (res.status === 1) {
          this.loading = false
          this.tableData = res.content
        } else {
          this.$message.error({ message: res.message, showClose: true })
        }
      })
    },
    // 查询
    searchQuery () {
      switch (this.selectType) {
        case '0':
          this.queryParam.type = 'NAME'
          break
        case '1':
          this.queryParam.type = 'CODE'
          break
        case '2':
          this.queryParam.type = 'DEPARTMENT'
          break
        case '3':
          this.queryParam.type = 'ORGANIZATION'
          break
        default:
          break
      }
      this.queryParam.typeValue = this.queryName
      getUserList(this.queryParam).then((res) => {
        if (res.status === 1) {
          this.tableData = res.content
        } else {
          this.$message.error({ message: res.message, showClose: true })
        }
      })
    },
    // 重置搜索
    resetSearch () {
      this.selectType = '0'
      this.queryName = ''
      this.queryParam = {
        organizationId: this.organizationId,
        departmentId: this.departmentId
      }
      this.getTableList()
    },
    // 性别
    formatterSex ({ cellValue }) {
      if (this.sexList.length !== 0) {
        if (cellValue !== null) {
          const sex = this.sexList.find((item) => item.value === cellValue).name
          return sex
        } else {
          return cellValue
        }
      }
    },
    // 职务级别
    formatterjobLevel ({ cellValue }) {
      if (this.levelList.length !== 0) {
        if (cellValue) {
          const jobLevel = this.levelList.find(
            (item) => item.value === cellValue
          ).name
          return jobLevel
        } else {
          return cellValue
        }
      }
    },
    // 删除
    handleDelete (id, content) {
      this.$confirm(deleteDomStr(content), '执行确认', {
        dangerouslyUseHTMLString: true,
        customClass: 'customer-delete',
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning'
      })
        .then(() => {
          deleteAction(`${api.users}/${id}`).then((res) => {
            if (res.status === 1) {
              this.$message.success({ message: res.message, showClose: true })
            } else {
              this.$message.error({ message: res.message, showClose: true })
            }
            this.getTableList()
          })
        })
        .catch(() => { })
    },
    // 修改状态
    changeStatus (row) {
      this.$confirm('确定要修改状态吗?', '提示', {
        customClass: 'customer-update',
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning'
      })
        .then(() => {
          const status = row.status === 'ACTIVE' ? 'INACTIVE' : 'ACTIVE'
          const id = row.id
          updateStatus(id, status).then((res) => {
            if (res.status === 1) {
              this.$message.success({ message: res.message, showClose: true })
              this.getTableList()
            } else {
              this.$message.error({ message: res.message, showClose: true })
            }
          })
        })
        .catch((err) => {
          console.log({ err })
        })
    },
    // 更新用户解锁状态
    updateLock (id, name) {
      this.$confirm(
        `<div  class="customer-message-wrapper">
              <h5 class="title">确定要更新用户解锁状态吗</h5>
               <p class="result">执行后,数据将
                 <span >无法恢复</span>
                </p>
        </div>`,
        '执行确认',
        {
          dangerouslyUseHTMLString: true,
          customClass: 'customer-delete',
          confirmButtonText: '确定',
          cancelButtonText: '取消',
          type: 'warning'
        }
      )
        .then(() => {
          updateLock(id).then((res) => {
            if (res.status === 1) {
              this.$message.success({ message: res.message, showClose: true })
              this.getTableList()
            } else {
              this.$message.error({ message: res.message, showClose: true })
            }
          })
        })
        .catch(() => { })
    },
    // 重置用户密码
    resetPassword (data) {
      const ids = []
      if (data instanceof Array) {
        data.forEach((item) => {
          ids.push(item.id)
        })
      } else {
        ids.push(data)
      }
      console.log(ids, 'ids')
      if (ids.length === 0) {
        this.$message({
          message: '请选择需要重置密码的用户!',
          showClose: true
        })
        return
      }
      this.$confirm(
        `<div  class="customer-message-wrapper">
              <h5 class="title">确定要重置密码吗</h5>
               <p class="result">执行后,数据将
                 <span >无法恢复</span>
                </p>
        </div>`,
        '执行确认',
        {
          dangerouslyUseHTMLString: true,
          customClass: 'customer-delete',
          confirmButtonText: '确定',
          cancelButtonText: '取消',
          type: 'warning'
        }
      )
        .then(() => {
          resetPassword(ids).then((res) => {
            if (res.status === 1) {
              this.$message.success({ message: res.message, showClose: true })
              this.getTableList()
            } else {
              this.$message.error({ message: res.message, showClose: true })
            }
          })
        })
        .catch(() => { })
    },
    // 新增回显
    reloadTableData () {
      this.getTableList()
    },
    showimport () {
      this.$refs.leadingIn.import(this.tableUrl, '人员')
    }
  }
}
</script>

<style scoped lang="scss">
.content {
  .top-wrapper {
    .el-button + .el-button {
      margin-left: 16px;
    }
    .top-wrapper-search {
      display: inline-block;
      margin-left: 16px;
      ::v-deep .el-input,
      ::v-deep .el-input__inner {
        height: 32px;
      }
      .select {
        width: 120px;
        vertical-align: middle;
      }
      .selectName {
        width: 178px;
        margin: 0 16px;
        vertical-align: middle;
        ::v-deep .el-input-group__append {
          background: #e0eeff;
          color: #3aa3f8 !important;
          padding-right: 12px;
          border-radius: 0;
          .el-button {
            padding: 8px 8px;
          }
        }
      }
    }
  }
  .vxe-table {
    ::v-deep .vxe-body--row {
      .vxe-body--column:nth-child(3) {
        text-align: left;
      }
      .svg-icon {
        width: 1.5em;
        height: 1.5em;
        vertical-align: middle;
        margin-left: 5px;
      }
    }
  }

}