| | |
| | | <basic-container> |
| | | <avue-crud |
| | | ref="userCrud" |
| | | :before-open="beforeOpen" |
| | | :data="tableData" |
| | | :option="option" |
| | | :page.sync="page" |
| | |
| | | @row-click="rowClickHandler" |
| | | @row-save="rowSaveHandler" |
| | | @row-update="rowUpdateHandler" |
| | | @row-del="rowDelHandler" |
| | | > |
| | | <!-- 部门头部搜索插槽 --> |
| | | <template slot-scope="{disabled,size}" slot="pkDepartmentNameSearch"> |
| | | <div style="display: flex;gap: 5px"> |
| | | <el-select v-model="departSearchValue" clearable placeholder="请选择部门"> |
| | | <el-option :label="departSearchObj.name" :value="departSearchObj.oid"></el-option> |
| | | </el-select> |
| | | <el-button size="small" type="success" @click="dialogDepartSearchHandler">选择部门</el-button> |
| | | </div> |
| | | </template> |
| | | |
| | | <!-- 对话框部门插槽 --> |
| | | <template slot="pkDepartmentNameForm" slot-scope="scope"> |
| | | <div style="display: flex;gap: 5px"> |
| | | <el-select v-model="departValue" clearable placeholder="请选择部门"> |
| | | <el-option :label="departObj.name" :value="departObj.oid"></el-option> |
| | | </el-select> |
| | | <el-button size="small" type="success" @click="dialogDepartHandler">选择部门</el-button> |
| | | </div> |
| | | </template> |
| | | |
| | | <template slot="status" slot-scope="{row}"> |
| | | <el-tag v-if="row.status === 0" type="success">启用</el-tag> |
| | | <el-tag v-if="row.status === 1" type="danger">停用</el-tag> |
| | |
| | | </template> |
| | | |
| | | <template #menu="{row,index,size}"> |
| | | <el-button size="small" type="text" @click="stopUserHandler(row)"> |
| | | <el-button icon="el-icon-edit" size="small" type="text" @click.stop="rowEditHandler(row,index)">编辑</el-button> |
| | | <el-button icon="el-icon-delete" size="small" type="text" @click.stop="rowDeleteHandler(row)">删除</el-button> |
| | | <el-button size="small" type="text" @click.stop="stopUserHandler(row)"> |
| | | <span v-if="row.status === 0" style="color: #fa3434"><i class="el-icon-video-pause"></i> 停用</span> |
| | | <span v-if="row.status === 1" style="color: #55b61d"><i class="el-icon-video-pause"></i> 启用</span> |
| | | <span v-if="row.status === 1" style="color: #55b61d"><i class="el-icon-video-play"></i> 启用</span> |
| | | </el-button> |
| | | </template> |
| | | |
| | | <template slot="menuLeft" slot-scope="scope"> |
| | | <el-button icon="el-icon-delete" plain size="small" type="danger" @click="allDelHandler">删除</el-button> |
| | | <el-button icon="el-icon-user" plain size="small" type="primary" @click="roleHandler">分配角色</el-button> |
| | | <el-button icon="el-icon-school" plain size="small" type="primary">分配部门</el-button> |
| | | <el-button icon="el-icon-school" plain size="small" type="primary" @click="departmentHandler">分配部门</el-button> |
| | | <el-button icon="el-icon-key" plain size="small" type="success" @click="setPwsHandler">设置密码策略</el-button> |
| | | <el-button icon="el-icon-upload2" plain size="small" type="primary">导入人员</el-button> |
| | | <el-button icon="el-icon-download" plain size="small" type="primary">下载导入模板</el-button> |
| | | <el-button icon="el-icon-upload2" plain size="small" type="primary" @click="uploadUser">导入人员</el-button> |
| | | <el-button icon="el-icon-download" plain size="small" type="primary" @click="downloadHandler">下载导入模板</el-button> |
| | | </template> |
| | | </avue-crud> |
| | | |
| | | <!-- 分配角色穿梭框 --> |
| | | <transfer ref="transfer" :left-role-data="leftRoleData" :right-role-data="rightRoleData" |
| | | :transferTitle="transferTitle" title="分配角色" |
| | |
| | | <el-dialog |
| | | v-dialogDrag |
| | | v-loading="pwdLoading" |
| | | :destroy-on-close="true" |
| | | :visible.sync="pwdVisible" |
| | | append-to-body="true" |
| | | class="avue-dialog" |
| | | style="margin-top: -20vh !important;" |
| | | style="margin-top: -15vh !important;" |
| | | title="设置密码策略" |
| | | width="30%" |
| | | > |
| | |
| | | <div slot="footer" class="dialog-footer"> |
| | | <el-button size="small" @click="pwdVisible = false">取 消</el-button> |
| | | <el-button size="small" type="primary" @click="savePwdHandler">确 定</el-button> |
| | | </div> |
| | | </el-dialog> |
| | | |
| | | <!-- 导入人员 --> |
| | | <upload-file ref="upload" :tipList="tipList" :fileType="upFileType" :fileUrl="fileUrl" title="导入人员" @updata="getTableList"></upload-file> |
| | | |
| | | <!-- 分配部门对话框 --> |
| | | <el-dialog |
| | | v-dialogDrag |
| | | v-loading="departLoading" |
| | | :visible.sync="departVisible" |
| | | append-to-body="true" |
| | | class="avue-dialog" |
| | | title="分配部门" |
| | | width="50%" |
| | | > |
| | | <avue-crud |
| | | ref="departCrud" |
| | | :data="departData" |
| | | :option="departOption" |
| | | @current-row-change="handleCurrentRowChange" |
| | | > |
| | | </avue-crud> |
| | | <div slot="footer" class="dialog-footer"> |
| | | <el-button size="small" @click="departVisible = false">取 消</el-button> |
| | | <el-button size="small" type="primary" @click="saveDepartHandler">确 定</el-button> |
| | | </div> |
| | | </el-dialog> |
| | | </basic-container> |
| | |
| | | updateUser, |
| | | deleteUser, |
| | | selectPwdStrategyMap, |
| | | saveUserPasswordStrateg |
| | | saveUserPasswordStrateg, |
| | | download, |
| | | departmentQueryController, |
| | | saveUsersDepts |
| | | } from '@/api/system/user/api' |
| | | import {column} from "./option" |
| | | import func from '@/util/func' |
| | | |
| | | export default { |
| | | name: "userManage", |
| | | data() { |
| | | data: function () { |
| | | return { |
| | | departSearchObj:{}, |
| | | departSearchValue:'', |
| | | loadKey: 0, |
| | | departStatus: '', // 区分不同方式打开部门对话框 |
| | | departValue: '', // 部门对话框下拉框绑定值 |
| | | departObj: {}, // 部门对话框下拉框选项绑定值 |
| | | departCurrenRow: {}, |
| | | departOption: { |
| | | ...basicOption, |
| | | addBtn:false, |
| | | rowKey: 'oid', |
| | | rowParentKey: 'parentId', |
| | | selection: false, |
| | | highlightCurrentRow: true, |
| | | stripe: false, |
| | | menu: false, |
| | | refreshBtn: false, |
| | | gridBtn: false, |
| | | column: [ |
| | | { |
| | | label: '名称', |
| | | prop: 'name', |
| | | }, |
| | | { |
| | | label: '编号', |
| | | prop: 'id', |
| | | }, |
| | | { |
| | | label: '描述', |
| | | prop: 'description', |
| | | }, |
| | | ] |
| | | }, |
| | | departData: [], |
| | | departLoading: false, |
| | | departVisible: false, |
| | | upFileType: ['xls', 'xlsx'], |
| | | fileUrl: 'api/userQueryController/importUser', |
| | | pwdVisible: false, |
| | | pwdLoading: false, |
| | | pwdValue: '', |
| | |
| | | tableData: [], |
| | | option: { |
| | | ...basicOption, |
| | | editBtn: false, |
| | | delBtn: false, |
| | | dialogWidth: '50%', |
| | | calcHeight: -60, |
| | | column: column |
| | |
| | | selectList: [], |
| | | leftRoleData: [], // 分配角色穿梭框左侧初始数据 |
| | | rightRoleData: [], // 分配角色穿梭框右侧初始数据 |
| | | transferTitle: ['现有角色', '拥有角色'] |
| | | transferTitle: ['现有角色', '拥有角色'], |
| | | tipList:["导入模板中标明红色字体的为必输项","部门列上下级关系必须按照反斜杠隔开(/)"] |
| | | } |
| | | }, |
| | | created() { |
| | | }, |
| | | methods: { |
| | | // 新增或修改对话框打开前 |
| | | beforeOpen(done, type) { |
| | | if(type == 'add'){ |
| | | this.departObj = {}; |
| | | this.departValue = ""; |
| | | } |
| | | done(); |
| | | }, |
| | | |
| | | // 表格请求 |
| | | getTableList() { |
| | | this.tableLoading = true; |
| | |
| | | |
| | | // 搜索查询 |
| | | handleSearch(params, done) { |
| | | this.searchParams = {}; |
| | | if(this.departSearchObj && this.departSearchValue){ |
| | | this.searchParams['conditionMap["pkDepartment"]'] = this.departSearchValue; |
| | | } |
| | | |
| | | if (!func.isEmptyObject(params)) { |
| | | for (let key in params) { |
| | | if (params.hasOwnProperty(key)) { |
| | |
| | | this.searchParams[`conditionMap["${newKey}"]`] = params[key]; |
| | | } |
| | | } |
| | | } else { |
| | | } |
| | | |
| | | if (func.isEmptyObject(params) && !this.departSearchValue) { |
| | | this.searchParams = {}; |
| | | } |
| | | |
| | | this.getTableList(); |
| | | done(); |
| | | }, |
| | | |
| | | // 重置搜索条件 |
| | | handleReset() { |
| | | this.departSearchObj = {}; |
| | | this.departSearchValue = ""; |
| | | this.searchParams = {}; |
| | | this.getTableList(); |
| | | }, |
| | |
| | | }, |
| | | |
| | | // 新增 |
| | | rowSaveHandler(row, done) { |
| | | rowSaveHandler(row, done,loading) { |
| | | if (row.password != row.confirmPassword) { |
| | | this.$message.error('请检查两次密码是否输入一致!') |
| | | return this.$refs.userCrud.$refs.dialogForm.$refs.tableForm.allDisabled = false; |
| | | } |
| | | row.pkDepartment = this.departValue; // 将当前行的部门参数pkDepartment 赋值为下拉框绑定的值 |
| | | addUser(row).then(res => { |
| | | if (res.data.code === 200) { |
| | | this.$message.success(res.data.obj); |
| | | this.getTableList(); |
| | | done(); |
| | | } |
| | | }).catch(err => { |
| | | loading() |
| | | console.log(err); |
| | | }) |
| | | done() |
| | | }, |
| | | |
| | | // 操作栏编辑 |
| | | rowEditHandler(row, index) { |
| | | let obj = { name: row.pkDepartmentName, oid: row.pkDepartment, rowOid: row.oid }; |
| | | this.departValue = row.pkDepartment; |
| | | this.departObj = obj; |
| | | |
| | | if (this.departObj.rowOid) { |
| | | this.$refs.userCrud.rowEdit(row, index); |
| | | } |
| | | |
| | | }, |
| | | |
| | | // 编辑 |
| | | rowUpdateHandler(row, index, done) { |
| | | rowUpdateHandler(row, index, done,loading) { |
| | | if (row.password != row.confirmPassword) { |
| | | this.$message.error('请检查两次密码是否输入一致!') |
| | | return this.$refs.userCrud.$refs.dialogForm.$refs.tableForm.allDisabled = false; |
| | | } |
| | | row.pkDepartment = this.departValue; // 将当前行的部门参数pkDepartment 赋值为下拉框绑定的值 |
| | | updateUser(row).then(res => { |
| | | if (res.data.code === 200) { |
| | | this.$message.success(res.data.obj); |
| | | this.getTableList(); |
| | | done() |
| | | } |
| | | }).catch(err => { |
| | | loading() |
| | | console.log(err); |
| | | }); |
| | | done() |
| | | }, |
| | | |
| | | // 删除 |
| | | rowDelHandler(row) { |
| | | rowDeleteHandler(row) { |
| | | let params = { |
| | | ids: row.oid |
| | | } |
| | | deleteUser(params).then(res => { |
| | | if (res.data.code === 200) { |
| | | this.$message.success(res.data.obj); |
| | | this.getTableList(); |
| | | } |
| | | }).catch(err => { |
| | | console.log(err); |
| | | }) |
| | | |
| | | this.$confirm('您确定要删除当前的成员吗?', '提示', { |
| | | confirmButtonText: '确定', |
| | | cancelButtonText: '取消', |
| | | type: 'warning' |
| | | }).then(() => { |
| | | deleteUser(params).then(res => { |
| | | if (res.data.code === 200) { |
| | | this.$message.success(res.data.obj); |
| | | this.getTableList(); |
| | | } |
| | | }); |
| | | }).catch(() => { |
| | | this.$message({ |
| | | type: 'info', |
| | | message: '已取消删除' |
| | | }); |
| | | }); |
| | | }, |
| | | |
| | | // 多选删除 |
| | |
| | | message: '已取消删除' |
| | | }); |
| | | }); |
| | | } |
| | | }, |
| | | |
| | | // 下载导入模板 |
| | | downloadHandler() { |
| | | download().then(res => { |
| | | console.log(res); |
| | | func.downloadFileByBlobHandler(res); |
| | | this.$message.success('下载成功'); |
| | | }).catch(err => { |
| | | this.$message.error(err); |
| | | }) |
| | | }, |
| | | |
| | | // 导入人员 |
| | | uploadUser() { |
| | | this.$refs.upload.visible = true; |
| | | }, |
| | | |
| | | // 分配部门 |
| | | departmentHandler() { |
| | | if (this.selectList.length <= 0) { |
| | | this.$message.warning('清先选择人员再进行操作!'); |
| | | return; |
| | | } |
| | | this.departStatus = 'default'; // 区分不同方式打开部门对话框 |
| | | this.departmentQueryOnLoad(); |
| | | }, |
| | | |
| | | // 分配部门表格初始化请求 |
| | | departmentQueryOnLoad() { |
| | | departmentQueryController({queryAllLevel: true}).then(res => { |
| | | const data = res.data.treeData; |
| | | this.departData = this.departDtaFormAtter(data); |
| | | this.departVisible = true; |
| | | }).catch(err => { |
| | | this.$message.error(err); |
| | | }) |
| | | }, |
| | | |
| | | // 分配部门数据转换 |
| | | departDtaFormAtter(items) { |
| | | return items.map(item => { |
| | | // 转换当前节点的属性 |
| | | const formList = { |
| | | oid: item.oid, |
| | | id: item.attributes.id, |
| | | name: item.attributes.name, |
| | | description: item.attributes.description, |
| | | parentId: item.parentId, |
| | | parentName: item.parentName, |
| | | parentBtmName: item.parentBtmName, |
| | | // 如果children存在且不为空,则递归转换children |
| | | children: item.children && item.children.length > 0 ? this.departDtaFormAtter(item.children) : undefined |
| | | }; |
| | | return formList; |
| | | }); |
| | | }, |
| | | |
| | | // 分配部门 行单选 |
| | | handleCurrentRowChange(row) { |
| | | this.departCurrenRow = row; |
| | | }, |
| | | |
| | | // 分配部门 保存 |
| | | saveDepartHandler() { |
| | | if (func.isEmptyObject(this.departCurrenRow)) { |
| | | this.$message.warning('请选择部门节点!') |
| | | return; |
| | | } |
| | | |
| | | if (this.departStatus == 'default') { |
| | | let params = { |
| | | userOIds: this.selectList.map(item => item.oid).join(','), |
| | | deptId: this.departCurrenRow.oid, |
| | | }; |
| | | saveUsersDepts(params).then(res => { |
| | | if (res.data.code === 200) { |
| | | this.departVisible = false; |
| | | this.getTableList(); |
| | | this.$message.success('分配成功!') |
| | | } |
| | | }).catch(err => { |
| | | console.log(err); |
| | | }) |
| | | return; |
| | | } |
| | | |
| | | if (this.departStatus == 'handle') { |
| | | this.departObj = this.departCurrenRow; |
| | | this.departValue = this.departCurrenRow.oid; |
| | | this.departVisible = false; |
| | | return;; |
| | | } |
| | | |
| | | if(this.departStatus == 'search'){ |
| | | this.departSearchObj = this.departCurrenRow; |
| | | this.departSearchValue = this.departCurrenRow.oid; |
| | | this.departVisible = false; |
| | | return; |
| | | } |
| | | }, |
| | | |
| | | // 对话框分配部门按钮 |
| | | dialogDepartHandler() { |
| | | this.departmentQueryOnLoad(); |
| | | this.departStatus = 'handle'; // 区分不同方式打开部门对话框 |
| | | }, |
| | | |
| | | // 搜索对话框分配部门按钮 |
| | | dialogDepartSearchHandler(){ |
| | | this.departmentQueryOnLoad(); |
| | | this.departStatus = 'search'; // 区分不同方式打开部门对话框 |
| | | }, |
| | | } |
| | | |
| | | } |