You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

444 lines
14 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<template>
<el-container style="height: 100%;position: absolute;width: 100%;">
<el-col :span="16" style="height:100%;">
<div style="color:#909399;">
部门
<el-select v-model="query.depart_code" clearable placeholder="部门编码" style="width: 110px">
<el-option
v-for="item in dm_depart"
:key="item.depart_code"
:label="item.depart_name"
:value="item.depart_code"
/>
</el-select>
姓名:
<el-input v-model="query.yhms" placeholder="姓名" style="width: 110px" clearable />
<el-button style="margin: 1px" type="primary" icon="el-icon-search">查询</el-button>
<div style="float: right;">
<el-button style="margin: 1px" type="success" @click="handleAddYhxx">增加</el-button>
<el-button style="margin: 1px" type="warning" @click="handleUpdateYhxx">修改</el-button>
<el-button style="margin: 1px" type="danger" @click="handleDeleteYhxx">删除</el-button>
<el-button style="margin: 1px" @click="exportExcel">Excel</el-button>
</div>
</div>
<el-table
ref="yhxxTable"
v-loading="isYhxxTableLoading"
class="yhxxTable"
:show-overflow-tooltip="true"
:data="c_yhxxTableData.slice((currentPage-1)*pageSize,currentPage*pageSize)"
height="calc(100% - 30px - 35px)"
width="100%"
:border="true"
highlight-current-row
element-loading-background="rgba(0, 0, 0, 0.01)"
element-loading-text="数据正在加载中"
element-loading-spinner="el-icon-loading"
@current-change="handleYhxxCurrentChange"
@header-click="showFilter"
>
<el-table-column sortable label="账号" property="yhdm" />
<el-table-column sortable label="职号" property="ylzd2" />
<el-table-column sortable label="姓名" property="yhms" />
<el-table-column sortable label="部门" width="100px">
<template slot-scope="scope">
{{ getDepartName(scope.row.bmbm) }}
</template>
</el-table-column>
<el-table-column sortable label="审批权限" >
<template slot-scope="scope">
{{ getSpqx(scope.row.ylzd1) }}
</template>
</el-table-column>
<!-- <el-table-column sortable label="代码(复制到)" property="yhdm1"/>-->
<!-- <el-table-column sortable label="备注" property="remark" />-->
</el-table>
<el-pagination
:current-page="currentPage"
:page-sizes="[20, 50, 100, 10000]"
:page-size="pageSize"
layout="total, sizes, prev, pager, next, jumper"
:total="c_yhxxTableData.length"
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
/>
<el-dialog class="YhxxDialog" :title="dialogTitle" :visible.sync="dialogVisible" width="450px" center="">
<el-row>
<el-row>
<span style="width: 110px;display:inline-block;">账号:</span>
<el-input v-model="updateData.yhdm" placeholder="" style="width: 250px;" :disabled="inputDisabled"/>
</el-row>
<el-row>
<span style="width: 110px;display:inline-block;">姓名:</span>
<el-input v-model="updateData.yhms" placeholder="" style="width: 250px;" />
</el-row>
<el-row>
<span style="width: 110px;display:inline-block;">部门:</span>
<el-select v-model="updateData.bmbm" clearable placeholder="部门" style="width: 250px;">
<el-option
v-for="item in dm_depart"
:key="item.depart_code"
:label="item.depart_name"
:value="item.depart_code"
/>
</el-select>
</el-row>
<!-- <el-row>-->
<!-- <span style="width: 110px;display:inline-block;">密码:</span>-->
<!-- <el-input v-model="updateData.pwd" placeholder="" style="width: 250px;" />-->
<!-- </el-row>-->
<el-row>
<span style="width: 110px;display:inline-block;">审批权限:</span>
<el-select v-model="updateData.ylzd1" clearable placeholder="权限" style="width: 250px;">
<el-option
v-for="item in spqx"
:key="item.bm"
:label="item.bmsm"
:value="item.bm"
/>
</el-select>
</el-row>
<el-row>
<span style="width: 110px;display:inline-block;">职号:</span>
<el-input v-model="updateData.ylzd2" placeholder="" style="width: 250px;" />
</el-row>
<el-row>
<el-button
v-if="dialogTitle =='添加用户信息'?true :false"
style="float: right;"
type="primary"
@click="handleAddYhxxComplated"
>添加
</el-button>
<el-button
v-if="dialogTitle =='修改用户信息'?true :false"
style="float: right;"
type="primary"
@click="handleUpdateYhxxComplated"
>修改
</el-button>
</el-row>
</el-row>
</el-dialog>
</el-col>
<el-col :span="8" style="border-left:1px solid rgb(230, 230, 230);" :height="defaultHeight.height">
<el-tabs v-model="activeGzzxxTabName" style="padding-left: 5px;" :height="defaultHeight.height">
<el-tab-pane label="角色信息" name="gzzxx">
<el-table
ref="gzzTable"
v-loading="isGzzTableLoading"
:show-overflow-tooltip="true"
:data="gzzTableData"
:height="defaultHeight.height"
width="100%"
:border="true"
highlight-current-row
element-loading-background="rgba(0, 0, 0, 0.01)"
element-loading-text="数据正在加载中"
element-loading-spinner="el-icon-loading"
>
<el-table-column label="" property="isselect" style="width: 30px;">
<template slot-scope="scope">
<el-checkbox v-model="scope.row.isselect" @change="handleGzzSelect(scope.row)" />
</template>
</el-table-column>
<el-table-column label="代码" property="role_code" />
<el-table-column label="名称" property="role_name" />
</el-table>
</el-tab-pane>
</el-tabs>
</el-col>
<tbfilter ref="tbFilter" :list="c_yhxxTableData" :filter="columnFilter" @execFilter="execFilter" />
</el-container>
</template>
<script>
import {
getUserList,
addUser,
deleteUser,
updateUser,
getDepartList,
getRoleList,
getRoleListByUser,
addRoleForUser,
deleteRoleForUser
} from '@/api/sy/yhgl'
import FileSaver from 'file-saver'
import XLSX from 'xlsx'
import tbfilter from '@/components/TableColumnFilter'
export default {
name: 'Yhgl',
components: { tbfilter },
data() {
return {
defaultHeight: {
height: ''
},
inputDisabled:true,
activeGzzxxTabName: 'gzzxx',
dm_depart: [],
spqx: [],
query: { depart_code: ''},
yhxxTableData: [],
isYhxxTableLoading: true,
gzzTableData: [],
isGzzTableLoading: true,
currentPage: 1,
pageSize: 100,
selectYhxx: {},
dialogVisible: false,
dialogTitle: '',
updateData: {},
columnFilter: {},
loginType:[{
value: 1,
label: '指纹登录'
}, {
value: 2,
label: 'findTxTl'
}, ],
}
},
computed: {
c_yhxxTableData: function() {
const search = this.query
let resultList = this.yhxxTableData
if (search && search.depart_code) {
resultList = this.yhxxTableData.filter(data => {
return data.bmbm === search.depart_code
})
}
if (search && search.yhms) {
resultList = resultList.filter(data => {
return Object.keys(data).some(key => {
return String(data[key]).indexOf(search.yhms) > -1
})
})
}
if (this.$refs.tbFilter) {
return this.$refs.tbFilter.doFilter(this.columnFilter, resultList)
}
return resultList
}
},
created() {
window.addEventListener('resize', this.getHeight)
this.getHeight()
getDepartList({}).then(response => {
this.dm_depart = response.data
getUserList({}).then(response => {
this.yhxxTableData = response.data
this.isYhxxTableLoading = false
this.$refs.yhxxTable.setCurrentRow(this.yhxxTableData[0])
})
getRoleList().then(response => {
this.gzzTableData = response.data
this.isGzzTableLoading = false
})
const dict= window.localStorage.getItem("SPQX");
this.spqx=JSON.parse(dict);
})
}, methods: {
showFilter(column) {
this.$refs.tbFilter.showFilter(column)
},
execFilter(property, vals) {
this.currentPage = 1
this.$set(this.columnFilter, property, vals)
},
getHeight() {
this.defaultHeight.height = window.innerHeight - 140 + 'px'
},
handleSizeChange(val) {
this.pageSize = val
},
handleCurrentChange(val) {
this.currentPage = val
},
handleYhxxCurrentChange(currentRow) {
if (!currentRow || !currentRow.yhdm) return
this.selectYhxx = currentRow
this.isGzzTableLoading = true
getRoleListByUser(this.selectYhxx).then(response => {
this.isGzzTableLoading = false
for (const j in this.gzzTableData) {
this.$set(this.gzzTableData[j], 'isselect', false)
}
for (const i in response.data) {
for (const j in this.gzzTableData) {
if (response.data[i].role_code === this.gzzTableData[j].role_code) {
this.$set(this.gzzTableData[j], 'isselect', true)
}
}
}
})
},
handleGzzSelect(row) {
if (!this.selectYhxx || !this.selectYhxx.yhdm) {
this.$message({ message: '请先选择一个用户!', type: 'error' })
return
}
const relation = { 'yhdm': this.selectYhxx.yhdm,
'role_code': row.role_code,
'yhms': this.selectYhxx.yhms
}
if (row.isselect) {
addRoleForUser([relation]).then(response => {
this.$message({ message: '添加角色成功!', type: 'success' })
})
} else {
deleteRoleForUser([relation]).then(response => {
this.$message({ message: '删除角色成功!', type: 'success' })
})
}
},
handleAddYhxx() {
this.dialogVisible = true
this.inputDisabled=false;
this.dialogTitle = '添加用户信息'
this.updateData = {}
},
handleAddYhxxComplated() {
if(this.updateData.login_type===1) {
var uuid = guid();
window.location.href = "zwlr://" + uuid;
console.log(uuid);
this.updateData.uuid = uuid;
}
addUser(this.updateData).then(response => {
this.updateData = JSON.parse(JSON.stringify(this.updateData))
this.yhxxTableData.push(this.updateData)
this.dialogVisible = false
this.$message({ message: '添加用户信息成功!', type: 'success' })
})
},
addFinger(){
var uuid = updateGuid();
window.location.href="zwlr://"+this.updateData.user_code+uuid;
//this.selectYhxx.fingerprint='1111'
this.dialogVisible = false
console.log(this.updateData)
},
addFinger1(){
var uuid = updateGuid1();
window.location.href="zwlr://"+this.updateData.user_code+uuid;
//this.selectYhxx.fingerprint='1111'
this.dialogVisible = false
console.log(this.updateData)
},
addFinger2(){
var uuid = updateGuid2();
window.location.href="zwlr://"+this.updateData.user_code+uuid;
//this.selectYhxx.fingerprint='1111'
this.dialogVisible = false
console.log(this.updateData)
},
handleUpdateYhxx() {
if (!this.selectYhxx.yhdm) {
this.$message({ message: '请选择要修改的用户!', type: 'error' })
return
}
this.dialogVisible = true
this.dialogTitle = '修改用户信息'
console.log(this.selectYhxx)
this.updateData = JSON.parse(JSON.stringify(this.selectYhxx))
this.inputDisabled=true;
},
handleUpdateYhxxComplated() {
updateUser(this.updateData).then(response => {
for (const key in this.updateData) {
this.selectYhxx[key] = this.updateData[key]
}
this.dialogVisible = false
this.$message({ message: '修改用户信息成功!', type: 'success' })
})
},
handleDeleteYhxx() {
this.$confirm('此操作将删除该用户, 是否继续?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
deleteUser(this.selectYhxx).then(response => {
this.yhxxTableData = this.yhxxTableData.filter(t => !(t.user_code === this.selectYhxx.user_code))
this.$message({ message: '删除用户信息成功!', type: 'success' })
})
})
},
getDepartName(depart_code) {
for (const i in this.dm_depart) {
if (this.dm_depart[i].depart_code === depart_code) {
return this.dm_depart[i].depart_name
}
}
return ''
},
getSpqx(depart_code) {
for (const i in this.spqx) {
if (this.spqx[i].bm === depart_code) {
return this.spqx[i].bmsm
}
}
return ''
},
exportExcel() {
/* generate workbook object from table */
// 表名
var wb = XLSX.utils.table_to_book(document.querySelector('.yhxxTable'))
/* get binary string as output */
var wbout = XLSX.write(wb, { bookType: 'xlsx', bookSST: true, type: 'array' })
try {
FileSaver.saveAs(new Blob([wbout], { type: 'application/octet-stream' }), 'yhxx.xlsx')
} catch (e) {
if (typeof console !== 'undefined') console.log(e, wbout)
}
return wbout
}
}
}
//用于生成uuid
function S4() {
return (((1+Math.random())*0x10000)|0).toString(16).substring(1);
}
function guid() {
return ("user-"+S4()+S4()+"-"+S4()+"-"+S4()+"-"+S4()+"-"+S4()+S4()+S4());
}
function updateGuid() {
return ("upda1-"+S4()+S4()+"-"+S4()+"-"+S4()+"-"+S4()+"-"+S4()+S4()+S4());
}
function updateGuid1() {
return ("upda2-"+S4()+S4()+"-"+S4()+"-"+S4()+"-"+S4()+"-"+S4()+S4()+S4());
}
function updateGuid2() {
return ("upda3-"+S4()+S4()+"-"+S4()+"-"+S4()+"-"+S4()+"-"+S4()+S4()+S4());
}
</script>
<style scoped>
.YhxxDialog .el-row {
margin-bottom: 5px;
}
</style>