Your Name
2022-05-11 e7dd0a57b345c2a9b1d988a4bfe68eee8e5e48b7
src/views/contractor/userManage/index.vue
@@ -1,10 +1,19 @@
<template>
    <div class="app-container">
        <div>
        <div class="filter-container">
            <el-form :inline="true" :model="queryForm">
                <el-form-item label="用户名">
                    <el-input
                        v-model="queryForm.username"
                        class="filter-item"
                        placeholder=""
                        style="width: 150px;"
                        @keyup.enter.native="queryHandle"
                    />
                </el-form-item>
                <el-form-item label="真实姓名">
                    <el-input
                        v-model="queryForm.realname"
                        class="filter-item"
                        placeholder=""
                        style="width: 150px;"
@@ -67,6 +76,17 @@
                        icon="el-icon-upload2"
                        @click="showImportHandle"
                    >导入</el-button>
                </el-form-item>
                <el-form-item>
                    <el-button
                        v-if="getBtnPermission('export')"
                        v-show="userType != 3"
                        class="filter-item"
                        style="margin-left: 10px;"
                        type="primary"
                        icon="el-icon-upload2"
                        @click="showExportHandle"
                    >导出</el-button>
                </el-form-item>
            </el-form>
        </div>
@@ -155,6 +175,11 @@
                        <span>{{ scope.row.idcard }}</span>
                    </template>
                </el-table-column>
                <el-table-column label="单位" prop="company" align="center" sortable="custom" width="100px">
                    <template slot-scope="scope">
                        <span>{{ scope.row.company }}</span>
                    </template>
                </el-table-column>
                <el-table-column label="部门" prop="department" align="center" sortable="custom" width="100px">
                    <template slot-scope="scope">
                        <span>{{ scope.row.department }}</span>
@@ -175,10 +200,14 @@
                        <span>{{ scope.row.roles | parseRoles }}</span>
                    </template>
                </el-table-column>
                <el-table-column label="人脸数据" prop="code" align="center" width="100px">
                <!-- <el-table-column label="人员MAC地址" prop="deviceNo" align="center" width="100px">
                    <template slot-scope="scope">
                        <span>{{ scope.row.code == null || scope.row.code === '' ?"":"已采集"  }}</span>
                        <span>{{ scope.row.deviceNo}}</span>
                    </template>
                </el-table-column>
                <el-table-column label="人脸数据" prop="role" align="center" width="100px">
                    <template slot-scope="scope">
                        <span>{{ scope.row.code == null || scope.row.code === '' ?"":"已采集" }}</span>
                    </template>
                </el-table-column>
                <el-table-column label="是否通过考试" prop="ispass" align="center" width="100px">
@@ -197,7 +226,7 @@
                        <span>{{ scope.row.endtime}}</span>
                    </template>
                </el-table-column>
                </el-table-column> -->
                <el-table-column label="是否单位负责人" prop="iscompany" align="center" width="100px">
                    <template slot-scope="scope">
                        <div v-for="item in isList">
@@ -221,6 +250,7 @@
                        <span>{{ scope.row.status | parseStatus }}</span>
                    </template>
                </el-table-column>
                <!--                <el-table-column label="更新时间" prop="lastmodifieddate" align="center" sortable="custom">-->
                <!--                    <template slot-scope="scope">-->
                <!--                        <span>{{ scope.row.lastmodifieddate | parseTime('{y}-{m}-{d}') }}</span>-->
@@ -229,8 +259,11 @@
                <el-table-column label="操作" align="center" width="250" class-name="small-padding fixed-width" fixed="right">
                    <template slot-scope="scope">
                        <el-button type="text" @click="showEditHandle(scope.row)">编辑</el-button>
                        <el-button  v-show="userType != 3" :disabled="disableRole(scope.row)" type="text" align="center" @click="showAssignRole(scope.row)">分配角色</el-button>
                        <el-button type="text" @click="showWorkLicense(scope.row)">查看工作证</el-button>
                        <el-button  v-show="userType != 3" :disabled="scope.row.type==1" type="text" style="color:red;" @click="deleteHandle(scope.row)">删除</el-button>
                        <el-button  v-if="scope.row.cardId === ''" v-show="userType !== 3" :disabled="scope.row.type===1" type="text" @click="bindCardHandle(scope.row)">绑定人员卡</el-button>
                        <el-button  v-else v-show="userType !== 3" :disabled="scope.row.type===1" type="text" style="color:red;" @click="setInvalidDel(scope.row)">删除人员卡</el-button>
                    </template>
                </el-table-column>
            </el-table>
