From 9a292e4fc0bca2d82088b2934eca9b08495a95b3 Mon Sep 17 00:00:00 2001 From: water_xu <x17149@gmail.com> Date: Wed, 24 Jul 2024 08:46:15 +0800 Subject: [PATCH 1/4] =?UTF-8?q?=E4=BA=BA=E5=91=98=E4=B8=AD=E5=8F=B0?= =?UTF-8?q?=E5=AF=B9=E6=8E=A5=E5=86=85=E5=AE=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../system/group/centerUserInfo/index.vue | 973 ++++++++++++++++++ src/views/system/group/user/index.vue | 167 ++- src/views/system/group/userCenter/index.vue | 924 +++++++++++++++++ 3 files changed, 2054 insertions(+), 10 deletions(-) create mode 100644 src/views/system/group/centerUserInfo/index.vue create mode 100644 src/views/system/group/userCenter/index.vue diff --git a/src/views/system/group/centerUserInfo/index.vue b/src/views/system/group/centerUserInfo/index.vue new file mode 100644 index 0000000..e17264a --- /dev/null +++ b/src/views/system/group/centerUserInfo/index.vue @@ -0,0 +1,973 @@ +<template> + <div class="app-container"> + <el-container> + <!-- <el-aside width="300px" style="background-color:#fff"> + <el-input + v-model="filterText" + placeholder="输入关键字进行过滤" + style="margin:10px 0"/> + <el-tree + v-loading="treeLoading" + ref="tree" + :data="treeData" + :props="defaultProps" + :filter-node-method="filterNode" + class="filter-tree" + @node-click="handleNodeClick"/> + </el-aside>--> + <el-main> + <div class="filter-container"> + <div class="filter-lable w80">用户名称:</div> + <el-input v-model="keyUserName" clearable placeholder="搜索用户名" class="filter-item" style="width: 200px;"/> + <div class="filter-lable w80">人员类型:</div> + <el-select ref="refDeptLeven" v-model="keyJobLeven" clearable placeholder="请选择人员类型" class="filter-item" + style="width: 200px;"> + <el-option v-for="item in userType" :key="item.id" :label="item.name" + :value="item.id"/> + </el-select> + <!-- <div class="filter-lable w80">行政区域:</div>--> + <!-- <el-cascader ref="shudi" v-model="keyShudi" :props="areaprops" clearable placeholder="请选择行政区域" style="width: 200px" />--> + <!-- <div class="filter-lable w80">单位类型:</div>--> + <!-- <el-select ref="refDeptType" v-model="keyDeptType" clearable placeholder="请选择单位类型" class="filter-item">--> + <!-- <el-option v-for="item in unitTypeList" :key="item.DICTIONARIES_ID" :label="item.NAME" :value="item.DICTIONARIES_ID" />--> + <!-- </el-select>--> + <div class="filter-lable w80">部门名称:</div> + <el-input v-model="keyDepeName" clearable placeholder="搜索部门名称" class="filter-item" + style="width: 200px;"/> + <!-- <div class="filter-lable w80">职务级别:</div>--> + <!-- <el-select ref="refJobLeven" v-model="keyJobLeven" clearable placeholder="请选择" class="filter-item">--> + <!-- <el-option v-for="item in jobTypeAllList" :key="item.DICTIONARIES_ID" :label="item.NAME" :value="item.DICTIONARIES_ID" />--> + <!-- </el-select>--> + <el-button v-waves class="filter-item" type="primary" icon="el-icon-search" @click="getQuery"> + 搜索 + </el-button> + <el-button v-waves class="filter-item" type="success" icon="el-icon-refresh" @click="goKeyReset"> + 重置 + </el-button> +<!-- <el-button v-waves v-if="LOGIN_USER === '1'" class="filter-item" type="warning" icon="el-icon-warning" + size="mini" plain @click="resetPassword"> + 一键密码重置 + </el-button>--> + </div> + <el-table + ref="multipleTable" + :data="varList" + :header-cell-style="{ + 'font-weight': 'bold', + 'color': '#000' + }" + tooltip-effect="dark" + border + fit + highlight-current-row + > + <el-table-column + type="selection" + width="55" + align="center"/> + <el-table-column type="index" label="序号" width="50" align="center"/> + <el-table-column prop="USERNAME" label="用户名" align="center"/> + <el-table-column prop="NAME" label="姓名" align="center"/> + <el-table-column prop="USER_TYPE" label="用户类型" align="center"> + <template slot-scope="{row}"> + <span v-if="row.USER_TYPE =='0'">股份</span> + <span v-else-if="row.USER_TYPE =='1'">分公司</span> + <span v-else>相关方</span> + </template> + </el-table-column> + <!-- <el-table-column prop="SEX" label="性别"/>--> + <el-table-column prop="ORG_PATH" label="部门" align="center"/> + <el-table-column prop="CORPINFO_NAME" label="企业" align="center"/> + <el-table-column label="操作" align="center" width="120"> + <template slot-scope="{row}"> + <el-button type="primary" icon="el-icon-edit" size="mini" @click="handleRecord(row.USER_ID)">查看记录 + </el-button> + </template> + </el-table-column> + </el-table> + <div class="page-btn-group"> + <div/> + <pagination :total="total" :page.sync="listQuery.page" :limit.sync="listQuery.limit" @pagination="getList"/> + </div> + </el-main> + </el-container> + + <el-dialog v-loading="editloading" :visible.sync="dialogFormRecord" + :title="dialogType === 'record'?'查看记录':'修改'" width="1800px"> + <el-table + ref="multipleTable" + :data="recordList" + :header-cell-style="{ + 'font-weight': 'bold', + 'color': '#000' + }" + tooltip-effect="dark" + border + fit + highlight-current-row + > + <el-table-column type="index" label="序号" width="50" align="center"/> + <el-table-column prop="NAME" label="用户名" align="center"/> + <el-table-column prop="CREATTIME" label="新增时间" align="center"/> + <el-table-column prop="CREATORNAME" label="新增人" align="center"> + <template slot-scope="{row}"> + <span>{{row.CREATORNAME ? row.CREATORNAME : row.NAMEX ? row.NAMEX : row.NAMER}}</span> + </template> + </el-table-column> + <el-table-column prop="REMARKS" label="记录" align="center"/> + </el-table> + </el-dialog> + + <el-dialog v-loading="editloading" :visible.sync="dialogFormEdit" :title="dialogType==='editUser'?'修改':'新增'" + width="600px"> + <el-form ref="form" :rules="rules" :model="pd" label-width="110px" style="width: 500px;"> + <el-form-item label="角色" prop="ROLE_ID"> + <el-select v-model="pd.ROLE_ID" multiple placeholder="请选择角色"> + <el-option v-for="item in roleList" :key="item.role_ID" :label="item.role_NAME" :value="item.role_ID"/> + </el-select> + </el-form-item> + <el-form-item label="用户名" prop="USERNAME"> + <el-input v-model="pd.USERNAME" :disabled="dialogType == 'editUser'" placeholder="这里输入用户名..." + @blur="goCheck()"/> + </el-form-item> + <el-form-item label="姓名" prop="NAME"> + <el-input v-model="pd.NAME" placeholder="这里输入姓名..."/> + </el-form-item> + <el-form-item v-if="dialogType != 'editUser'" label="密码" prop="PASSWORD"> + <el-input v-model="pd.userPASSWORD" show-password placeholder="这里输入密码..."/> + </el-form-item> + <el-form-item label="身份证号" prop="USER_ID_CARD"> + <el-input v-model="pd.USER_ID_CARD" placeholder="这里输入身份证号..." @blur="goCheck()"/> + </el-form-item> + <el-form-item label="性别" prop="SEX"> + <el-radio v-model="pd.SEX" :label="'0'">男</el-radio> + <el-radio v-model="pd.SEX" :label="'1'">女</el-radio> + </el-form-item> + <el-form-item label="手机号" prop="PHONE"> + <el-input v-model="pd.PHONE" placeholder="这里输入手机号..."/> + </el-form-item> + <!-- <el-form-item label="部门级别" prop="deptTypeID"> <!–(目的是选择部门到这个级别) –>--> + <!-- <el-select v-model="pd.deptTypeID" placeholder="请选择" class="filter-item" >--> + <!-- <el-option v-for="item in deptTypeLevenAllList" :key="item.BIANMA" :label="item.NAME" :value="item.DICTIONARIES_ID" />--> + <!-- </el-select>--> + <!-- </el-form-item>--> + <el-form-item label="单位部门" prop="DEPARTMENT_ID"> + <SelectTree + v-if="dialogFormEdit" + ref="deptTree" + :clearable="false" + :options="deptTreeData" + :props="deptDefaultProps" + v-model="pd.DEPARTMENT_ID" + placeholder="请选择部门" + /> + </el-form-item> + <el-form-item label="行政区域" prop="shudi"> <!--河北省的就可以 --> + <el-cascader v-if="dialogFormEdit" id="shudi" ref="shudi" v-model="pd.shudi" :props="areaprops" + placeholder="请选择省市县" style="width: 100%"/> + </el-form-item> + <el-form-item label="职务级别" prop="JOB_LEVEL"> + <el-select ref="refJobLevel" v-model="pd.JOB_LEVEL" placeholder="请选择" class="filter-item"> + <el-option v-for="item in deptTypeLevenAllList" :key="item.BIANMA" :label="item.NAME" + :value="item.DICTIONARIES_ID"/> + </el-select> + </el-form-item> + <el-form-item label="民族" prop="NATION"> + <el-select v-model="pd.NATION" placeholder="请选择" style="width: 100%;"> + <el-option + v-for="item in uesrInfoDic.minzuList" + :key="item.DICTIONARIES_ID" + :label="item.NAME" + :value="item.DICTIONARIES_ID"/> + </el-select> + </el-form-item> + <!-- 相关方的业务需求,是否为审核人员.如果为是的情况,就是可以在入场培训中选择 --> + <el-form-item label="是否审核人员" prop="ISASSESS"> + <el-radio v-model="pd.ISASSESS" :label="'1'">是</el-radio> + <el-radio v-model="pd.ISASSESS" :label="'0'">否</el-radio> + </el-form-item> + <el-form-item label="职务" prop="JOB"> + <el-input v-model="pd.JOB" placeholder="这里输入职务..."/> + </el-form-item> + <el-form-item label="邮箱" prop="EMAIL"> + <el-input v-model="pd.EMAIL" placeholder="这里输入邮箱..."/> + </el-form-item> + <el-form-item label="排序" prop="SORT"> + <el-input v-model.number="pd.SORT" placeholder="这里输入排序..."/> + </el-form-item> + <el-form-item label="备注"> + <el-input v-model="pd.BZ" type="textarea" placeholder="这里输入备注说明..."/> + </el-form-item> + </el-form> + <div slot="footer" class="dialog-footer"> + <el-button @click="dialogFormEdit = false">取 消</el-button> + <el-button v-show="ISCHECK || dialogType === 'editUser'" type="primary" @click="confirm">确 定</el-button> + <el-button v-show="!ISCHECK && dialogType !== 'editUser'" type="primary" @click="goCheck">校 验</el-button> + </div> + </el-dialog> + </div> +</template> + +<script> +import Pagination from '@/components/Pagination' // 通过 el-pagination二次打包 +import {requestFN} from '@/utils/request' +import waves from '@/directive/waves' // waves directive +import SelectTree from '@/components/SelectTree' + +export default { + components: {Pagination, SelectTree}, + directives: {waves}, + data() { + var hasUser = (rule, value, callback) => { + if (this.dialogType != 'editUser') { + requestFN( + '/user/hasUser', + { + USERNAME: value, + tm: new Date().getTime() + } + ).then((data) => { + if (data.result == 'success') { + callback() + } else { + callback(new Error('用户名重复')) + } + }).catch((e) => { + + }) + } else { + callback() + } + } + var hasEmail = (rule, value, callback) => { + if (value) { + requestFN( + '/user/hasEmail', + { + EMAIL: value, + USERNAME: this.pd.USERNAME + } + ).then((data) => { + if (data.result == 'success') { + callback() + } else { + callback(new Error('邮箱重复')) + } + }).catch((e) => { + + }) + } else { + callback() + } + } + return { + LOGIN_USER: JSON.parse(sessionStorage.getItem('user')).USER_ID, + treeLoading: false, + treeData: [], + userType: [ + { id: '0', name: '股份' }, + { id: '1', name: '分公司' }, + { id: '2', name: '相关方' } + ], + defaultProps: { + children: 'nodes', + label: 'name' + }, + listQuery: { + page: 1, + limit: 20 + }, + total: 0, + varList: [], + recordList: [], + filterText: '', + keyUserName: '', + keyDeptLeven: '', + keyShudi: '', + keyDeptType: '', + keyDepeName: '', + keyJobLeven: '', + ISCHECK: false, + dialogFormEdit: false, + dialogFormRecord: false, + editloading: false, + dialogType: 'add', + USER_ID: '', + TYPE: '', + loading: true, + rules: { + EMAIL: [ + {required: true, message: '请输入邮箱', trigger: 'blur'}, + { + pattern: /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(.[a-zA-Z0-9_-])+/, + message: '请输入正确的邮箱' + }, + {validator: hasEmail, trigger: 'blur'} + ], + ROLE_ID: [ + {required: true, message: '角色不能为空', trigger: 'blur'} + ], + USERNAME: [ + {required: true, message: '用户名不能为空', trigger: 'blur'}, + { + pattern: /^(13[0-9]|14[579]|15[0-3,5-9]|16[6]|17[0135678]|18[0-9]|19[89])\d{8}$/, + message: '用户名需使用手机号码格式' + }, + {validator: hasUser, trigger: 'blur'} + ], + NAME: [ + {required: true, message: '姓名不能为空', trigger: 'blur'}, + {min: 2, max: 30, message: '长度在 2 到 30 个字符', trigger: 'blur'} + ], + SEX: [ + {required: true, message: '请选择性别', trigger: 'blur'} + ], + NATION: [ + {required: true, message: '请选择民族', trigger: 'blur'} + ], + PHONE: [ + {required: true, message: '手机号不能为空', trigger: 'blur'}, + {min: 11, max: 11, message: '请输入11位手机号码', trigger: 'blur'}, + { + pattern: /^(13[0-9]|14[579]|15[0-3,5-9]|16[6]|17[0135678]|18[0-9]|19[89])\d{8}$/, + message: '请输入正确的手机号码' + } + ], + deptTypeID: [ + {required: true, message: '请选择部门级别', trigger: 'blur'} + ], + shudi: [ + {required: true, message: '请选择属地', trigger: 'blur'} + ], + JOB_LEVEL: [ + {required: true, message: '请选择职务级别', trigger: 'blur'} + ], + DEPARTMENT_ID: [ + {required: true, message: '请选择单位部门', trigger: 'blur'} + ], + ISASSESS: [ + {required: true, message: '请选择是否审核人员', trigger: 'blur'} + ], + USER_ID_CARD: [{required: true, message: '身份证号不能为空', trigger: 'blur'}, + { + pattern: /^\d{6}(18|19|20)?\d{2}(0[1-9]|1[0-2])(([0-2][1-9])|10|20|30|31)\d{3}(\d|X|x)$/, + message: '请输入正确的身份证号' + } + ] + }, + uesrInfoDic: { + minzuList: [], // 民族 0a0e406f27f74ee698fe9979d25f62dd + xingbieList: [], // 性别情况 21501808bbc344d593fbf9ccfe6c4531 + }, + pd: { + ROLE_ID: [], // 角色ID + USERNAME: '', // 用户名 + NAME: '', // 姓名 + userPASSWORD: 'Aa@123456789', // 密码 + SEX: '', // 性别(0男,1女) + PHONE: '', // 电话 + deptTypeID: '', // 需要选择的部门级别,只有相等的时候可以 + DEPARTMENT_ID: '', // 用户部门 + shudi: '', + BZ: '', // 备注 + EMAIL: '', // 邮箱 + SORT: '', // 人员在部门中的排序 + PROVINCE: '', // 所属省 + CITY: '', // 所属市级 + COUNTRY: '', // 所属区县 + VILLAGE: '', // 所属乡镇 + JOB_LEVEL: '', // 职务级别 + ISASSESS: '', + JOB: '', // 职务 + USER_ID_CARD: '', //身份证号 + NATION: '' //民族 + }, + roleList: [], + multipleSelectionAll: [], // 所有选中的数据包含跨页数据 + multipleSelection: [], // 当前页选中的数据 + fromExcel: false, // 从excel导入权限 + toExcel: false, // 导出到excel权限 + add: false, // 新增按钮 + del: false, // 删除按钮 + edit: false, // 修改按钮 + record: false, // 查看记录按钮 + hasUserRet: false, + deptTypeLevenAllList: [], // 单位类型 + jobTypeAllList: [], // 职务级别 + deptTreeData: [], // 部门树数据, + userRecordInfo: {}, + recordInfo: {}, + deptDefaultProps: { + value: 'id', + children: 'nodes', + label: 'name' + }, + unitTypeList: [], + areaprops: { + lazy: true, + lazyLoad(node, resolve) { + setTimeout(() => { + const areaLeven = node.level + var areaParID = '' + if (areaLeven == '0') { + areaParID = 'e725d2a91b8248f4b8f49889038df7de' + } else { + areaParID = node.data.id + } + requestFN( + 'dictionaries/getLevels', + {DICTIONARIES_ID: areaParID} + ).then((data) => { + const nodes = data.list.map(item => ({ + value: item.DICTIONARIES_ID, + label: item.NAME.toString(), + id: item.DICTIONARIES_ID.toString(), + leaf: areaLeven > 2 + })) + resolve(nodes) // 通过调用resolve将子节点数据返回,通知组件数据加载完成 + }).catch((e) => { + this.editloading = false + this.listLoading = false + }) + }, 500) + } + } + } + }, + watch: { + filterText(val) { + this.$refs.tree.filter(val) + } + }, + created() { + this.getList(this.USER_ID) + this.hasButton() + this.getDict2('0a0e406f27f74ee698fe9979d25f62dd', 'minzuList') + this.getDict2('21501808bbc344d593fbf9ccfe6c4531', 'xingbieList') + this.getDict('3e057d284c294a48af32948d58e92e3d', 'deptTypeLevenAllList') + this.getDict('3f3a6ac41247438e91df2830765068ba', 'unitTypeList') + this.getDepartTreeList() + this.getDict('f1fbdf9a286342ae98e6a56bf823f221', 'jobTypeAllList') + this.goAddUser() + this.getTreeList() + }, + methods: { + goPush(row) { + requestFN( + 'user/goPush', + { + STATUS: row.STATUS, + BZ: row.BZ, + SKIN: row.SKIN, + PHONE: row.PHONE, + NUMBER: row.NUMBER, + ISMAIN: row.ISMAIN, + OPENID: row.APPID, + SORT: row.SORT, + LEARNERCATEGORY: row.LEARNERCATEGORY, + USERAVATARPREFIX: row.USERAVATARPREFIX, + USERAVATARURL: row.USERAVATARURL, + SHIFTDUTYONE: row.SHIFTDUTYONE, + SHIFTDUTYTWO: row.SHIFTDUTYTWO, + DURATION: row.DURATION, + WORKSTATUS: row.WORKSTATUS, + WORKPERIOD: row.WORKPERIOD, + PERSONNEL_TYPE: row.PERSONNEL_TYPE, + TITLE: row.TITLE, + ISSTATE: row.ISSTATE, + INCUMBENCY: row.INCUMBENCY, + WORKING_DATE: row.WORKING_DATE, + ENTRY_DATE: row.ENTRY_DATE, + TYPE_OF_WORK: row.TYPE_OF_WORK, + DUTIES: row.DUTIES, + DEGREE_OF_EDUCATION: row.DEGREE_OF_EDUCATION, + DATE_OF_BIRTH: row.DATE_OF_BIRTH, + POLITICAL_OUTLOOK: row.POLITICAL_OUTLOOK, + PROVINCE: row.PROVINCE, + CITY: row.CITY, + COUNTRY: row.COUNTRY, + VILLAGE: row.VILLAGE, + USER_ID: row.USER_ID, + CARD_NO: row.USER_ID_CARD, + USERNAME: row.USERNAME, + NAME: row.NAME, + CORPINFO_ID: row.CORPINFO_ID, + CORPINFO_NAME: row.CORPINFO_NAME || '', + DEPARTMENT_ID: row.DEPARTMENT_ID, + DEPARTMENT_NAME: row.DEPARTMENT_NAME, + EMAIL: row.EMAIL || '', + CARD_TYPE: '111', + CARD_TYPE_NAME: '身份证', + NATION: row.NATION_NAME || '', + SEX: row.SEX === '0' ? '男' : '女', + USER_TYPE: '1', + ISDELETE: row.ISDELETE + } + ).then((data) => { + if (data.result === 'success') { + this.$message.success('推送成功') + this.getList() + } else { + this.$message.error('推送失败,' + data.msg) + } + }).catch((e) => { + this.listLoading = false + }) + }, + goCheck() { + if (this.pd.USER_ID_CARD && this.pd.USERNAME) { + const phoneJudge = /^(13[0-9]|14[579]|15[0-3,5-9]|16[6]|17[0135678]|18[0-9]|19[0-9])\d{8}$/ + const phoneResult = phoneJudge.test(this.pd.USERNAME) + const cardJudge = /^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/ + const cardResult = cardJudge.test(this.pd.USER_ID_CARD) + if (phoneResult && cardResult) { + console.log('格式校验通过') + requestFN( + 'user/goCheck', + { + CARD_NO: this.pd.USER_ID_CARD, + USERNAME: this.pd.USERNAME + } + ).then((data) => { + if (data.result === 'success') { + this.$message.success('验证通过') + this.ISCHECK = true + } else { + this.$message.error('验证失败,请确认身份证号与手机号是否正确') + this.ISCHECK = false + } + }).catch((e) => { + this.listLoading = false + this.ISCHECK = false + }) + } else { + this.ISCHECK = false + } + } else { + this.ISCHECK = false + } + }, + getList() { + this.listLoading = true + requestFN( + '/user/centerUserList?showCount=' + this.listQuery.limit + '¤tPage=' + this.listQuery.page, + { + keyUserName: this.keyUserName, + keyDeptLeven: this.keyDeptLeven, + keyShudi: this.keyShudi, + keyDeptType: this.keyDeptType, + keyDepeName: this.keyDepeName, + keyJobLeven: this.keyJobLeven, + DEPARTMENT_ID: this.DEPARTMENT_ID, + PROVINCE: this.keyShudi[0] || '', + CITY: this.keyShudi[1] || '', + COUNTRY: this.keyShudi[2] || '', + VILLAGE: this.keyShudi[3] || '', + ISPUSH: '0' + } + ).then((data) => { + this.listLoading = false + this.varList = data.userList + this.total = data.page.totalResult + }) + .catch((e) => { + this.listLoading = false + }) + }, + + goKeyReset() { + this.keyUserName = '' + this.keyDeptLeven = '' + this.keyShudi = '' + this.keyDeptType = '' + this.keyDepeName = '' + this.keyJobLeven = '' + this.getList() + if (this.$refs.refDeptLeven) { + this.$refs.refDeptLeven.clearHandle() + } + if (this.$refs.shudi) { + this.$refs.shudi.clearHandle() + } + if (this.$refs.refDeptType) { + this.$refs.refDeptType.clearHandle() + } + if (this.$refs.refJobLeven) { + this.$refs.refJobLeven.clearHandle() + } + }, + goAddUser() { // 点击添加用户的时候,获取角色 + requestFN( + '/user/goAddUser', + {} + ).then((data) => { + this.roleList = data.roleList + }) + .catch((e) => { + }) + }, + + unLockUser(id, name) { + this.$confirm('确定要解锁 [ 帐号:' + name + ' ] 吗?', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning' + }).then(() => { + this.listLoading = true + requestFN( + '/user/unLockUser', + { + USER_ID: id + } + ).then(() => { + this.$message({ + message: '解锁成功', + type: 'success' + }) + this.listLoading = false + this.varList = [] + this.listQuery.page = 1 + this.getList() + }).catch((e) => { + this.listLoading = false + }) + }).catch(() => { + }) + }, + handleAdd() { + this.dialogFormEdit = true + this.ISCHECK = false + this.pd = {} + this.dialogType = 'saveUser' + this.pd.PASSWORD = 'Aa@123456789' + }, + confirm() { + this.$refs.form.validate(valid => { + if (valid) { + this.listLoading = true + if (this.pd.ROLE_ID) { + var roleIDs = '' + this.pd.ROLE_ID.forEach((item) => { + roleIDs += item + ';' + }) + this.pd.roleIDs = roleIDs + } + if (this.pd.shudi) { + this.pd.PROVINCE = this.pd.shudi[0] + this.pd.CITY = this.pd.shudi[1] + this.pd.COUNTRY = this.pd.shudi[2] || '' + this.pd.VILLAGE = this.pd.shudi[3] || '' + } + requestFN( + '/user/' + this.dialogType, + this.pd + ).then((data) => { + this.listLoading = false + this.dialogFormEdit = false + this.varList = [] + this.$refs.deptTree.clearHandle() + this.listQuery.page = 1 + this.goPush(data.pd) + this.getList() + }).catch((e) => { + this.listLoading = false + }) + } else { + return false + } + }) + }, + handleDelete(row) { + this.$confirm('确定要删除[' + row.USERNAME + ']吗?', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning' + }).then(() => { + this.listLoading = true + requestFN( + '/user/deleteUser', + { + USER_ID: row.USER_ID, + ISPUSH: row.ISPUSH + } + ).then((data) => { + if (data.result == 'success') { + this.listLoading = false + this.getList() + } + }).catch((e) => { + this.listLoading = false + }) + }).catch(() => { + }) + }, + makeAll(msg) { + const _selectData = this.$refs.multipleTable.selection + if (_selectData == null || _selectData.length == 0) { + this.$message({ + message: '请选中要删除的项...', + type: 'error' + }) + return false + } + const ids = _selectData.map((item, index) => { + return item.USER_ID + }).join(',') + var tishi = '' + if (msg == '0') { + tishi = '确定要删除选中的数据吗?' + } else if (msg == '1') { + tishi = '确定要给选中的用户发送站内信吗?' + } else { + this.$message({ + message: '请选择操作类型...', + type: 'error' + }) + return false + } + this.$confirm(tishi, { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning' + }).then(() => { + if (msg == '0') { + this.listLoading = true + requestFN( + '/user/deleteAllUser', + { + USER_IDS: ids + } + ).then(() => { + this.listLoading = false + this.varList = [] + this.listQuery.page = 1 + this.$refs.multipleTable.clearSelection() + this.getList() + }).catch((e) => { + this.listLoading = false + }) + } + }).catch(() => { + }) + }, + getQuery() { + this.$refs.multipleTable.clearSelection() + this.getList() + }, + handleRecord(USER_ID) { + this.dialogType = 'record' + this.dialogFormRecord = true + requestFN( + '/user/getUserRecord', + { + USER_ID: USER_ID + } + ).then((data) => { + if (data.result == 'success') { + this.recordList = data.varList + } + }) + .catch((e) => { + this.listLoading = false + }) + }, + async handleEdit(row) { + this.dialogType = 'editUser' + this.pd = JSON.parse(JSON.stringify(row)) + const areaRefID = [] + if (this.pd.PROVINCE) { + areaRefID.push(this.pd.PROVINCE) + } + if (this.pd.CITY) { + areaRefID.push(this.pd.CITY) + } + if (this.pd.COUNTRY) { + areaRefID.push(this.pd.COUNTRY) + } + if (this.pd.VILLAGE) { + areaRefID.push(this.pd.VILLAGE) + } + this.$set(this.pd, 'shudi', areaRefID) + + const refDeptLevelVal = {} + refDeptLevelVal.id = this.pd.deptLevenlID + const deptRefsValue = {} + deptRefsValue.id = this.pd.DEPARTMENT_ID + var arrString = [] + if (this.pd.ROLE_ID != null && this.pd.ROLE_ID != '') { + arrString.push(this.pd.ROLE_ID) + } + if (this.pd.ROLE_IDS != null && this.pd.ROLE_IDS != '' && this.pd.ROLE_IDS != undefined && this.pd.ROLE_IDS != 'undefined') { + // 将字符串转换成数组,此时是字符串数组 + this.pd.ROLE_IDS = this.pd.ROLE_IDS.substring(0, this.pd.ROLE_IDS.length - 1) + var arrList = this.pd.ROLE_IDS && this.pd.ROLE_IDS != '' ? this.pd.ROLE_IDS.split(';') : '' + // eslint-disable-next-line no-unused-vars + for (const item1 of arrList) { // 循环取出多个角色的ID + arrString.push(item1) + } + } + this.pd.ROLE_ID = arrString + this.dialogFormEdit = true + await this.$nextTick() + }, + handleEditStatus(row, type) { + const typeName = type == '1' ? '禁用' : '启用' + this.$confirm('确定要' + typeName + '[' + row.USERNAME + ']吗?', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning' + }).then(() => { + this.listLoading = true + requestFN( + '/user/updateUserStatus', + { + USER_ID: row.USER_ID, + status: type + } + ).then((data) => { + if (data.result == 'success') { + this.listLoading = false + this.goPush(row) + this.getList() + } + }).catch((e) => { + this.listLoading = false + }) + }).catch(() => { + }) + }, + hasButton: function () { + var keys = 'user:add,user:del,user:edit,fhSms,email,fromExcel,toExcel' + requestFN( + '/head/hasButton', + { + keys: keys, tm: new Date().getTime() + } + ).then((data) => { + if (data.result == 'success') { + this.add = data.userfhadminadd // 增 + this.del = data.userfhadmindel // 删 + this.edit = data.userfhadminedit // 改 + this.fromExcel = data.fromExcel // 从excel导入权限 + this.toExcel = data.toExcel // 导出到excel权限 + } else if (data.result == 'exception') { + // showException('按钮权限', data.exception)// 显示异常 + } + }) + .catch((e) => { + this.listLoading = false + }) + }, + // 获取数据字典数据 + getDict(dicID, listName) { + requestFN( + 'dictionaries/getLevels', + {DICTIONARIES_ID: dicID} + ).then((data) => { + this[listName] = data.list + }).catch((e) => { + this.listLoading = false + }) + }, + // 获取数据字典数据 + getDict2(dicID, listName) { + requestFN( + 'dictionaries/getLevels', + {DICTIONARIES_ID: dicID} + ).then((data) => { + this.uesrInfoDic[listName] = data.list + }).catch((e) => { + this.listLoading = false + }) + }, + getDepartTreeList() { + this.pd.DEPARTMENT_ID = '' + if (this.$refs.deptTree) { + this.$refs.deptTree.clearHandle() + } + return new Promise((resolve) => { + requestFN( + '/department/listTreeByType' + ).then((data) => { + this.deptTreeData = JSON.parse(data.zTreeNodes) + resolve() + }).catch((e) => { + }) + }) + }, + resetPwd(id, name) { + this.$confirm('是否重置密码为Aa@123456789?', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning' + }).then(() => { + this.listLoading = true + requestFN( + '/user/resetPwd', + { + USER_ID: id + } + ).then(() => { + this.$message({ + message: '重置成功', + type: 'success' + }) + this.listLoading = false + this.varList = [] + this.listQuery.page = 1 + this.getList() + }).catch((e) => { + this.listLoading = false + }) + }).catch(() => { + }) + }, + filterNode(value, data) { + if (!value) return true + return data.name.indexOf(value) !== -1 + }, + handleNodeClick(node, data, value) { + this.DEPARTMENT_ID = node.id + this.getList() + }, + /*resetPassword() { + this.$confirm('一键重置密码,会将所有未修改过密码的用户进行密码重置重置,是否继续?', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning' + }).then(() => { + this.listLoading = true + requestFN( + '/user/resetPwdAll', + {} + ).then(() => { + this.$message({ + message: '重置成功', + type: 'success' + }) + this.listLoading = false + this.varList = [] + this.listQuery.page = 1 + this.getList() + }).catch((e) => { + this.listLoading = false + }) + }).catch(() => { + }) + },*/ + getTreeList() { + this.treeLoading = true + requestFN( + '/department/listTree', + {} + ).then((data) => { + this.treeLoading = false + this.treeData = JSON.parse(data.zTreeNodes) + }).catch((e) => { + this.treeLoading = false + }) + }, + } +} +</script> + diff --git a/src/views/system/group/user/index.vue b/src/views/system/group/user/index.vue index 528d6b4..5390f70 100644 --- a/src/views/system/group/user/index.vue +++ b/src/views/system/group/user/index.vue @@ -78,7 +78,7 @@ <span v-if="row.STATUS =='1'">禁用</span> </template> </el-table-column> - <el-table-column label="操作" align="center" width="400"> + <el-table-column label="操作" align="center" width="500"> <template slot-scope="{row}"> <el-button v-show="edit" type="primary" icon="el-icon-edit" size="mini" @click="handleEdit(row)">编辑</el-button> <el-button v-show="edit" type="success" icon="el-icon-view" size="mini" @click="resetPwd(row.USER_ID)">重置密码</el-button> @@ -86,6 +86,7 @@ <el-button v-show="row.STATUS== 0" type="primary" icon="el-icon-edit" size="mini" @click="handleEditStatus(row,'1', row.USER_ID)">禁用</el-button> <el-button v-show="row.STATUS== 1" type="primary" icon="el-icon-edit" size="mini" @click="handleEditStatus(row,'0', row.USER_ID)">启用</el-button> <el-button v-show="del" type="danger" icon="el-icon-delete" size="mini" @click="handleDelete(row.USER_ID,row.USERNAME)">删除</el-button> + <el-button v-if="row.ISPUSH == '0'" type="primary" icon="el-icon-position" size="mini" @click="goPush(row)">推送</el-button> </template> </el-table-column> </el-table> @@ -108,13 +109,16 @@ </el-select> </el-form-item> <el-form-item label="用户名" prop="USERNAME"> - <el-input v-model="pd.USERNAME" :disabled="dialogType == 'editUser'" placeholder="这里输入用户名..." /> + <el-input v-model="pd.USERNAME" :disabled="dialogType == 'editUser'" placeholder="这里输入用户名..." @blur="goCheck()"/> </el-form-item> <el-form-item label="姓名" prop="NAME"> <el-input v-model="pd.NAME" placeholder="这里输入姓名..." /> </el-form-item> - <el-form-item v-if="dialogType != 'editUser'" label="密码" prop="PASSWORD"> - <el-input v-model="pd.userPASSWORD" show-password placeholder="这里输入密码..." /> +<!-- <el-form-item v-if="dialogType != 'editUser'" label="密码" prop="PASSWORD">--> +<!-- <el-input v-model="pd.userPASSWORD" show-password placeholder="这里输入密码..." />--> +<!-- </el-form-item>--> + <el-form-item label="身份证号" prop="USER_ID_CARD"> + <el-input v-model="pd.USER_ID_CARD" placeholder="这里输入身份证号..." @blur="goCheck()"/> </el-form-item> <el-form-item label="性别" prop="SEX"> <el-radio v-model="pd.SEX" :label="'0'">男</el-radio> @@ -147,6 +151,15 @@ <el-option v-for="item in deptTypeLevenAllList" :key="item.BIANMA" :label="item.NAME" :value="item.DICTIONARIES_ID" /> </el-select> </el-form-item> + <el-form-item label="民族" prop="NATION"> + <el-select v-model="pd.NATION" placeholder="请选择" style="width: 100%;"> + <el-option + v-for="item in uesrInfoDic.minzuList" + :key="item.DICTIONARIES_ID" + :label="item.NAME" + :value="item.DICTIONARIES_ID"/> + </el-select> + </el-form-item> <!-- 相关方的业务需求,是否为审核人员.如果为是的情况,就是可以在入场培训中选择 --> <el-form-item label="是否审核人员" prop="ISASSESS"> <el-radio v-model="pd.ISASSESS" :label="'1'">是</el-radio> @@ -167,7 +180,8 @@ </el-form> <div slot="footer" class="dialog-footer"> <el-button @click="dialogFormEdit = false">取 消</el-button> - <el-button type="primary" @click="confirm">确 定</el-button> + <el-button v-show="ISCHECK" type="primary" @click="confirm">确 定</el-button> + <el-button v-show="!ISCHECK" type="primary" @click="goCheck">校 验</el-button> </div> </el-dialog> </div> @@ -245,12 +259,13 @@ export default { keyDeptType: '', keyDepeName: '', keyJobLeven: '', + ISCHECK: false, dialogFormEdit: false, editloading: false, dialogType: 'add', rules: { EMAIL: [ - { required: false, message: '请输入邮箱', trigger: 'blur' }, + { required: true, message: '请输入邮箱', trigger: 'blur' }, { pattern: /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(.[a-zA-Z0-9_-])+/, message: '请输入正确的邮箱' @@ -262,7 +277,10 @@ export default { ], USERNAME: [ { required: true, message: '用户名不能为空', trigger: 'blur' }, - { min: 2, max: 30, message: '长度在 2 到 30 个字符', trigger: 'blur' }, + { + pattern: /^(13[0-9]|14[579]|15[0-3,5-9]|16[6]|17[0135678]|18[0-9]|19[89])\d{8}$/, + message: '用户名需使用手机号码格式' + }, { validator: hasUser, trigger: 'blur' } ], NAME: [ @@ -272,6 +290,9 @@ export default { SEX: [ { required: true, message: '请选择性别', trigger: 'blur' } ], + NATION: [ + { required: true, message: '请选择民族', trigger: 'blur' } + ], PHONE: [ { required: true, message: '手机号不能为空', trigger: 'blur' }, { min: 11, max: 11, message: '请输入11位手机号码', trigger: 'blur' }, @@ -294,9 +315,20 @@ export default { ], ISASSESS: [ { required: true, message: '请选择是否审核人员', trigger: 'blur' } + ], + USER_ID_CARD: [{ required: true, message: '身份证号不能为空', trigger: 'blur' }, + { + pattern: /^\d{6}(18|19|20)?\d{2}(0[1-9]|1[0-2])(([0-2][1-9])|10|20|30|31)\d{3}(\d|X|x)$/, + message: '请输入正确的身份证号' + } ] }, + uesrInfoDic: { + minzuList: [], // 民族 0a0e406f27f74ee698fe9979d25f62dd + xingbieList: [], // 性别情况 21501808bbc344d593fbf9ccfe6c4531 + }, pd: { + USER_ID: '', ROLE_ID: [], // 角色ID USERNAME: '', // 用户名 NAME: '', // 姓名 @@ -315,7 +347,9 @@ export default { VILLAGE: '', // 所属乡镇 JOB_LEVEL: '', // 职务级别 ISASSESS: '', - JOB: ''// 职务 + JOB: '', // 职务 + USER_ID_CARD: '', //身份证号 + NATION: '' //民族 }, roleList: [], multipleSelectionAll: [], // 所有选中的数据包含跨页数据 @@ -374,6 +408,8 @@ export default { created() { this.getList() this.hasButton() + this.getDict2('0a0e406f27f74ee698fe9979d25f62dd', 'minzuList') + this.getDict2('21501808bbc344d593fbf9ccfe6c4531', 'xingbieList') this.getDict('3e057d284c294a48af32948d58e92e3d', 'deptTypeLevenAllList') this.getDict('3f3a6ac41247438e91df2830765068ba', 'unitTypeList') this.getDepartTreeList() @@ -382,6 +418,103 @@ export default { this.getTreeList() }, methods: { + goPush(row) { + requestFN( + 'user/goPush', + { + STATUS: row.STATUS, + BZ: row.BZ, + SKIN: row.SKIN, + PHONE: row.PHONE, + NUMBER: row.NUMBER, + ISMAIN: row.ISMAIN, + OPENID: row.APPID, + SORT: row.SORT, + LEARNERCATEGORY: row.LEARNERCATEGORY, + USERAVATARPREFIX: row.USERAVATARPREFIX, + USERAVATARURL: row.USERAVATARURL, + SHIFTDUTYONE: row.SHIFTDUTYONE, + SHIFTDUTYTWO: row.SHIFTDUTYTWO, + DURATION: row.DURATION, + WORKSTATUS: row.WORKSTATUS, + WORKPERIOD: row.WORKPERIOD, + PERSONNEL_TYPE: row.PERSONNEL_TYPE, + TITLE: row.TITLE, + ISSTATE: row.ISSTATE, + INCUMBENCY: row.INCUMBENCY, + WORKING_DATE: row.WORKING_DATE, + ENTRY_DATE: row.ENTRY_DATE, + TYPE_OF_WORK: row.TYPE_OF_WORK, + DUTIES: row.DUTIES, + DEGREE_OF_EDUCATION: row.DEGREE_OF_EDUCATION, + DATE_OF_BIRTH: row.DATE_OF_BIRTH, + POLITICAL_OUTLOOK: row.POLITICAL_OUTLOOK, + PROVINCE: row.PROVINCE, + CITY: row.CITY, + COUNTRY: row.COUNTRY, + VILLAGE: row.VILLAGE, + USER_ID: row.USER_ID, + CARD_NO: row.USER_ID_CARD, + USERNAME: row.USERNAME, + NAME: row.NAME, + CORPINFO_ID: row.CORPINFO_ID, + CORPINFO_NAME: row.CORPINFO_NAME || '', + DEPARTMENT_ID: row.DEPARTMENT_ID, + DEPARTMENT_NAME: row.DEPARTMENT_NAME, + EMAIL: row.EMAIL || '', + CARD_TYPE: '111', + CARD_TYPE_NAME: '身份证', + NATION: row.NATION_NAME || '', + SEX: row.SEX === '0' ? '男' : '女', + USER_TYPE: '1', + ISDELETE: row.ISDELETE + } + ).then((data) => { + if (data.result === 'success') { + this.$message.success('推送成功') + this.getList() + } else { + this.$message.error('推送失败,' + data.msg) + this.getList() + } + }).catch((e) => { + this.listLoading = false + }) + }, + goCheck() { + if (this.pd.USER_ID_CARD && this.pd.USERNAME) { + const phoneJudge = /^(13[0-9]|14[579]|15[0-3,5-9]|16[6]|17[0135678]|18[0-9]|19[0-9])\d{8}$/ + const phoneResult = phoneJudge.test(this.pd.USERNAME) + const cardJudge = /^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/ + const cardResult = cardJudge.test(this.pd.USER_ID_CARD) + if (phoneResult && cardResult) { + console.log('格式校验通过') + requestFN( + 'user/goCheck', + { + CARD_NO: this.pd.USER_ID_CARD, + USERNAME: this.pd.USERNAME, + USER_ID: this.pd.USER_ID || '' + } + ).then((data) => { + if (data.result === 'success') { + this.$message.success('验证通过') + this.ISCHECK = true + } else { + this.$message.error('验证失败,请确认身份证号与手机号是否正确') + this.ISCHECK = false + } + }).catch((e) => { + this.listLoading = false + this.ISCHECK = false + }) + } else { + this.ISCHECK = false + } + } else { + this.ISCHECK = false + } + }, getList() { this.listLoading = true requestFN( @@ -397,7 +530,8 @@ export default { PROVINCE: this.keyShudi[0] || '', CITY: this.keyShudi[1] || '', COUNTRY: this.keyShudi[2] || '', - VILLAGE: this.keyShudi[3] || '' + VILLAGE: this.keyShudi[3] || '', + ISPUSH: '1' } ).then((data) => { this.listLoading = false @@ -471,6 +605,7 @@ export default { }, handleAdd() { this.dialogFormEdit = true + this.ISCHECK = false this.pd = {} this.dialogType = 'saveUser' this.pd.PASSWORD = 'Aa@123456789' @@ -501,7 +636,7 @@ export default { this.varList = [] this.$refs.deptTree.clearHandle() this.listQuery.page = 1 - this.getList() + this.goPush(data.pd) }).catch((e) => { this.listLoading = false }) @@ -643,6 +778,7 @@ export default { ).then((data) => { if (data.result == 'success') { this.listLoading = false + this.goPush(row) this.getList() } }).catch((e) => { @@ -684,6 +820,17 @@ export default { this.listLoading = false }) }, + // 获取数据字典数据 + getDict2(dicID, listName) { + requestFN( + 'dictionaries/getLevels', + { DICTIONARIES_ID: dicID } + ).then((data) => { + this.uesrInfoDic[listName] = data.list + }).catch((e) => { + this.listLoading = false + }) + }, getDepartTreeList() { this.pd.DEPARTMENT_ID = '' if (this.$refs.deptTree) { diff --git a/src/views/system/group/userCenter/index.vue b/src/views/system/group/userCenter/index.vue new file mode 100644 index 0000000..06394eb --- /dev/null +++ b/src/views/system/group/userCenter/index.vue @@ -0,0 +1,924 @@ +<template> + <div class="app-container"> + <el-container> + <el-aside width="300px" style="background-color:#fff"> + <el-input + v-model="filterText" + placeholder="输入关键字进行过滤" + style="margin:10px 0"/> + <el-tree + v-loading="treeLoading" + ref="tree" + :data="treeData" + :props="defaultProps" + :filter-node-method="filterNode" + class="filter-tree" + @node-click="handleNodeClick"/> + </el-aside> + <el-main> + <div class="filter-container"> + <div class="filter-lable w80">用户名称:</div> + <el-input v-model="keyUserName" clearable placeholder="搜索用户名" class="filter-item" style="width: 200px;"/> + <div class="filter-lable w80">职务级别:</div> + <el-select ref="refDeptLeven" v-model="keyJobLeven" clearable placeholder="请选择部门级别" class="filter-item" style="width: 200px;" > + <el-option v-for="item in deptTypeLevenAllList" :key="item.BIANMA" :label="item.NAME" :value="item.DICTIONARIES_ID" /> + </el-select> + <!-- <div class="filter-lable w80">行政区域:</div>--> + <!-- <el-cascader ref="shudi" v-model="keyShudi" :props="areaprops" clearable placeholder="请选择行政区域" style="width: 200px" />--> + <!-- <div class="filter-lable w80">单位类型:</div>--> + <!-- <el-select ref="refDeptType" v-model="keyDeptType" clearable placeholder="请选择单位类型" class="filter-item">--> + <!-- <el-option v-for="item in unitTypeList" :key="item.DICTIONARIES_ID" :label="item.NAME" :value="item.DICTIONARIES_ID" />--> + <!-- </el-select>--> + <div class="filter-lable w80">部门名称:</div> + <el-input v-model="keyDepeName" clearable placeholder="搜索部门名称" class="filter-item" style="width: 200px;"/> + <!-- <div class="filter-lable w80">职务级别:</div>--> + <!-- <el-select ref="refJobLeven" v-model="keyJobLeven" clearable placeholder="请选择" class="filter-item">--> + <!-- <el-option v-for="item in jobTypeAllList" :key="item.DICTIONARIES_ID" :label="item.NAME" :value="item.DICTIONARIES_ID" />--> + <!-- </el-select>--> + <el-button v-waves class="filter-item" type="primary" icon="el-icon-search" @click="getQuery"> + 搜索 + </el-button> + <el-button v-waves class="filter-item" type="success" icon="el-icon-refresh" @click="goKeyReset"> + 重置 + </el-button> + <el-button v-waves v-if="LOGIN_USER === '1'" class="filter-item" type="warning" icon="el-icon-warning" size="mini" plain @click="resetPassword"> + 一键密码重置 + </el-button> + </div> + <el-table + ref="multipleTable" + :data="varList" + :header-cell-style="{ + 'font-weight': 'bold', + 'color': '#000' + }" + tooltip-effect="dark" + border + fit + highlight-current-row + > + <el-table-column + type="selection" + width="55" + align="center"/> + <el-table-column type="index" label="序号" width="50" align="center" /> + <el-table-column prop="USERNAME" label="用户名" /> + <el-table-column prop="NAME" label="姓名" /> + <el-table-column prop="SEX" label="性别"> + <template slot-scope="{row}"> + <span v-if="row.SEX =='0'">男</span> + <span v-if="row.SEX =='1'">女</span> + </template> + </el-table-column> + <el-table-column prop="DEPARTMENT_NAME" label="部门" /> + <el-table-column prop="jobLevenName" label="职务级别" /> + <el-table-column prop="STATUS" label="状态" > + <template slot-scope="{row}"> + <span v-if="row.STATUS =='0'">启用</span> + <span v-if="row.STATUS =='1'">禁用</span> + </template> + </el-table-column> + <el-table-column label="操作" align="center" width="500"> + <template slot-scope="{row}"> + <el-button v-show="edit" type="primary" icon="el-icon-edit" size="mini" @click="handleEdit(row)">编辑</el-button> + <el-button v-show="edit" type="success" icon="el-icon-view" size="mini" @click="resetPwd(row.USER_ID)">重置密码</el-button> + <el-button v-show="edit && row.STATUS === '99'" type="warning" icon="el-icon-unlock" size="mini" @click="unLockUser(row.USER_ID, row.NAME)">帐号解锁</el-button> + <el-button v-show="row.STATUS== 0" type="primary" icon="el-icon-edit" size="mini" @click="handleEditStatus(row,'1', row.USER_ID)">禁用</el-button> + <el-button v-show="row.STATUS== 1" type="primary" icon="el-icon-edit" size="mini" @click="handleEditStatus(row,'0', row.USER_ID)">启用</el-button> + <el-button v-show="del" type="danger" icon="el-icon-delete" size="mini" @click="handleDelete(row)">删除</el-button> + <el-button v-if="row.ISPUSH != '1'" type="primary" icon="el-icon-position" size="mini" @click="goPush(row)">推送</el-button> + </template> + </el-table-column> + </el-table> + <div class="page-btn-group"> + <div> + <template > + <el-button v-show="add" type="primary" icon="el-icon-plus" @click="handleAdd">新增</el-button> + <el-button v-show="del" type="danger" icon="el-icon-delete" plain @click="makeAll('0')">删除</el-button> + </template> + </div> + <pagination :total="total" :page.sync="listQuery.page" :limit.sync="listQuery.limit" @pagination="getList" /> + </div> + </el-main> + </el-container> + <el-dialog v-loading="editloading" :visible.sync="dialogFormEdit" :title="dialogType==='editUser'?'修改':'新增'" width="600px"> + <el-form ref="form" :rules="rules" :model="pd" label-width="110px" style="width: 500px;"> + <el-form-item label="角色" prop="ROLE_ID"> + <el-select v-model="pd.ROLE_ID" multiple placeholder="请选择角色"> + <el-option v-for="item in roleList" :key="item.role_ID" :label="item.role_NAME" :value="item.role_ID" /> + </el-select> + </el-form-item> + <el-form-item label="用户名" prop="USERNAME"> + <el-input v-model="pd.USERNAME" :disabled="dialogType == 'editUser'" placeholder="这里输入用户名..." @blur="goCheck()"/> + </el-form-item> + <el-form-item label="姓名" prop="NAME"> + <el-input v-model="pd.NAME" placeholder="这里输入姓名..." /> + </el-form-item> + <el-form-item v-if="dialogType != 'editUser'" label="密码" prop="PASSWORD"> + <el-input v-model="pd.userPASSWORD" show-password placeholder="这里输入密码..." /> + </el-form-item> + <el-form-item label="身份证号" prop="USER_ID_CARD"> + <el-input v-model="pd.USER_ID_CARD" placeholder="这里输入身份证号..." @blur="goCheck()"/> + </el-form-item> + <el-form-item label="性别" prop="SEX"> + <el-radio v-model="pd.SEX" :label="'0'">男</el-radio> + <el-radio v-model="pd.SEX" :label="'1'">女</el-radio> + </el-form-item> + <el-form-item label="手机号" prop="PHONE"> + <el-input v-model="pd.PHONE" placeholder="这里输入手机号..." /> + </el-form-item> + <!-- <el-form-item label="部门级别" prop="deptTypeID"> <!–(目的是选择部门到这个级别) –>--> + <!-- <el-select v-model="pd.deptTypeID" placeholder="请选择" class="filter-item" >--> + <!-- <el-option v-for="item in deptTypeLevenAllList" :key="item.BIANMA" :label="item.NAME" :value="item.DICTIONARIES_ID" />--> + <!-- </el-select>--> + <!-- </el-form-item>--> + <el-form-item label="单位部门" prop="DEPARTMENT_ID"> + <SelectTree + v-if="dialogFormEdit" + ref="deptTree" + :clearable="false" + :options="deptTreeData" + :props="deptDefaultProps" + v-model="pd.DEPARTMENT_ID" + placeholder="请选择部门" + /> + </el-form-item> + <el-form-item label="行政区域" prop="shudi"> <!--河北省的就可以 --> + <el-cascader v-if="dialogFormEdit" id="shudi" ref="shudi" v-model="pd.shudi" :props="areaprops" placeholder="请选择省市县" style="width: 100%" /> + </el-form-item> + <el-form-item label="职务级别" prop="JOB_LEVEL"> + <el-select ref="refJobLevel" v-model="pd.JOB_LEVEL" placeholder="请选择" class="filter-item"> + <el-option v-for="item in deptTypeLevenAllList" :key="item.BIANMA" :label="item.NAME" :value="item.DICTIONARIES_ID" /> + </el-select> + </el-form-item> + <el-form-item label="民族" prop="NATION"> + <el-select v-model="pd.NATION" placeholder="请选择" style="width: 100%;"> + <el-option + v-for="item in uesrInfoDic.minzuList" + :key="item.DICTIONARIES_ID" + :label="item.NAME" + :value="item.DICTIONARIES_ID"/> + </el-select> + </el-form-item> + <!-- 相关方的业务需求,是否为审核人员.如果为是的情况,就是可以在入场培训中选择 --> + <el-form-item label="是否审核人员" prop="ISASSESS"> + <el-radio v-model="pd.ISASSESS" :label="'1'">是</el-radio> + <el-radio v-model="pd.ISASSESS" :label="'0'">否</el-radio> + </el-form-item> + <el-form-item label="职务" prop="JOB"> + <el-input v-model="pd.JOB" placeholder="这里输入职务..." /> + </el-form-item> + <el-form-item label="邮箱" prop="EMAIL"> + <el-input v-model="pd.EMAIL" placeholder="这里输入邮箱..." /> + </el-form-item> + <el-form-item label="排序" prop="SORT"> + <el-input v-model.number="pd.SORT" placeholder="这里输入排序..." /> + </el-form-item> + <el-form-item label="备注"> + <el-input v-model="pd.BZ" type="textarea" placeholder="这里输入备注说明..." /> + </el-form-item> + </el-form> + <div slot="footer" class="dialog-footer"> + <el-button @click="dialogFormEdit = false">取 消</el-button> + <el-button v-show="ISCHECK" type="primary" @click="confirm">确 定</el-button> + <el-button v-show="!ISCHECK" type="primary" @click="goCheck">校 验</el-button> + </div> + </el-dialog> + </div> +</template> + +<script> +import Pagination from '@/components/Pagination' // 通过 el-pagination二次打包 +import { requestFN } from '@/utils/request' +import waves from '@/directive/waves' // waves directive +import SelectTree from '@/components/SelectTree' +export default { + components: { Pagination, SelectTree }, + directives: { waves }, + data() { + var hasUser = (rule, value, callback) => { + if (this.dialogType != 'editUser') { + requestFN( + '/user/hasUser', + { + USERNAME: value, + tm: new Date().getTime() + } + ).then((data) => { + if (data.result == 'success') { + callback() + } else { + callback(new Error('用户名重复')) + } + }).catch((e) => { + + }) + } else { + callback() + } + } + var hasEmail = (rule, value, callback) => { + if (value) { + requestFN( + '/user/hasEmail', + { + EMAIL: value, + USERNAME: this.pd.USERNAME + } + ).then((data) => { + if (data.result == 'success') { + callback() + } else { + callback(new Error('邮箱重复')) + } + }).catch((e) => { + + }) + } else { + callback() + } + } + return { + LOGIN_USER: JSON.parse(sessionStorage.getItem('user')).USER_ID, + treeLoading: false, + treeData: [], + defaultProps: { + children: 'nodes', + label: 'name' + }, + listQuery: { + page: 1, + limit: 20 + }, + total: 0, + varList: [], + filterText: '', + keyUserName: '', + keyDeptLeven: '', + keyShudi: '', + keyDeptType: '', + keyDepeName: '', + keyJobLeven: '', + ISCHECK: false, + dialogFormEdit: false, + editloading: false, + dialogType: 'add', + rules: { + EMAIL: [ + { required: true, message: '请输入邮箱', trigger: 'blur' }, + { + pattern: /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(.[a-zA-Z0-9_-])+/, + message: '请输入正确的邮箱' + }, + { validator: hasEmail, trigger: 'blur' } + ], + ROLE_ID: [ + { required: true, message: '角色不能为空', trigger: 'blur' } + ], + USERNAME: [ + { required: true, message: '用户名不能为空', trigger: 'blur' }, + { + pattern: /^(13[0-9]|14[579]|15[0-3,5-9]|16[6]|17[0135678]|18[0-9]|19[89])\d{8}$/, + message: '用户名需使用手机号码格式' + }, + { validator: hasUser, trigger: 'blur' } + ], + NAME: [ + { required: true, message: '姓名不能为空', trigger: 'blur' }, + { min: 2, max: 30, message: '长度在 2 到 30 个字符', trigger: 'blur' } + ], + SEX: [ + { required: true, message: '请选择性别', trigger: 'blur' } + ], + NATION: [ + { required: true, message: '请选择民族', trigger: 'blur' } + ], + PHONE: [ + { required: true, message: '手机号不能为空', trigger: 'blur' }, + { min: 11, max: 11, message: '请输入11位手机号码', trigger: 'blur' }, + { + pattern: /^(13[0-9]|14[579]|15[0-3,5-9]|16[6]|17[0135678]|18[0-9]|19[89])\d{8}$/, + message: '请输入正确的手机号码' + } + ], + deptTypeID: [ + { required: true, message: '请选择部门级别', trigger: 'blur' } + ], + shudi: [ + { required: true, message: '请选择属地', trigger: 'blur' } + ], + JOB_LEVEL: [ + { required: true, message: '请选择职务级别', trigger: 'blur' } + ], + DEPARTMENT_ID: [ + { required: true, message: '请选择单位部门', trigger: 'blur' } + ], + ISASSESS: [ + { required: true, message: '请选择是否审核人员', trigger: 'blur' } + ], + USER_ID_CARD: [{ required: true, message: '身份证号不能为空', trigger: 'blur' }, + { + pattern: /^\d{6}(18|19|20)?\d{2}(0[1-9]|1[0-2])(([0-2][1-9])|10|20|30|31)\d{3}(\d|X|x)$/, + message: '请输入正确的身份证号' + } + ] + }, + uesrInfoDic: { + minzuList: [], // 民族 0a0e406f27f74ee698fe9979d25f62dd + xingbieList: [], // 性别情况 21501808bbc344d593fbf9ccfe6c4531 + }, + pd: { + ROLE_ID: [], // 角色ID + USERNAME: '', // 用户名 + NAME: '', // 姓名 + userPASSWORD: 'Aa@123456789', // 密码 + SEX: '', // 性别(0男,1女) + PHONE: '', // 电话 + deptTypeID: '', // 需要选择的部门级别,只有相等的时候可以 + DEPARTMENT_ID: '', // 用户部门 + shudi: '', + BZ: '', // 备注 + EMAIL: '', // 邮箱 + SORT: '', // 人员在部门中的排序 + PROVINCE: '', // 所属省 + CITY: '', // 所属市级 + COUNTRY: '', // 所属区县 + VILLAGE: '', // 所属乡镇 + JOB_LEVEL: '', // 职务级别 + ISASSESS: '', + JOB: '', // 职务 + USER_ID_CARD: '', //身份证号 + NATION: '' //民族 + }, + roleList: [], + multipleSelectionAll: [], // 所有选中的数据包含跨页数据 + multipleSelection: [], // 当前页选中的数据 + fromExcel: false, // 从excel导入权限 + toExcel: false, // 导出到excel权限 + add: false, // 新增按钮 + del: false, // 删除按钮 + edit: false, // 修改按钮 + hasUserRet: false, + deptTypeLevenAllList: [], // 单位类型 + jobTypeAllList: [], // 职务级别 + deptTreeData: [], // 部门树数据, + deptDefaultProps: { + value: 'id', + children: 'nodes', + label: 'name' + }, + unitTypeList: [], + areaprops: { + lazy: true, + lazyLoad(node, resolve) { + setTimeout(() => { + const areaLeven = node.level + var areaParID = '' + if (areaLeven == '0') { + areaParID = 'e725d2a91b8248f4b8f49889038df7de' + } else { + areaParID = node.data.id + } + requestFN( + 'dictionaries/getLevels', + { DICTIONARIES_ID: areaParID } + ).then((data) => { + const nodes = data.list.map(item => ({ + value: item.DICTIONARIES_ID, + label: item.NAME.toString(), + id: item.DICTIONARIES_ID.toString(), + leaf: areaLeven > 2 + })) + resolve(nodes) // 通过调用resolve将子节点数据返回,通知组件数据加载完成 + }).catch((e) => { + this.editloading = false + this.listLoading = false + }) + }, 500) + } + } + } + }, + watch: { + filterText(val) { + this.$refs.tree.filter(val) + } + }, + created() { + this.getList() + this.hasButton() + this.getDict2('0a0e406f27f74ee698fe9979d25f62dd', 'minzuList') + this.getDict2('21501808bbc344d593fbf9ccfe6c4531', 'xingbieList') + this.getDict('3e057d284c294a48af32948d58e92e3d', 'deptTypeLevenAllList') + this.getDict('3f3a6ac41247438e91df2830765068ba', 'unitTypeList') + this.getDepartTreeList() + this.getDict('f1fbdf9a286342ae98e6a56bf823f221', 'jobTypeAllList') + this.goAddUser() + this.getTreeList() + }, + methods: { + goPush(row) { + requestFN( + 'user/goPush', + { + STATUS: row.STATUS, + BZ: row.BZ, + SKIN: row.SKIN, + PHONE: row.PHONE, + NUMBER: row.NUMBER, + ISMAIN: row.ISMAIN, + OPENID: row.APPID, + SORT: row.SORT, + LEARNERCATEGORY: row.LEARNERCATEGORY, + USERAVATARPREFIX: row.USERAVATARPREFIX, + USERAVATARURL: row.USERAVATARURL, + SHIFTDUTYONE: row.SHIFTDUTYONE, + SHIFTDUTYTWO: row.SHIFTDUTYTWO, + DURATION: row.DURATION, + WORKSTATUS: row.WORKSTATUS, + WORKPERIOD: row.WORKPERIOD, + PERSONNEL_TYPE: row.PERSONNEL_TYPE, + TITLE: row.TITLE, + ISSTATE: row.ISSTATE, + INCUMBENCY: row.INCUMBENCY, + WORKING_DATE: row.WORKING_DATE, + ENTRY_DATE: row.ENTRY_DATE, + TYPE_OF_WORK: row.TYPE_OF_WORK, + DUTIES: row.DUTIES, + DEGREE_OF_EDUCATION: row.DEGREE_OF_EDUCATION, + DATE_OF_BIRTH: row.DATE_OF_BIRTH, + POLITICAL_OUTLOOK: row.POLITICAL_OUTLOOK, + PROVINCE: row.PROVINCE, + CITY: row.CITY, + COUNTRY: row.COUNTRY, + VILLAGE: row.VILLAGE, + USER_ID: row.USER_ID, + CARD_NO: row.USER_ID_CARD, + USERNAME: row.USERNAME, + NAME: row.NAME, + CORPINFO_ID: row.CORPINFO_ID, + CORPINFO_NAME: row.CORPINFO_NAME || '', + DEPARTMENT_ID: row.DEPARTMENT_ID, + DEPARTMENT_NAME: row.DEPARTMENT_NAME, + EMAIL: row.EMAIL || '', + CARD_TYPE: '111', + CARD_TYPE_NAME: '身份证', + NATION: row.NATION_NAME || '', + SEX: row.SEX === '0' ? '男' : '女', + USER_TYPE: '1', + ISDELETE: row.ISDELETE != null ? row.ISDELETE : "0" + } + ).then((data) => { + if (data.result === 'success') { + this.$message.success('推送成功') + this.getList() + } else { + this.$message.error('推送失败,' + data.msg) + } + }).catch((e) => { + this.listLoading = false + }) + }, + goCheck() { + if (this.pd.USER_ID_CARD && this.pd.USERNAME) { + const phoneJudge = /^(13[0-9]|14[579]|15[0-3,5-9]|16[6]|17[0135678]|18[0-9]|19[0-9])\d{8}$/ + const phoneResult = phoneJudge.test(this.pd.USERNAME) + const cardJudge = /^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/ + const cardResult = cardJudge.test(this.pd.USER_ID_CARD) + if (phoneResult && cardResult) { + console.log('格式校验通过') + requestFN( + 'user/goCheck', + { + CARD_NO: this.pd.USER_ID_CARD, + USERNAME: this.pd.USERNAME + } + ).then((data) => { + if (data.result === 'success') { + this.$message.success('验证通过') + this.ISCHECK = true + } else { + this.$message.error('验证失败,请确认身份证号与手机号是否正确') + this.ISCHECK = false + } + }).catch((e) => { + this.listLoading = false + this.ISCHECK = false + }) + } else { + this.ISCHECK = false + } + } else { + this.ISCHECK = false + } + }, + getList() { + this.listLoading = true + requestFN( + '/user/list?showCount=' + this.listQuery.limit + '¤tPage=' + this.listQuery.page, + { + keyUserName: this.keyUserName, + keyDeptLeven: this.keyDeptLeven, + keyShudi: this.keyShudi, + keyDeptType: this.keyDeptType, + keyDepeName: this.keyDepeName, + keyJobLeven: this.keyJobLeven, + DEPARTMENT_ID: this.DEPARTMENT_ID, + PROVINCE: this.keyShudi[0] || '', + CITY: this.keyShudi[1] || '', + COUNTRY: this.keyShudi[2] || '', + VILLAGE: this.keyShudi[3] || '', + ISPUSH: '0' + } + ).then((data) => { + this.listLoading = false + this.varList = data.userList + this.total = data.page.totalResult + }) + .catch((e) => { + this.listLoading = false + }) + }, + + goKeyReset() { + this.keyUserName = '' + this.keyDeptLeven = '' + this.keyShudi = '' + this.keyDeptType = '' + this.keyDepeName = '' + this.keyJobLeven = '' + this.getList() + if (this.$refs.refDeptLeven) { + this.$refs.refDeptLeven.clearHandle() + } + if (this.$refs.shudi) { + this.$refs.shudi.clearHandle() + } + if (this.$refs.refDeptType) { + this.$refs.refDeptType.clearHandle() + } + if (this.$refs.refJobLeven) { + this.$refs.refJobLeven.clearHandle() + } + }, + goAddUser() { // 点击添加用户的时候,获取角色 + requestFN( + '/user/goAddUser', + { + } + ).then((data) => { + this.roleList = data.roleList + }) + .catch((e) => { + }) + }, + + unLockUser(id, name) { + this.$confirm('确定要解锁 [ 帐号:' + name + ' ] 吗?', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning' + }).then(() => { + this.listLoading = true + requestFN( + '/user/unLockUser', + { + USER_ID: id + } + ).then(() => { + this.$message({ + message: '解锁成功', + type: 'success' + }) + this.listLoading = false + this.varList = [] + this.listQuery.page = 1 + this.getList() + }).catch((e) => { + this.listLoading = false + }) + }).catch(() => { + }) + }, + handleAdd() { + this.dialogFormEdit = true + this.ISCHECK = false + this.pd = {} + this.dialogType = 'saveUser' + this.pd.PASSWORD = 'Aa@123456789' + }, + confirm() { + this.$refs.form.validate(valid => { + if (valid) { + this.listLoading = true + if (this.pd.ROLE_ID) { + var roleIDs = '' + this.pd.ROLE_ID.forEach((item) => { + roleIDs += item + ';' + }) + this.pd.roleIDs = roleIDs + } + if (this.pd.shudi) { + this.pd.PROVINCE = this.pd.shudi[0] + this.pd.CITY = this.pd.shudi[1] + this.pd.COUNTRY = this.pd.shudi[2] || '' + this.pd.VILLAGE = this.pd.shudi[3] || '' + } + requestFN( + '/user/' + this.dialogType, + this.pd + ).then((data) => { + this.listLoading = false + this.dialogFormEdit = false + this.varList = [] + this.$refs.deptTree.clearHandle() + this.listQuery.page = 1 + console.log(data.pd) + this.goPush(data.pd) + this.getList() + }).catch((e) => { + this.listLoading = false + }) + } else { + return false + } + }) + }, + handleDelete(row) { + this.$confirm('确定要删除[' + row.USERNAME + ']吗?', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning' + }).then(() => { + this.listLoading = true + requestFN( + '/user/deleteUser', + { + USER_ID: row.USER_ID, + ISPUSH: row.ISPUSH + } + ).then((data) => { + if (data.result == 'success') { + this.listLoading = false + this.getList() + } + }).catch((e) => { + this.listLoading = false + }) + }).catch(() => { + }) + }, + makeAll(msg) { + const _selectData = this.$refs.multipleTable.selection + if (_selectData == null || _selectData.length == 0) { + this.$message({ + message: '请选中要删除的项...', + type: 'error' + }) + return false + } + const ids = _selectData.map((item, index) => { + return item.USER_ID + }).join(',') + var tishi = '' + if (msg == '0') { + tishi = '确定要删除选中的数据吗?' + } else if (msg == '1') { + tishi = '确定要给选中的用户发送站内信吗?' + } else { + this.$message({ + message: '请选择操作类型...', + type: 'error' + }) + return false + } + this.$confirm(tishi, { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning' + }).then(() => { + if (msg == '0') { + this.listLoading = true + requestFN( + '/user/deleteAllUser', + { + USER_IDS: ids + } + ).then(() => { + this.listLoading = false + this.varList = [] + this.listQuery.page = 1 + this.$refs.multipleTable.clearSelection() + this.getList() + }).catch((e) => { + this.listLoading = false + }) + } + }).catch(() => { + }) + }, + getQuery() { + this.$refs.multipleTable.clearSelection() + this.getList() + }, + async handleEdit(row) { + console.log(row) + this.dialogType = 'editUser' + this.pd = JSON.parse(JSON.stringify(row)) + const areaRefID = [] + if (this.pd.PROVINCE) { + areaRefID.push(this.pd.PROVINCE) + } + if (this.pd.CITY) { + areaRefID.push(this.pd.CITY) + } + if (this.pd.COUNTRY) { + areaRefID.push(this.pd.COUNTRY) + } + if (this.pd.VILLAGE) { + areaRefID.push(this.pd.VILLAGE) + } + this.$set(this.pd, 'shudi', areaRefID) + + const refDeptLevelVal = {} + refDeptLevelVal.id = this.pd.deptLevenlID + const deptRefsValue = {} + deptRefsValue.id = this.pd.DEPARTMENT_ID + var arrString = [] + if (this.pd.ROLE_ID != null && this.pd.ROLE_ID != '') { + arrString.push(this.pd.ROLE_ID) + } + if (this.pd.ROLE_IDS != null && this.pd.ROLE_IDS != '' && this.pd.ROLE_IDS != undefined && this.pd.ROLE_IDS != 'undefined') { + // 将字符串转换成数组,此时是字符串数组 + this.pd.ROLE_IDS = this.pd.ROLE_IDS.substring(0, this.pd.ROLE_IDS.length - 1) + var arrList = this.pd.ROLE_IDS && this.pd.ROLE_IDS != '' ? this.pd.ROLE_IDS.split(';') : '' + // eslint-disable-next-line no-unused-vars + for (const item1 of arrList) { // 循环取出多个角色的ID + arrString.push(item1) + } + } + this.pd.ROLE_ID = arrString + this.dialogFormEdit = true + await this.$nextTick() + }, + handleEditStatus(row, type) { + const typeName = type == '1' ? '禁用' : '启用' + this.$confirm('确定要' + typeName + '[' + row.USERNAME + ']吗?', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning' + }).then(() => { + this.listLoading = true + requestFN( + '/user/updateUserStatus', + { + USER_ID: row.USER_ID, + status: type + } + ).then((data) => { + if (data.result == 'success') { + this.listLoading = false + this.goPush(row) + this.getList() + } + }).catch((e) => { + this.listLoading = false + }) + }).catch(() => { + }) + }, + hasButton: function() { + var keys = 'user:add,user:del,user:edit,fhSms,email,fromExcel,toExcel' + requestFN( + '/head/hasButton', + { + keys: keys, tm: new Date().getTime() + } + ).then((data) => { + if (data.result == 'success') { + this.add = data.userfhadminadd // 增 + this.del = data.userfhadmindel // 删 + this.edit = data.userfhadminedit // 改 + this.fromExcel = data.fromExcel // 从excel导入权限 + this.toExcel = data.toExcel // 导出到excel权限 + } else if (data.result == 'exception') { + // showException('按钮权限', data.exception)// 显示异常 + } + }) + .catch((e) => { + this.listLoading = false + }) + }, + // 获取数据字典数据 + getDict(dicID, listName) { + requestFN( + 'dictionaries/getLevels', + { DICTIONARIES_ID: dicID } + ).then((data) => { + this[listName] = data.list + }).catch((e) => { + this.listLoading = false + }) + }, + // 获取数据字典数据 + getDict2(dicID, listName) { + requestFN( + 'dictionaries/getLevels', + { DICTIONARIES_ID: dicID } + ).then((data) => { + this.uesrInfoDic[listName] = data.list + }).catch((e) => { + this.listLoading = false + }) + }, + getDepartTreeList() { + this.pd.DEPARTMENT_ID = '' + if (this.$refs.deptTree) { + this.$refs.deptTree.clearHandle() + } + return new Promise((resolve) => { + requestFN( + '/department/listTreeByType' + ).then((data) => { + this.deptTreeData = JSON.parse(data.zTreeNodes) + resolve() + }).catch((e) => { + }) + }) + }, + resetPwd(id, name) { + this.$confirm('是否重置密码为Aa@123456789?', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning' + }).then(() => { + this.listLoading = true + requestFN( + '/user/resetPwd', + { + USER_ID: id + } + ).then(() => { + this.$message({ + message: '重置成功', + type: 'success' + }) + this.listLoading = false + this.varList = [] + this.listQuery.page = 1 + this.getList() + }).catch((e) => { + this.listLoading = false + }) + }).catch(() => { + }) + }, + filterNode(value, data) { + if (!value) return true + return data.name.indexOf(value) !== -1 + }, + handleNodeClick(node, data, value) { + this.DEPARTMENT_ID = node.id + this.getList() + }, + resetPassword() { + this.$confirm('一键重置密码,会将所有未修改过密码的用户进行密码重置重置,是否继续?', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning' + }).then(() => { + this.listLoading = true + requestFN( + '/user/resetPwdAll', + {} + ).then(() => { + this.$message({ + message: '重置成功', + type: 'success' + }) + this.listLoading = false + this.varList = [] + this.listQuery.page = 1 + this.getList() + }).catch((e) => { + this.listLoading = false + }) + }).catch(() => { + }) + }, + getTreeList() { + this.treeLoading = true + requestFN( + '/department/listTree', + {} + ).then((data) => { + this.treeLoading = false + this.treeData = JSON.parse(data.zTreeNodes) + }).catch((e) => { + this.treeLoading = false + }) + } + } +} +</script> + From 1c892cdc6470952aa705815909b44a1a018b3763 Mon Sep 17 00:00:00 2001 From: water_xu <x17149@gmail.com> Date: Mon, 12 Aug 2024 10:47:22 +0800 Subject: [PATCH 2/4] =?UTF-8?q?=E4=BA=BA=E5=91=98=E4=B8=AD=E5=8F=B0=20-=20?= =?UTF-8?q?=E4=BA=BA=E5=91=98=E4=B8=AD=E5=8F=B0=E7=AE=A1=E7=90=86=E6=A0=A1?= =?UTF-8?q?=E9=AA=8C=E5=A4=B1=E8=B4=A5bug=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/views/system/group/userCenter/index.vue | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/views/system/group/userCenter/index.vue b/src/views/system/group/userCenter/index.vue index 06394eb..8bcebea 100644 --- a/src/views/system/group/userCenter/index.vue +++ b/src/views/system/group/userCenter/index.vue @@ -480,18 +480,24 @@ export default { }) }, goCheck() { - if (this.pd.USER_ID_CARD && this.pd.USERNAME) { + if (this.pd.USER_ID_CARD && this.pd.PHONE) { const phoneJudge = /^(13[0-9]|14[579]|15[0-3,5-9]|16[6]|17[0135678]|18[0-9]|19[0-9])\d{8}$/ - const phoneResult = phoneJudge.test(this.pd.USERNAME) + const phoneResult = phoneJudge.test(this.pd.PHONE) const cardJudge = /^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/ const cardResult = cardJudge.test(this.pd.USER_ID_CARD) + // alert(this.pd.PHONE) + // alert(phoneResult) + + // alert(this.pd.USER_ID_CARD) + // alert(cardResult) if (phoneResult && cardResult) { console.log('格式校验通过') requestFN( 'user/goCheck', { CARD_NO: this.pd.USER_ID_CARD, - USERNAME: this.pd.USERNAME + USERNAME: this.pd.PHONE, + USER_ID: this.pd.USER_ID } ).then((data) => { if (data.result === 'success') { From 2a6c20c687125f871a36871c6b1e454716cdf695 Mon Sep 17 00:00:00 2001 From: water_xu <x17149@gmail.com> Date: Thu, 15 Aug 2024 09:48:43 +0800 Subject: [PATCH 3/4] =?UTF-8?q?=E7=9B=B8=E5=85=B3=E6=96=B9=20-=20=E7=9B=B8?= =?UTF-8?q?=E5=85=B3=E6=96=B9=E5=8D=95=E4=BD=8D=E4=BA=BA=E5=91=98=E7=AE=A1?= =?UTF-8?q?=E7=90=86=20-=20=E7=9B=B8=E5=85=B3=E6=96=B9=E6=89=80=E6=9C=89?= =?UTF-8?q?=E4=BA=BA=E5=91=98=E4=BF=A1=E6=81=AF=E7=9A=84=E9=87=8D=E6=96=B0?= =?UTF-8?q?=E6=8E=A8=E9=80=81=E6=8E=A5=E5=8F=A3=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/views/xgf/allPeopleList/components/list.vue | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/views/xgf/allPeopleList/components/list.vue b/src/views/xgf/allPeopleList/components/list.vue index 8a8bd8f..7fe5ba3 100644 --- a/src/views/xgf/allPeopleList/components/list.vue +++ b/src/views/xgf/allPeopleList/components/list.vue @@ -206,7 +206,7 @@ export default { this.form.FLOWS_TYPE = '2' if (this.form.TYPE !== '2') { this.loading = true - requestFN('/xgf/user/approveMax', this.form) + requestFN('/xgf/user/repeatPush', this.form) .then((data) => { if (data.code === '0') { this.$message.success('推送成功') @@ -234,7 +234,7 @@ export default { } } this.loading = true - upload('/xgf/user/approveMax', formData) + upload('/xgf/user/repeatPush', formData) .then((data) => { this.$message.success('推送成功') this.visible = false From a2649cd1a73bb6cb7d922da31106a223c6ab8259 Mon Sep 17 00:00:00 2001 From: water_xu <x17149@gmail.com> Date: Thu, 15 Aug 2024 10:01:44 +0800 Subject: [PATCH 4/4] =?UTF-8?q?=E4=BC=81=E4=B8=9A=E4=BF=A1=E6=81=AF?= =?UTF-8?q?=E7=AE=A1=E7=90=86=20-=20=E4=B8=AD=E5=BF=83=E7=94=A8=E6=88=B7?= =?UTF-8?q?=E7=AE=A1=E7=90=86=E9=A1=B5=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../centercorpinfouser/components/detail.vue | 757 ++++++++++++++++++ .../components/indexList.vue | 280 +++++++ .../components/index_view.vue | 281 +++++++ .../corpInfo/centercorpinfouser/index.vue | 37 + src/views/system/group/user/index.vue | 15 +- 5 files changed, 1359 insertions(+), 11 deletions(-) create mode 100644 src/views/corpInfo/centercorpinfouser/components/detail.vue create mode 100644 src/views/corpInfo/centercorpinfouser/components/indexList.vue create mode 100644 src/views/corpInfo/centercorpinfouser/components/index_view.vue create mode 100644 src/views/corpInfo/centercorpinfouser/index.vue diff --git a/src/views/corpInfo/centercorpinfouser/components/detail.vue b/src/views/corpInfo/centercorpinfouser/components/detail.vue new file mode 100644 index 0000000..b567e75 --- /dev/null +++ b/src/views/corpInfo/centercorpinfouser/components/detail.vue @@ -0,0 +1,757 @@ +<template> + <div> + <div style="padding:10px 20px 20px 20px"> + <div class="title_super"> + <div>{{ this.$parent.USER_ID == '' ? '新增用户' : '查看用户' }}</div> + </div> + <el-form ref="form" :rules="rules" :model="form" label-width="140px"> + <el-row :gutter="20"> + <el-col :span="12"> + <div class="left_super"> + <el-form-item label="用户名" prop="USERNAME"> + <el-input v-model="form.USERNAME" placeholder="默认用户手机号码..."/> + </el-form-item> + <el-form-item label="姓名" prop="NAME"> + <el-input v-model="form.NAME" placeholder="这里输入姓名..."/> + </el-form-item> + <el-form-item label="邮箱" prop="EMAIL"> + <el-input v-model="form.EMAIL" placeholder=""/> + </el-form-item> + <el-form-item label="部门" prop="ORG_PATH"> + <el-input v-model="form.ORG_PATH" placeholder=""/> + </el-form-item> + <el-form-item label="身份证号" prop="CARD_NO"> + <el-input v-model="form.CARD_NO" placeholder=""/> + </el-form-item> + <el-form-item label="民族" prop="NATION"> + <el-input v-model="form.NATION" placeholder=""/> + </el-form-item> + <el-form-item label="性别" prop="SEX"> + <el-input v-model="form.SEX" placeholder=""/> + </el-form-item> + </div> + </el-col> + <el-col :span="12"> + <div class="left_border_super"> + <template v-if="form.ISSTUDENT"> + + <el-row :gutter="20"> + <el-col :span="12"> + <el-form-item label="民族" prop="NATION"> + <el-select v-model="form.NATION_NAME" placeholder="请选择"> + <el-option + v-for="item in uesrInfoDic.minzuList" + :key="item.DICTIONARIES_ID" + :label="item.NAME" + :value="item.DICTIONARIES_ID"/> + </el-select> + </el-form-item> + </el-col> + <el-col :span="12"> + + </el-col> + </el-row> + <el-row :gutter="20"> + <el-col :span="12"> + <el-form-item label="政治面貌" prop="POLITICAL_OUTLOOK"> + <el-select v-model="form.POLITICAL_OUTLOOK_NAME" placeholder="请选择"> + <el-option + v-for="item in uesrInfoDic.zhengzhimianmaoList" + :key="item.DICTIONARIES_ID" + :label="item.NAME" + :value="item.DICTIONARIES_ID"/> + </el-select> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="出生年月" prop="DATE_OF_BIRTH"> + <el-date-picker + v-model="form.DATE_OF_BIRTH" + type="date" + placeholder="选择日期" + value-format="yyyy-MM-dd" + format="yyyy-MM-dd"/> + </el-form-item> + </el-col> + </el-row> + <el-row :gutter="20"> + <el-col :span="12"> + <el-form-item label="文化程度" prop="DEGREE_OF_EDUCATION"> + <el-select v-model="form.DEGREE_OF_EDUCATION_NAME" placeholder="请选择"> + <el-option + v-for="item in uesrInfoDic.wenhuachengduList" + :key="item.DICTIONARIES_ID" + :label="item.NAME" + :value="item.DICTIONARIES_ID"/> + </el-select> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="人员类型" prop="PERSONNEL_TYPE"> + <el-select v-model="form.PERSONNEL_TYPE_NAME" placeholder="请选择"> + <el-option + v-for="item in uesrInfoDic.renyuanleixingList" + :key="item.DICTIONARIES_ID" + :label="item.NAME" + :value="item.DICTIONARIES_ID"/> + </el-select> + </el-form-item> + </el-col> + </el-row> + + <el-row :gutter="20"> + <el-col :span="12"> + <el-form-item label="职务" prop="DUTIES"> + <div class="uo-flex"> + <el-select + v-if="form.letDutiesType =='select'" + id="leaPostSel" + v-model="form.DUTIESNAME" + placeholder="请选择" + class="filter-item" + @change="forceUpdate"> + <el-option + v-for="(item,index) in uesrInfoDic.zhiwuList" + :key="item.DICTIONARIES_ID" + :label="item.NAME" + :value="item.DICTIONARIES_ID"> + <span style="float: left">{{ item.NAME }}</span> + <div style="float: right;" @click.stop="removeDuties(index,'POSITION')"><i + class="el-icon-circle-close"/></div> + </el-option> + </el-select> + <el-input + v-if="form.letDutiesType =='value'" + id="leaPostVal" + :disabled="form.letDutiesType =='select'" + v-model="form.DUTIESValue" + placeholder="这里输入新的职务名称..."/> + <el-button + class="ml5" + @click="form.letDutiesType = (form.letDutiesType =='select') ? 'value' : 'select'"> + {{ form.letDutiesType === 'select' ? '输入' : '选择' }} + </el-button> + </div> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="职称" prop="TITLE"> + <div class="uo-flex"> + <el-select + v-if="form.letTitleType =='select'" + id="letTitleSel" + v-model="form.TITLE_NAME" + placeholder="请选择" + class="filter-item" + @change="forceUpdate"> + <el-option + v-for="(item,index) in uesrInfoDic.zhichengList" + :key="item.DICTIONARIES_ID" + :label="item.NAME" + :value="item.DICTIONARIES_ID"> + <span style="float: left">{{ item.NAME }}</span> + <div style="float: right;" @click.stop="removeDuties(index,'JOB_TITLE')"><i + class="el-icon-circle-close"/></div> + </el-option> + </el-select> + <el-input + v-show="form.letTitleType =='value'" + id="letTitleVal" + v-model="form.letTitleValue" + placeholder="这里输入新的职称名称..."/> + <el-button + class="ml5" + @click="form.letTitleType = (form.letTitleType =='select') ? 'value' : 'select'"> + {{ form.letTitleType === 'select' ? '输入' : '选择' }} + </el-button> + </div> + </el-form-item> + </el-col> + </el-row> + <el-row :gutter="20"> + <el-col :span="12"> + <el-form-item label="工种" prop="TYPE_OF_WORK"> + <div class="uo-flex"> + <el-select + v-if="form.letTypeOfWorkType =='select'" + id="letTypeOfWorkSel" + v-model="form.TYPE_OF_WORKNAME" + placeholder="请选择" + class="filter-item" + @change="forceUpdate"> + <el-option + v-for="(item,index) in uesrInfoDic.gongzhongList" + :key="item.DICTIONARIES_ID" + :label="item.NAME" + :value="item.DICTIONARIES_ID"> + <span style="float: left">{{ item.NAME }}</span> + <div style="float: right;" @click.stop="removeDuties(index,'WORK_TYPE')"><i + class="el-icon-circle-close"/></div> + </el-option> + </el-select> + <el-input + v-show="form.letTypeOfWorkType =='value'" + id="letTypeOfWorkVal" + v-model="form.letTypeOfWorkValue" + placeholder="这里输入新的工种名称..."/> + <el-button + class="ml5" + @click="form.letTypeOfWorkType = (form.letTypeOfWorkType =='select') ? 'value' : 'select'"> + {{ form.letTypeOfWorkType === 'select' ? '输入' : '选择' }} + </el-button> + </div> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="入职日期" prop="ENTRY_DATE"> + <el-date-picker + v-model="form.ENTRY_DATE" + type="date" + placeholder="选择日期" + value-format="yyyy-MM-dd" + format="yyyy-MM-dd"/> + </el-form-item> + </el-col> + </el-row> + <el-row :gutter="20"> + <el-col :span="12"> + <el-form-item label="参加工作日期" prop="WORKING_DATE"> + <el-date-picker + v-model="form.WORKING_DATE" + type="date" + placeholder="选择日期" + value-format="yyyy-MM-dd" + format="yyyy-MM-dd"/> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="在职情况" prop="INCUMBENCY"> + <el-select v-model="form.INCUMBENCY_NAME" placeholder="请选择"> + <el-option + v-for="item in uesrInfoDic.zaizhiqingkuangList" + :key="item.DICTIONARIES_ID" + :label="item.NAME" + :value="item.DICTIONARIES_ID"/> + </el-select> + </el-form-item> + </el-col> + </el-row> + <el-form-item v-if="form.userCerList.length > 0" label="已上传证书"> + <div class="slideshow"> + <div class="disContent"> + <div v-for="(item, index) in form.userCerList" :key="index" class="img-div"> + <img :src="config.fileUrl + item.FILEPATH" alt=""> + <div class="disContent-hide"> + <el-tooltip class="item" effect="dark" content="预览" placement="top"> + <span class="el-icon-zoom-in yuLan"> + <viewer :images="form.userCerLis"> + <img :src="config.fileUrl + item.FILEPATH" alt="" class="yuLanImg"> + </viewer> + </span> + </el-tooltip> + <el-tooltip class="item" effect="dark" content="删除" placement="top"> + <span class="Delete" @click="deleteCertificate(index)"><i class="el-icon-delete"/></span> + </el-tooltip> + </div> + </div> + </div> + </div> + </el-form-item> + </template> + </div> + </el-col> + </el-row> + + </el-form> + </div> + <div class="ui-height"/> + <div class="ui-foot"> + <!-- <el-button type="success" @click="confirm">保 存</el-button>--> + <el-button plain type="info" @click="goBack">返 回</el-button> + </div> + </div> + +</template> + +<script> +import Pagination from '@/components/Pagination' // 通过 el-pagination二次打包 +import { requestFN } from '@/utils/request' +import waves from '@/directive/waves' // waves directive +import SelectTree from '@/components/SelectTree' + +export default { + components: { Pagination, SelectTree }, + directives: { waves }, + data() { + // eslint-disable-next-line no-unused-vars + var hasUser = (rule, value, callback) => { + requestFN( + '/user/hasUser', + { + USERNAME: value, + VERIFYUSER_ID: this.form.USER_ID + } + ).then((data) => { + if (data.result == 'success') { + if (data.pd.USER_ID) { + callback(new Error('用户名重复')) + } + callback() + } + }).catch((e) => { + callback() + }) + } + var hasEmail = (rule, value, callback) => { + if (value) { + requestFN( + '/user/hasEmail', + { + EMAIL: value, + USERNAME: this.form.USERNAME + } + ).then((data) => { + if (data.result == 'success') { + callback() + } else { + callback(new Error('邮箱重复')) + } + }).catch((e) => { + + }) + } else { + callback() + } + } + return { + dayTime: [], + LevelsData: [], + dialogFormEditDate: false, + dialogFormLicenseInformation: false, + listLoading: true, + treeLoading: false, + add: false, + del: false, + edit: false, + KEYWORDS: '', + SHIFTDUTYONE: '', + SHIFTDUTYTWO: '', + selectPeriod: [], + tzzyry: '', + periodList: [], + DEPARTMENT_ID: '', + varList: [], + multipleSelectionAll: [], // 所有选中的数据包含跨页数据 + multipleSelection: [], // 当前页选中的数据 + dialogFormEdit: false, + dialogType: 'saveUser', + disabledLCSelect: false, + displayLCSelect: 'display: block', + disabledLCInput: true, + displayLCInput: 'display: none', + LearnerCategoryList: [], + certificatenamearr: [ + { value: '主要负责人证', label: '主要负责人证' }, + { value: '安全管理人员证', label: '安全管理人员证' }, + { value: '特种作业人员证', label: '特种作业人员证' } + ], rules: { + NAME: [{ required: true, message: '姓名不能为空', trigger: 'blur' }] + }, defaultProps: { + value: 'id', + children: 'odes', + label: 'name' + }, + treeData: [], + form: { + CORPINFO_NAME: "", + CARD_NO: null, + OPERATTIME: "", + ISDELETE: "", + DEPARTMENT_NAME: "", + ORG_PATH: "", + DEPARTMENT_ID: "", + CARD_TYPE_NAME: "", + SEX: "", + USER_ID: "", + CARD_TYPE: "", + CORPINFO_ID: "", + EMAIL: "", + NAME: "", + NATION: "", + OPERATOR: "", + USER_TYPE: "", + CREATOR: "", + USERNAME: "", + CREATTIME: "" + }, + uesrInfoDic: { + minzuList: [], // 民族 0a0e406f27f74ee698fe9979d25f62dd + zhengzhimianmaoList: [], // 政治面貌 6351efdd12dc4730952e5d195718e252 + wenhuachengduList: [], // 文化程度 d7d80f08d73a4accbccf4fd3d8d1d867 + renyuanleixingList: [], // 人员类型 0b62f92b0b624aab8e89a77304a64d5e + zhiwuList: [], // 职务 下拉菜单选择已输入过的职务 09e36ac01e9540f8bc84eab1c1a78754 + gongzhongList: [], // 工种 下拉菜单选择已输入过的职务 55484e491a5e442d839c4595380713ec + zaizhiqingkuangList: [], // 在职情况 548764b5d4bf4bd7a18ef88274ef49e4 + xingbieList: [], // 性别情况 21501808bbc344d593fbf9ccfe6c4531 + zhichengList: []// 职称 945a6b10e59946078b500f0fbafa8679 + }, + certificate_files: [], + config: config, + dialogImageUrl: [], + dialogVisible: false, + SchedulingFrom: false, + roleList: [], + roleList1: [], + roleList_z: [], + role1List: [], + postList: [], + oldPostId: '', // 原岗位ID(用于判断岗位是否变化) + oldDepartId: '', // 原部门ID(用于判断部门是否变化) + dialogFormDaoru: false, + daoruFrom: { + FFILE: '', + FFILEName: '' + }, + PARENTID: '0', + shiftDutyListOne: [], + shiftDutyListTwo: [], + queryShiftOneList: [], + queryShiftTwoList: [], + datePage: 0, + workDateList: [], + USER_ID: '' + } + }, + created() { + this.handleEdit(this.$parent.USER_ID) + }, + methods: { + + goBack() { + this.$parent.activeName = 'IndexView' + }, + handleEdit(USER_ID) { + this.shiftDutyListTwo = [] + this.periodList = [] + this.USER_ID = '' + this.dialogType = 'editUser' + requestFN( + '/core/corpinfo/getCorpUser', + { + USER_ID: USER_ID + } + ).then((data) => { + this.form = data.varList[0] + + }).catch((e) => { + this.listLoading = false + }) + }, + + confirm() { + // debugger + // this.uploadImgByZhengshu(this.form.USER_ID) // 保存证书信息 + this.$refs.form.validate(valid => { + if (this.form.SHIFTDUTYONE) { + // var + if (!this.form.SHIFTDUTYTWO || this.selectPeriod.DURATION == undefined) { + this.$message({ + message: '请选择完整的排班类型', + type: 'error' + }) + return false + } + } + // if (this.form.USERAVATARURL == '') { + // this.$message({ + // message: '请上传人员照片', + // type: 'warning' + // }) + // return false + // } + if (valid) { + console.log(this.selectPeriod.WORKSTATUS) + console.log(this.form.WORKSTATUS) + this.form.WORKSTATUS = this.selectPeriod.WORKSTATUS + this.form.DURATION = this.selectPeriod.DURATION + this.form.WORKPERIOD = this.selectPeriod.WORKPERIOD + if (this.dialogType == 'saveUser') { + this.form.ROLE_ID = this.form.ROLE_ID.join(',') + this.listLoading = true + requestFN( + '/user/' + this.dialogType, + this.form + ).then((data) => { + this.listLoading = false + if (this.form.ISSTUDENT) { + this.uploadImgByZhengshu(data.USER_ID) + } else { + this.$message({ + message: '操作成功', + type: 'success' + }) + this.$parent.activeName = 'List' + } + }).catch((e) => { + this.listLoading = false + this.form.ROLE_ID = '' + this.form.USERNAME = '' + }) + } else { + if (this.oldDepartId != this.form.DEPARTMENT_ID || this.oldPostId != this.form.POST_ID) { + this.$confirm('如变更了部门或岗位,保存后将删除该用户所有清单,是否确定?', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning' + }).then(() => { + this.form.ROLE_ID = this.form.ROLE_ID.join(',') + this.listLoading = true + requestFN( + '/user/' + this.dialogType, + this.form + ).then((data) => { + this.listLoading = false + if (this.form.ISSTUDENT) { + this.uploadImgByZhengshu(this.form.USER_ID) + } else { + this.$message({ + message: '操作成功', + type: 'success' + }) + this.$parent.activeName = 'List' + } + }).catch((e) => { + this.listLoading = false + }) + }) + } else { + this.form.ROLE_ID = this.form.ROLE_ID.join(',') + this.listLoading = true + requestFN( + '/user/' + this.dialogType, + this.form + ).then((data) => { + this.listLoading = false + if (this.form.ISSTUDENT) { + this.uploadImgByZhengshu(this.form.USER_ID) + } else { + this.$message({ + message: '操作成功', + type: 'success' + }) + this.$parent.activeName = 'List' + } + }).catch((e) => { + this.listLoading = false + }) + } + } + } else { + return false + } + }) + }, + + } +} +</script> + +<style lang="scss" scoped> +.el-dialog__body { + padding: 0; + background: red; +} + +.mark_up { + margin-bottom: 20px; + margin-left: 110px; +} + +.icons-container { + margin: 0; + overflow: hidden; + + .grid { + position: relative; + display: grid; + grid-template-columns: repeat(auto-fill, minmax(100px, 1fr)); + } + + .icon-item { + margin-bottom: 10px; + height: 70px; + text-align: center; + width: 100px; + float: left; + font-size: 24px; + color: #24292e; + cursor: pointer; + + span { + display: block; + font-size: 14px; + margin-top: 10px; + } + } + + .disabled { + pointer-events: none; + } +} + +.filter-btn-group { + position: relative; +} + +.filter-flot { + position: absolute; + right: 0; + top: 0; +} + +.uploader { + width: 570px; + display: flex; + align-items: center; +} + +.el-form-item__content { + line-height: 1; +} + +.uo-flex { + display: flex; +} + +.avatar-uploader .el-upload { + border: 1px dashed #d9d9d9; + border-radius: 6px; + cursor: pointer; + position: relative; + overflow: hidden; +} + +.avatar-uploader .el-upload:hover { + border-color: #409eff; +} + +.avatar-uploader-icon { + border: 1px dashed #c0ccda; + font-size: 28px; + color: #8c939d; + width: 110px; + height: 110px; + line-height: 110px; + border-radius: 6px; + text-align: center; + background-color: #fbfdff; +} + +.avatar-uploader-icon:hover, +.avatar-uploader-icon:focus { + border-color: #1890ff; + color: #1890ff; +} + +.avatar { + width: 110px; + height: 110px; + display: block; + border: 1px dashed #c0ccda; +} +</style> +<style lang="sass" scoped> +.el-row + margin-bottom: 16px + + &:last-child + margin-bottom: 0 + + .form-group + display: flex + align-items: center + margin-right: 20px + + .form-label + padding: 9px 15px + font-size: 14px + width: 240px + font-weight: 400 + line-height: 20px + text-align: right + margin-bottom: 0 + + .star + color: red + padding-right: 4px + + .input-block + flex: 1 + min-height: 36px + position: relative + +.disContent + padding: 0 20px + display: flex + align-items: center + flex-wrap: wrap + + .img-div + position: relative + margin: auto 10px 10px 10px + width: 120px + height: 120px + border-radius: 4px + + & > img + width: 100% + height: 100% + + .disContent-hide + position: absolute + width: 100% + height: 100% + border-radius: 4px + background-color: rgba(48, 48, 48, 0.59) + display: none + top: 0 + left: 0 + + .Delete + position: absolute + bottom: 14px + right: 10px + font-size: 16px + color: white + cursor: pointer + + .editCss + .Delete + font-size: 16px + right: 90px + + .yuLan + position: absolute + bottom: 23px + right: 50px + font-size: 16px + color: white + cursor: pointer + + .yuLanImg + position: absolute + bottom: 0 + right: 0 + width: 100% + height: 100% + opacity: 0 + + .img-div:hover .disContent-hide + display: block + + .pitchCss + border: 1px solid #202e78 + transition: all linear 0.1s + width: 116px + height: 116px +</style> diff --git a/src/views/corpInfo/centercorpinfouser/components/indexList.vue b/src/views/corpInfo/centercorpinfouser/components/indexList.vue new file mode 100644 index 0000000..f1fb5e3 --- /dev/null +++ b/src/views/corpInfo/centercorpinfouser/components/indexList.vue @@ -0,0 +1,280 @@ +<template> + <div class="app-container"> + + <el-table + v-loading="listLoading" + ref="multipleTable" + :data="varList" + :row-key="getRowKey" + :header-cell-style="{ + 'font-weight': 'bold', + 'color': '#000' + }" + tooltip-effect="dark" + border + fit + highlight-current-row + > + <el-table-column + :reserve-selection="true" + type="selection" + width="55" + align="center"/> + <el-table-column type="index" label="序号" width="50" align="center" /> + <el-table-column prop="CORP_NAME" label="分公司名称" /> + <el-table-column label="操作" align="left" width="110"> + <template slot-scope="{row}"> + <el-button type="success" icon="el-icon-view" size="mini" @click="handleEdit(row.CORPINFO_ID)">查看</el-button> + </template> + </el-table-column> + </el-table> + <div class="page-btn-group"> + <div> + </div> + <!-- <pagination :total="total" :page.sync="listQuery.page" :limit.sync="listQuery.limit" @pagination="getList" /> --> + </div> + <el-dialog :visible.sync="dialogFormEdit" title="查看公司组织架构" width="600px"> + <el-tree :data="treeData" :props="defaultProps"/> + </el-dialog> + </div> +</template> + +<script> +import SelectTree from '@/components/SelectTree' +import Pagination from '@/components/Pagination' // 通过 el-pagination二次打包 +import { requestFN } from '@/utils/request' +import waves from '@/directive/waves' // waves directive +export default { + components: { Pagination, SelectTree }, + directives: { waves }, + data() { + return { + listLoading: true, + add: true, + del: true, + edit: true, + listQuery: { + page: 1, + limit: 20 + }, + searchForm: { + CORP_NAME: '', + PROVINCE: '', + CITY: '', + CORP_STATE: '', + CREATTIME: '' + }, + total: 0, + varList: [], + qyztList: [], + options: [{ + value: '0', + label: '启用' + }, { + value: '1', + label: '禁用' + }], + STATE: [], + industryList: [], + countryList: [], + villageList: [], + treeData: [], + CITY_CODE: '', + COUNTRY: '', + VILLAGE: '', + config: config, + dialogFormEdit: false, + rules: { + CORP_NAME: [{ required: true, message: '分公司名称不能为空', trigger: 'blur' }], + NEWCORP_NAME: [{ required: true, message: '新分公司名称不能为空', trigger: 'blur' }], + PASSWORD: [{ required: true, message: '分公司密码不能为空', trigger: 'blur' }] + }, + updateBranchNameForm: { + CORPINFO_ID: '', + CORP_NAME: '', + NEWCORP_NAME: '', + PASSWORD: '' + }, + defaultProps: { + children: 'nodes', + label: 'name' + } + } + }, + created() { + this.getList() + // this.getDicList('qyztList', '07c2674470c1498ba1ebd74906b3b518') + // this.getDicList('industryList', 'f2598ba72e864eadabf0ca4b664d26b9') + }, + methods: { + getRowKey(row) { + return row.CORPINFO_ID + }, + // 搜索 + getQuery() { + this.getList() + }, + // 获取列表 + getList() { + this.listLoading = true + requestFN( + '/core/corpinfo/listRetrieval' + ).then((data) => { + this.listLoading = false + this.varList = data.varList + + // this.getCountryList() + }).catch((e) => { + this.listLoading = false + }) + }, + getCountryList() { + requestFN( + '/dictionaries/getLevels', + { + DICTIONARIES_ID: this.CITY_CODE + } + ).then((data) => { + this.countryList = data.list + }).catch((e) => { + }) + }, + getVillageList(value, id) { + this.COUNTRY = value + requestFN( + '/dictionaries/getLevels', + { + DICTIONARIES_ID: id + } + ).then((data) => { + this.villageList = data.list + }).catch((e) => { + }) + }, + changeVillage(village) { + this.VILLAGE = village + }, + // 查看 + handleEdit(ID) { + this.$parent.activeName = 'IndexView' + this.$parent.indexVal = ID + }, + enableORDisable(ISUSE, CORPINFO_ID) { + this.$confirm(ISUSE === '0' ? '确定要启用该账户吗?' : '确定要禁用该账户吗?', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning' + }).then(() => { + this.listLoading = true + requestFN( + '/corpinfo/editisuse', + { + CORPINFO_ID, + ISUSE + } + ).then(() => { + this.$message({ + message: ISUSE === '0' ? '启用成功' : '禁用成功', + type: 'success' + }) + this.listLoading = false + this.varList = [] + this.listQuery.page = 1 + this.getList() + }).catch((e) => { + this.listLoading = false + }) + }).catch(() => {}) + }, + // 判断按钮权限,用于是否显示按钮 + hasButton: function() { + var keys = 'corpinfo:add,corpinfo:del,corpinfo:edit,toExcel' + requestFN( + '/head/hasButton', + { + keys: keys + } + ).then((data) => { + this.add = data.corpinfofhadminadd // 新增权限 + this.del = data.corpinfofhadmindel // 删除权限 + this.edit = data.corpinfofhadminedit // 修改权限 + }).catch((e) => { + this.listLoading = false + }) + }, + goKeyReset() { + this.searchForm = { + CORP_NAME: '', + PROVINCE: '', + CITY: '', + CORP_STATE: '', + CREATTIME: '' + } + this.getList() + }, + resetPwd(id) { + this.$confirm('确定要重置选中的密码吗?', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning' + }).then(() => { + this.listLoading = true + requestFN( + '/corpinfo/resetPwd', + { + CORPINFO_ID: id + } + ).then(() => { + this.$message({ + message: '重置成功', + type: 'success' + }) + this.listLoading = false + this.varList = [] + this.listQuery.page = 1 + this.getList() + }).catch((e) => { + this.listLoading = false + }) + }).catch(() => { + }) + }, + // 获取数据字典 + getDicList(list, DICTIONARIES_ID) { + requestFN( + '/dictionaries/getLevels', + { + DICTIONARIES_ID + } + ).then((data) => { + this[list] = data.list + }).catch((e) => { + }) + }, + translate(list, id) { + for (let i = 0; i < list.length; i++) { + if (list[i].BIANMA === id || list[i].DICTIONARIES_ID === id) { + return list[i].NAME + } + } + }, + showBranchName(CORPINFO_ID, CORP_NAME) { + this.$refs.form && this.$refs.form.resetFields() + this.dialogFormEdit = true + this.updateBranchNameForm.CORPINFO_ID = CORPINFO_ID + this.updateBranchNameForm.CORP_NAME = CORP_NAME + }, + updateBranchName(ID) { + requestFN( + '/department/listTreeCorpInfo', + { + CORPINFO_ID: ID + } + ).then((data) => { + this.treeData = JSON.parse(data.varList) + }).catch((e) => { + }) + } + } +} +</script> diff --git a/src/views/corpInfo/centercorpinfouser/components/index_view.vue b/src/views/corpInfo/centercorpinfouser/components/index_view.vue new file mode 100644 index 0000000..8615590 --- /dev/null +++ b/src/views/corpInfo/centercorpinfouser/components/index_view.vue @@ -0,0 +1,281 @@ +<template> + <div class="icons-container"> + <el-container> + <el-aside width="200px" style="background-color:#fff"> + <div class="filter-btn-group"> + <!-- <el-input--> + <!-- v-model="filterText"--> + <!-- placeholder="输入关键字进行过滤"--> + <!-- style="margin:10px 0"/>--> + <el-tree + v-loading="treeLoading" + ref="tree" + :data="treeData" + :props="defaultProps" + :filter-node-method="filterNode" + class="filter-tree" + @node-click="handleNodeClick"/> + </div> + </el-aside> + <el-main> + <el-form label-width="60px"> + + </el-form> + <el-table + v-loading="listLoading" + ref="multipleTable" + :data="varList" + :row-key="getRowKey" + :header-cell-style="{ + 'font-weight': 'bold', + 'color': '#000' + }" + tooltip-effect="dark" + border + fit + highlight-current-row + > + <el-table-column + :reserve-selection="true" + type="selection" + width="55" + align="center"/> + <el-table-column type="index" label="序号" width="50" align="center" /> + <el-table-column prop="USERNAME" label="用户名" /> + <el-table-column prop="NAME" label="姓名" /> + <el-table-column prop="ORG_PATH" label="部门"/> + <el-table-column label="操作" align="left" width="150"> + <template slot-scope="{row}"> + <el-button type="success" icon="el-icon-view" size="mini" @click="handleEdit(row.USER_ID)">查看</el-button> + <!-- <template v-if="row.ISMAIN==0">--> + <!-- <el-button type="primary" icon="el-icon-edit" size="mini" @click="handleDelete(row.USER_ID,row.NAME)">删除</el-button>--> + <!-- </template>--> + </template> + </el-table-column> + </el-table> + <div class="page-btn-group"> + <div> + <!-- + <el-button type="primary" icon="el-icon-plus" @click="handleAdd">新增</el-button> + --> + </div> + <pagination :total="total" :page.sync="listQuery.page" :limit.sync="listQuery.limit" @pagination="getList" /> + </div> + </el-main> + </el-container> + + <div class="heightt"/> + <div class="subdy-foot"> + <el-row style="text-align: center"> + <el-button @click="goBack">返回</el-button> + </el-row> + </div> + </div> +</template> + +<script> +import SelectTree from '@/components/SelectTree' +import Pagination from '@/components/Pagination' // 通过 el-pagination二次打包 +import { requestFN } from '@/utils/request' +import waves from '@/directive/waves' // waves directive +export default { + components: { Pagination, SelectTree }, + directives: { waves }, + data() { + return { + treeLoading: false, + listLoading: true, + add: true, + del: true, + edit: true, + readonly: true, + listQuery: { + page: 1, + limit: 20 + }, + searchForm: { + DEPARTMENT_ID: '', + CORP_NAME: '', + PROVINCE: '', + CITY: '', + CORP_STATE: '', + CREATTIME: '', + USERNAME: '', + NAME: '', + DEPTNAME: '' + }, + userForm: { + PARENT_ID: '', + USER_ID: '', + DEPARTMENT_ID: '', + DEPTNAME: '', + USERNAME: '', + NAME: '' + }, + DEPARTMENT_ID: '', + total: 0, + PARENT_ID: '0', // 上级ID + varList: [], + qyztList: [], + options: [{ + value: '0', + label: '启用' + }, { + value: '1', + label: '禁用' + }], + STATE: [], + industryList: [], + countryList: [], + villageList: [], + treeData: [], + CITY_CODE: '', + COUNTRY: '', + VILLAGE: '', + config: config, + dialogFormEdit: false, + + defaultProps: { + id:'DEPARTMENT_ID', + value: 'DEPARTMENT_ID', + children: 'SUB_DEPT', + label: 'NAME' + } + } + }, + created() { + this.updateBranchName(this.$parent.indexVal) + this.getList() + // this.getDicList('qyztList', '07c2674470c1498ba1ebd74906b3b518') + // this.getDicList('industryList', 'f2598ba72e864eadabf0ca4b664d26b9') + }, + methods: { + filterNode(value, data) { + if (!value) return true + return data.name.indexOf(value) !== -1 + }, + handleNodeClick(node, data, value) { + this.searchForm.DEPARTMENT_ID = node.DEPARTMENT_ID + this.getList(node.DEPARTMENT_ID) + }, + // 获取列表 + getList(DEPARTMENT_ID) { + this.listLoading = true + if (DEPARTMENT_ID) { + this.DEPARTMENT_ID = DEPARTMENT_ID + } + requestFN( + '/core/corpinfo/findByCorpInfo?showCount=' + this.listQuery.limit + '¤tPage=' + this.listQuery.page, + { + CORPINFO_ID: this.$parent.indexVal, + DEPARTMENT_ID: this.searchForm.DEPARTMENT_ID, + DEPTNAME: this.searchForm.DEPTNAME, + NAME: this.searchForm.NAME, + USERNAME: this.searchForm.USERNAME + } + ).then((data) => { + this.listLoading = false + this.varList = data.userList + this.total = data.page.totalResult + this.hasButton() + this.CITY_CODE = data.CITY_CODE + this.getCountryList() + }).catch((e) => { + this.listLoading = false + }) + }, + getDeptList(DEPARTMENT_ID) { + this.listLoading = true + this.varList = [] + this.DEPARTMENT_ID = DEPARTMENT_ID + requestFN( + '/department/findByDeptId?showCount=' + this.listQuery.limit + '¤tPage=' + this.listQuery.page, + { + DEPARTMENT_ID: this.searchForm.DEPARTMENT_ID, + KEYWORDS: this.searchForm.KEYWORDS + } + ).then((data) => { + this.listLoading = false + this.varList = data.varList + this.form.PARENT_ID = data.PARENT_ID + this.total = data.page.totalResult + this.hasButton() + }).catch((e) => { + this.listLoading = false + }) + }, + getRowKey(row) { + return row.CORPINFO_ID + }, + goReturn() { + this.$parent.activeName = 'IndexList' + }, + // 搜索 + getQuery() { + this.getList() + }, + getTreeList() { + this.treeLoading = true + requestFN( + '/department/listTree', + {} + ).then((data) => { + this.treeLoading = false + // this.treeData = JSON.parse(data.zTreeNodes) + console.infot(this.treeData) + }).catch((e) => { + this.treeLoading = false + }) + }, + + changeVillage(village) { + this.VILLAGE = village + }, + // 查看 + handleEdit(ID) { + this.$parent.USER_ID = ID + this.$parent.activeName = 'Detail' + }, + + goBack() { + this.$parent.activeName = 'IndexList' + }, + + goKeyReset() { + this.searchForm = { + CORP_NAME: '', + PROVINCE: '', + CITY: '', + CORP_STATE: '', + CREATTIME: '' + } + this.getList() + }, + + translate(list, id) { + for (let i = 0; i < list.length; i++) { + if (list[i].BIANMA === id || list[i].DICTIONARIES_ID === id) { + return list[i].NAME + } + } + }, + showBranchName(CORPINFO_ID, CORP_NAME) { + this.$refs.form && this.$refs.form.resetFields() + this.dialogFormEdit = true + this.updateBranchNameForm.CORPINFO_ID = CORPINFO_ID + this.updateBranchNameForm.CORP_NAME = CORP_NAME + }, + updateBranchName(ID) { + requestFN( + '/core/corpinfo/listTreeCorpInfo', + { + CORPINFO_ID: ID + } + ).then((data) => { + this.treeData = data.varList + }).catch((e) => { + }) + } + } +} +</script> diff --git a/src/views/corpInfo/centercorpinfouser/index.vue b/src/views/corpInfo/centercorpinfouser/index.vue new file mode 100644 index 0000000..e9a16c0 --- /dev/null +++ b/src/views/corpInfo/centercorpinfouser/index.vue @@ -0,0 +1,37 @@ +<template> + <!-- <div class="">--> + <!-- <transition name="fade" mode="out-in">--> + <!-- <component :is="activeName"/>--> + <!-- </transition>--> + + <!-- </div>--> + <div> + <IndexList v-show="activeName=='IndexList'" ref="list" /> + <IndexView v-if="activeName=='IndexView'" /> + <Detail v-if="activeName=='Detail'" /> + </div> +</template> +<script> +import IndexList from './components/indexList' +import IndexView from './components/index_view' +import Detail from './components/detail' +export default { + components: { IndexList, IndexView, Detail }, + data() { + return { // src/views/corpInfo/examine/index.vue + activeName: 'IndexList' + } + }, + watch: { + activeName(val) { + if (val == 'IndexList') { + this.$refs.list.getList() + } + } + }, + methods: { + + } +} + +</script> diff --git a/src/views/system/group/user/index.vue b/src/views/system/group/user/index.vue index 5390f70..62fcc94 100644 --- a/src/views/system/group/user/index.vue +++ b/src/views/system/group/user/index.vue @@ -275,14 +275,7 @@ export default { ROLE_ID: [ { required: true, message: '角色不能为空', trigger: 'blur' } ], - USERNAME: [ - { required: true, message: '用户名不能为空', trigger: 'blur' }, - { - pattern: /^(13[0-9]|14[579]|15[0-3,5-9]|16[6]|17[0135678]|18[0-9]|19[89])\d{8}$/, - message: '用户名需使用手机号码格式' - }, - { validator: hasUser, trigger: 'blur' } - ], + NAME: [ { required: true, message: '姓名不能为空', trigger: 'blur' }, { min: 2, max: 30, message: '长度在 2 到 30 个字符', trigger: 'blur' } @@ -482,9 +475,9 @@ export default { }) }, goCheck() { - if (this.pd.USER_ID_CARD && this.pd.USERNAME) { + if (this.pd.USER_ID_CARD && this.pd.PHONE) { const phoneJudge = /^(13[0-9]|14[579]|15[0-3,5-9]|16[6]|17[0135678]|18[0-9]|19[0-9])\d{8}$/ - const phoneResult = phoneJudge.test(this.pd.USERNAME) + const phoneResult = phoneJudge.test(this.pd.PHONE) const cardJudge = /^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/ const cardResult = cardJudge.test(this.pd.USER_ID_CARD) if (phoneResult && cardResult) { @@ -493,7 +486,7 @@ export default { 'user/goCheck', { CARD_NO: this.pd.USER_ID_CARD, - USERNAME: this.pd.USERNAME, + USERNAME: this.pd.PHONE, USER_ID: this.pd.USER_ID || '' } ).then((data) => {