成员管理表格查询 增删改 分配成员 统计 下载导入模板
¶Ô±ÈÐÂÎļþ |
| | |
| | | import request from '@/router/axios'; |
| | | |
| | | // å表æ¥è¯¢ |
| | | export function refTree(params) { |
| | | return request({ |
| | | url: "/api/departmentQueryController/refTree", |
| | | method: "get", |
| | | params |
| | | }); |
| | | } |
| | | |
| | | // æ°å¢ |
| | | export function addDept(params) { |
| | | return request({ |
| | | url: "/api/departmentQueryController/addDept", |
| | | method: "post", |
| | | data:params |
| | | }); |
| | | } |
| | | |
| | | // ä¿®æ¹ |
| | | export function updateDept(params) { |
| | | return request({ |
| | | url: "/api/departmentQueryController/updateDept", |
| | | method: "put", |
| | | data:params |
| | | }); |
| | | } |
| | | |
| | | // ä¿®æ¹ |
| | | export function deleteDept(params) { |
| | | return request({ |
| | | url: "/api/departmentQueryController/deleteDept", |
| | | method: "delete", |
| | | params |
| | | }); |
| | | } |
| | | |
| | | // ç»è®¡ |
| | | export function countSmUserByDeptOid(params) { |
| | | return request({ |
| | | url: "/api/userQueryController/countSmUserByDeptOid", |
| | | method: "get", |
| | | params |
| | | }); |
| | | } |
| | | |
| | | // å¾
éäººåæ¥è¯¢ |
| | | export function listUserUnInDeptOid(params) { |
| | | return request({ |
| | | url: "/api/userQueryController/listUserUnInDeptOid", |
| | | method: "get", |
| | | params |
| | | }); |
| | | } |
| | | |
| | | // å·²éäººåæ¥è¯¢ |
| | | export function listUserByDeptOid(params) { |
| | | return request({ |
| | | url: "/api/userQueryController/listUserByDeptOid", |
| | | method: "get", |
| | | params |
| | | }); |
| | | } |
| | | |
| | | // å·²éäººåæ¥è¯¢ |
| | | export function saveUsersDepts(params) { |
| | | let formData = new FormData; |
| | | for (let key in params){ |
| | | formData.append(key,params[key]) |
| | | } |
| | | return request({ |
| | | url: "/api/departmentQueryController/saveUsersDepts", |
| | | method: "post", |
| | | data:formData |
| | | }); |
| | | } |
| | | |
| | | // ä¸è½½ |
| | | export const download = (params) => { |
| | | return request({ |
| | | url: '/api/departmentQueryController/downloadImportTemplate', |
| | | method: 'get', |
| | | headers: {'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8'}, |
| | | responseType: 'blob', |
| | | params |
| | | }) |
| | | } |
| | | |
| | |
| | | <template> |
| | | <basic-container> |
| | | <avue-crud |
| | | ref="departCrud" |
| | | :data="tableData" |
| | | :option="option" |
| | | :page.sync="page" |
| | | :table-loading="tableLoading" |
| | | @on-load="getTableList" |
| | | @refresh-change="handleRefresh" |
| | | @selection-change="selectChange" |
| | | @row-save="rowSaveHandler" |
| | | @row-update="rowUpdateHandler" |
| | | @row-del="rowDeleteHandler" |
| | | @current-row-change="handleCurrentRowChange" |
| | | > |
| | | <template slot="menu" slot-scope="{row,size,type}"> |
| | | <el-button icon="el-icon-circle-plus-outline" size="small" type="text" @click="handleAdd()">æ°å¢å级</el-button> |
| | | <el-button v-if="row.ALLDept !== 'ALLDept'" icon="el-icon-edit" size="small" type="text" |
| | | @click="editBtnClick(row)">ç¼è¾ |
| | | </el-button> |
| | | <el-button v-if="row.ALLDept !== 'ALLDept'" icon="el-icon-delete" size="small" type="text" |
| | | @click="rowDeleteHandler(row)">å é¤ |
| | | </el-button> |
| | | </template> |
| | | |
| | | <template slot="menuLeft" slot-scope="scope"> |
| | | <el-button icon="el-icon-school" plain size="small" type="primary" @click="assignMembersHandler">åé
æå</el-button> |
| | | <el-button icon="el-icon-user" plain size="small" type="primary" @click="statisticsHandler">ç»è®¡</el-button> |
| | | <el-button icon="el-icon-upload2" plain size="small" type="primary" @click="statisticsHandler">导å
¥é¨é¨</el-button> |
| | | <el-button icon="el-icon-download" plain size="small" type="primary" @click="downLoadHandler">ä¸è½½å¯¼å
¥æ¨¡æ¿</el-button> |
| | | </template> |
| | | </avue-crud> |
| | | |
| | | <!-- ç»è®¡å¯¹è¯æ¡ --> |
| | | <el-dialog |
| | | v-dialogDrag |
| | | v-loading="statisticsLoading" |
| | | :destroy-on-close="true" |
| | | :visible.sync="statisticsVisible" |
| | | append-to-body="true" |
| | | class="avue-dialog" |
| | | title="人åä¿¡æ¯" |
| | | width="50%" |
| | | > |
| | | <avue-crud |
| | | :data="countData" |
| | | :option="countOption" |
| | | > |
| | | </avue-crud> |
| | | <div slot="footer" class="dialog-footer" style="display: flex;gap: 20px;justify-content: center"> |
| | | <div> |
| | | <el-tag>å½åè§è²æ»äººæ°: {{ this.countData.length }}</el-tag> |
| | | </div> |
| | | <el-button icon="el-icon-close" size="small" type="danger" @click="statisticsVisible = false">å
³ é</el-button> |
| | | </div> |
| | | </el-dialog> |
| | | |
| | | |
| | | <!-- åé
æåç©¿æ¢æ¡ --> |
| | | <transfer ref="transfer" :left-role-data="leftTransferData" :right-role-data="rightTransferData" |
| | | :transferTitle="transferTitle" title="é¨é¨æ·»å æå" |
| | | @transferSend="departTransferSend"> |
| | | </transfer> |
| | | |
| | | </basic-container> |
| | | </template> |
| | | |
| | | <script> |
| | | import { |
| | | refTree, |
| | | addDept, |
| | | updateDept, |
| | | deleteDept, |
| | | countSmUserByDeptOid, |
| | | listUserUnInDeptOid, |
| | | listUserByDeptOid, |
| | | saveUsersDepts, |
| | | download |
| | | } from "@/api/system/departMent/api"; |
| | | import basicOption from '@/util/basic-option'; |
| | | import {column} from './option' |
| | | import func from "@/util/func"; |
| | | |
| | | export default { |
| | | name: "departmentManage", |
| | | data() { |
| | | return { |
| | | tableData: [], |
| | | option: { |
| | | ...basicOption, |
| | | rowKey: 'oid', |
| | | rowParentKey: 'parentId', |
| | | selection: false, |
| | | addBtn: false, |
| | | editBtn: false, |
| | | delBtn: false, |
| | | gridBtn: false, |
| | | highlightCurrentRow: true, |
| | | column: column |
| | | }, |
| | | tableLoading: false, |
| | | departCurrenRow: {}, |
| | | parentId: '', |
| | | statisticsLoading: false, |
| | | statisticsVisible: false, |
| | | countData: [], |
| | | countOption: { |
| | | ...basicOption, |
| | | selection: false, |
| | | refreshBtn: false, |
| | | addBtn: false, |
| | | menu: false, |
| | | column: [ |
| | | { |
| | | label: 'é¨é¨', |
| | | prop: 'pkDepartmentName', |
| | | sortable: true, |
| | | }, |
| | | { |
| | | label: 'ç¨æ·å', |
| | | prop: 'id', |
| | | sortable: true, |
| | | }, |
| | | { |
| | | label: 'çå®å§å', |
| | | prop: 'name', |
| | | sortable: true, |
| | | }, |
| | | { |
| | | label: 'è§è²', |
| | | prop: 'pkPersonName', |
| | | sortable: true, |
| | | }, |
| | | ] |
| | | }, |
| | | leftTransferData: [], |
| | | rightTransferData: [], |
| | | transferTitle: ['å¾
é人å', 'å·²é人å'], |
| | | } |
| | | }, |
| | | methods: { |
| | | // è¡¨æ ¼åå§åè¯·æ± |
| | | getTableList() { |
| | | refTree({queryAllLevel: true, 'extandParamsMap[showAllDepartmentNode]': true}).then(res => { |
| | | this.tableData = this.departDtaFormAtter(res.data.treeData); |
| | | }) |
| | | }, |
| | | |
| | | // åé
é¨é¨æ°æ®è½¬æ¢ |
| | | departDtaFormAtter(items) { |
| | | return items.map(item => { |
| | | // 转æ¢å½åèç¹ç屿§ |
| | | const formList = { |
| | | oid: item.oid, |
| | | id: item.attributes.id, |
| | | name: item.attributes.name, |
| | | description: item.attributes.description, |
| | | code: item.attributes.code, |
| | | specialties: item.attributes.specialties, |
| | | uniqueId: item.attributes.uniqueId, |
| | | ALLDept: item.attributes.ALLDept ? item.attributes.ALLDept : "", |
| | | 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; |
| | | }); |
| | | }, |
| | | |
| | | // å头巿° |
| | | handleRefresh() { |
| | | this.getTableList(); |
| | | }, |
| | | |
| | | // 䏿 |
| | | selectChange() { |
| | | |
| | | }, |
| | | |
| | | // è¡¨æ ¼è¡æ°å¢å级 |
| | | handleAdd() { |
| | | this.$refs.departCrud.rowAdd(); |
| | | }, |
| | | |
| | | // æ·»å |
| | | rowSaveHandler(row, done, loading) { |
| | | row = {...row, ...{pkFatherDepartment: this.parentId}}; |
| | | addDept(row).then(res => { |
| | | if (res.data.code === 200) { |
| | | this.$message.success(res.data.obj); |
| | | this.getTableList(); |
| | | done(); |
| | | } |
| | | }).catch(err => { |
| | | console.log(err); |
| | | loading(); |
| | | }) |
| | | |
| | | }, |
| | | |
| | | // ç¼è¾æé®ç¹å»äºä»¶ |
| | | editBtnClick(row) { |
| | | this.$refs.departCrud.rowEdit(row); |
| | | }, |
| | | |
| | | // ç¼è¾ |
| | | rowUpdateHandler(row, index, done, loading) { |
| | | let params = { |
| | | name: row.name, |
| | | id: row.id, |
| | | code: row.code, |
| | | specialties: row.specialties, |
| | | description: row.description, |
| | | oid: row.oid |
| | | } |
| | | updateDept(params).then(res => { |
| | | if (res.data.code === 200) { |
| | | this.$message.success(res.data.obj); |
| | | this.getTableList(); |
| | | done(); |
| | | } |
| | | }).catch(err => { |
| | | console.log(err); |
| | | loading(); |
| | | }) |
| | | }, |
| | | |
| | | // å é¤ |
| | | rowDeleteHandler(row) { |
| | | let params = { |
| | | ids: row.oid |
| | | } |
| | | |
| | | this.$confirm('æ¨ç¡®å®è¦å é¤å½åé¨é¨åï¼', 'æç¤º', { |
| | | confirmButtonText: 'ç¡®å®', |
| | | cancelButtonText: 'åæ¶', |
| | | type: 'warning' |
| | | }).then(() => { |
| | | deleteDept(params).then(res => { |
| | | if (res.data.code === 200) { |
| | | this.$message.success(res.data.obj); |
| | | this.getTableList(); |
| | | } |
| | | }) |
| | | }).catch(() => { |
| | | this.$message({ |
| | | type: 'info', |
| | | message: '已忶å é¤' |
| | | }); |
| | | }); |
| | | }, |
| | | |
| | | // è¡¨æ ¼è¡ è¡åé |
| | | handleCurrentRowChange(row) { |
| | | // åç¬æ·»å ALLDept 屿§å¤ææ¯å¦æ¯é¡¶å±èç¹ææé¨é¨ |
| | | if (row.ALLDept === "ALLDept") { |
| | | this.parentId = ""; |
| | | } else { |
| | | this.parentId = row.oid; |
| | | } |
| | | |
| | | this.departCurrenRow = row; |
| | | }, |
| | | // ç»è®¡ |
| | | statisticsHandler() { |
| | | console.log(this.departCurrenRow); |
| | | if (func.isEmptyObject(this.departCurrenRow)) { |
| | | this.$message.warning('è¯·éæ©é¨é¨ï¼'); |
| | | return |
| | | } |
| | | |
| | | countSmUserByDeptOid({pkDepartment: this.departCurrenRow.ALLDept === 'ALLDept' ? null : this.departCurrenRow.oid}).then(res => { |
| | | console.log(res); |
| | | if (res.data.code === 200) { |
| | | const data = res.data.data; |
| | | this.countData = data.map(item => { |
| | | return { |
| | | pkDepartmentName: item.pkDepartmentName, |
| | | name: item.name, |
| | | id: item.id, |
| | | pkPersonName: item.pkPersonName |
| | | } |
| | | }); |
| | | this.statisticsVisible = true; |
| | | } |
| | | }).catch(err => { |
| | | console.log(err) |
| | | }) |
| | | }, |
| | | |
| | | // åé
æå |
| | | assignMembersHandler() { |
| | | if (func.isEmptyObject(this.departCurrenRow)) { |
| | | this.$message.error('è¯·éæ©é¨é¨èç¹'); |
| | | return |
| | | } |
| | | if (this.departCurrenRow.ALLDept === "ALLDept") { |
| | | this.$message.error('æ¤èç¹ä¸ºé¨é¨æ è¯ï¼ä¸è½æ§è¡åé
æåæä½ï¼è¯·éæ©å
¶ä»èç¹ï¼') |
| | | return |
| | | } |
| | | |
| | | Promise.all([ |
| | | listUserUnInDeptOid({pkDepartment: this.departCurrenRow.oid}), |
| | | listUserByDeptOid({pkDepartment: this.departCurrenRow.oid}) |
| | | ]).then(([unInRoleRes, byRoleRes]) => { |
| | | if (unInRoleRes.data.code === 200 && byRoleRes.data.code === 200) { |
| | | const leftData = [...unInRoleRes.data.data, ...byRoleRes.data.data]; |
| | | // ç»è£
å¥½ç©¿æ¢æ¡å¯ç¨æ°æ® |
| | | this.leftTransferData = leftData.map(item => { |
| | | return { |
| | | name: item.name + `(${item.id})`, |
| | | oid: item.oid |
| | | } |
| | | }) |
| | | this.rightTransferData = byRoleRes.data.data.map(item => item.oid); |
| | | this.$refs.transfer.visible = true; |
| | | } |
| | | }).catch(err => { |
| | | console.error(err); |
| | | }); |
| | | }, |
| | | |
| | | // åé
æåç©¿æ¢æ¡åå¡« |
| | | departTransferSend(row) { |
| | | let params = { |
| | | userOids: row.join(','), |
| | | deptId: this.departCurrenRow.oid |
| | | } |
| | | saveUsersDepts(params).then(res => { |
| | | console.log(res); |
| | | this.$message.success(res.data.obj); |
| | | this.getTableList(); |
| | | }).catch(err => { |
| | | console.log(err); |
| | | }) |
| | | }, |
| | | |
| | | // ä¸è½½å¯¼å
¥æ¨¡æ¿ |
| | | downLoadHandler(){ |
| | | download().then(res => { |
| | | func.downloadFileByBlobHandler(res); |
| | | this.$message.success('ä¸è½½æå') |
| | | }).catch(err => { |
| | | this.$message.error(err); |
| | | }) |
| | | } |
| | | } |
| | | } |
| | | </script> |
| | | |
¶Ô±ÈÐÂÎļþ |
| | |
| | | export const column = [ |
| | | { |
| | | label: 'åç§°', |
| | | prop: 'name', |
| | | rules: [ |
| | | { |
| | | required: true, |
| | | message: '请è¾å
¥åç§°', |
| | | trigger: 'blur' |
| | | } |
| | | ] |
| | | }, |
| | | { |
| | | label: 'ç¼å·', |
| | | prop: 'id', |
| | | }, |
| | | { |
| | | label: '代å·', |
| | | prop: 'code' |
| | | }, |
| | | { |
| | | label:'ä¸ä¸', |
| | | prop: 'specialties' |
| | | }, |
| | | { |
| | | label:'é¨é¨å¯ä¸æ è¯ID', |
| | | prop: 'uniqueId', |
| | | display:false, |
| | | }, |
| | | { |
| | | label: 'æè¿°', |
| | | prop: 'description', |
| | | }, |
| | | ]; |
| | |
| | | }, |
| | | |
| | | // æ·»å |
| | | rowSaveHandler(row, done) { |
| | | rowSaveHandler(row, done,loading) { |
| | | delete row.roleClassifyText; |
| | | addRole(row).then(res => { |
| | | console.log(res) |
| | | if (res.data.code === 200) { |
| | | this.$message.success(res.data.obj); |
| | | this.getTableList(); |
| | | done(); |
| | | } |
| | | }).catch(err =>{ |
| | | console.log(err); |
| | | loading(); |
| | | }) |
| | | done(); |
| | | }, |
| | | |
| | | // ç¼è¾ |
| | | rowUpdateHandler(row, index, done) { |
| | | rowUpdateHandler(row, index, done,loading) { |
| | | delete row.roleClassifyText; |
| | | updateRole(row).then(res => { |
| | | if (res.data.code === 200) { |
| | | this.$message.success(res.data.obj); |
| | | this.getTableList(); |
| | | done(); |
| | | } |
| | | }).catch(err => { |
| | | loading(); |
| | | console.log(err); |
| | | }); |
| | | done() |
| | | }, |
| | | |
| | | // å é¤ |
| | |
| | | let params = { |
| | | ids: row.oid |
| | | } |
| | | deleteRole(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(() => { |
| | | deleteRole(params).then(res => { |
| | | if (res.data.code === 200) { |
| | | this.$message.success(res.data.obj); |
| | | this.getTableList(); |
| | | } |
| | | }); |
| | | }).catch(() => { |
| | | this.$message({ |
| | | type: 'info', |
| | | message: '已忶å é¤' |
| | | }); |
| | | }); |
| | | }, |
| | | |
| | | // å¤éå é¤ |
| | |
| | | <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> |
| | | |
| | |
| | | }, |
| | | |
| | | // æ°å¢ |
| | | 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; |
| | |
| | | if (res.data.code === 200) { |
| | | this.$message.success(res.data.obj); |
| | | this.getTableList(); |
| | | done() |
| | | } |
| | | }).catch(err => { |
| | | loading() |
| | | console.log(err); |
| | | }) |
| | | done() |
| | | }, |
| | | |
| | | // æä½æ ç¼è¾ |
| | |
| | | }, |
| | | |
| | | // ç¼è¾ |
| | | 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; |
| | |
| | | if (res.data.code === 200) { |
| | | this.$message.success(res.data.obj); |
| | | this.getTableList(); |
| | | done() |
| | | } |
| | | }).catch(err => { |
| | | loading() |
| | | console.log(err); |
| | | }); |
| | | done() |
| | | }, |
| | | |
| | | // å é¤ |
| | |
| | | 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: '已忶å é¤' |
| | | }); |
| | | }); |
| | | }, |
| | | |
| | | // å¤éå é¤ |
| | |
| | | align:'center', |
| | | search:true, |
| | | sortable:true, |
| | | overHidden: true, |
| | | width:200, |
| | | }, |
| | | { |
| | | label: 'ä¸ä¸', |