@@ -315,11 +348,11 @@
                <el-row>
                    <el-col :span="12">
                        <el-form-item label="单位:" prop="company">
                            <el-select v-model.trim="dataForm.company"  auto-complete="on" style="width:100%;">
                            <el-select v-model.trim="dataForm.company"  value-key="item" auto-complete="on" style="width:100%;" @change="companyChange">
                                <el-option
                                    v-for="item in companyList"
                                    :key="item.id"
                                    :value="item.company"
                                    :value="item"
                                    :label="item.company"
                                >
                                </el-option>
@@ -327,7 +360,7 @@
                        </el-form-item>
                    </el-col>
                    <el-col :span="12">
                        <el-form-item label="部门:" prop="department">
                        <el-form-item label="部门:" prop="department" v-if="isMain">
                            <el-select v-model.trim="dataForm.department"  auto-complete="on" style="width:100%;">
                                <el-option
                                    v-for="item in departmentList"
@@ -404,11 +437,36 @@
                            </el-select>
                        </el-form-item>
                    </el-col>
                    <el-col :span="12">
                        <el-form-item label="定位卡编号:" prop="empNo">
                            <el-input v-model.trim="dataForm.empNo"></el-input>
                        </el-form-item>
                    </el-col>
                </el-row>
                <el-row>
                    <el-col :span="12">
                        <el-form-item label="定位卡MAC地址:" prop="deviceNo">
                            <el-input v-model.trim="dataForm.deviceNo"></el-input>
                        </el-form-item>
                    </el-col>
                </el-row>
            </el-form>
            <div slot="footer" class="dialog-footer">
                <el-button @click="dialogFormVisible = false">取消</el-button>
                <el-button type="primary" @click="dialogStatus==='create'?createHandle():updateHandle()">确认</el-button>
            </div>
        </el-dialog>
        <el-dialog :visible.sync="dialogUserRoleFormVisible" :modal-append-to-body="false" :close-on-click-modal="false" title="分配角色">
            <el-form ref="userRoleDataForm" :rules="userRoleDataFormRules" :model="userRoleDataForm" label-position="left" label-width="100px" style="margin-left:30px;">
                <el-form-item label="角色:" prop="userRoles">
                    <el-select v-model="userRoleDataForm.userRoles" placeholder="请选择用户角色" style="width:100%;" multiple>
                        <el-option v-for="(item,index) in roleList" :value="item.id" :key="index" :label="getRoleInfo(item)"/>
                    </el-select>
                </el-form-item>
            </el-form>
            <div slot="footer" class="dialog-footer">
                <el-button @click="dialogUserRoleFormVisible = false">取消</el-button>
                <el-button type="primary" @click="assignUserRoleHandle">确认</el-button>
            </div>
        </el-dialog>
        <el-dialog
@@ -437,6 +495,39 @@
                <el-button :disabled="importDisabled" type="primary" @click="importHandle()">导入</el-button>
            </div>
        </el-dialog>
        <el-dialog
            :visible.sync="bindDialogFormVisible"
            :modal-append-to-body="false"
            :close-on-click-modal="false"
            title="绑定人员卡"
            width="550px"
        >
            <el-form
                ref="importForm"
                label-position="right"
                label-width="120px"
                style="margin-left:30px;width:400px;">
                <el-row>
                    <el-col :span="24">
                        <el-form-item label="定位卡编号:" prop="empNo">
                            <el-input v-model.trim="cardDataForm.empNo"></el-input>
                        </el-form-item>
                    </el-col>
                </el-row>
                <el-row>
                    <el-col :span="24">
                        <el-form-item label="定位卡MAC地址:" prop="deviceNo">
                            <el-input v-model.trim="cardDataForm.deviceNo"></el-input>
                        </el-form-item>
                    </el-col>
                </el-row>
            </el-form>
            <div slot="footer" class="dialog-footer">
                <el-button @click="bindDialogFormVisible = false">取消</el-button>
                <el-button type="primary" @click="bindCard()">确认</el-button>
            </div>
        </el-dialog>
        <div style="clear: both;"/>
        <workLicense ref="workLicense"></workLicense>
    </div>
