<template> <div class="manage-account main-wrap"> <el-form class="search-bar"> <div class="grid-content"> <el-input v-model.trim="filters.name" :maxlength="20" placeholder="请输入姓名" clearable></el-input> </div> <div class="grid-content"> <el-input v-model.trim="filters.department" :maxlength="20" 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="userList" style="width: 100%"> <el-table-column type="index" label="序号" width="50"> </el-table-column> <el-table-column prop="name" label="姓名" min-width="80"> </el-table-column> <el-table-column prop="department" label="部门科室" min-width="100"> </el-table-column> <el-table-column prop="duty" label="职务" min-width="100"> </el-table-column> <el-table-column prop="title" label="职称" min-width="80"> </el-table-column> <el-table-column prop="sex" :formatter="getSexValue" label="性别" min-width="50"> </el-table-column> <el-table-column prop="birthday" :formatter="(c,r,val) => val ? $formatDate(new Date(val),'yyyy-MM-dd') : ''" label="出生年月" min-width="80"> </el-table-column> <el-table-column prop="cellphone" label="手机号" min-width="100"> </el-table-column> <el-table-column fixed="right" label="操作" min-width="130" align="center"> <template slot-scope="scope"> <el-button type="primary" size="mini" class="operationBtnWidth" @click="showEditDialog(1, scope)">修改</el-button> <el-button type="primary" size="mini" class="operationBtnWidth" @click="toggleTeacherStatus(scope)">{{scope.row.isFrozen?'账户解冻':'账户冻结'}}</el-button> </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 :title="editType ? '编辑用户' : '新增用户'" :visible.sync="dialogEditVisible" :before-close="resetEditDialog" width="70%"> <el-form class="editForm" :disabled="loading"> <el-form-item class="editItem" label="姓名" label-width="100px"> <el-input v-model.trim="selected.name" placeholder="请输入姓名" :maxlength="20" clearable></el-input> </el-form-item> <el-form-item class="editItem" label="部门科室" label-width="100px"> <el-input v-model.trim="selected.department" placeholder="请输入部门科室" :maxlength="20" clearable></el-input> </el-form-item> <el-form-item class="editItem" label="职务" label-width="100px"> <el-input v-model.trim="selected.duty" placeholder="请输入职务" :maxlength="20" clearable></el-input> </el-form-item> <el-form-item class="editItem" label="职称" label-width="100px"> <el-input v-model.trim="selected.title" placeholder="请输入职称" :maxlength="20" clearable></el-input> </el-form-item> <el-form-item class="editItem" label="性别" label-width="100px"> <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-item class="editItem" label="出生年月" label-width="100px"> <el-date-picker v-model="selected.birthday" type="date" placeholder="请输入出生年月" clearable> </el-date-picker> </el-form-item> <el-form-item class="editItem" label="工号" label-width="100px"> <el-input v-model.trim="selected.jobNumber" placeholder="请输入工号" :maxlength="8" clearable></el-input> </el-form-item> <el-form-item class="editItem" label="手机号" label-width="100px"> <el-input v-model="selected.cellphone" ref="telInput" :maxlength="11" placeholder="请输入手机号" clearable></el-input> </el-form-item> </el-form> <div slot="footer" class="dialog-footer"> <el-button @click="resetEditDialog">取 消</el-button> <el-button type="primary" @click="updateTeacher">确 定</el-button> </div> </drag-dialog> </div> </template> <script> import listMixin from '@/mixin/listPage.js'; import { mapGetters, mapActions } from 'vuex'; import store from './store.js'; import { addTeacher, updateTeacher, toggleTeacherStatus, } from '@/api/management/user.js'; import { sexOptions } from '@/config'; export default { beforeRouteEnter(to, from, next) { store.install(); next(); }, mixins: [listMixin], data() { return { filters: { name: '', department: '', isFrozen: '', }, selected: {}, accountStatusOptions: [ { label: '解冻', value: 0, }, { label: '冻结', value: 1, }, ], sexOptions: sexOptions, }; }, computed: { ...mapGetters('management/user', ['userList', 'pagination']), ...mapGetters(['loading']), }, methods: { ...mapActions('management/user', { fetchList: 'fetchUserList' }), ...mapActions(['fetchAllAuthUserList']), initfilters() { this.filters = { name: '', department: '', isFrozen: '', }; }, initSelected() { this.selected = { userId: '', name: '', department: '', duty: '', title: '', sex: '', birthday: '', jobNumber: '', cellphone: '', }; }, getSexValue(c, r, val) { let item = this.sexOptions.find(item => item.value == val); return item ? item.label : val; }, getFilters() { let filters = { ...this.$getFilters(this.filters), isFrozen: this.filters.isFrozen, }; return filters; }, showEditDialog(type, data) { this.editType = type; if (type) { this.selected = { userId: data.row.userId, name: data.row.name, department: data.row.department, duty: data.row.duty, title: data.row.title, sex: data.row.sex, birthday: data.row.birthday, jobNumber: data.row.jobNumber, cellphone: data.row.cellphone, }; } else { this.initSelected(); } this.dialogEditVisible = true; }, validateSelect() { if (!this.selected.name) { this.$message.error('请输入姓名!'); return; } if (!this.selected.department) { this.$message.error('请输入部门科室!'); return; } // if (!this.selected.duty) { // this.$message.error('请输入职务!'); // return; // } // if (!this.selected.title) { // this.$message.error('请输入职称!'); // return; // } if (!this.selected.sex) { this.$message.error('请输入性别!'); return; } // if (!this.selected.birthday) { // this.$message.error('请输入出生年月!'); // return; // } return true; }, formatCellphone(val) { return val.replace(/\D/g, ''); }, updateCellphone(val) { console.log(this.$refs.telInput); // this.selected.cellphone = val.replace(/\D/g, ''); this.$refs.telInput.value = val.replace(/\D/g, ''); }, updateTeacher() { if (!this.validateSelect()) { return; } const entity = { userId: this.selected.userId, name: this.selected.name, department: this.selected.department, duty: this.selected.duty, title: this.selected.title, sex: this.selected.sex, birthday: this.selected.birthday, jobNumber: this.selected.jobNumber, cellphone: this.selected.cellphone, }; this.$confirm(`确认要${this.editType ? '编辑' : '新增'}吗?`, '提示', { confirmButtonText: '确定', cancelButtonText: '取消', type: 'warning', }) .then(() => { if (this.editType) { updateTeacher(entity) .then(res => { this.fetchList(); this.resetEditDialog(); this.$message.success(res.msg); }) .catch(err => { this.$message.error(err.msg || '更新失败!'); }); } else { addTeacher(entity) .then(res => { this.fetchList(); this.fetchAllAuthUserList(); this.resetEditDialog(); this.$message.success(res.msg); }) .catch(err => { this.$message.error(err.msg || '新增失败!'); }); } }) .catch(action => { console.log(action); }); }, toggleTeacherStatus(data) { this.$confirm( `确认要${data.row.isFrozen ? '解冻' : '冻结'} ${data.row.name} 吗?`, '提示', { confirmButtonText: '确定', cancelButtonText: '取消', type: 'warning', } ) .then(() => { const entity = { userId: data.row.userId, isFrozen: data.row.isFrozen ? 0 : 1, }; toggleTeacherStatus(entity) .then(res => { this.fetchList(); this.$message.success(res.msg); }) .catch(err => { this.$message.error('删除失败!'); }); }) .catch(action => { console.log(action); }); }, }, }; </script> <style lang="scss"> .manage-account { .editForm { display: flex; flex-wrap: wrap; } .editItem { width: 45%; } } </style>