<template> <div class="system-account main-wrap"> <el-form class="search-bar"> <div class="grid-content"> <el-input v-model.trim="filters.name" placeholder="请输入姓名" clearable></el-input> </div> <div class="grid-content"> <el-input v-model.trim="filters.department" placeholder="请输入科室" clearable></el-input> </div> <div class="grid-content"> <el-select v-model="filters.isFrozen" filterable clearable placeholder="账号状态"> <el-option v-for="item in accountStatusOptions" :key="item.id" :label="item.label" :value="item.value"> </el-option> </el-select> </div> <el-button type="primary" icon="el-icon-search" @click="searchList">搜索</el-button> <el-button class="margin-css" type="primary" icon="el-icon-upload" @click="showEditDialog(0)">新增</el-button> </el-form> <div class="tabel-wrap"> <el-table border v-loading="loading" :data="list" style="width: 100%"> <el-table-column type="index" label="序号" width="50"> </el-table-column> <el-table-column prop="name" label="姓名" min-width="120"> </el-table-column> <el-table-column prop="department" label="部门科室" min-width="120"> </el-table-column> <el-table-column prop="cellphone" label="手机号" min-width="120"> </el-table-column> <el-table-column prop="sex" :formatter="getSexValue" label="性别" min-width="120"> </el-table-column> <el-table-column prop="account" label="登陆账号" min-width="120"> </el-table-column> <el-table-column prop="isFrozen" :formatter="getStatusValue" label="状态" min-width="120"> </el-table-column> <el-table-column fixed="right" label="操作" min-width="80" align="center"> <template slot-scope="scope"> <el-dropdown trigger="click"> <el-button type="primary" size="mini"> <i class="el-icon-setting"></i> </el-button> <el-dropdown-menu class="AccountIndex" slot="dropdown"> <el-dropdown-item> <el-button type="primary" size="mini" class="operationBtnWidth" @click="showEditDialog(1, scope)">修改</el-button> </el-dropdown-item> <el-dropdown-item> <el-button type="primary" size="mini" class="operationBtnWidth" @click="showUserAuth(scope)">授权</el-button> </el-dropdown-item> <el-dropdown-item> <el-button type="primary" size="mini" class="operationBtnWidth" @click="showResetUserPwd(scope)">重置密码</el-button> </el-dropdown-item> <el-dropdown-item> <el-button type="primary" size="mini" class="operationBtnWidth" @click="freezeUser(scope)">{{scope.row.isFrozen?'账户解冻':'账户冻结'}}</el-button> </el-dropdown-item> </el-dropdown-menu> </el-dropdown> </template> </el-table-column> </el-table> <el-pagination layout="prev, pager, next" :current-page="pagination.pageNum" :page-size="pagination.pageSize" :total="pagination.total" @current-change="changePage"> </el-pagination> </div> <drag-dialog class="rateDialog" :title="editType?'修改':'新增'" :visible.sync="dialogEditVisible" :before-close="resetEditDialog"> <el-form :disabled="loading"> <el-form-item label="姓名" label-width="200px"> <el-input v-model.trim="selected.name" placeholder="请输入姓名" :maxlength="20" clearable></el-input> </el-form-item> <el-form-item label="部门科室" label-width="200px"> <el-input v-model.trim="selected.department" placeholder="请输入部门科室" :maxlength="20" clearable></el-input> </el-form-item> <el-form-item label="登陆账号" label-width="200px"> <span v-if="editType">{{selected.account}}</span> <el-input v-else v-model.trim="selected.account" placeholder="请输入登陆账号" :maxlength="20" clearable></el-input> </el-form-item> <el-form-item label="手机号" label-width="200px"> <el-input :value="selected.cellphone" @change="updateCellphone" type="number" placeholder="请输入手机号" clearable></el-input> </el-form-item> <el-form-item label="性别" label-width="200px"> <el-radio v-for="(sex, index) in sexOptions" :key="index" v-model="selected.sex" :label="sex.value">{{sex.label}}</el-radio> </el-form-item> </el-form> <div slot="footer" class="dialog-footer"> <el-button @click="resetEditDialog">取 消</el-button> <el-button type="primary" @click="updateAccount">确 定</el-button> </div> </drag-dialog> <drag-dialog class="rateDialog" title="权限" :visible.sync="dialogAuthVisible" :before-close="resetAuthDialog"> <el-checkbox-group class="menuList" v-model="selected.menuList"> <div class="menuItem" v-for="(menu, index) in menuList" :key="index"> <div class="menuName">{{menu.menuName}}</div> <div class="subMenuList"> <el-checkbox class="subMenuItem" v-for="(subMenu, index) in menu.childList" :key="index" :label="subMenu.id">{{subMenu.menuName}}</el-checkbox> </div> </div> </el-checkbox-group> <span slot="footer" class="dialog-footer"> <el-button @click="resetAuthDialog">取 消</el-button> <el-button type="primary" @click="updateUserAuth">确 定</el-button> </span> </drag-dialog> </div> </template> <script> import listMixin from '../../../mixin/listPage.js'; import { accountStatusOptions } from '@/config'; import { mapGetters, mapActions } from 'vuex'; import store from './store.js'; import { resetPwd, toggleUserFreezeState, addAccount, updateAccount, fetchMenuList, fetchUserMenuList, updateUserAuthMenu, } from '@/api/system/account'; import { sexOptions } from '@/config'; export default { beforeRouteEnter(to, from, next) { store.install(); next(); }, mixins: [listMixin], data() { return { filters: { name: '', department: '', isFrozen: '', }, accountStatusOptions: accountStatusOptions, dialogAuthVisible: false, menuList: [], sexOptions: sexOptions, }; }, computed: { ...mapGetters('system/account', { list: 'accountList', pagination: 'pagination', }), }, methods: { ...mapActions('system/account', { fetchList: 'fetchList' }), initSelected() { this.selected = { id: '', name: '', account: '', department: '', cellphone: '', sex: '', menuList: [], }; }, getSexValue(c, r, val) { let item = this.sexOptions.find(item => item.value == val); return item ? item.label : val; }, getStatusValue(c, r, val) { let item = this.accountStatusOptions.find(item => item.value == val); return item ? item.label : val; }, showEditDialog(type, data) { this.editType = type; if (type) { this.selected = { id: data.row.id, name: data.row.name, account: data.row.account, department: data.row.department, cellphone: data.row.cellphone, sex: data.row.sex, }; } else { this.initSelected(); } this.dialogEditVisible = true; }, showResetUserPwd(data) { this.$confirm(`是否要重置密码?`, '提示', { confirmButtonText: '确定', cancelButtonText: '取消', type: 'warning', }) .then(() => { const entity = { id: data.row.id, }; resetPwd(entity) .then(res => { this.fetchList(); this.$message.success('密码已重置为123456!'); }) .catch(err => { this.$message.error('重置密码失败!'); }); }) .catch(action => { console.log(action); }); }, freezeUser(data) { this.$confirm( `确认要${data.row.isFrozen ? '解冻' : '冻结'} ${data.row.name} 用户吗?`, '提示', { confirmButtonText: '确定', cancelButtonText: '取消', type: 'warning', } ) .then(() => { const entity = { id: data.row.id, isFrozen: data.row.isFrozen ? 0 : 1, }; toggleUserFreezeState(entity) .then(res => { this.fetchList(); this.$message.success(res.msg); }) .catch(err => { this.$message.error('冻结/解冻失败!'); }); }) .catch(action => { console.log(action); }); }, validateSelect() { if (!this.selected.name) { this.$message.error('请输入姓名!'); return; } if (!this.selected.department) { this.$message.error('请选择部门科室!'); return; } if (!this.selected.account) { this.$message.error('请选择登陆账号!'); return; } if (!this.selected.cellphone) { this.$message.error('请输入手机号!'); return; } if (this.selected.cellphone.length !== 11) { this.$message.error('请输入正确手机号!'); return; } if (!this.selected.sex) { this.$message.error('请选择性别!'); return; } return true; }, updateCellphone(val) { console.log(val); this.selected.cellphone = val.slice(0, 11); }, updateAccount() { if (!this.validateSelect()) { return; } const entity = { id: this.selected.id, account: this.selected.account, name: this.selected.name, department: this.selected.department, cellphone: this.selected.cellphone, sex: this.selected.sex, }; if (this.editType) { updateAccount(entity) .then(res => { this.fetchList(); this.resetEditDialog(); this.$message.success(res.msg); }) .catch(err => { this.$message.error(err.msg || '更新失败!'); }); } else { addAccount(entity) .then(res => { this.fetchList(); this.resetEditDialog(); this.$message.success(res.msg); }) .catch(err => { this.$message.error(err.msg || '新增失败!'); }); } }, showUserAuth(data) { if (this.menuList.length == 0) { fetchMenuList().then(res => { this.menuList = res.data; }); } fetchUserMenuList({ id: data.row.id, }) .then(res => { this.selected = { id: data.row.id, menuList: res.data, }; this.dialogAuthVisible = true; }) .catch(err => { this.$message.error(err.msg || '请求失败'); }); }, resetAuthDialog(done) { this.selected = {}; done && typeof done == 'function' ? done() : (this.dialogAuthVisible = false); }, updateUserAuth() { const entity = { id: this.selected.id, author: this.selected.menuList.join(','), }; updateUserAuthMenu(entity) .then(res => { this.$message.success(res.msg); this.resetAuthDialog(); }) .catch(err => { this.$message.success(err.msg || '更新失败!'); }); }, }, }; </script> <style lang="scss"> .system-account { .menuItem { padding: 5px 24px; border-bottom: 1px solid #ccc; } .menuName { margin: 20px 0 5px; font-size: 18px; } .subMenuList { line-height: 40px; } } </style>