@@ -445,7 +536,8 @@
<script>
    import workLicense from './components/workLicense/index'
    import { mapGetters } from 'vuex'
    import { userList, createUser, deleteUser, updateUser, importUser, importDistrict,getDistrict,getDistrictByName,updateUserRole} from '@/api/user'
    import { userList, createUser, deleteUser, updateUser, importUser,
        importDistrict,getDistrict,getDistrictByName,updateUserRole,setInvalidDel,bindCard} from '@/api/user'
    import { checkBtnPermission } from '@/utils/permission'
    import { roleList } from '@/api/role'
    import { parseTime, computePageCount, parseUserType } from '@/utils'
@@ -455,8 +547,7 @@
    import {getCityListData, getProvinceListData} from "@/api/area";
    import { getAllCompany } from '../../../api/unitManage'
    import { getAllDepartment } from '../../../api/departmentManage'
    import { importSupplierUser } from '../../../api/user'
    const exampleFile = require('@/assets/example/contractoruser.xlsx')
    const exampleFile = require('@/assets/example/user.xlsx')
    export default {
        name: 'UserTable',
        filters: {
@@ -484,7 +575,7 @@
                if(status === 1){
                    return "正常"
                }else if(status === 0){
                    return "正常"
                    return "停用"
                }
            },
            filterSafety(value) {
@@ -563,8 +654,10 @@
                tableKey: 0,
                userData: null,
                listLoading: true,
                isMain:false,
                iscompanyList:[{id:1,name:'否'},{id:0,name:'是'}],
                queryForm: {
                    realname:'',
                    username: '',
                    company:'',
                    department:'',
@@ -596,10 +689,18 @@
                    createddate:'',
                    lastmodifiedby:'',
                    lastmodifieddate:'',
                    empNo:'',
                    deviceNo:'',
                },
                cardDataForm:{
                    username:'',
                    empNo:'',
                    deviceNo:''
                },
                importDialogFormVisible: false,
                importDisabled: false,
                dialogFormVisible: false,
                bindDialogFormVisible: false,
                dialogStatus: '',
                dataFormRules: {
                    username: [{ required: true, message: '用户名不能为空', trigger: 'blur' }],
@@ -608,7 +709,8 @@
                    password: [{ required: true, message: '密码不能为空', trigger: 'blur' }],
                    confirmPassword: [{ required: true, message: '确认密码不能为空', trigger: 'blur' }],
                    type: [{ required: true, message: '用户类型不能为空', trigger: 'change' }],
                    status: [{ required: true, message: '状态不能为空', trigger: 'change' }]
                    status: [{ required: true, message: '状态不能为空', trigger: 'change' }],
                    isanalysis: [{ required: true, message: '是否气体检测中心不能为空', trigger: 'change' }]
                },
                rules: {
                    username: [{ required: true, message: '用户名不能为空', trigger: 'blur' }],
@@ -617,7 +719,8 @@
                    // password: [{ required: true, message: '密码不能为空', trigger: 'blur' }],
                    // confirmPassword: [{ required: true, message: '确认密码不能为空', trigger: 'blur' }],
                    type: [{ required: true, message: '用户类型不能为空', trigger: 'change' }],
                    status: [{ required: true, message: '状态不能为空', trigger: 'change' }]
                    status: [{ required: true, message: '状态不能为空', trigger: 'change' }],
                    isanalysis: [{ required: true, message: '是否气体检测中心不能为空', trigger: 'change' }]
                },
                isList:[{id:1,name:'是'},{id:0,name:'否'}],
                typeList:[{id:1,name:'超级管理员'},{id:2,name:'管理员'},{id:3,name:'普通用户'}],
@@ -629,6 +732,7 @@
                userRoleDataFormRules: {
                    userRoles: [{ type: 'array', required: true, message: '角色不能为空', trigger: 'change' }]
                },
                typeList:[{id:1,name:'超级管理员'},{id:2,name:'管理员'},{id:3,name:'普通用户'}],
                roleList: [],
                passwordType: 'password',
                confirmPasswordType: 'password',
@@ -640,7 +744,6 @@
            }
        },
        created() {
            console.log(this.userType)
            this.getUserList()
            this.getProvince()
            this.getDepartmentData()
@@ -659,6 +762,15 @@
                this.order = param.order;
                this.getUserList()
            },
            companyChange(val){
                this.dataForm.company = val.company
                if (val.ismain === 1) {
                    this.isMain = true;
                }else{
                    this.isMain = false;
                    this.dataForm.department = ''
                }
            },
            getUserList() {
                const _this = this
                const params = {}
@@ -667,7 +779,8 @@
                params['pageIndex'] = _this.currentPage
                params['pageSize'] = _this.pageSize
                params['type'] = _this.userType
                params['isMain'] = false
                params['realname'] = _this.realname
                params['isMain'] = true
                for (const i in _this.queryForm) {
                    if (_this.queryForm[i] != undefined && _this.queryForm[i].toString() != '') {
                        params[i] = _this.queryForm[i]
@@ -911,6 +1024,8 @@
                this.dataForm.password = null
                this.dialogStatus = 'update'
                this.dialogFormVisible = true
                let ismain = this.companyList.find(item=>item.company === row.company).ismain
                this.isMain = ismain === 1;
                this.$nextTick(() => {
                    this.$refs['dataForm'].clearValidate()
                })
@@ -969,6 +1084,70 @@
                this.importDisabled = false
                this.importDialogFormVisible = true
            },
            showExportHandle() {
                const _this = this
                const params = {}
                params['sort'] = _this.sort
                params['order'] = _this.order
                params['pageIndex'] = 0
                params['pageSize'] = 99999
                params['type'] = _this.userType
                params['realname'] = _this.realname
                params['isMain'] = false
                for (const i in _this.queryForm) {
                    if (_this.queryForm[i] != undefined && _this.queryForm[i].toString() != '') {
                        params[i] = _this.queryForm[i]
                    }
                }
                userList(params)
                    .then((response) => {
                        const res = response.data
                        if (res.code == 200) {
                            const allData = res.result.result
                            if (allData.length == 0) {
                                parseError({ error: '没有录入数据', vm: _this })
                                return
                            }
                            import('@/vendor/Export2Excel').then((excel) => {
                                const tHeader = [
                                    '用户名',
                                    '真实姓名',
                                    '身份证号',
                                    '单位',
                                    '部门',
                                    '职位',
                                    '用户类型',
                                    '角色',
                                ]
                                const data =  allData.map(v=>{
                                    return [
                                        v.username,
                                        v.realname,
                                        v.idcard,
                                        v.company,
                                        v.department,
                                        v.job,
                                        this.typeList.find(item=>item.id === v.type).name,
                                        v.roles.map(item=>item.name).join(","),
                                    ]
                                })
                                excel.export_json_to_excel({
                                    header: tHeader,
                                    data,
                                    filename: '用户'
                                })
                            })
                        } else {
                            parseError({ error: res.message, vm: _this })
                        }
                    })
                    .catch((error) => {
                        parseError({ error: error, vm: _this })
                    })
            },
            viewHandle() {
                window.open(exampleFile, '_blank')
            },
@@ -982,7 +1161,7 @@
                    formData.append('file', files[0])
                }
                formData.append('action', 'import')
                importSupplierUser(formData)
                importUser(formData)
                    .then((response) => {
                        const res = response.data
                        if (res.code == 200) {
@@ -993,7 +1172,7 @@
                            })
                            _this.getUserList()
                        } else {
                            parseError({ error: res.data.message, vm: _this })
                            parseError({ error: res.message, vm: _this })
                        }
                    })
                    .catch((error) => {
@@ -1148,6 +1327,53 @@
                    }
                }
            },//市、镇、街道、委员会
            bindCardHandle(row){
                this.cardDataForm = {
                    username:'',
                    empNo:'',
                    deviceNo:''
                };
                this.cardDataForm.username = row.username;
                this.bindDialogFormVisible = true;
            },
            bindCard(){
                const _this = this;
                bindCard(_this.cardDataForm).then(response => {
                    const res = response.data
                    if (res.code === '200'){
                        _this.$message({
                            message: '绑定成功',
                            type: 'success'
                        })
                        this.bindDialogFormVisible = false;
                        _this.getUserList();
                    } else {
                        parseError({ error: res.message, vm: _this })
                    }
                }).catch(error => {
                })
            },
            setInvalidDel(row){
                const _this = this;
                setInvalidDel(row).then(response => {
                    const res = response.data
                    if (res.code === '200'){
                        _this.$message({
                            message: '删除成功',
                            type: 'success'
                        })
                        _this.getUserList();
                    } else {
                        parseError({ error: res.message, vm: _this })
                    }
                }).catch(error => {
                })
            },
        }
    }
</script>