用户停用启用 分配角色穿梭框功能 创建其他人员组织菜单 表格优化
已修改3个文件
已删除2个文件
已重命名1个文件
已添加7个文件
| | |
| | | params: params, |
| | | }); |
| | | } |
| | | |
| | | //è·åæµç¨æ¨¡æ¿ä¸çææä»»å¡èç¹ä¿¡æ¯ |
| | | export const getAllProcessNode = (params) => { |
| | | return request({ |
| | | url: '/api/processDefineController/getAllProcessNode', |
| | | method: 'get', |
| | | params: params, |
| | | }); |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | import request from '@/router/axios'; |
| | | |
| | | // å表æ¥è¯¢ |
| | | export function getDataUsers(page,limit,params) { |
| | | return request({ |
| | | url: "/api/userQueryController/getDataGridUsers", |
| | | method: "get", |
| | | params:{ |
| | | page, |
| | | limit, |
| | | ...params |
| | | } |
| | | }); |
| | | } |
| | | |
| | | // åç¨å¯ç¨ |
| | | export function stopUser(params) { |
| | | return request({ |
| | | url: "/api/userQueryController/stopUsers", |
| | | method: "post", |
| | | params |
| | | }); |
| | | } |
| | | |
| | | // è§è²å
¨æ¥è¯¢ |
| | | export function gridRoles(page,limit) { |
| | | return request({ |
| | | url: "/api/roleQueryController/gridRoles", |
| | | method: "get", |
| | | params:{ |
| | | page,limit |
| | | } |
| | | }); |
| | | } |
| | | |
| | | // æ¥è¯¢å½åç¨æ·å·²æ¥æçè§è² |
| | | export function listRoleByUserOid(userOid) { |
| | | return request({ |
| | | url: "/api/roleQueryController/listRoleByUserOid", |
| | | method: "get", |
| | | params:{ |
| | | userOid |
| | | } |
| | | }); |
| | | } |
| | | |
| | | // ä¿åè§è² |
| | | export function saveRights(params) { |
| | | return request({ |
| | | url: "/api/roleQueryController/saveRights", |
| | | method: "post", |
| | | params |
| | | }); |
| | | } |
| | | |
| | | // æ°å¢æå |
| | | export function addUser(data) { |
| | | return request({ |
| | | url: "/api/roleQueryController/addUser", |
| | | method: "post", |
| | | data:data |
| | | }); |
| | | } |
| | | |
| | | // ä¿®æ¹æå |
| | | export function updateUser(data) { |
| | | return request({ |
| | | url: "/api/roleQueryController/updateUser", |
| | | method: "post", |
| | | data:data |
| | | }); |
| | | } |
| | | |
| | | // å 餿å |
| | | export function deleteUser(params) { |
| | | return request({ |
| | | url: "/api/roleQueryController/deleteUser", |
| | | method: "delete", |
| | | params |
| | | }); |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <el-dialog |
| | | v-dialogDrag |
| | | :close-on-click-modal="false" |
| | | :destroy-on-close="true" |
| | | :title="title" |
| | | :visible.sync="visible" |
| | | append-to-body="true" |
| | | class="avue-dialog" |
| | | style="text-align: center" |
| | | width="40%" |
| | | @close="dialogClose"> |
| | | <el-transfer |
| | | v-model="rightRoleData" |
| | | v-loading="loading" |
| | | :data="data" |
| | | :filter-method="filterMethod" |
| | | :render-content="renderFunc" |
| | | :titles="['ç°æè§è²', 'æ¥æè§è²']" |
| | | filter-placeholder="è§è²åç§°æç´¢" |
| | | filterable |
| | | style="text-align: left; display: inline-block;"> |
| | | </el-transfer> |
| | | <span slot="footer" class="dialog-footer"> |
| | | <el-button @click="visible = false">å æ¶</el-button> |
| | | <el-button type="primary" @click="sendHandler">ç¡® å®</el-button> |
| | | </span> |
| | | </el-dialog> |
| | | </template> |
| | | |
| | | <script> |
| | | export default { |
| | | name: "transfer", |
| | | props: ['title', 'leftRoleData', 'rightRoleData'], |
| | | data() { |
| | | return { |
| | | visible: false, // éè¿ this.$refs.transfer.visible = true; å¼å¯åç»ä»¶å¯¹è¯æ¡ |
| | | data: [], |
| | | value: [], |
| | | loading: false, |
| | | filterMethod(query, item) { |
| | | return item.label.indexOf(query) > -1; |
| | | }, |
| | | renderFunc(h, option) { |
| | | return <span><i class="el-icon-s-custom"></i> { option.label }</span>; |
| | | } |
| | | } |
| | | }, |
| | | watch: { |
| | | //渲æç©¿æ¢æ¡ |
| | | leftRoleData: { |
| | | handler(newval, oldval) { |
| | | if (newval) { |
| | | // æ¸
空dataæ°ç» |
| | | this.data = []; |
| | | newval.forEach((city, index) => { |
| | | this.data.push({ |
| | | label: city.name, |
| | | key: city.oid, |
| | | }); |
| | | }); |
| | | this.loading = false; |
| | | } |
| | | } |
| | | }, |
| | | }, |
| | | created() { |
| | | this.loading = true; |
| | | }, |
| | | methods: { |
| | | dialogClose() { |
| | | this.visible = false; |
| | | this.data = []; |
| | | this.leftRoleData = []; |
| | | }, |
| | | sendHandler() { |
| | | this.$emit('transferSend', this.rightRoleData); |
| | | this.visible = false; |
| | | }, |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <style lang="scss" scoped> |
| | | /deep/ .el-transfer-panel{ /* å·¦å³ä¸¤ä¸ªç©¿æ¢æ¡çé«åº¦å宽度 */ |
| | | height: 450px; |
| | | } |
| | | /deep/ .el-transfer-panel__list.is-filterable { |
| | | height: 323px; /* ç©¿æ¢æ¡å表é«åº¦ */ |
| | | } |
| | | |
| | | </style> |
| | |
| | | <template> |
| | | <el-dialog v-dialogDrag |
| | | append-to-body="true" |
| | | :close-on-click-modal="false" |
| | | :destroy-on-close="true" |
| | | :visible.sync="visible" |
| | | :width="width" |
| | | append-to-body="true" |
| | | class="avue-dialog" |
| | | style="margin-top: -10% !important;" |
| | | title="å¯å¨æµç¨" |
| | | top="0" |
| | | style="margin-top: -10% !important;" |
| | | @close="dialogClose"> |
| | | |
| | | <el-form :model="saveParam" :rules="rules" class="demo-form-inline" label-position="left" label-width="auto"> |
| | |
| | | </el-form> |
| | | |
| | | <el-divider></el-divider> |
| | | <!-- <div class="btns-icon">--> |
| | | <!-- <el-button circle icon="el-icon-star-off" @click="handleCollect"></el-button>--> |
| | | <!-- </div>--> |
| | | <!-- <div class="btns-icon">--> |
| | | <!-- <el-button circle icon="el-icon-star-off" @click="handleCollect"></el-button>--> |
| | | <!-- </div>--> |
| | | <el-form :model="collectParam" class="demo-form-inline" label-position="left" label-width="auto"> |
| | | <el-form-item v-for="(item, index) in initFrom" :key="index" :label="item.taskName"> |
| | | <el-select v-model="collectParam.flowTaskUsers[index]['userId']" :placeholder="item.taskName" filterable |
| | | style="width: 100%;" @change="handleSelect($event, index)"> |
| | | <el-option v-for="(key, keyi) in typeName" :key="keyi" :label="key.userNames" |
| | | :value="key.userId"></el-option> |
| | | <el-form-item v-for="(item, index) in initFrom" :key="index" :label="`èç¹${index + 1}`"> |
| | | <el-select style="width: 100%;" filterable v-model="collectParam.flowTaskUsers[index]['userId']" |
| | | :placeholder="item.value" @change="handleSelect($event, index)"> |
| | | <el-option :label="key.name" :value="key.name" v-for="(key, keyi) in item.processNodes" |
| | | :key="keyi"></el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-form> |
| | |
| | | |
| | | <script> |
| | | import {validatenull} from "@/util/validate"; |
| | | import {getTemplateByType} from "@/api/base/startWork/index" |
| | | import {getTemplateByType, getAllProcessNode} from "@/api/base/startWork/index" |
| | | |
| | | export default { |
| | | name: "startWorkFlow", |
| | | props: { |
| | |
| | | typeName: [], // æµç¨èç¹option循ç¯é项 |
| | | rules: { |
| | | processName: [ |
| | | { required: true, message: 'æµç¨åç§°ä¸è½ä¸ºç©º', trigger: 'blur' }, |
| | | { min: 3, max: 50, message: 'é¿åº¦å¨ 3 å° 50 个å符', trigger: 'blur' } |
| | | {required: true, message: 'æµç¨åç§°ä¸è½ä¸ºç©º', trigger: 'blur'}, |
| | | {min: 3, max: 50, message: 'é¿åº¦å¨ 3 å° 50 个å符', trigger: 'blur'} |
| | | ] |
| | | } |
| | | } |
| | |
| | | }, |
| | | parameter: { |
| | | handler(newval, oldval) { |
| | | this.saveParam = Object.assign({processName: '', processDesc: '' , }, newval); |
| | | this.saveParam = Object.assign({processName: '', processDesc: '',}, newval); |
| | | }, |
| | | deep: true, |
| | | immediate: true |
| | |
| | | }, |
| | | methods: { |
| | | // è·åæµç¨æ¨¡æ¿ä¿¡æ¯ |
| | | getWorkByType(){ |
| | | getWorkByType() { |
| | | let params = { |
| | | type:'ææ¡£å®¡ç¾æµç¨', |
| | | filterTemplate:"" |
| | | type: 'ææ¡£å®¡ç¾æµç¨', |
| | | filterTemplate: "" |
| | | } |
| | | getTemplateByType(params).then(res => { |
| | | console.log(res) |
| | | const data = res.data.data; |
| | | data.forEach(item => { |
| | | this.getProcessNode(item); |
| | | }) |
| | | this.initFrom = data; |
| | | }).catch(error => { |
| | | console.log(error); |
| | | }) |
| | | }, |
| | | |
| | | // è¯·æ±æµç¨èç¹ |
| | | getProcessNode(item) { |
| | | let params = { |
| | | processOid: item.attributes.oid, |
| | | maxSecret: -1 |
| | | } |
| | | getAllProcessNode(params).then(res => { |
| | | const nodes = res.data.data; |
| | | item.processNodes = nodes; |
| | | }).catch(error => { |
| | | console.log(error); |
| | | }) |
| | | }, |
| | | |
| | | // å
³éå¼¹çª |
| | | dialogClose() { |
| | | this.visible = false; |
| | |
| | | }, |
| | | |
| | | handleConfirm() { |
| | | console.log(this.paramVOS) |
| | | console.log(this.initFrom); |
| | | }, |
| | | |
| | | // æµç¨åç§°åå§åç»å® |
| | | modelNameChange(){ |
| | | // æµç¨åç§°åå§åç»å® |
| | | modelNameChange() { |
| | | var userInfo = JSON.parse(localStorage.getItem('saber-userInfo')); |
| | | |
| | | if (this.paramVOS && this.paramVOS.modelName) { |
| | |
| | | } |
| | | </script> |
| | | |
| | | <style scoped lang="scss"> |
| | | <style lang="scss" scoped> |
| | | |
| | | </style> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | |
| | | </template> |
| | | |
| | | <script> |
| | | export default { |
| | | name: "department" |
| | | } |
| | | </script> |
| | | |
| | | <style scoped> |
| | | |
| | | </style> |
| | |
| | | import UploadFiles from '@/components/PLT-basic-component/Upload-files' |
| | | // 表åä¸ä¼ æä»¶ç»ä»¶ |
| | | import formUpload from "@/components/PLT-basic-component/formUpload"; |
| | | // ç©¿æ¢æ¡ç»ä»¶ |
| | | import transfer from "@/components/PLT-basic-component/transfer"; |
| | | // 注åå
¨å±å®¹å¨ |
| | | Vue.component('basicContainer', basicContainer); |
| | | Vue.component('basicBlock', basicBlock); |
| | |
| | | Vue.component('UploadFiles', UploadFiles); |
| | | Vue.component('formUpload', formUpload); |
| | | Vue.component('Divider', Divider); |
| | | Vue.component('transfer', transfer); |
| | | |
| | | import 'quill/dist/quill.core.css' |
| | | import 'quill/dist/quill.snow.css' |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <basic-container> |
| | | </basic-container> |
| | | </template> |
| | | |
| | | <script> |
| | | export default { |
| | | name: "departmentManage", |
| | | data() { |
| | | return { |
| | | } |
| | | }, |
| | | } |
| | | </script> |
| | | |
| | | <style scoped> |
| | | |
| | | </style> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | |
| | | </template> |
| | | |
| | | <script> |
| | | export default { |
| | | name: "index" |
| | | } |
| | | </script> |
| | | |
| | | <style scoped> |
| | | |
| | | </style> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | |
| | | </template> |
| | | |
| | | <script> |
| | | export default { |
| | | name: "index" |
| | | } |
| | | </script> |
| | | |
| | | <style scoped> |
| | | |
| | | </style> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <basic-container> |
| | | <avue-crud |
| | | ref="userCrud" |
| | | :data="tableData" |
| | | :option="option" |
| | | :page.sync="page" |
| | | :table-loading="tableLoading" |
| | | @on-load="getTableList" |
| | | @refresh-change="handleRefresh" |
| | | @search-change="handleSearch" |
| | | @search-reset="handleReset" |
| | | @size-change="sizeChange" |
| | | @current-change="currentChange" |
| | | @selection-change="selectChange" |
| | | @row-click="rowClickHandler" |
| | | > |
| | | <template slot="status" slot-scope="{row}"> |
| | | <el-tag v-if="row.status === 0" type="success">å¯ç¨</el-tag> |
| | | <el-tag v-if="row.status === 1" type="danger">åç¨</el-tag> |
| | | </template> |
| | | |
| | | <template slot="lockFlag" slot-scope="{row}"> |
| | | <el-tag v-if="!row.lockFlag" type="success">æªéå®</el-tag> |
| | | <el-tag v-if="row.lockFlag" type="danger">éå®</el-tag> |
| | | </template> |
| | | |
| | | <template #menu="{row,index,size}"> |
| | | <el-button size="small" type="text" @click="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> |
| | | </el-button> |
| | | </template> |
| | | |
| | | <template slot="menuLeft" slot-scope="scope"> |
| | | <el-button icon="el-icon-delete" plain size="small" type="danger">å é¤</el-button> |
| | | <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">åé
é¨é¨</el-button> |
| | | <el-button icon="el-icon-key" plain size="small" type="success">设置å¯ç çç¥</el-button> |
| | | <el-button icon="el-icon-upload2" plain size="small" type="primary">导å
¥äººå</el-button> |
| | | <el-button icon="el-icon-download" plain size="small" type="primary">ä¸è½½å¯¼å
¥æ¨¡æ¿</el-button> |
| | | </template> |
| | | </avue-crud> |
| | | <transfer ref="transfer" :left-role-data="leftRoleData" :right-role-data="rightRoleData" title="åé
è§è²" |
| | | @transferSend="roleSendHandler"></transfer> |
| | | </basic-container> |
| | | </template> |
| | | |
| | | <script> |
| | | import basicOption from '@/util/basic-option' |
| | | import {getDataUsers, stopUser, gridRoles, listRoleByUserOid, saveRights, addUser, updateUser, deleteUser} from '@/api/system/user/api' |
| | | import {column} from "./option" |
| | | import func from '@/util/func' |
| | | |
| | | export default { |
| | | name: "userManage", |
| | | data() { |
| | | return { |
| | | tableLoading: false, |
| | | tableData: [], |
| | | option: { |
| | | ...basicOption, |
| | | calcHeight: -60, |
| | | column: column |
| | | }, |
| | | page: { |
| | | currentPage: 1, |
| | | pageSize: 10, |
| | | total: 0, |
| | | pageSizes: [10, 30, 50, 100], |
| | | }, |
| | | searchParams: {}, |
| | | selectList: [], |
| | | leftRoleData: [], // åé
è§è²ç©¿æ¢æ¡å·¦ä¾§é»è®¤æ°æ® |
| | | rightRoleData: [], // åé
è§è²ç©¿æ¢æ¡å³ä¾§é»è®¤æ°æ® |
| | | } |
| | | }, |
| | | created() { |
| | | }, |
| | | methods: { |
| | | // è¡¨æ ¼è¯·æ± |
| | | getTableList() { |
| | | this.tableLoading = true; |
| | | getDataUsers(this.page.currentPage, this.page.pageSize, this.searchParams).then(res => { |
| | | const data = res.data.data; |
| | | this.tableData = data; |
| | | this.page.total = res.data.total; |
| | | this.tableLoading = false; |
| | | }).catch(err => { |
| | | this.$message.error(err) |
| | | }); |
| | | }, |
| | | |
| | | // è¡¨æ ¼å³ä¾§å·æ°å¾æ |
| | | handleRefresh() { |
| | | this.getTableList(); |
| | | }, |
| | | |
| | | // æç´¢æ¥è¯¢ |
| | | handleSearch(params, done) { |
| | | if (!func.isEmptyObject(params)) { |
| | | for (let key in params) { |
| | | if (params.hasOwnProperty(key)) { |
| | | // 夿妿 key æ¯ 'pkPersonName'ï¼åæ¹ä¸º 'pkPerson' åå«ä¸ºæ¾ç¤ºå¼åä¿åå¼ |
| | | let newKey = key === 'pkPersonName' ? 'pkPerson' : key; |
| | | this.searchParams[`conditionMap["${newKey}"]`] = params[key]; |
| | | } |
| | | } |
| | | } else { |
| | | this.searchParams = {}; |
| | | } |
| | | this.getTableList(); |
| | | done(); |
| | | }, |
| | | |
| | | // éç½®æç´¢æ¡ä»¶ |
| | | handleReset() { |
| | | this.searchParams = {}; |
| | | this.getTableList(); |
| | | }, |
| | | |
| | | // æ¡æ° |
| | | sizeChange(val) { |
| | | this.page.pageSize = val; |
| | | }, |
| | | |
| | | // 页ç |
| | | currentChange(val) { |
| | | this.page.currentPage = val; |
| | | }, |
| | | |
| | | // åç¨å¯ç¨ |
| | | stopUserHandler(row) { |
| | | let params = {}; |
| | | params = { |
| | | ids: row.oid, |
| | | flag: row.status === 0 ? true : false |
| | | } |
| | | stopUser(params).then(res => { |
| | | this.$message.success(res.data.obj); |
| | | this.getTableList(); |
| | | }).catch(err => { |
| | | this.$message.error(err) |
| | | }) |
| | | }, |
| | | |
| | | // éæ©æ¡ |
| | | selectChange(row) { |
| | | this.selectList = row; |
| | | }, |
| | | |
| | | // ç¹å»è¡ |
| | | rowClickHandler(row) { |
| | | this.$refs.userCrud.toggleRowSelection(row); |
| | | }, |
| | | |
| | | // åé
è§è² |
| | | roleHandler() { |
| | | if (this.selectList.length > 1) { |
| | | this.$message.warning('åªè½éæ©ä¸æ¡æ°æ®è¿è¡åé
ï¼'); |
| | | return; |
| | | } |
| | | |
| | | if (this.selectList.length < 1) { |
| | | this.$message.warning('è³å°éæ©ä¸æ¡æ°æ®è¿è¡åé
ï¼'); |
| | | return; |
| | | } |
| | | this.leftRoleData = []; |
| | | this.rightRoleData = []; |
| | | const userOid = this.selectList[0].oid; |
| | | gridRoles(1, -1).then(res => { |
| | | this.leftRoleData = res.data.data; |
| | | listRoleByUserOid(userOid).then(res => { |
| | | this.rightRoleData = res.data.data.map(item => item.oid); |
| | | }) |
| | | }).catch(err => { |
| | | this.$message.error(err) |
| | | }) |
| | | this.$refs.transfer.visible = true; |
| | | }, |
| | | |
| | | // ç©¿æ¢æ¡ç»ä»¶åå¡« |
| | | roleSendHandler(row) { |
| | | let params = { |
| | | userOid: this.selectList[0].oid, |
| | | roleIds: row.join(',') |
| | | } |
| | | saveRights(params).then(res => { |
| | | this.$message.success(res.data.obj); |
| | | this.getTableList(); |
| | | }).catch(err => { |
| | | this.$message.error(err) |
| | | }) |
| | | } |
| | | } |
| | | |
| | | } |
| | | </script> |
| | | |
| | | <style scoped> |
| | | |
| | | </style> |
ÎļþÃû´Ó Source/plt-web/plt-web-ui/src/views/user/userManage.js ÐÞ¸Ä |
| | |
| | | prop: 'pkPersonName', |
| | | align:'center', |
| | | type:'select', |
| | | dicUrl: 'api/roleQueryController/refDataGrid', |
| | | dicUrl: 'api/roleQueryController/gridRoles', |
| | | props: { |
| | | label: 'name', |
| | | value: 'oid' |