From e358d69fc18870584dd2d9f531910b7838ea27d9 Mon Sep 17 00:00:00 2001 From: wangting <wangting@vci-tech.com> Date: 星期四, 02 一月 2025 09:58:53 +0800 Subject: [PATCH] 调整行点击后的回调 --- Source/plt-web/plt-web-ui/src/views/authority/ui/dataAuthorization/dataView.vue | 396 ++++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 files changed, 370 insertions(+), 26 deletions(-) diff --git a/Source/plt-web/plt-web-ui/src/views/authority/ui/dataAuthorization/dataView.vue b/Source/plt-web/plt-web-ui/src/views/authority/ui/dataAuthorization/dataView.vue index d12fd89..0b7cd81 100644 --- a/Source/plt-web/plt-web-ui/src/views/authority/ui/dataAuthorization/dataView.vue +++ b/Source/plt-web/plt-web-ui/src/views/authority/ui/dataAuthorization/dataView.vue @@ -4,7 +4,7 @@ <el-tab-pane> <span slot="label"><i class="el-icon-s-custom"></i> 涓讳綋</span> <div v-if="!readOnly" style="margin-bottom: 10px;"> - <el-button plain size="mini" type="primary" @click="userHandler">閫変腑鐢ㄦ埛</el-button> + <el-button plain size="mini" type="primary" @click="userHandler">閫夋嫨鐢ㄦ埛</el-button> <el-button plain size="mini" type="primary" @click="roleHandler">閫夋嫨瑙掕壊</el-button> <el-button plain size="mini" type="primary" @click="deptHandler">閫夋嫨鐢ㄦ埛缁�</el-button> </div> @@ -12,23 +12,26 @@ <fieldset style="width: 48%"> <legend> 涓讳綋 </legend> <div> - <avue-crud ref="mainCrud" :data="mainData" :option="mainOption"> + <avue-crud ref="mainCrud" :data="mainData" :option="mainOption" + @current-row-change="mainCurrentRowHandler" + > <template #type="{ row }"> <el-tag v-if="row.type=='鐢ㄦ埛'" :key="row.oid" effect="dark">{{ row.type }}</el-tag> <el-tag v-else-if="row.type=='瑙掕壊'" type="info" :key="row.oid" effect="dark">{{ row.type }}</el-tag> - <el-tag v-else="row.type=='閮ㄩ棬'" type="warning" :key="row.oid" effect="dark">{{ row.type }}</el-tag> + <el-tag v-else="row.type=='鐢ㄦ埛缁�'" type="warning" :key="row.oid" effect="dark">{{ row.type }}</el-tag> </template> </avue-crud> </div> </fieldset> <div style="text-align: center;"> - <el-button icon="el-icon-arrow-right" size="mini" @click="rightHandler" style="margin-bottom: 50px;"></el-button><br/> - <el-button icon="el-icon-arrow-left" size="mini" @click="leftHandler"></el-button> + <el-button icon="el-icon-arrow-right" type="primary" size="small" @click="rightHandler" style="margin-bottom: 50px;"></el-button><br/> + <el-button icon="el-icon-arrow-left" type="primary" size="small" @click="leftHandler"></el-button> </div> <fieldset style="width: 42%"> <legend> 鎺堟潈涓讳綋 </legend> <div> - <avue-crud ref="authCrud" :data="authData" :option="authOption" :table-loading="tableLoading"> + <avue-crud ref="authCrud" :data="authData" :option="authOption" :table-loading="tableLoading" + @current-row-change="authCurrentRowHandler"> </avue-crud> </div> </fieldset> @@ -53,7 +56,7 @@ :formData="form" @getFormData="getFormData"> </basic-form> - <el-container v-if="!readOnly"> + <el-container v-if="!readOnly && (form.ruleType=='1' || form.ruleType=='3')"> <el-aside style="width:350px"> <fieldset> <legend> 鍊欓�夋潯浠� </legend> @@ -91,8 +94,53 @@ </el-tab-pane> <el-tab-pane> <span slot="label"><i class="el-icon-s-tools"></i> 鎿嶄綔</span> + <fieldset :style="'width:99.5%;height: '+(height-10)+'px;margin-bottom:10px;'"> + <legend> 涓�鑸搷浣� </legend> + <div> + <avue-checkbox :disabled="readOnly" key="actionCheck" :all="!readOnly" v-model="actionForm" placeholder="璇烽�夋嫨鍐呭" :dic="actionDic"></avue-checkbox> + </div> + </fieldset> + <fieldset v-if="0" :style="'width:99.5%;height: '+(height/2-30)+'px;'"> + <legend> 鍏崇郴鍜岃穬杩� </legend> + <div> + <avue-checkbox :disabled="readOnly" key="linkActionCheck" :all="!readOnly" v-model="linkactionForm" placeholder="璇烽�夋嫨鍐呭" :dic="linkactionDic"></avue-checkbox> + </div> + </fieldset> </el-tab-pane> </el-tabs> + <!-- 閫夋嫨鐢ㄦ埛绌挎妗� --> + <transfer ref="usertransfer" :left-role-data="leftUserData" :right-role-data="rightUserData" + :transferTitle="['鏈�夋嫨鐢ㄦ埛','宸查�夋嫨鐢ㄦ埛']" title="涓讳綋娣诲姞鐢ㄦ埛" + @transferSend="userSendHandler"> + </transfer> + <!-- 閫夋嫨鐢ㄦ埛绌挎妗� --> + <transfer ref="roletransfer" :left-role-data="leftRoleData" :right-role-data="rightRoleData" + :transferTitle="['鐜版湁瑙掕壊','鎷ユ湁瑙掕壊']" title="鍒嗛厤瑙掕壊" + @transferSend="roleSendHandler"> + </transfer> + <!-- 閫夋嫨閮ㄩ棬瀵硅瘽妗� --> + <el-dialog + v-dialogDrag + v-loading="departLoading" + :visible.sync="departVisible" + append-to-body="true" + class="avue-dialog" + title="閫夋嫨閮ㄩ棬" + width="50%" + > + <avue-crud + ref="departCrud" + :data="departData" + :option="departOption" + @selection-change="selectDepartChange" + @row-click="rowClickDeptHandler" + > + </avue-crud> + <div slot="footer" class="dialog-footer"> + <el-button size="small" type="primary" @click="saveDepartHandler">纭� 瀹�</el-button> + <el-button size="small" @click="departVisible = false">鍙� 娑�</el-button> + </div> + </el-dialog> </div> </template> @@ -101,6 +149,8 @@ import formQueryDialog from "@/views/modelingMenu/queryTemplate/linkTypeQuery/formQueryDialog.vue"; import {queryTemplateListByAttr} from "@/api/queryTemplate/queryDefine"; import {getCriteria} from "@/api/queryTemplate/linkTypeQuery"; +import {listUserByUserType, gridRoles, departmentQueryController} from "@/api/system/user/api"; +import func from "@/util/func"; export default { name: "dataView", @@ -112,7 +162,7 @@ default: {} }, //閫変腑琛屾暟鎹� - data: { + selectRow: { type: Object, default: {} }, @@ -124,10 +174,51 @@ type: Number, default: 400 }, + actionMap:{ + type: Object, + default: {} + } }, data() { return { + leftUserData: [], // 閫夋嫨鎴愬憳绌挎妗嗗乏渚у垵濮嬫暟鎹� + rightUserData: [], // 閫夋嫨鎴愬憳绌挎妗嗗彸渚у垵濮嬫暟鎹� + leftRoleData: [], // 閫夋嫨瑙掕壊绌挎妗嗗乏渚у垵濮嬫暟鎹� + rightRoleData: [], // 閫夋嫨瑙掕壊绌挎妗嗗彸渚у垵濮嬫暟鎹� + departCurrenRows: [], + departOption: { + ...basicOption, + addBtn: false, + rowKey: 'oid', + rowParentKey: 'parentId', + selection: true, + highlightCurrentRow: true, + stripe: false, + menu: false, + refreshBtn: false, + gridBtn: false, + header: false, + column: [ + { + label: '鍚嶇О', + prop: 'name', + align: 'left' + }, + { + label: '缂栧彿', + prop: 'id', + }, + { + label: '鎻忚堪', + prop: 'description', + }, + ] + }, + departData: [],//閫夋嫨閮ㄩ棬鏁版嵁 + departLoading: false, + departVisible: false, mainData:[], + mainCurrentRow:{}, tableLoading: false, mainOption: { ...basicOption, @@ -141,11 +232,12 @@ height: this.height-80, tip:false, size:'mini', + highlightCurrentRow:true, column: [{ label: ' 鍒嗙被', prop: 'type', sortable: true, - width:110 + width:90 },{ label: '缂栫爜', prop: 'id' @@ -155,6 +247,7 @@ }] }, authData:[], + authCurrentRow:{}, authOption:{ ...basicOption, header:false, @@ -168,6 +261,8 @@ tip:false, showHeader:false, size:'mini', + highlightCurrentRow:true, + align:'left', column: [{ label: '鍚嶇О', prop: 'name' @@ -175,7 +270,7 @@ }, formItems:[{ label: '瑙勫垯鍚嶇О', - prop: 'qtName', + prop: 'ruleName', type: 'input', span:8, labelWidth: 100, @@ -187,31 +282,54 @@ }] }, { label: '瑙勫垯绫诲瀷', - prop: 'version', + prop: 'ruleType', type: 'select', span:6, labelWidth:110, disabled:this.readOnly, dicData: [{ label: '鍏ㄩ儴鍏佽', - value: 1 + value: '0' }, { label: '鍏佽鏉冮檺', - value: 2 + value: '1', + disabled:true }, { label: '鍏ㄩ儴鎷掔粷', - value: 3 + value: '2' }, { label: '鎷掔粷鏉冮檺', - value: 7 + value: '3', + disabled:true }], - value: 1 + value: '0', + change:function (column,value){ + if(value=='1' || value=='3'){ + this.form.btmName=this.btmNode.attributes.name; + this.form.levelFlag=0; + this.form.queryTemplate={}; + } + } }], form:{ btmName:'', qtName: '', levelFlag:0,//0:鏅�氭煡璇㈡ā鏉�; 1:楂樼骇鏌ヨ妯℃澘" - queryTemplate:{} + queryTemplate:{},//瀹綋涓煡璇㈡潯浠� + "ID": "",//鏁版嵁鐨処D + "roles": "",//鏄剧ず鍒版巿鏉冧富浣撶晫闈紝瑙掕壊鍚嶇О锛屽涓娇鐢ㄩ�楀彿鍒嗛殧 + "userGroups": "",//鏄剧ず鍒版巿鏉冧富浣撶晫闈紝閮ㄩ棬鍚嶇О锛屽涓娇鐢ㄩ�楀彿鍒嗛殧 + "users": "",//鏄剧ず鍒版巿鏉冧富浣撶晫闈紝鐢ㄦ埛鍚嶇О锛屽涓娇鐢ㄩ�楀彿鍒嗛殧 + "expToSQL": "",//姝ゅ涓哄厑璁告潈闄愭垨鎷掔粷鏉冮檺闇�濉厖鐨勬暟鎹紝鏆傛椂涓嶅仛澶勭悊锛屼负绌哄瓧绗︿覆鍗冲彲 + "identifier": "",//涓氬姟绫诲瀷锛坱erminology锛�+涓嬪垝绾匡紙_锛�+鎿嶄綔鍖虹殑涓�鑸搷浣滅殑鎸夐挳鑻辨枃鍚嶇О锛坬uery锛�,澶氫釜鎸夐挳鐨勮瘽鏄鏉℃暟鎹笉鏄娇鐢ㄩ�楀彿鍒嗛殧 + "isGrand": 49, //姝ゅ涓烘搷浣滃尯鐨勪竴鑸搷浣滅殑鎸夐挳鏄惁涓洪�夋嫨鎯呭喌锛屾湭閫変腑鍊间负48锛岄�変腑涓�49锛岃繖閲屾槸灏�0鍜�1杞负浜哹yte鍊硷紝鎵�浠ヤ负48锛�49 + "lexpToSQL": "",//姝ゅ涓哄厑璁告潈闄愭垨鎷掔粷鏉冮檺闇�濉厖鐨勬暟鎹紝鏆傛椂涓嶅仛澶勭悊锛屼负绌哄瓧绗︿覆鍗冲彲 + "lruleText": "",//姝ゅ涓哄厑璁告潈闄愭垨鎷掔粷鏉冮檺闇�濉厖鐨勬暟鎹紝鏆傛椂涓嶅仛澶勭悊锛屼负绌哄瓧绗︿覆鍗冲彲 + "lseniorRuleText": "",//姝ゅ涓哄厑璁告潈闄愭垨鎷掔粷鏉冮檺闇�濉厖鐨勬暟鎹紝鏆傛椂涓嶅仛澶勭悊锛屼负绌哄瓧绗︿覆鍗冲彲 + "ruleName": "",//瑙勫垯鍚嶇О + "ruleText": "",//姝ゅ涓哄厑璁告潈闄愭垨鎷掔粷鏉冮檺闇�濉厖鐨勬暟鎹紝鏆傛椂涓嶅仛澶勭悊锛屼负绌哄瓧绗︿覆鍗冲彲 + "ruleType": "",//0鍏ㄩ儴鍏佽锛�1鍏佽鏉冮檺锛�2鍏ㄩ儴鎷掔粷锛�3鎷掔粷鏉冮檺锛岀敱浜庢殏鏃跺彧鍋氬叏閮ㄥ厑璁镐笌鍏ㄩ儴鎷掔粷锛屾墍浠ユ殏鏃跺彲浠ヤ笉鐢ㄧ + "seniorRuleText": "",//姝ゅ涓哄厑璁告潈闄愭垨鎷掔粷鏉冮檺闇�濉厖鐨勬暟鎹紝鏆傛椂涓嶅仛澶勭悊锛屼负绌哄瓧绗︿覆鍗冲彲 }, radioForm:0, radioDic:[{ @@ -255,35 +373,259 @@ queryTree:{}, //鏅�氭煡璇㈡潯浠� queryCondition:[], + actionForm:[],//涓�鑸搷浣滈�変腑鍊� + actionDic:[],//涓�鑸搷浣滈�変腑椤� + linkactionForm:[],//鍏崇郴鍜岃穬杩侀�変腑鍊� + linkactionDic:[]//鍏崇郴鍜岃穬杩侀�変腑椤� } }, created() { - + listUserByUserType().then(res => { + // 缁勮濂界┛姊鍙敤鏁版嵁 + this.leftUserData = res.data.data.map(item => { + return { + ...item, + name: item.name + `(${item.id})`, + oid: item.oid + } + }) + this.rightUserData = []; + }) + gridRoles(1,-1).then(res => { + // 缁勮濂界┛姊鍙敤鏁版嵁 + this.leftRoleData = res.data.data.map(item => { + return { + ...item, + name: item.name , + oid: item.oid + } + }) + this.rightRoleData = []; + }) + departmentQueryController({queryAllLevel: true}).then(res => { + const data = res.data.treeData; + this.departData = this.departDtaFormAtter(data); + }) }, watch: { - data:{ + actionMap:{ handler(val) { - if(val && val.oid){ - this.getTemp(true); - this.getTemp(false) + this.actionDic=[]; + if(val){ + for(var i in val){ + this.actionDic.push({ + label:i, + value:val[i] + }) + } + }; + }, + immediate: true, + deep: true + }, + selectRow:{ + handler(val,oldval) { + this.authData=[]; + if(val && val.rules &&val.rules.length>0) { + this.form = JSON.parse(JSON.stringify(val.rules[0])); + //this.getTemp(true); + //this.getTemp(false) + //鏋勫缓鎺堟潈涓讳綋鏁版嵁 + if (val.rules[0].users) { + val.rules[0].users.split(',').forEach((item, i) => { + if (item) { + this.authData.push({ + name: '{' + item + ', ' + item + ', user}' + }) + } + }) + } + if (val.rules[0].roles) { + val.rules[0].roles.split(',').forEach((item, i) => { + if (item) { + this.authData.push({ + name: '{' + item + ', ' + item + ', role}' + }) + } + }) + } + if (val.rules[0].userGroups) { + val.rules[0].userGroups.split(',').forEach((item, i) => { + if (item) { + this.authData.push({ + name: '{' + item + ', ' + item + ', userGroup}' + }) + } + }) + } + //瑙f瀽鎿嶄綔鎸夐挳閫変腑鍊� + if (this.actionDic.length > 0) { + let actionDicStr = JSON.stringify(this.actionDic); + val.rules.forEach(item => { + if (item.isGrand == 49) { + let identifier = item.identifier.replace(this.btmNode.attributes.name + '_', '') + if (actionDicStr.indexOf('"value":"'+identifier+'"}') != -1) { + this.actionForm.push(identifier) + } else { + this.linkactionForm.push(identifier); + } + } + }) + } + }else { + this.form={ + ruleName:'', + ruleType:'0' + }; + this.actionForm=[]; + this.linkactionForm=[]; } }, immediate: true, deep: true - } + }, }, methods: { //閫変腑鐢ㄦ埛 userHandler(){ + this.$refs.usertransfer.visible = true; + }, + // 閫変腑鐢ㄦ埛绌挎妗嗗洖濉� + userSendHandler(row) { + this.mainData=this.mainData.filter(item=>{ + return item.type!='鐢ㄦ埛' + }) + row.forEach((item,index)=>{ + var addItem=this.leftUserData.find(leftitem=>leftitem.oid==item); + this.mainData.push({ + type:'鐢ㄦ埛', + id:addItem.id, + name:addItem.name.split('(')[0], + oid:addItem.oid + }) + }) + this.rightUserData=row; + this.$refs.usertransfer.visible = false; }, //閫夋嫨瑙掕壊 roleHandler(){ - + this.$refs.roletransfer.visible = true; + }, + // 閫夋嫨瑙掕壊绌挎妗嗗洖濉� + roleSendHandler(row) { + this.mainData=this.mainData.filter(item=>{ + return item.type!='瑙掕壊' + }) + row.forEach((item,index)=>{ + var addItem=this.leftRoleData.find(leftitem=>leftitem.oid==item); + this.mainData.push({ + type:'瑙掕壊', + id:addItem.name, + name:addItem.name, + oid:addItem.oid + }) + }) + this.rightRoleData=row; + this.$refs.roletransfer.visible = false; }, //閫夋嫨鐢ㄦ埛缁� deptHandler(){ - + this.departVisible=true; + }, + // 閫夋嫨閮ㄩ棬鏁版嵁杞崲 + departDtaFormAtter(items) { + return items.map(item => { + // 杞崲褰撳墠鑺傜偣鐨勫睘鎬� + const formList = { + oid: item.oid, + id: item.attributes.id, + name: item.attributes.name, + description: item.attributes.description, + 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; + }); + }, + // 閫夋嫨閮ㄩ棬 + selectDepartChange(row) { + this.departCurrenRows = row; + }, + // 閫夋嫨閮ㄩ棬 琛屽崟閫� + rowClickDeptHandler(row) { + func.rowClickHandler( + row, + this.$refs.departCrud, + this.lastIndex, + (newIndex) => { + this.lastIndex = newIndex; + }, + () => { + this.departCurrenRows = [row]; + } + ); + }, + // 閫夋嫨閮ㄩ棬 纭畾 + saveDepartHandler() { + if (this.departCurrenRows.length==0) { + this.$message.warning('璇烽�夋嫨閮ㄩ棬鑺傜偣锛�') + return; + } + this.mainData=this.mainData.filter(item=>{ + return item.type!='鐢ㄦ埛缁�' + }) + this.departCurrenRows.forEach((addItem,index)=>{ + this.mainData.push({ + type:'鐢ㄦ埛缁�', + id:addItem.id, + name:addItem.name, + oid:addItem.oid + }) + }) + this.departVisible = false; + }, + //涓讳綋鍒楄〃琛岀偣鍑� + mainCurrentRowHandler(row){ + this.mainCurrentRow=row; + }, + //鎺堟潈涓讳綋鍒楄〃琛岀偣鍑� + authCurrentRowHandler(row){ + this.authCurrentRow=row; + }, + rightHandler() { + if(func.isEmptyObject(this.mainCurrentRow)){ + this.$message.warning('璇烽�夋嫨鐢ㄦ埛銆佺敤鎴风粍銆佽鑹蹭俊鎭紒') + return; + } + let name='{' + this.mainCurrentRow.id + ', ' + this.mainCurrentRow.name + ', '; + if (this.mainCurrentRow.type == '鐢ㄦ埛') { + name+='user}'; + } else if (this.mainCurrentRow.type == '瑙掕壊') { + name+='role}'; + } else if (this.mainCurrentRow.type == '鐢ㄦ埛缁�') { + name+='userGroup}'; + } + let canAdd = !this.authData.some(item => { + return item.name == name + }) + if(canAdd) { + this.authData.push({ + name: name + }) + this.$refs.mainCrud.setCurrentRow(); + this.mainCurrentRow={} + }else { + this.$message.warning('鎺堟潈涓讳綋淇℃伅閫夋嫨閲嶅锛�') + } + }, + leftHandler() { + this.authData = this.authData.filter(item => { + return item.name != this.authCurrentRow.name + }) }, initFormData() { let formData = { @@ -430,8 +772,9 @@ <style lang="scss" scoped> ::v-deep { - .el-radio { + .el-radio ,.el-checkbox{ margin-right: 30px; + margin-bottom: 10px; } } div{ @@ -441,5 +784,6 @@ padding: 10px 6px; margin: 0; border: 1px solid #EBEEF5; + overflow: auto; } </style> -- Gitblit v1.9.3