Browse Source

vuex中添加一层获取基础数据

11wqe1 1 month ago
parent
commit
6820f8be26

+ 17 - 18
src/components/schoolArea.vue

@@ -4,31 +4,27 @@
             <div class="allView_icon"></div>
             <div>总览</div>
         </div>
-        <div class="priSchBox">
-            <div class="primarySch" :class="{ active: activeSchool === 'primarySch' }" >
-                <img src="../assets/img/schlit.svg" style="margin-right: 8px;" alt="">
-                <div>小学部</div>
-            </div>
-            <div class="priSchArea">
-                <div class="schArea" v-for="(item, index) in priSchList" :key="index"
-                    :class="{ active: activeSchool === item }" >{{ item }}
+
+        <div v-if="fromL.admin.school">
+            <div class="priSchBox" v-for="(i,index) in fromL.admin.school.list" :key="index+'a'">
+                <div class="primarySch" :class="{ active: activeSchool === 'primarySch' }" >
+                    <img :src="i.menuIcon" style="margin-right: 8px;" alt="">
+                    <div>{{ i.menuName }}</div>
                 </div>
-            </div>
-        </div>
-        <div class="midSchBox">
-            <div class="primarySch" :class="{ active: activeSchool === 'primarySch' }">
-                <img src="../assets/img/star.svg" style="margin-right: 8px;" alt="">
-                <div>初中部</div>
-            </div>
-            <div class="priSchArea">
-                <div class="schArea" v-for="(item, index) in midList" :key="index"
-                    :class="{ active: activeSchool === item }">{{ item }}
+                <div class="priSchArea">
+                    <div class="schArea" v-for="(item, index) in i.children" :key="index"
+                        :class="{ active: activeSchool === item }" >
+                        {{ item.name }}
+                    </div>
                 </div>
             </div>
         </div>
+
     </div>
 </template>
 <script>
