Kaynağa Gözat

增加用户所属角色&角色模板的查询接口,菜单查询接口增加角色&角色模板的过滤。

YangZhiJie 1 yıl önce
ebeveyn
işleme
5bcee5009c

+ 13 - 0
src/client/MenuWidget.vue

@@ -73,6 +73,10 @@ import Language from '../common/Language.js';
 import MenuNode from './MenuNode.vue';
 import { Uuid } from 'pc-component-v3';
 
+import { useRoleStateSingleton } from './RoleState.js';
+
+
+
 export default {
   components: {
     MenuNode,
@@ -90,6 +94,7 @@ export default {
       selectedNode: {}, // 选择的节点
       searchText: '',
       logoUrl: '', // logo路径
+      roleStateInstance: useRoleStateSingleton,
     };
   },
 
@@ -97,6 +102,11 @@ export default {
     searchText: function (newVal, oldVal) {
       this.search(newVal);
     },
+    'roleStateInstance.userRoleOrTemplate': function(newValue, oldVal){
+
+      console.log(newValue);
+      this.loadMenuData();
+    },
   },
 
   mounted: function () {
@@ -110,10 +120,13 @@ export default {
     loadMenuData: function () {
       console.log('loadMenuData');
       var _self = this;
+      _self.rootNodes = [];
       $.ajax({
         url: Common.getApiURL('MenuResourceV2/listCanVist'),
         type: 'POST',
+        data: _self.roleStateInstance.userRoleOrTemplate == null ? null : JSON.stringify(_self.roleStateInstance.userRoleOrTemplate),
         dataType: 'json',
+        contentType: 'application/json',
         beforeSend: function (request) {
           Common.addTokenToRequest(request);
         },

+ 20 - 0
src/client/RoleState.js

@@ -0,0 +1,20 @@
+import { reactive, ref } from 'vue';
+
+function useRoleState() {
+  const userRoleOrTemplate = ref();
+
+  function setUserRoleOrTemplate(newUserRoleOrTemplate) {
+    userRoleOrTemplate.value = newUserRoleOrTemplate;
+  }
+
+
+  return {
+    userRoleOrTemplate,
+    setUserRoleOrTemplate,
+  };
+}
+
+const useRoleStateSingleton = useRoleState();
+
+export {useRoleStateSingleton};
+

+ 4 - 1
src/client/TopNavigation.vue

@@ -34,6 +34,7 @@
           >
             <TopNavUserInfo :login-info="loginInfo" />
             <TopNavClientSelect :login-info="loginInfo" />
+            <TopNavRoleSelect />
             <TopNavMessage :login-info="loginInfo" />
             <TopNavVideoCallCenter />
             <TopNavDownload />
@@ -56,8 +57,9 @@ import TopNavUserInfo from './top-nav-user-info.vue';
 import TopNavMessage from './top-nav-message.vue';
 import TopNavVideoCallCenter from './top-nav-video-call-center.vue';
 import TopNavDownload from './top-nav-download.vue';
+import TopNavRoleSelect from './top-nav-role-select.vue';
 import LoginNotice from './LoginNotice.vue';
-
+;
 export default {
   components: {
     AuthImage,
@@ -67,6 +69,7 @@ export default {
     TopNavVideoCallCenter,
     TopNavDownload,
     LoginNotice,
+    TopNavRoleSelect,
   },
   emits: ['menuVisibleChanged'],
   data: function () {

+ 143 - 0
src/client/top-nav-role-select.vue

@@ -0,0 +1,143 @@
+<template>
+  <ul class="nav navbar-nav navbar-right">
+    <li class="dropdown">
+      <a class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">
+        {{ roleStateInstance.userRoleOrTemplate != null ? roleStateInstance.userRoleOrTemplate.roleOrTemplateName : '全部'
+        }}
+        <span class="caret" />
+      </a>
+      <ul v-if="userRoleOrTemplateList != null && userRoleOrTemplateList.length > 0" class="dropdown-menu">
+        <li
+          v-for="userRoleOrTemplate in userRoleOrTemplateList"
+          :key="userRoleOrTemplate.userRoleTemplateId + '-' + userRoleOrTemplate.userRoleId"
+        >
+          <a
+            @click="roleStateInstance.setUserRoleOrTemplate(userRoleOrTemplate); uploadSelectedRole(userRoleOrTemplate)"
+          >{{
+            userRoleOrTemplate.roleOrTemplateName }}</a>
+        </li>
+        <li>
+          <a @click="roleStateInstance.setUserRoleOrTemplate(null); uploadSelectedRole(null)">全部</a>
+        </li>
+      </ul>
+    </li>
+  </ul>
+</template>
+
+<script>
+
+import Common from '../common/Common.js';
+import ClientResourceV2 from '../api/base/ClientResourceV2.js';
+import TokenClientResource from '../api/base/TokenClientResource.js';
+import { Notify, Uuid } from 'pc-component-v3';
+import { useRoleStateSingleton } from './RoleState.js';
+import { UserStorageResource } from 'pc-component-v3';
+import { message } from 'ant-design-vue';
+
+export default {
+  props: {
+
+  },
+
+  data: function () {
+    return {
+      userRoleOrTemplateList: [],
+      loginClientName: '',
+      visible: false,
+      roleStateInstance: useRoleStateSingleton,
+    };
+  },
+
+
+  mounted: function () {
+    this.listUserRoleOrTemplate();
+  },
+
+  methods: {
+    /**
+     * 查询登录用户具备的角色OR角色模板
+     */
+    listUserRoleOrTemplate: function () {
+      var _self = this;
+      $.ajax({
+        url: Common.getApiURL('RoleResourceV3/listUserRoleOrTemplate'),
+        type: 'get',
+        contentType: 'application/json',
+        beforeSend: function (request) {
+          Common.addTokenToRequest(request);
+        },
+        success: function (response) {
+          if (response.errorCode === 0) {
+            _self.userRoleOrTemplateList = response.datas;
+            _self.downloadSelectedRole();
+          } else {
+            Notify.error('错误', response.errorMessage, false);
+          }
+        },
+        error: function (XMLHttpRequest, textStatus, errorThrown) {
+          Common.processException(XMLHttpRequest);
+        },
+      });
+    },
+
+
+    /**
+     * 选择的用户权限存储只后端
+     * @author YangZhiJie
+     * @date 2024-10-14
+     */
+    uploadSelectedRole: function (userRoleOrTemplate) {
+      let key = 'UserSelectedRole';
+      let userStorageDtos = [
+        {
+          key: key,
+          value: userRoleOrTemplate == null ? null : JSON.stringify(userRoleOrTemplate),
+        },
+      ];
+      UserStorageResource.uploadUserStorage(userStorageDtos).then(successData => {
+        console.log(successData);
+      }, errorData => {
+        Common.processException(errorData);
+      });
+    },
+
+
+    /**
+     * 选择的用户权限存储只后端
+     * @author YangZhiJie
+     * @date 2024-10-14
+     */
+    downloadSelectedRole: function () {
+      var _self = this;
+      let key = 'UserSelectedRole';
+
+      UserStorageResource.uniqueByKey(key).then(
+        success => {
+          if (success.errorCode == 0) {
+            if (success.data) {
+              let userRoleTemplate = JSON.parse(success.data);
+              if(_self.userRoleOrTemplateList != null){
+                _self.userRoleOrTemplateList.forEach(item => {
+                  if(
+                    (item.userRoleTemplateId + '-' + item.userRoleId) == 
+                    (userRoleTemplate.userRoleTemplateId + '-' + userRoleTemplate.userRoleId)
+                  ){
+                    _self.roleStateInstance.setUserRoleOrTemplate(item);
+                  }
+                });
+              }
+            } else {
+              _self.roleStateInstance.setUserRoleOrTemplate(null);
+            }
+          } else {
+            message.warning(success.errorMessage);
+          }
+        },
+        error => {
+          Common.processException(error);
+        },
+      );
+    },
+  },
+};
+</script>

+ 12 - 12
webpack.dev.js

@@ -62,71 +62,71 @@ module.exports = WebpackMerge.merge(baseConfig, {
     
     proxy: {
       '/api': {
-        target: 'http://192.168.1.108:10023/',
+        target: 'http://192.168.1.5:10025/',
         ws: false,
         changeOrigin: true,
         secure:true,
       },
       '/static': {
-        target: 'http://192.168.1.108:10023/',
+        target: 'http://192.168.1.5:10025/',
         ws: false,
         changeOrigin: true,
         secure:true,
       },
       '/content': {
-        target: 'http://192.168.1.108:10023/',
+        target: 'http://192.168.1.5:10025/',
         ws: false,
         changeOrigin: true,
         secure:true,
       },
       '/dashboard': {
-        target: 'http://192.168.1.108:10023/',
+        target: 'http://192.168.1.5:10025/',
         ws: false,
         changeOrigin: true,
         secure:true,
       },
       '/assets': {
-        target: 'http://192.168.1.108:10023/',
+        target: 'http://192.168.1.5:10025/',
         ws: false,
         changeOrigin: true,
         secure:true,
       },
       '/mock': {
-        target: 'http://192.168.1.108:10023/',
+        target: 'http://192.168.1.5:10025/',
         ws: false,
         changeOrigin: true,
         secure:true,
       },
       '/authApi': {
-        target: 'http://192.168.1.108:10023/',
+        target: 'http://192.168.1.5:10025/',
         ws: false,
         changeOrigin: true,
         secure:true,
       },
       '/Dictionary': {
-        target: 'http://192.168.1.108:10023/',
+        target: 'http://192.168.1.5:10025/',
         ws: false,
         changeOrigin: true,
         secure:true,
       },
       '/Files': {
-        target: 'http://192.168.1.108:10023/',
+        target: 'http://192.168.1.5:10025/',
         ws: false,
         changeOrigin: true,
         secure:true,
       },
       '/WebSocket': {
-        target: 'http://192.168.1.108:10023/',
+        target: 'http://192.168.1.5:10025/',
         ws: true,
         changeOrigin: true,
       },
       '/TrainVideo': {
-        target: 'http://192.168.1.108:10023/',
+        target: 'http://192.168.1.5:10025/',
         ws: true,
         changeOrigin: true,
       },
       '/module': {
-        target: 'http://192.168.1.108:10023/',
+        target: 'http://192.168.1.5:10025/',
         ws: true,
         changeOrigin: true,
         secure:true,