|
<template>
<div class="usermana-page">
<t-card class="page-card">
<div class="select-confidtion-box row">
<div class="col-3">公司:
<t-select v-model="companyTypeId" width="200px">
<t-option v-for="item in companyTypesList" :key="item.id" :value="item.id">{{ item.name }}</t-option>
</t-select>
</div>
<div class="col-3">部门:
<!-- <t-select v-model="departmentTypeId" width="200px">
<t-option v-for="item in departmentTypesList" :key="item.id" :value="item.id">{{ item.name }}</t-option>
</t-select> -->
<template>
<t-select-tree v-model="departmentTypeId" :node-data="departmentTypesList" width="200px" node-key="id"></t-select-tree>
</template>
</div>
<div class="col-3">姓名:
<t-select v-model="staffTypeId" width="200px">
<t-option v-for="item in staffTypesList" :key="item.id" :value="item.id">{{ item.name }}</t-option>
</t-select>
</div>
<div class="col-2 offset-1 select-button-box" align="end">
<t-button color="primary" @click="selectHandle">查询</t-button>
<t-button @click="resetData">重置</t-button>
</div>
</div>
<div class="function-button-box">
<t-button color="primary" @click="showAddDeviceModal">
<t-icon icon="plus-circle-outline" size="16"></t-icon>新增
</t-button>
<t-button @click="multDeleteUserData">
<t-icon icon="trash" size="16"></t-icon>删除
</t-button>
</div>
<div class="table-box">
<t-table :data="userDataList" line @selection-change="selectChange">
<t-table-column type="selection" width="70"></t-table-column>
<t-table-column prop="name" label="姓名" width="100"></t-table-column>
<t-table-column prop="userId" label="员工编号" width="120"></t-table-column>
<t-table-column prop="companyName" label="公司" width="150"></t-table-column>
<t-table-column prop="departmentName" label="部门" width="150"></t-table-column>
<t-table-column prop="post" label="职务" width="100"></t-table-column>
<t-table-column prop="age" label="年龄" width="80"></t-table-column>
<t-table-column prop="telephone" label="手机" width="150"></t-table-column>
<t-table-column prop="status" label="人脸状态" width="120">
<template v-slot="{row}">
<t-tag v-if="row.field2==='5'" state="success">{{ row.status }}</t-tag>
<t-tag v-else-if="row.field2==='3'" state="danger">{{ row.status }}</t-tag>
<t-tag v-else state="info">{{ row.status }}</t-tag>
</template>
</t-table-column>
<t-table-column label="操作">
<template v-slot="{row}">
<a href="javascript:;" style="color:#0089D4;" @click="editDeviceData(row.resourceToolId)">编辑</a>
<a href="javascript:;" style="color:#0089D4;" @click="deleteUserData(row)">删除</a>
<a v-if="row.field2!='5'" href="javascript:;" style="color:#0089D4;" @click="auditdata(row.id,row.companyName)">人脸审核</a>
</template>
</t-table-column>
</t-table>
</div>
<div class="table-pager">
<t-pager :current.sync="page" :total="total" :page-size="limit" :sizer-range="[10,20,50,100]" show-elevator show-sizer @on-size-change="onSizeChange" @on-change="onChange">>
</t-pager>
</div>
</t-card>
<add-user-modal :company-list="companyTypesList" :visible.sync="addDeviceModal"></add-user-modal>
<auditModal :auditshow.sync="auditshow" :auditid="auditid" :company-name="companyName" @refeshUserList="getUserList"></auditModal>
</div>
</template>
<script>
import sysapi from '@/api/usermana'
import addUserModal from './components/modal/addUser'
import auditModal from './components/modal/audit'
export default {
components: {
addUserModal,
auditModal
},
data () {
return {
// 公司类型id
companyTypeId: '',
// 公司类型列表
companyTypesList: [],
// 部门类型id
departmentTypeId: '',
// 部门类型列表
departmentTypesList: [],
// 员工类型id
staffTypeId: '',
// 员工类型列表
staffTypesList: [],
// 用户数据列表
userDataList: [],
// 当前页
page: 1,
// 当前页的数据个数
limit: 10,
// 数据总数
total: 0,
// 批量删除的用户id
deleteUserId: [],
// 当前设备数据
currentDeviceData: {},
// 显示/隐藏新增设备对话框
addDeviceModal: false,
currentEditDevice: {},
// 人脸审核模态框显示
auditshow: false,
// 人脸审核选择id
auditid: 0,
// 人脸审核的公司名称
companyName: ''
}
},
watch: {
companyTypeId (val) {
// 重置部门回显
this.departmentTypeId = ''
// 查询部门列表
this.queryCycleChildOrg(val)
},
departmentTypeId (val) {
// 重置人员回显
this.staffTypeId = ''
// 重置人员列表
this.staffTypesList = []
// 减少查询请求
if (val !== '') {
this.getStaffTypesList(val)
}
}
},
created () {
// this.getDeviceData()
this.getCompanyTypesList()
},
methods: {
// 获取用户列表数据
async getUserList () {
const res = await sysapi.getUserList({ params: { pageNumber: this.page, pageSize: this.limit, id: this.staffTypeId, orgId: this.departmentTypeId || this.companyTypeId } })
if (res.status === 200) {
// 获取当前公司id的公司名称
const companyName = this.companyTypesList.filter(item => item.id === this.companyTypeId)[0].name
// eslint-disable-next-line no-return-assign
res.data.data.forEach(item => item.companyName = companyName)
this.userDataList = res.data.data
this.total = res.data.total
} else {
this.$Message.danger('用户列表数据获取失败!')
}
},
// 向服务器发送请求获取公司类型列表数据
async getCompanyTypesList () {
const res = await sysapi.getCompanyTypesList()
if (res.status === 200) {
this.companyTypesList = res.data.data
} else {
this.$Message.danger('公司类型列表数据获取失败!')
}
},
// 向服务器发送请求获取部门类型列表数据
// async getDepartmentTypesList (id) {
// const res = await sysapi.getDepartmentTypesList(id)
// if (res.status === 200) {
// this.departmentTypesList = res.data.data
// } else {
// this.$Message.danger('部门类型列表数据获取失败!')
// }
// },
// 如果部门还有下级 递归
nextDepartment (data, arr) {
if (data.length > 0) {
data.forEach(item => {
arr.push({
orgId: item.id + '',
id: item.code,
label: item.name,
pid: item.parentCode
})
this.nextDepartment(item.departments, arr)
})
}
},
// 获取部门列表
async queryCycleChildOrg (id) {
const res = await sysapi.queryCycleChildOrg(id)
if (res.status === 200) {
const data = []
// 递归 实现tree组件所需部门数据结构
this.nextDepartment(res.data, data)
// 深拷贝data
const data1 = JSON.parse(JSON.stringify(data))
// 用部门id映射关系代替code与parentCode父子映射关系
data.forEach(item => {
// 删除pid为"-1"的的pid属性,否则tree渲染的时候没有根节点渲染不出来
if (item.pid === '-1') {
delete item.pid
}
item.id = item.orgId
data1.some((item1) => {
if (item.pid === item1.id) {
item.pid = item1.orgId
} else {
return false
}
})
})
// eslint-disable-next-line no-return-assign
this.departmentTypesList = data.filter(item => item.data = item.id)
} else {
this.$Message.danger('部门类型列表数据获取失败!')
}
},
// 向服务器发送请求获取用户类型列表数据
async getStaffTypesList (id) {
const res = await sysapi.getStaffTypesList(id)
if (res.status === 200) {
this.staffTypesList = res.data.data
} else {
this.$Message.danger('用户类型列表数据获取失败!')
}
},
// 查询数据
selectHandle () {
this.page = 1
this.getUserList()
},
// 重置查询数据
resetData () {
this.page = 1
this.companyTypeId = ''
this.staffTypeId = ''
this.departmentTypeId = ''
this.userDataList = []
},
// 当前页改变 触发事件
onChange (page) {
this.page = page
this.getUserList()
},
// 当前页数据总数改变 触发事件
onSizeChange (pageSize) {
this.limit = pageSize
this.getUserList()
},
// 删除数据
deleteUserData (row) {
this.$Confirm.confirm({
title: '正在准备删除...',
content: '<p>确定要删除?</p><p>删除后将无法还原!</p>',
ok: async () => {
const res = await sysapi.deleteUserData({ employeeId: row.id })
if (res.status === 200) {
this.getUserList()
this.$Message.success('删除成功!')
} else {
this.$Message.danger('删除失败!')
}
},
cancel: () => {
this.$Message.info('已取消删除!')
}
})
},
// 当复选框发生改变时 触发事件
selectChange (data) {
const arr = []
data.forEach(item => arr.push(item.id))
this.deleteUserId = arr
},
// 批量删除数据
multDeleteUserData () {
if (this.deleteUserId.length === 0) {
return this.$Message.warning('请选择要删除的数据!')
}
this.$Confirm.confirm({
title: '正在准备删除...',
content: '<p>确定要删除?</p><p>删除后将无法还原!</p>',
ok: async () => {
const res = await sysapi.deleteUserData({ employeeId: this.deleteUserId })
if (res.status === 200) {
this.getUserList()
this.$Message.success('删除成功!')
} else {
this.$Message.danger('删除失败!')
}
},
cancel: () => {
this.$Message.info('已取消删除!')
}
})
},
// 获取设备详情数据
async getDeviceInfo (id) {
const res = await sysapi.getDeviceInfo(id)
if (res.status === 200) {
this.currentDeviceData = res.data
} else {
this.$Message.danger('设备详情数据获取失败!')
}
},
// 显示新增设备对话框
showAddDeviceModal () {
this.addDeviceModal = true
},
async editDeviceData (id) {
const res = await sysapi.getDeviceInfo(id)
if (res.status === 200) {
this.currentEditDevice = res.data
} else {
this.$Message.danger('设备数据获取失败!')
}
this.addDeviceModal = true
},
// 人脸审核
auditdata (id, companyName) {
this.companyName = companyName
this.auditid = id
this.auditshow = true
}
}
}
</script>
<style lang="scss">
.usermana-page {
.card-block {
padding: 0px 24px !important;
}
.tabs {
overflow: inherit;
}
.tabs-list {
.tabs-list__content {
display: flex;
justify-content: flex-end;
margin-top: -10px;
.tabs-list__nav {
height: 32px;
line-height: 16px;
}
}
.tabs-tab {
margin: 0;
padding: 0 25px;
font-size: 14px;
}
.tabs-tab.checked {
border-bottom: 3px solid #2d98ff;
}
}
.select-button-box {
padding: 0;
button {
margin-left: 5px;
}
}
.select-confidtion-box {
margin: 24px 0;
.col-3 {
padding: 0;
}
}
.function-button-box {
line-height: 32px;
button {
margin-right: 12px;
i {
line-height: 32px;
margin-right: 8px;
}
}
a {
color: #0089d4;
i {
line-height: 32px !important;
margin-left: 4px;
}
}
}
.table-box {
margin: 20px 0;
}
.table-pager {
display: flex;
justify-content: flex-end;
}
}
</style>
|