+import { mapGetters } from 'vuex';
+
 export default {
     data() {
         return {
@@ -46,6 +42,9 @@ export default {
             ]
         }
     },
+    computed: {
+        ...mapGetters(['fromL']),
+    },
     methods: {
         setActive(school) {
             this.activeSchool = school  // 切换高亮状态

+ 3 - 0
src/permission.js

@@ -31,6 +31,9 @@ router.beforeEach(async (to, from, next) => {
           const data = await store.dispatch('user/getInfo')
           await store.commit('user/SET_USERINFO', data)
 
+          await store.dispatch('user/getschPerInfo')
+
+
           if(data.type == 1 && data.role == 1 && data.rrole == 1){
             next({ path:'/KanBan', replace: true })
           }else {

+ 73 - 0
src/store/modules/user.js

@@ -1,6 +1,8 @@
 // import { user_info, login } from '@/api/user'
 import { eduGet, getUser } from "@/api/user";
 import { getToken, removeToken, setToken } from "@/utils/auth";
+import { API_CONFIG } from "@/common/apiConfig";
+import axios from '@/common/axios.config'; // 引入 axios 配置实例
 
 // import { Message } from 'element-ui'
 // import { loginOut } from '@/api/user';
@@ -151,6 +153,77 @@ const actions = {
     });
   },
 
+  async getschPerInfo({ commit,state }) {
+      let params = [{
+          functionName: API_CONFIG.ajax_schoolPermission.functionName, // 调用存储过程的名称
+          org: state.userinfo.org, //组织id
+          oid: state.userinfo.organizeid, //学校id
+        }]
+      ;
+      console.log('params',params);
+      // 获取学校权限与组织权限,优先使用学校权限,其次使用组织权限
+      // 第一步
+      let res = await axios.post(API_CONFIG.baseUrl, params)
+      let perData= JSON.parse(res.data[0][0].json)
+
+      // 第二步
+      let params2 = [
+				{
+					functionName: "select_desktopToolByPage",
+					status: "",
+					page: 1,
+					lim: 9999999,
+				},
+			];
+      let res2 = await axios.post(API_CONFIG.baseUrl, params2)
+      let toolList = res2.data[0];
+      toolList.forEach((i) => {
+        i.url = JSON.parse(i.url);
+        i.json = JSON.parse(i.json);
+        i.argumentList = JSON.parse(i.argumentList);
+      });
+
+      // 第三步
+			perData.admin.index.list.forEach((i, index) => {
+				let _index = toolList.findIndex((i2) => i == i2.id);
+				if (_index != -1) {
+					perData.admin.index.list[index] = toolList[_index];
+          perData.admin.index.list[index].hovered = false
+				} else {
+					console.log("无工具", i);
+				}
+			});
+
+			perData.admin.sidebar.list.forEach((i, index) => {
+				if (i.children) {
+					i.children.forEach((i2, index2) => {
+						let _toolList = JSON.parse(JSON.stringify(toolList))
+						let _index = _toolList.findIndex((i3) => i2 == i3.id);
+						
+						if (_index != -1) {
+							perData.admin.sidebar.list[index].children[index2] = _toolList[_index];
+							perData.admin.sidebar.list[index].children[index2].typeId = perData.admin.sidebar.list[index].typeId + "," +_toolList[_index].id;
+						} else {
+							console.log("无工具", i);
+						}
+					});
+				} else {
+					let _toolList = JSON.parse(JSON.stringify(toolList))
+					let _index = _toolList.findIndex((i2) => i == i2.id);
+					if (_index != -1) {
+						perData.admin.sidebar.list[index] = _toolList[_index];
+						perData.admin.sidebar.list[index].typeId =
+            perData.admin.sidebar.list[index].id;
+					} else {
+						console.log("无工具", i);
+					} 
+				}
+			});
+
+      commit('SET_FROM', perData)
+      console.log('state.fromL',state.fromL);
+  },
+
   logout({ commit }) {
     return new Promise((resolve) => {
       commit("SET_TOKEN", "");

+ 3 - 4
src/views/HomeView.vue

@@ -19,7 +19,7 @@
                 <img
                  @click="openData()"
                 style="width: 40px;height: 40px;object-fit: cover;border-radius: 50%; cursor: pointer;" 
-                :src="roleUser.headportrait ? roleUser.headportrait : require('../assets/img/toux.png')" alt="">
+                :src="roleUser.headportrait ? roleUser.headportrait : require('../assets/img/toux2.png')" alt="">
                 <div class="personInfo">
                   <div class="personInfoTit">
                     {{  roleUser.username }}
@@ -200,9 +200,6 @@ export default {
           // console.log('data', data)
           this.perData= JSON.parse(data[0].json)
           this.getToolData()
-
-
-
         })
         .catch((err) => {
           console.error("请求失败,错误信息:", err);
@@ -344,6 +341,8 @@ export default {
   display: flex;
   flex-direction: column;
   justify-content: space-between;
+  padding: 1px 0 2px;
+  box-sizing: border-box;
 }
 .personInfoTit{
   font-family: PingFang SC;

+ 27 - 16
src/views/kanBan/components/AquickEntrance.vue

@@ -4,12 +4,17 @@
             <!-- <div style="text-align: center;margin-bottom: 60px;">
                 小学部
             </div> -->
-            <div class="EntBloConList">
+            <div v-if="CampusList.length" class="EntBloConList">
                 <div class="EntBloCon" @click="loginLiyuan(i)" v-for="(i,index) in CampusList" :key="index">
                     <img style="width: 26px;margin-bottom: 10px;" :src="JSON.parse(i.json).basics.logo" alt="">
                     <div>{{ i.name }}</div>
                 </div>
             </div>
+
+            <div v-else class="EntBloCon2" @click="loginBen()" :key="index">
+                <img style="width: 26px;margin-bottom: 10px;" :src="fromL.basics.logo ? fromL.basics.logo : require('@/assets/img/moren.png')" alt="">
+                <div>{{ fromL.basics.title }}</div>
+            </div>
         </div>
 
         <!-- <div class="EntBlo">
@@ -33,22 +38,23 @@ import store from '../../../store'
 import { addrrole } from "@/api/user";
 
     export default {
-        
         data(){
             return{
                 CampusList:[],
-                uCode :{},
                 loading:false
             }
         },
         computed: {
-            ...mapGetters(['userinfo','userinfo2']),
+            ...mapGetters(['userinfo','fromL']),
         },
         methods:{
+            // 跳转本校校区
+            loginBen(){
+                this.$router.push('/');
+            },
+            // 跳转校区
             async loginLiyuan(val){
                 this.loading = true
-                
-                // this.uCode = val 
                 try{
                     let email = ''
                     let userName = JSON.parse(JSON.stringify(this.userinfo.accountNumber))
@@ -78,7 +84,6 @@ import { addrrole } from "@/api/user";
                         await store.commit('user/SET_USERINFO2', res.data[0][0])
                         this.loading = false
 
-                        console.log('this.userinfo2',this.userinfo2);
                         this.$router.push('/');
                     }else{
                         this.addRoleZh(email, val)
@@ -89,8 +94,8 @@ import { addrrole } from "@/api/user";
                     console.error("请求失败,错误信息:", err);
                 }
             },
+            // 创建校区管理员账号
             async addRoleZh(email, school){
-
                 let params = {
                         username: email,
                         userpassword: 'Coco1234',
@@ -104,19 +109,16 @@ import { addrrole } from "@/api/user";
                         rol: 1
                     }
 
-                console.log('params',params);
-                
 
                 let res = await addrrole(params)
-                console.log(res);
                 if (res.data.success != 1) {
                     this.$message.error('创建账号失败')
                 }else{
                     this.loginLiyuan(school)
                 }
                 this.loading = false
-
             },
+            // 获取校区数据
             getData(){
                 this.loading = true
                 let params = [
@@ -131,17 +133,15 @@ import { addrrole } from "@/api/user";
                     .post(API_CONFIG.baseUrl, params)
                     .then((res) => {
                         let data = res.data[0]
+                        console.log(data);
+                        
                         this.CampusList = data
                         this.loading = false
-
-                        console.log('data', data)
                     })
                     .catch((err) => {
                         this.loading = false
-
                         console.error("请求失败,错误信息:", err);
                     });
-                
             }
         },
         mounted(){
@@ -172,5 +172,16 @@ import { addrrole } from "@/api/user";
     flex-direction: column;
     align-items: center;
 }
+.EntBloCon2{
+    cursor: pointer;
+    padding: 40px 20px;
+    background: #fff;
+    border-radius: 10px;
+    display: flex;
+    width: 200px;
+    flex-direction: column;
+    align-items: center;
+    margin: auto;
+}
 
 </style>

+ 7 - 7
src/views/kanBan/index.vue

@@ -12,7 +12,7 @@
                 <img
                  @click="openData()"
                 style="width: 40px;height: 40px;object-fit: cover;border-radius: 50%; cursor: pointer;" 
-                :src="userinfo.headportrait ? userinfo.headportrait : require('../../assets/img/toux.png')" alt="">
+                :src="userinfo.headportrait ? userinfo.headportrait : require('../../assets/img/toux2.png')" alt="">
                 <div class="personInfo">
                   <div class="personInfoTit">
                     {{  userinfo.username }}
@@ -97,9 +97,6 @@ export default {
         return userName
       }
     },
-    roleUser(){
-        return this.userinfo.type == 1 && this.userinfo.role == 1 && this.userinfo.rrole == 1 ? this.userinfo2 : this.userinfo
-    }
   },
     data() {
         return {
@@ -108,6 +105,10 @@ export default {
         }
     },
     methods: {
+        ...mapActions({
+            logout: 'user/logout'
+        }),
+        // 返回首页
         gotoli(){
             this.$router.push('/homepageL');
         },
@@ -133,9 +134,6 @@ export default {
                 // 取消操作
             });
         },
-        ...mapActions({
-            logout: 'user/logout'
-        }),
         setActive(Index) {
             this.isActive = Index; // 设置激活的按钮
         }
@@ -195,6 +193,8 @@ export default {
   display: flex;
   flex-direction: column;
   justify-content: space-between;
+  padding: 1px 0 2px;
+  box-sizing: border-box;
 }
 .personInfoTit{
   font-family: PingFang SC;

+ 1 - 1
src/views/login/loginPage.vue

@@ -808,7 +808,7 @@ export default {
 .lp_r_b_line > div {
 	width: calc(100% / 2 - 70px);
 	height: 1px;
-	background-color: rgba(0, 0, 0, 0.3);
+	background-color: #e7e7e7;
 }
 
 .lp_r_b_line > span {