<template> <section class="content"> <div class="box box-info"> <div class="box-body"> <!-- 搜索 --> <el-form inline :model="searchForm" label-width="70px"> <el-form-item label="顶级机构"> <el-select v-model="searchForm.rootOrgId" placeholder="请选择" :disabled="!isSuperAdmin" @change="rootOrgChanged4Search" class="input_width" > <el-option v-for="item in rootOrgList" :label="item.name" :value="item.id" :key="item.id" /> </el-select> </el-form-item> <el-form-item label="角色"> <el-select clearable v-model="searchForm.roleId" placeholder="请选择" class="input_width" > <el-option v-for="item in roleList4Search" :label="item.roleName" :value="item.roleId" :key="item.roleId" /> </el-select> </el-form-item> <el-form-item label="登录名"> <el-input placeholder="请输入登录名" v-model="searchForm.loginName" class="input_width" /> </el-form-item> <el-form-item label="姓名"> <el-input placeholder="请输入姓名" v-model="searchForm.name" class="input_width" /> </el-form-item> <div></div> <el-form-item> <el-button size="small" type="primary" icon="el-icon-search" @click="handleSearchBtn" > 查询 </el-button> <el-button size="small" icon="el-icon-refresh" @click="resetEcsFormSearch" > 重置 </el-button> <el-button size="small" type="primary" icon="el-icon-plus" @click="openAddingDialog" > 新增 </el-button> </el-form-item> </el-form> <div class="block-seperator"></div> <!-- 添加用户信息弹出框 --> <el-dialog title="新增用户" width="450px" :visible.sync="addingDialog"> <el-form :inline="true" inline-message :model="userForm" ref="addingForm" :rules="rules" label-position="right" label-width="120px" > <el-row> <el-form-item label="姓名" prop="name"> <el-input class="input_width_lg" v-model="userForm.name" auto-complete="off" placeholder="请输入姓名" /> </el-form-item> </el-row> <el-row> <el-form-item label="登录名" prop="loginName"> <el-input class="input_width_lg" v-model="userForm.loginName" auto-complete="off" placeholder="请输入登录名" /> </el-form-item> </el-row> <el-row> <el-form-item label="密码" prop="password"> <el-input class="input_width_lg" v-model="userForm.password" auto-complete="off" placeholder="请输入密码" /> </el-form-item> </el-row> <el-row> <el-form-item label="联系方式" prop="mobile"> <el-input class="input_width_lg" v-model="userForm.mobile" auto-complete="off" placeholder="请输入联系方式" /> </el-form-item> </el-row> <el-row> <el-form-item label="顶级机构" prop="rootOrgId"> <el-select class="input_width_lg" v-model="userForm.rootOrgId" placeholder="请选择" :disabled="!isSuperAdmin" @change="rootOrgChanged4InsertOrUpdate" > <el-option v-for="item in rootOrgList" :label="item.name" :value="item.id" :key="item.id" > </el-option> </el-select> </el-form-item> </el-row> <el-row> <el-form-item label="角色" prop="roleIds"> <el-select class="input_width_lg" multiple v-model="userForm.roleIds" placeholder="请选择" @change="rolesChanged" > <el-option v-for="item in roleList4InsertOrUpdateWithoutSuperAdmin" :label="item.roleName" :value="item.roleId" :key="item.roleId" > </el-option> </el-select> </el-form-item> </el-row> <el-row> <el-form-item label="子机构" prop="orgId"> <el-select class="input_width_lg" :remote-method="getOrgList4InsertOrUpdate" @focus="e => getOrgList4InsertOrUpdate(e.target.value)" :loading="orgLoading4InsertOrUpdate" remote filterable clearable v-model="userForm.orgId" placeholder="请选择" > <el-option v-for="item in orgList4InsertOrUpdate" :label="item.name" :value="item.id" :key="item.id" > </el-option> </el-select> </el-form-item> </el-row> <el-row> <el-form-item label="状态"> <el-radio-group class="pull_right_sm" v-model="enableStr"> <el-radio label="true">启用</el-radio> <el-radio label="false">禁用</el-radio> </el-radio-group> </el-form-item> </el-row> <el-row class="d-flex justify-content-center"> <el-button type="primary" @click="add">保 存</el-button> <el-button @click="addingDialog = false">取 消</el-button> </el-row> </el-form> </el-dialog> <!-- 修改用户信息弹出框 --> <el-dialog title="编辑用户" width="450px" :visible.sync="updateDialog"> <el-form :inline="true" :model="userForm" ref="updateForm" :rules="rules" label-position="right" label-width="120px" > <el-row> <el-form-item label="ID"> <el-input class="input_width_lg" v-model="userForm.id" :disabled="true" /> </el-form-item> </el-row> <el-row> <el-form-item label="姓名" prop="name"> <el-input class="input_width_lg" v-model="userForm.name" auto-complete="off" placeholder="请输入姓名" /> </el-form-item> </el-row> <el-row> <el-form-item label="登录名" prop="loginName"> <el-input class="input_width_lg" v-model="userForm.loginName" auto-complete="off" placeholder="请输入登录名" /> </el-form-item> </el-row> <el-row> <el-form-item label="联系方式" prop="mobile"> <el-input class="input_width_lg" v-model="userForm.mobile" auto-complete="off" placeholder="请输入联系方式" /> </el-form-item> </el-row> <el-row> <el-form-item label="顶级机构" prop="rootOrgId"> <el-select class="input_width_lg" v-model="userForm.rootOrgId" placeholder="请选择" :disabled="true" > <el-option v-for="item in rootOrgList" :label="item.name" :value="item.id" :key="item.id" > </el-option> </el-select> </el-form-item> </el-row> <el-row> <el-form-item label="角色" prop="roleIds"> <el-select class="input_width_lg" multiple v-model="userForm.roleIds" placeholder="请选择" :disabled="rowIsSuperAdmin" @change="rolesChanged" > <el-option v-for="item in roleList4InsertOrUpdate" :label="item.roleName" :disabled="item.roleCode == 'SUPER_ADMIN'" :value="item.roleId" :key="item.roleId" > </el-option> </el-select> </el-form-item> </el-row> <el-row> <el-form-item label="子机构" prop="orgId"> <el-select class="input_width_lg" :remote-method="getOrgList4InsertOrUpdate" @focus="e => getOrgList4InsertOrUpdate(e.target.value)" :loading="orgLoading4InsertOrUpdate" remote filterable clearable v-model="userForm.orgId" placeholder="请选择" > <el-option v-for="item in orgList4InsertOrUpdate" :label="item.name" :value="item.id" :key="item.id" > </el-option> </el-select> </el-form-item> </el-row> <el-row> <el-form-item label="状态"> <el-radio-group class="pull_right_sm" v-model="enableStr" :disabled="rowIsSuperAdmin" > <el-radio label="true">启用</el-radio> <el-radio label="false">禁用</el-radio> </el-radio-group> </el-form-item> </el-row> <el-row class="d-flex justify-content-center"> <el-button type="primary" @click="update">保 存</el-button> <el-button @click="updateDialog = false">取 消</el-button> </el-row> </el-form> </el-dialog> <!-- 页面列表 --> <el-table :data="tableData" border resizable stripe style="width: 100%;" @selection-change="selectChange" > <el-table-column prop="id" width="80" label="ID" /> <el-table-column prop="name" width="120" label="姓名" /> <el-table-column prop="loginName" width="100" label="登录名" /> <el-table-column prop="rootOrgName" label="顶级机构" /> <!-- <el-table-column prop="roleNamesStr" width="110" label="角色" /> --> <el-table-column width="120" label="角色"> <span slot-scope="scope" v-html="scope.row.roleNamesStr.replace(/,/g, '<br />')" > </span> </el-table-column> <el-table-column prop="updateTime" width="160" label="更新时间" /> <el-table-column width="50" label="状态"> <span slot-scope="scope"> <span v-if="scope.row.enable"> <el-tooltip class="item" effect="dark" content="启用" placement="left" > <i class="el-icon-success" style="color:green;"></i> </el-tooltip> </span> <span v-else> <el-tooltip class="item" effect="dark" content="禁用" placement="left" > <i class="el-icon-error" style="color:red;"></i> </el-tooltip> </span> </span> </el-table-column> <el-table-column width="190" label="操作"> <div slot-scope="scope"> <el-button v-if="!scope.row.enable" size="mini" type="primary" plain @click="enableById(scope.row)" icon="el-icon-check" > 启用 </el-button> <el-button v-if="scope.row.enable" size="mini" type="danger" @click="disableById(scope.row)" icon="el-icon-close" > 禁用 </el-button> <el-dropdown> <el-button type="primary" plain size="mini"> 更多<i class="el-icon-arrow-down el-icon--right"></i> </el-button> <el-dropdown-menu slot="dropdown"> <el-dropdown-item> <el-button size="mini" type="primary" plain @click="openUpdateDialog(scope.row)" icon="el-icon-edit" >编辑 </el-button> </el-dropdown-item> <el-dropdown-item> <el-button v-if="false" size="mini" type="danger" @click="deleteById(scope.row)" icon="el-icon-delete" >删除 </el-button> </el-dropdown-item> <el-dropdown-item> <el-button size="mini" type="danger" @click="resetPass(scope.row)" > <v-icon name="lock" scale="0.7" /> 重置密码 </el-button> </el-dropdown-item> </el-dropdown-menu> </el-dropdown> </div> </el-table-column> </el-table> <div class="page pull-right"> <el-pagination @current-change="handleCurrentChange" :current-page="currentPage" :page-size="10" :page-sizes="[10, 20, 50, 100]" @size-change="handleSizeChange" layout="total, sizes, prev, pager, next, jumper" :total="total" /> </div> </div> </div> </section> </template> <script> import { CORE_API } from "@/constants/constants.js"; import { mapState } from "vuex"; export default { name: "User", data() { var validateRootOrg = (rule, value, callback) => { if (0 != value && !value) { callback(new Error("请选择顶级机构")); } else { callback(); } }; var validateRoles = (rule, value, callback) => { if (value.length == 0) { callback(new Error("请选择角色")); } else { callback(); } }; return { orgLoading4InsertOrUpdate: false, isSuperAdmin: false, roleList4Search: [], roleList4InsertOrUpdate: [], rootOrgList: [], orgList4InsertOrUpdate: [], searchForm: { name: "", loginName: "", enable: "", rootOrgId: "", roleId: "" }, userForm: { id: null, name: "", loginName: "", password: "", mobile: "", enable: true, rootOrgId: null, orgId: null, roleIds: [] }, enableStr: "true", tempOrgList: [], userId: "", selectedUserIds: [], tableData: [], currentPage: 1, pageSize: 10, total: 10, addingDialog: false, updateDialog: false, rowIsSuperAdmin: false, rules: { name: [ { required: true, message: "请输入姓名", trigger: "blur" } ], loginName: [ { required: true, message: "请输入登录名", trigger: "blur" } ], password: [ { required: true, message: "请输入密码", trigger: "blur" } ], mobile: [ { message: "请输入联系方式", trigger: "blur" } ], rootOrgId: [ { validator: validateRootOrg, trigger: "blur,change" } ], orgId: [], roleIds: [ { validator: validateRoles, trigger: "blur,change" } ] } }; }, computed: { ...mapState({ user: state => state.user }), userIds() { var userIds = ""; for (let userId of this.selectedUserIds) { if (!userIds) { userIds += userId; } else { userIds += "," + userId; } } return userIds; }, roleList4InsertOrUpdateWithoutSuperAdmin() { return this.roleList4InsertOrUpdate.filter( item => item.roleCode != "SUPER_ADMIN" ); } }, methods: { resetEcsFormSearch() { this.searchForm = Object.assign(this.searchForm, { roleId: "", loginName: "", name: "" }); }, handleSizeChange(val) { this.currentPage = 1; this.pageSize = val; this.search(); }, validateOrg(rule, value, callback) { if (0 != value && !value) { callback(new Error("请选择子机构")); } else { callback(); } }, rolesChanged() { var isLC = false; for (let cur of this.roleList4InsertOrUpdate) { if ( cur.roleCode == "LC_USER" && this.userForm.roleIds.includes(cur.roleId) ) { isLC = true; break; } } console.log("rolesChanged(); isLC:", isLC); if (isLC) { this.rules.orgId = [ { validator: this.validateOrg, trigger: "blur,change" } ]; } else { this.rules.orgId = []; } }, rootOrgChanged4Search() { var url = CORE_API + "/rolePrivilege/getRoles?includeSuperAdmin=" + true + "&rootOrgId=" + this.searchForm.rootOrgId; this.$httpWithMsg.post(url).then(response => { this.roleList4Search = response.data; }); }, rootOrgChanged4InsertOrUpdate() { this.orgList4InsertOrUpdate = []; var url = CORE_API + "/rolePrivilege/getRoles?includeSuperAdmin=" + true + "&rootOrgId=" + this.userForm.rootOrgId; this.$httpWithMsg.post(url).then(response => { this.roleList4InsertOrUpdate = response.data; this.rolesChanged(); }); }, getOrgList4InsertOrUpdate(query) { this.orgLoading4InsertOrUpdate = true; var url = CORE_API + "/org/query?" + new URLSearchParams({ name: query, rootOrgId: this.userForm.rootOrgId }); this.$httpWithMsg .get(url) .then(response => { this.orgList4InsertOrUpdate = response.data; this.orgLoading4InsertOrUpdate = false; }) .catch(() => { this.orgLoading4InsertOrUpdate = false; }); }, getTag(status) { if (status == true) { return "success"; } else if (status == false) { return "danger"; } return status; }, getLevel(level) { if (level == "ZSB") { return "专升本"; } else if (level == "GQZ") { return "高起专"; } return level; }, handleSearchBtn() { this.currentPage = 1; this.search(); }, search() { this.loading = true; var param = new URLSearchParams(this.searchForm); var url = CORE_API + "/user/all/" + this.currentPage + "/" + this.pageSize + "?" + param; this.$httpWithMsg.get(url).then(response => { console.log(response); this.tableData = response.data.list; this.total = response.data.total; this.loading = false; }); }, handleCurrentChange(val) { this.currentPage = val; this.search(); }, selectChange(row) { this.selectedUserIds = []; row.forEach(element => { this.selectedUserIds.push(element.id); }); console.log(this.selectedUserIds); }, //新增 openAddingDialog() { if (this.$refs.addingForm) { this.$refs.addingForm.resetFields(); } if (this.$refs.updateForm) { this.$refs.updateForm.resetFields(); } this.addingDialog = true; this.userForm.name = ""; this.userForm.loginName = ""; this.userForm.password = ""; this.userForm.mobile = ""; this.userForm.roleIds = []; this.userForm.orgId = null; this.enableStr = "true"; this.orgList4InsertOrUpdate = []; this.rolesChanged(); }, //修改 openUpdateDialog(row) { if (this.$refs.updateForm) { this.$refs.updateForm.resetFields(); } if (this.$refs.addingForm) { this.$refs.addingForm.resetFields(); } this.updateDialog = true; this.userForm.id = row.id; this.userForm.roleIds = row.roleIds; this.userForm.name = row.name; this.userForm.loginName = row.loginName; this.enableStr = row.enable ? "true" : "false"; this.userForm.mobile = row.mobile; this.userForm.password = null; this.userForm.rootOrgId = row.rootOrgId; this.rowIsSuperAdmin = false; for (let roleCode of row.roleCodes) { if (roleCode == "SUPER_ADMIN") { this.rowIsSuperAdmin = true; break; } } this.rootOrgChanged4InsertOrUpdate(); this.orgList4InsertOrUpdate = [{ id: row.orgId, name: row.orgName }]; this.userForm.orgId = row.orgId; }, exportUser() { var param = new URLSearchParams(this.searchForm); window.open(CORE_API + "/user/export?" + param); }, //保存 add() { var url = CORE_API + "/user"; this.$refs.addingForm.validate(valid => { if (valid) { this.userForm.enable = this.enableStr == "true"; this.$httpWithMsg.post(url, this.userForm).then(() => { this.$notify({ type: "success", message: "添加成功" }); this.search(); this.addingDialog = false; }); } else { return false; } }); }, //保存 update() { var url = CORE_API + "/user"; this.$refs.updateForm.validate(valid => { if (valid) { this.userForm.enable = this.enableStr == "true"; this.$httpWithMsg.put(url, this.userForm).then(() => { this.$notify({ type: "success", message: "添加成功" }); this.search(); this.updateDialog = false; }); } else { return false; } }); }, //重置密码 resetPass(row) { this.$confirm("是否重置密码?", "提示", { confirmButtonText: "确定", cancelButtonText: "取消", type: "warning" }) .then(() => { var url = CORE_API + "/user/resetPass/" + row.id; this.$httpWithMsg.put(url).then(() => { this.$notify({ type: "success", message: "重置成功!" }); return this.search(); }); }) .catch(e => console.log(e)); }, //删除单个数据 deleteById(row) { this.$confirm("是否删除该用户?", "提示", { confirmButtonText: "确定", cancelButtonText: "取消", type: "warning" }).then(() => { var url = CORE_API + "/user/" + row.id; this.$httpWithMsg.delete(url).then(() => { this.$notify({ type: "success", message: "删除成功!" }); return this.search(); }); }); }, //删除多条数据 deleteByIds() { if (this.selectedUserIds.length === 0) { this.$notify({ type: "warning", message: "请选择要删除的用户" }); } else { this.$confirm("是否删除这些用户?", "提示", { confirmButtonText: "确定", cancelButtonText: "取消", type: "error" }).then(() => { var url = CORE_API + "/user/" + this.userIds; this.$httpWithMsg.delete(url).then(() => { this.$notify({ type: "success", message: "删除成功!" }); this.search(); }); }); } }, //启用 enableByIds() { if (this.selectedUserIds.length === 0) { this.$notify({ type: "warning", message: "请选择要开启的用户" }); } else { this.$confirm("是否启用这些用户?", "提示", { confirmButtonText: "确定", cancelButtonText: "取消", type: "warning" }).then(() => { var url = CORE_API + "/user/enable/" + this.userIds; this.$httpWithMsg.put(url, {}).then(() => { this.$notify({ type: "success", message: "开启成功!" }); return this.search(); }); }); } }, enableById(row) { this.$confirm("是否启用该用户?", "提示", { confirmButtonText: "确定", cancelButtonText: "取消", type: "warning" }).then(() => { var url = CORE_API + "/user/enable/" + row.id; this.$httpWithMsg.put(url, {}).then(() => { this.$notify({ type: "success", message: "开启成功!" }); this.search(); }); }); }, //禁用 disableByIds() { if (this.selectedUserIds.length === 0) { this.$notify({ type: "warning", message: "请选择要禁用的用户" }); } else { this.$confirm("是否禁用这些用户?", "提示", { confirmButtonText: "确定", cancelButtonText: "取消", type: "error" }).then(() => { var url = CORE_API + "/user/disable/" + this.userIds; this.$httpWithMsg.put(url, {}).then(() => { this.$notify({ type: "success", message: "禁用成功!" }); this.search(); }); }); } }, //禁用 disableById(row) { this.$confirm("是否禁用该用户?", "提示", { confirmButtonText: "确定", cancelButtonText: "取消", type: "error" }).then(() => { var url = CORE_API + "/user/disable/" + row.id; this.$httpWithMsg.put(url, {}).then(() => { this.$notify({ type: "success", message: "禁用成功!" }); this.search(); }); }); }, /*初始化*/ init() { for (let role of this.user.roleList) { if (role.roleCode == "SUPER_ADMIN") { this.isSuperAdmin = true; break; } } this.searchForm.rootOrgId = this.user.rootOrgId; this.userForm.rootOrgId = this.user.rootOrgId; var url1 = CORE_API + "/org/getRootOrgList"; var url2 = CORE_API + "/rolePrivilege/getRoles?includeSuperAdmin=true&rootOrgId=" + this.user.rootOrgId; Promise.all([ this.$httpWithMsg.get(url1), this.$httpWithMsg.post(url2) ]).then(([resp1, resp2]) => { this.rootOrgList = resp1.data; this.roleList4Search = resp2.data; this.roleList4InsertOrUpdate = resp2.data; this.search(); }); } }, //初始化查询 created() { this.init(); } }; </script> <style scoped> .page { margin-top: 10px; } .input_width_lg { width: 180px; } .input_width { width: 150px; } </style>