角色管理 表格查询分页 增删改 分配成员 统计 导入角色
| | |
| | | margin: 50px auto; |
| | | } |
| | | .avue-dialog .el-dialog{ |
| | | top:50%; |
| | | top:47%; |
| | | max-height: calc(100% - 100px); |
| | | -webkit-transform: translate(-50%, 0); |
| | | transform: translate(-50%, -50%); |
¶Ô±ÈÐÂÎļþ |
| | |
| | | import request from '@/router/axios'; |
| | | |
| | | // å表æ¥è¯¢ |
| | | export function gridRoles(page,limit,params) { |
| | | return request({ |
| | | url: "/api/roleQueryController/gridRoles", |
| | | method: "get", |
| | | params:{ |
| | | page, |
| | | limit, |
| | | ...params |
| | | } |
| | | }); |
| | | } |
| | | |
| | | // æ·»å |
| | | export function addRole(row) { |
| | | return request({ |
| | | url: "/api/roleQueryController/addRole", |
| | | method: "post", |
| | | data:row |
| | | }); |
| | | } |
| | | |
| | | // ä¿®æ¹ |
| | | export function updateRole(row) { |
| | | return request({ |
| | | url: "/api/roleQueryController/updateRole", |
| | | method: "put", |
| | | data:row |
| | | }); |
| | | } |
| | | |
| | | // å é¤ |
| | | export function deleteRole(params) { |
| | | return request({ |
| | | url: "/api/roleQueryController/deleteRole", |
| | | method: "delete", |
| | | params |
| | | }); |
| | | } |
| | | |
| | | // åé
çé¢-è§è²å
æåæ¥è¯¢ æè
ç»è®¡é¡µé¢æ¥è¯¢ |
| | | export function listUserByRoleOid(params) { |
| | | return request({ |
| | | url: "/api/userQueryController/listUserByRoleOid", |
| | | method: "get", |
| | | params |
| | | }); |
| | | } |
| | | |
| | | // åé
çé¢-è§è²å¤æåæ¥è¯¢ |
| | | export function listUserUnInRoleOid(params) { |
| | | return request({ |
| | | url: "/api/userQueryController/listUserUnInRoleOid", |
| | | method: "get", |
| | | params |
| | | }); |
| | | } |
| | | |
| | | // åé
çé¢-ä¿å |
| | | export function saveRight(params) { |
| | | let formData = new FormData; |
| | | for (let key in params){ |
| | | formData.append(key,params[key]) |
| | | } |
| | | return request({ |
| | | url: "/api/roleQueryController/saveRight", |
| | | method: "post", |
| | | data:formData |
| | | }); |
| | | } |
| | |
| | | } |
| | | |
| | | // ä¿®æ¹æå |
| | | export function updateUser(data) { |
| | | export function updateUser(row) { |
| | | return request({ |
| | | url: "/api/userQueryController/updateUser", |
| | | method: "put", |
| | | data:data |
| | | data:row |
| | | }); |
| | | } |
| | | |
| | |
| | | if (newval) { |
| | | // æ¸
空dataæ°ç» |
| | | this.data = []; |
| | | newval.forEach((city) => { |
| | | newval.forEach((item) => { |
| | | this.data.push({ |
| | | label: city.name, |
| | | key: city.oid, |
| | | label: item.name, |
| | | key: item.oid, |
| | | }); |
| | | }); |
| | | this.loading = false; |
| | |
| | | if (resbonse.code === 200) { |
| | | this.$message.success("导å
¥æåï¼"); |
| | | this.visible = false; |
| | | this.$emit('updata'); |
| | | } else { |
| | | this.$message.error(resbonse.msg); |
| | | } |
| | |
| | | <template> |
| | | <basic-container> |
| | | <avue-crud |
| | | ref="roleCrud" |
| | | :data="tableData" |
| | | :option="option" |
| | | :page.sync="page" |
| | | :table-loading="tableLoading" |
| | | @on-load="getTableList" |
| | | @refresh-change="handleRefresh" |
| | | @size-change="sizeChange" |
| | | @current-change="currentChange" |
| | | @selection-change="selectChange" |
| | | @row-click="rowClickHandler" |
| | | @row-save="rowSaveHandler" |
| | | @row-update="rowUpdateHandler" |
| | | @row-del="rowDeleteHandler" |
| | | > |
| | | <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-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="upLoadRole">导å
¥è§è²</el-button> |
| | | <el-button icon="el-icon-download" plain size="small" type="primary">导åº</el-button> |
| | | </template> |
| | | |
| | | <template slot="roleClassifyText" slot-scope="{row}"> |
| | | <el-tag type="success">{{ row.roleClassifyText }}</el-tag> |
| | | </template> |
| | | </avue-crud> |
| | | |
| | | <!-- åé
è§è²ç©¿æ¢æ¡ --> |
| | | <transfer ref="transfer" :left-role-data="leftRoleData" :right-role-data="rightRoleData" |
| | | :transferTitle="transferTitle" title="è§è²æ·»å æå" |
| | | @transferSend="roleSendHandler"> |
| | | </transfer> |
| | | |
| | | <!-- ç»è®¡å¯¹è¯æ¡ --> |
| | | <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 size="small" @click="statisticsVisible = false" icon="el-icon-close" type="danger">å
³ é</el-button> |
| | | </div> |
| | | </el-dialog> |
| | | |
| | | <!-- 导å
¥è§è² --> |
| | | <upload-file ref="upload" :fileType="upFileType" :fileUrl="fileUrl" @updata="getTableList" title="导å
¥è§è²"></upload-file> |
| | | |
| | | </basic-container> |
| | | </template> |
| | | |
| | | <script> |
| | | import { |
| | | gridRoles, |
| | | addRole, |
| | | updateRole, |
| | | deleteRole, |
| | | listUserUnInRoleOid, |
| | | listUserByRoleOid, |
| | | saveRight |
| | | } from '@/api/system/role/api' |
| | | import basicOption from "@/util/basic-option"; |
| | | import {column} from "@/views/system/role/option"; |
| | | |
| | | export default { |
| | | name: "index" |
| | | name: "index", |
| | | data() { |
| | | return { |
| | | tableData: [], |
| | | option: { |
| | | ...basicOption, |
| | | dialogTop: 0, |
| | | dialogWidth: '30%', |
| | | calcHeight: -60, |
| | | column: column |
| | | }, |
| | | page: { |
| | | currentPage: 1, |
| | | pageSize: 10, |
| | | total: 0, |
| | | pageSizes: [10, 30, 50, 100], |
| | | }, |
| | | onLoadParams: {}, |
| | | tableLoading: false, |
| | | selectList: [], |
| | | leftRoleData: [], // åé
æåç©¿æ¢æ¡å·¦ä¾§åå§æ°æ® |
| | | rightRoleData: [], // åé
æåç©¿æ¢æ¡å³ä¾§åå§æ°æ® |
| | | transferTitle: ['è§è²å¤æå', 'è§è²å
æå'], |
| | | 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, |
| | | }, |
| | | ] |
| | | }, |
| | | upFileType: ['xls', 'xlsx'], |
| | | fileUrl: 'api/roleQueryController/importRole', |
| | | } |
| | | }, |
| | | methods: { |
| | | // è¡¨æ ¼åå§åè¯·æ± |
| | | getTableList() { |
| | | this.tableLoading = true; |
| | | gridRoles(this.page.currentPage, this.page.pageSize, this.onLoadParams).then(res => { |
| | | const data = res.data.data; |
| | | this.tableData = data; |
| | | this.page.total = res.data.total; |
| | | this.tableLoading = false; |
| | | }) |
| | | }, |
| | | |
| | | // å头巿° |
| | | handleRefresh() { |
| | | this.getTableList() |
| | | }, |
| | | |
| | | // æ¡æ° |
| | | sizeChange(val) { |
| | | this.page.pageSize = val; |
| | | }, |
| | | |
| | | // 页ç |
| | | currentChange(val) { |
| | | this.page.currentPage = val; |
| | | }, |
| | | |
| | | // 䏿 |
| | | selectChange(row) { |
| | | this.selectList = row; |
| | | }, |
| | | |
| | | // è¡åé |
| | | rowClickHandler(row) { |
| | | this.$refs.roleCrud.toggleRowSelection(row); |
| | | }, |
| | | |
| | | // æ·»å |
| | | rowSaveHandler(row, done) { |
| | | delete row.roleClassifyText; |
| | | addRole(row).then(res => { |
| | | console.log(res) |
| | | if (res.data.code === 200) { |
| | | this.$message.success(res.data.obj); |
| | | this.getTableList(); |
| | | } |
| | | }) |
| | | done(); |
| | | }, |
| | | |
| | | // ç¼è¾ |
| | | rowUpdateHandler(row, index, done) { |
| | | delete row.roleClassifyText; |
| | | updateRole(row).then(res => { |
| | | if (res.data.code === 200) { |
| | | this.$message.success(res.data.obj); |
| | | this.getTableList(); |
| | | } |
| | | }).catch(err => { |
| | | console.log(err); |
| | | }); |
| | | done() |
| | | }, |
| | | |
| | | // å é¤ |
| | | rowDeleteHandler(row) { |
| | | 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); |
| | | }) |
| | | }, |
| | | |
| | | // å¤éå é¤ |
| | | allDelHandler() { |
| | | let params = { |
| | | ids: this.selectList.map(item => item.oid).join(',') |
| | | } |
| | | if (this.selectList.length <= 0) { |
| | | this.$message.warning('请è³å°éæ©ä¸æ¡æ°æ®è¿è¡å é¤ï¼') |
| | | return; |
| | | } |
| | | 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: '已忶å é¤' |
| | | }); |
| | | }); |
| | | }, |
| | | |
| | | // åé
æå |
| | | assignMembersHandler() { |
| | | if (this.selectList.length <= 0) { |
| | | this.$message.warning('è¯·éæ©è§è²è¿è¡æååé
ï¼'); |
| | | return; |
| | | } |
| | | |
| | | if (this.selectList.length > 1) { |
| | | this.$message.warning('䏿¬¡åªè½å¯¹ä¸ä¸ªè§è²è¿è¡åé
æåæä½ï¼'); |
| | | return; |
| | | } |
| | | Promise.all([ |
| | | listUserUnInRoleOid({pkRole: this.selectList[0].oid}), |
| | | listUserByRoleOid({pkRole: this.selectList[0].oid}) |
| | | ]).then(([unInRoleRes, byRoleRes]) => { |
| | | if (unInRoleRes.data.code === 200 && byRoleRes.data.code === 200) { |
| | | const leftData = [...unInRoleRes.data.data, ...byRoleRes.data.data]; |
| | | // ç»è£
å¥½ç©¿æ¢æ¡å¯ç¨æ°æ® |
| | | this.leftRoleData = leftData.map(item => { |
| | | return { |
| | | name: item.name + `(${item.id})`, |
| | | oid: item.oid |
| | | } |
| | | }) |
| | | this.rightRoleData = byRoleRes.data.data.map(item => item.oid); |
| | | this.$refs.transfer.visible = true; |
| | | } |
| | | }).catch(err => { |
| | | console.error(err); |
| | | }); |
| | | |
| | | }, |
| | | |
| | | // åé
æåç©¿æ¢æ¡åå¡« |
| | | roleSendHandler(row) { |
| | | let params = { |
| | | userOids: row.join(','), |
| | | roleId: this.selectList[0].oid |
| | | } |
| | | saveRight(params).then(res => { |
| | | this.$message.success(res.data.obj); |
| | | this.getTableList(); |
| | | }).catch(err => { |
| | | this.$message.error(err) |
| | | }) |
| | | }, |
| | | |
| | | // ç»è®¡ |
| | | statisticsHandler() { |
| | | if (this.selectList.length <= 0) { |
| | | this.$message.warning('è¯·éæ©è§è²ï¼'); |
| | | return; |
| | | } |
| | | |
| | | if (this.selectList.length > 1) { |
| | | this.$message.warning('æå¤åªè½éæ©ä¸ä¸ªè§è²è¿è¡ç»è®¡ï¼'); |
| | | return; |
| | | } |
| | | listUserByRoleOid({pkRole: this.selectList[0].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:this.selectList[0].name |
| | | } |
| | | }); |
| | | this.statisticsVisible = true; |
| | | } |
| | | }).catch(err => { |
| | | console.log(err) |
| | | }) |
| | | }, |
| | | |
| | | // 导å
¥è§è² |
| | | upLoadRole(){ |
| | | this.$refs.upload.visible = true; |
| | | } |
| | | } |
| | | } |
| | | </script> |
| | | |
¶Ô±ÈÐÂÎļþ |
| | |
| | | export const column = [ |
| | | { |
| | | label: 'åç§°', |
| | | prop: 'name', |
| | | sortable: true, |
| | | row:true, |
| | | span:22, |
| | | icon: 'el-icon-edit-outline', |
| | | rules: [ |
| | | { |
| | | required: true, |
| | | message: '请è¾å
¥å§å', |
| | | trigger: 'blur' |
| | | } |
| | | ] |
| | | }, |
| | | { |
| | | label: 'è§è²ç±»å', |
| | | prop: 'roleClassifyText', |
| | | sortable: true, |
| | | display:false |
| | | }, |
| | | { |
| | | label: 'æè¿°', |
| | | prop: 'description', |
| | | type:'textarea', |
| | | span:22, |
| | | minRows:8, |
| | | row:true, |
| | | sortable: true, |
| | | }, |
| | | |
| | | ] |
| | |
| | | <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" @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" @click="uploadRole">导å
¥äººå</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> |
| | |
| | | </el-dialog> |
| | | |
| | | <!-- 导å
¥äººå --> |
| | | <upload-file ref="upload" :fileType="upFileType" :fileUrl="fileUrl" title="导å
¥äººå"></upload-file> |
| | | <upload-file ref="upload" :fileType="upFileType" :fileUrl="fileUrl" title="导å
¥äººå" @updata="getTableList"></upload-file> |
| | | |
| | | <!-- åé
é¨é¨å¯¹è¯æ¡ --> |
| | | <el-dialog |
| | |
| | | }, |
| | | |
| | | // 导å
¥äººå |
| | | uploadRole() { |
| | | uploadUser() { |
| | | this.$refs.upload.visible = true; |
| | | }, |
| | | |
| | |
| | | export let column = [ |
| | | export const column = [ |
| | | { |
| | | label: 'è´¦å·', |
| | | prop: 'id', |
| | |
| | | prop: 'status', |
| | | display:false, |
| | | sortable:true, |
| | | slot: true, |
| | | }, |
| | | { |
| | | label: 'å¯ç çç¥', |
| | |
| | | align:'center', |
| | | search:true, |
| | | sortable:true, |
| | | searchslot:true, |
| | | formslot:true, |
| | | }, |
| | | { |
| | | label: 'ä¸ä¸', |