瀏覽代碼

Merge branch 'master' of https://git.cocorobo.cn/CocoRoboLabs/pbl_admin_table

lsc 5 月之前
父節點
當前提交
bdefa874a0

文件差異過大導致無法顯示
+ 0 - 0
dist/css/app.0d9811dd.css


文件差異過大導致無法顯示
+ 0 - 0
dist/css/app.bb4c6083.css


+ 1 - 0
dist/img/cha.1eec2a19.svg

@@ -0,0 +1 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1744968490756" class="icon" viewBox="0 0 1030 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5495" xmlns:xlink="http://www.w3.org/1999/xlink" width="201.171875" height="200"><path d="M610.583851 508.819876L1004.919255 114.484472c25.440994-25.440994 25.440994-76.322981 0-101.763975-25.440994-25.440994-76.322981-25.440994-101.763975 0L508.819876 407.055901 114.484472 25.440994C89.043478 0 38.161491 0 12.720497 25.440994-12.720497 50.881988-12.720497 101.763975 12.720497 127.204969l394.335404 381.614907-381.614907 394.335404c-25.440994 25.440994-25.440994 76.322981 0 101.763975 25.440994 25.440994 76.322981 25.440994 101.763975 0l381.614907-394.335404 394.335404 394.335404c25.440994 25.440994 76.322981 25.440994 101.763975 0 25.440994-25.440994 25.440994-76.322981 0-101.763975L610.583851 508.819876z" p-id="5496" fill="#0663FE"></path></svg>

+ 0 - 1
dist/img/cha.8f6ab294.svg

@@ -1 +0,0 @@
-<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1744360176222" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4297" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M625.28 512l263.68-263.68c31.36-31.36 31.36-81.92 0-113.28s-81.92-31.36-113.28 0L512 398.72 248.32 135.68c-31.36-31.36-81.92-31.36-113.28 0s-31.36 81.92 0 113.28l263.68 263.68-263.68 263.68a80 80 0 0 0 0 113.28c15.36 15.36 35.84 23.68 56.32 23.68s40.96-7.68 56.32-23.68l263.68-263.68 263.68 263.68c15.36 15.36 35.84 23.68 56.32 23.68s40.96-7.68 56.32-23.68c31.36-31.36 31.36-81.92 0-113.28L624 512.64z" p-id="4298" fill="#785DC8"></path></svg>

+ 1 - 0
dist/img/dui.a18f4330.svg

@@ -0,0 +1 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1744968741523" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="6522" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M416.832 798.08C400.64 798.08 384.512 791.872 372.16 779.52L119.424 525.76C94.784 500.992 94.784 460.8 119.424 436.032 144.128 411.264 184.128 411.264 208.768 436.032L416.832 644.928 814.4 245.76C839.04 220.928 879.04 220.928 903.744 245.76 928.384 270.528 928.384 310.656 903.744 335.424L461.504 779.52C449.152 791.872 432.96 798.08 416.832 798.08Z" fill="#0663FE" p-id="6523"></path></svg>

+ 1 - 1
dist/index.html

@@ -36,7 +36,7 @@
         width: 100%;
         background: #e6eaf0;
         font-family: '黑体';
-      }</style><script defer="defer" src="/js/chunk-vendors.7cdade31.js"></script><script defer="defer" src="/js/app.188f0166.js"></script><link href="/css/chunk-vendors.7cfe4581.css" rel="stylesheet"><link href="/css/app.0d9811dd.css" rel="stylesheet"></head><body><noscript><strong>We're sorry but pblAdminTable doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></noscript><div id="app"></div></body></html><script>function stopSafari() {
+      }</style><script defer="defer" src="/js/chunk-vendors.7cdade31.js"></script><script defer="defer" src="/js/app.3a99aea4.js"></script><link href="/css/chunk-vendors.7cfe4581.css" rel="stylesheet"><link href="/css/app.bb4c6083.css" rel="stylesheet"></head><body><noscript><strong>We're sorry but pblAdminTable doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></noscript><div id="app"></div></body></html><script>function stopSafari() {
     //阻止safari浏览器双击放大功能
     let lastTouchEnd = 0  //更新手指弹起的时间
     document.documentElement.addEventListener("touchstart", function (event) {

文件差異過大導致無法顯示
+ 0 - 0
dist/js/app.188f0166.js


文件差異過大導致無法顯示
+ 0 - 0
dist/js/app.188f0166.js.map


文件差異過大導致無法顯示
+ 0 - 0
dist/js/app.3a99aea4.js


文件差異過大導致無法顯示
+ 0 - 0
dist/js/app.3a99aea4.js.map


+ 1 - 1
src/assets/img/cha.svg

@@ -1 +1 @@
-<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1744360176222" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4297" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M625.28 512l263.68-263.68c31.36-31.36 31.36-81.92 0-113.28s-81.92-31.36-113.28 0L512 398.72 248.32 135.68c-31.36-31.36-81.92-31.36-113.28 0s-31.36 81.92 0 113.28l263.68 263.68-263.68 263.68a80 80 0 0 0 0 113.28c15.36 15.36 35.84 23.68 56.32 23.68s40.96-7.68 56.32-23.68l263.68-263.68 263.68 263.68c15.36 15.36 35.84 23.68 56.32 23.68s40.96-7.68 56.32-23.68c31.36-31.36 31.36-81.92 0-113.28L624 512.64z" p-id="4298" fill="#785DC8"></path></svg>
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1744968490756" class="icon" viewBox="0 0 1030 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5495" xmlns:xlink="http://www.w3.org/1999/xlink" width="201.171875" height="200"><path d="M610.583851 508.819876L1004.919255 114.484472c25.440994-25.440994 25.440994-76.322981 0-101.763975-25.440994-25.440994-76.322981-25.440994-101.763975 0L508.819876 407.055901 114.484472 25.440994C89.043478 0 38.161491 0 12.720497 25.440994-12.720497 50.881988-12.720497 101.763975 12.720497 127.204969l394.335404 381.614907-381.614907 394.335404c-25.440994 25.440994-25.440994 76.322981 0 101.763975 25.440994 25.440994 76.322981 25.440994 101.763975 0l381.614907-394.335404 394.335404 394.335404c25.440994 25.440994 76.322981 25.440994 101.763975 0 25.440994-25.440994 25.440994-76.322981 0-101.763975L610.583851 508.819876z" p-id="5496" fill="#0663FE"></path></svg>

+ 1 - 0
src/assets/img/dui.svg

@@ -0,0 +1 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1744968741523" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="6522" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M416.832 798.08C400.64 798.08 384.512 791.872 372.16 779.52L119.424 525.76C94.784 500.992 94.784 460.8 119.424 436.032 144.128 411.264 184.128 411.264 208.768 436.032L416.832 644.928 814.4 245.76C839.04 220.928 879.04 220.928 903.744 245.76 928.384 270.528 928.384 310.656 903.744 335.424L461.504 779.52C449.152 791.872 432.96 798.08 416.832 798.08Z" fill="#0663FE" p-id="6523"></path></svg>

二進制
src/assets/login2.jpg


+ 5 - 0
src/common/apiConfig.js

@@ -82,6 +82,11 @@ export const API_CONFIG = {
       functionName: "select_schUsuallyApp",
     },
 
+    // 查询超级管理员信息
+    ajax_roleUser: {
+      functionName: "select_roleUser",
+    },
+
   //新增学校应用
   ajax_add_usuallyApp: {
     functionName: "insert_usuallyApp",

+ 6 - 3
src/components/botPage.vue

@@ -103,13 +103,16 @@ import { mapGetters } from 'vuex';
     export default {
         props:['hotApp'],
         computed: {
-            ...mapGetters(['userinfo']),
+            ...mapGetters(['userinfo','userinfo2']),
             list(){
                 return function(val) {
                     // console.log(val);
                     let newArr = val.slice(1)
                     return newArr
                 }
+            },
+            roleUser(){
+                return this.userinfo.role == 1 && this.userinfo.rrole == 1 && this.userinfo.type == 1&& this.userinfo2 !== '' ? this.userinfo2 : this.userinfo
             }
         },
         data() {
@@ -147,9 +150,9 @@ import { mapGetters } from 'vuex';
                 let params = [
                     {
                         functionName: API_CONFIG.ajax_morHotApp.functionName,
-                        uid: this.userinfo.userid, 
+                        uid: this.roleUser.userid, 
                         type: this.tab[index].type,
-                        cn: this.userinfo.schoolArea ? this.userinfo.schoolArea : this.userinfo.orgArea, //学校id
+                        cn: this.roleUser.schoolArea ? this.roleUser.schoolArea : this.roleUser.orgArea, //学校id
                     },
                 ];
                 this.$ajax

+ 67 - 85
src/components/sidebarL.vue

@@ -1,7 +1,7 @@
 <template>
         <div class="left">
             <!-- <div > -->
-                <div class="logo2">
+                <div class="logo2" @click="gotoKanban">
                     <img :src="fromL.basics.logo ? fromL.basics.logo : require('../assets/img/moren.png')" alt="">
                 </div>
                 <!-- <div class="ulT"> -->
@@ -9,22 +9,18 @@
                 <!-- 默认首页 -->
                 <div class="ulTOne" @click.stop="goto(0)">
                     <div class="menu_left">
-                        <div class="iconW">
-                            <img  class="logo" :src="activeL === 0 ? require('../assets/img/sy.svg') : require('../assets/img/sy1.svg')" alt="">
-                        </div>
+                        <img  class="logo" :src="activeL === 0 ? require('../assets/img/sy.svg') : require('../assets/img/sy1.svg')" alt="">
                         <span class="barT" :style="{color : activeL === 0 ? '#0051D7' :''}">首页</span>
                     </div>
                 </div>
 
                 <!-- 权限 -->
-                <div  v-for="(item,index) in appSignL(fromL.admin.sidebar.list)"
+                <div style="width: 100%;" v-for="(item,index) in appSignL(fromL.admin.sidebar.list)"
                     :key="index+1">
-
                     <!-- 渲染菜单类型 -->
-                     <div class="ulTOne TwoBar" v-if="item.menuName">
+                     <div class="ulTOne" v-if="item.menuName">
                           <!-- 二级导航 -->
-                        <transition name="slide">
-                            <div class="ulTCopy2">
+                            <div class="ulTCopy">
                                 <div class="ulTCopyTit">
                                     <span>{{ item.menuName }}</span>
                                 </div>
@@ -35,17 +31,13 @@
                                             <div class="ulTCopyTxt"
                                              :style="{background : (activeLTwo === index+1 +'+' + ind)? '#0663FE' : '',color: (activeLTwo === index+1 +'+' + ind)? '#fff' :''}"
                                             v-for="(p,pin) in AppCon(i.url)" :key="pin+'p'">
-                                         
                                                 <div class="ulTCopyConT">{{ p.name }}</div>
                                             </div>
                                     </div>
                                 </div>
                             </div>
-                        </transition>
                         <div class="menu_left">
-                            <div class="iconW">
-                                <img :src="activeL === (index +1) ? item.menuActiveIcon : item.menuIcon" class="logo" alt="">
-                            </div>
+                            <img :src="activeL === (index +1) ? item.menuActiveIcon : item.menuIcon" class="logo" alt="">
                             <span class="barT">{{ item.menuName }}</span>
                         </div>
                         
@@ -53,45 +45,40 @@
                    
                 
                     <!-- 渲染平台工具类型 -->
-                    <div @click.stop="goto(index,item)" 
+                    <div style="width: 100%;" @click.stop="goto(index,item)" 
                      v-else>
-                        <div class="ulTOne TwoBar" 
-                        @mouseenter="mouGet(item.toolId)" 
+                        <div class="ulTOne" 
                         v-for="(p,pin) in AppCon(item.url)" :key="pin+'p'">
-                          <!-- 二级导航 -->
-                                <transition name="slide">
-                                        <div class="ulTCopy2" v-if="item.toolId == 'appStore'">
-                                            <div class="ulTCopyTit">
-                                                <span>CocoFlow</span>
-                                            </div>
-                                            <div class="ulTCopyHei" >
-                                                <span v-if="cocoFlowList[0].length" style="color: #00000066;">最近使用</span>
-                                                <div class="ulTCopyTxt"  
-                                                v-for="(i,ind) in cocoFlowList[0]" 
-                                                @click="openNewWindow(i.url)" :key="ind+'ab'">
-                                                        <div class="ulTCopyConT">{{ i.name }}</div>
-                                                </div>
-                                                <span v-if="cocoFlowList[1].length" style="color: #00000066;">我的收藏</span>
-
-                                                <div class="ulTCopyTxt"
-                                                v-for="(i,ind) in cocoFlowList[1]" @click="openNewWindow(i.url)" :key="ind+'a'">
-                                                        <div class="ulTCopyConT">{{ i.name }}</div>
-                                                </div>
-                                            </div>
-                                        </div>
-                                    </transition>
-                                <div class="menu_left" >
-                                    <div class="iconW">
-                                        <img class="logo"  
-                                        :src="activeL === (index +1) ? p.activeIcon : p.defaultIcon" 
-                                        alt="">
-                                    </div>
+                                <div class="menu_left" @mouseenter="mouGet(item.toolId)" >
+                                    <img class="logo"  
+                                    :src="activeL === (index +1) ? p.activeIcon : p.defaultIcon" 
+                                    alt="">
                                     <span class="barT" :style="{color : activeL === (index +1) ? '#0051D7' :''}">
                                         {{ p.name }}
                                     </span>
                                 </div>
+                        <!-- 二级导航 -->
+                        <div class="ulTCopy" v-if="item.toolId == 'appStore'">
+                            <div class="ulTCopyTit">
+                                <span>CocoFlow</span>
+                            </div>
+                            <div class="ulTCopyHei" >
+                                <span v-if="cocoFlowList[0] && cocoFlowList[0].length" style="color: #00000066;">最近使用</span>
+                                <div class="ulTCopyTxt"  
+                                v-for="(i,ind) in cocoFlowList[0]" 
+                                @click="openNewWindow(i.url)" :key="ind+'ab'">
+                                        <div class="ulTCopyConT">{{ i.name }}</div>
+                                </div>
+                                <span v-if="cocoFlowList[0] && cocoFlowList[1].length" style="color: #00000066;">我的收藏</span>
 
+                                <div class="ulTCopyTxt"
+                                v-for="(i,ind) in cocoFlowList[1]" @click="openNewWindow(i.url)" :key="ind+'a'">
+                                        <div class="ulTCopyConT">{{ i.name }}</div>
+                                </div>
+                            </div>
+                        </div>
                         </div>
+                         
                     </div>
                 </div>
 
@@ -107,13 +94,13 @@ import { API_CONFIG } from "@/common/apiConfig";
     export default {
         props:['urlAddress'],
         computed: {
-            ...mapGetters(['userinfo','fromL','appSign']),
+            ...mapGetters(['userinfo','userinfo2','fromL','appSign']),
             // 如果hk,com没有图标,默认使用cn的
             AppCon(){
                 return function(c) {
                     let k = JSON.parse(JSON.stringify(c))
                     let data = k.filter(e=>{
-                        return e.region == this.userinfo.schoolArea || e.region == this.userinfo.orgArea
+                        return e.region == this.roleUser.schoolArea || e.region == this.roleUser.orgArea
                     })
 
                     let data2 = k.filter(e=>{
@@ -134,7 +121,7 @@ import { API_CONFIG } from "@/common/apiConfig";
                     // console.log('appSignL',val);
                     
                     let data = []
-                    if (this.userinfo.type == 1 && this.userinfo.role == 1) {
+                    if (this.roleUser.type == 1 && this.roleUser.role == 1) {
                         val.forEach( e =>{
                             if (e.menuName || e.status == 0) {
                                data.push(e)
@@ -149,6 +136,9 @@ import { API_CONFIG } from "@/common/apiConfig";
                     }
                     return data
                 }
+            },
+            roleUser(){
+                return this.userinfo.role == 1 && this.userinfo.rrole == 1 && this.userinfo.type == 1&& this.userinfo2 !== "" ? this.userinfo2 : this.userinfo
             }
         },
         data() {
@@ -166,7 +156,16 @@ import { API_CONFIG } from "@/common/apiConfig";
             ...mapActions({
                 logout: 'user/logout'
             }),
-
+            // 跳转到看板
+            gotoKanban(){
+                let num = this.userinfo.type == 1 && this.userinfo.role == 1 && this.userinfo.rrole == 1 ? 1 : 2
+                this.$router.push({
+                    path: '/KanBan',
+                    query: { 
+                        index: num, 
+                    }
+                });
+            },
             mouGet(val){
                 if(val != 'appStore') return
                 console.log('666')
@@ -203,12 +202,12 @@ import { API_CONFIG } from "@/common/apiConfig";
                     let url = ''
                     // 查出对应账号的应用区域地址
                     val.url.forEach(e => {
-                         // if (e.region == this.userinfo.schoolArea || e.region == this.userinfo.orgArea) {
+                         // if (e.region == this.roleUser.schoolArea || e.region == this.roleUser.orgArea) {
                         if (e.region == this.$region) {
                             url = e.url
                         }
                     });
-                    let _userinfo = this.userinfo, //登录用户信息
+                    let _userinfo = this.roleUser, //登录用户信息
                     { userid: _userid, organizeid: _oid, type: _type, org: _org, role: _role, classid: _classId } = _userinfo; // 解构赋值获取用户信息
                     const _TscreenType = 1, _SscreenType = 3; // 常量定义
                     let queryString = ''
@@ -232,9 +231,10 @@ import { API_CONFIG } from "@/common/apiConfig";
                     }
 
                     let _url = url + queryString
+                    console.log('_url',_url);
+                    
 
                     let kpl = ` <iframe 
-                                    v-if="appSign && urlAddress"
                                     allow= "camera *; microphone *;display-capture;midi;encrypted-media;"
                                     frameborder="no" 
                                     border="0" 
@@ -252,10 +252,11 @@ import { API_CONFIG } from "@/common/apiConfig";
             
             // 获取cocoFlow收藏与历史使用记录
             getData(){
+                this.cocoFlowList = []
                 let params = [
                     {
                         functionName: API_CONFIG.ajax_appStoreSave.functionName,
-                        uid: this.userinfo.userid, 
+                        uid: this.roleUser.userid, 
                     },
                 ];
                 
@@ -267,7 +268,7 @@ import { API_CONFIG } from "@/common/apiConfig";
                     })
                     .catch((err) => {
                         console.log(err);
-                        this.$message.error("获取常见应用失败");
+                        this.$message.error("获取cocoFlow收藏与历史失败");
                     });
             },
             // 点击二级导航
@@ -285,13 +286,13 @@ import { API_CONFIG } from "@/common/apiConfig";
                 
                 let url = ''
                 val.url.forEach(e => {
-                    // if (e.region == this.userinfo.schoolArea || e.region == this.userinfo.orgArea) {
+                    // if (e.region == this.roleUser.schoolArea || e.region == this.roleUser.orgArea) {
                     if (e.region == this.$region) {
                         url = e.url
                     }
                 });
 
-                let _userinfo = this.userinfo, //登录用户信息
+                let _userinfo = this.roleUser, //登录用户信息
                 { userid: _userid, organizeid: _oid, type: _type, org: _org, role: _role, classid: _classId } = _userinfo; // 解构赋值获取用户信息
                 const _TscreenType = 1, _SscreenType = 3; // 常量定义
                 let queryString = ''
@@ -311,13 +312,13 @@ import { API_CONFIG } from "@/common/apiConfig";
                     .filter(param => paramsMap[param] !== undefined || param === 'type')
                     .map(param => param === 'type' ? `tType=${paramsMap['tType']}` : `${param}=${paramsMap[param]}`);
 
-
                     queryString = canshu.length ? (url.includes('?') ? '&' : '?') + canshu.join('&') : ''; // 生成查询字符串
                 }
 
                 let _url = url + queryString
+                console.log('_url',_url);
+                
                 let kpl = ` <iframe 
-                                v-if="appSign && urlAddress"
                                 allow= "camera *; microphone *;display-capture;midi;encrypted-media;"
                                 frameborder="no" 
                                 border="0" 
@@ -345,10 +346,6 @@ import { API_CONFIG } from "@/common/apiConfig";
 
 <style scoped>
 .ulTCopy{
-    overflow: auto;
-    height: 100%;
-}
-.ulTCopy2 {
     height: 90%;
     width: 154px;
     overflow: hidden;
@@ -359,21 +356,21 @@ import { API_CONFIG } from "@/common/apiConfig";
     top: 70px;
     z-index: -100;
     transition: transform .5s ease;
-
 }
 
-.TwoBar:hover .ulTCopy2{
+
+.ulTOne:hover .ulTCopy{
     display: block !important;
     transform: translateX(164px) !important; /* 初始位置在视图之外 */
     z-index: -100;
     box-shadow: 0px 6px 30px 5px #0000000D;
-
 }
 
+
 .logo{
   margin: auto;
-  width: 21px;
-  max-height: 24px;
+  width: 24px;
+  height: 24px;
 }
 
 .iconW{
@@ -386,16 +383,15 @@ import { API_CONFIG } from "@/common/apiConfig";
     box-sizing: border-box;
 }
 .logo2 {
-  padding: 8px;
+    cursor: pointer;
   box-sizing: border-box;
-  height: 48px;
   width: 100%;
   background-color: #fff;
   text-align: center;
 }
 .logo2 img{
-    width: 30px;
-    height: 30px;
+    width: 60px;
+    height: 60px;
 }
 
 .userInfo{
@@ -430,7 +426,6 @@ import { API_CONFIG } from "@/common/apiConfig";
     border-radius: 10px;
     display: flex;
     height: 48px;
-    width: 48px;
     flex-wrap:nowrap;
     align-content: center;
     justify-content: center;
@@ -460,19 +455,6 @@ import { API_CONFIG } from "@/common/apiConfig";
 }
 
 
-.slide-enter-active, .slide-leave-active {
-  transition: transform 0.5s ease;
-  z-index: -1000 !important;
-}
-
-.slide-enter{
-    z-index: -1000 !important;
-  transform: translateX(0); /* 进入时移动到正常位置 */
-}
-.slide-leave-to /* .slide-leave-active in <2.1.8 */ {
-    z-index: -1000 !important;
-    transform: translateX(0); /* 进入时移动到正常位置 */
-}
 
 .ulTCopyTit{
     font-family: PingFang SC;

+ 19 - 16
src/components/topPage.vue

@@ -4,7 +4,7 @@
             <div class="topBlock">
                 <div class="topTit" style="display: flex;">
                     <div>欢迎使用</div>
-                    <div style="color: #0354D7;margin: 0 15px;"><span v-if="userinfo.orgName">{{userinfo.orgName}}—</span>{{ userinfo.schoolName }}</div>
+                    <div style="color: #0354D7;margin: 0 15px;"><span v-if="roleUser.orgName">{{roleUser.orgName}}—</span>{{ roleUser.schoolName }}</div>
                     <div>AI平台!</div>
                 </div>
                 <div class="topDetail">
@@ -116,7 +116,7 @@
                             </el-tooltip>
                         </div>
                         <div class="cha" @click.stop="delApp(item.lid)">
-                            <img style="width: 20px;" src="../assets/img/cha.svg" alt="">
+                            <img style="width: 15px;" src="../assets/img/cha.svg" alt="">
                         </div>
                     </div>
                 </div>
@@ -148,7 +148,7 @@
                                 </div>
                             </div>
                             <div style="position: absolute;top: 6px;right: 15px;" v-if="tab.includes(item.id)">
-                                
+                                <img style="width: 20px;" src="../assets//img/dui.svg" alt="">
                             </div>
                     </div>
                 </div>
@@ -168,7 +168,7 @@ import { API_CONFIG } from "@/common/apiConfig";
 
     export default {
         computed: {
-            ...mapGetters(['userinfo','fromL']),
+            ...mapGetters(['userinfo','userinfo2','fromL']),
             // banner循环图
             // bannerL(){
             //     return function(val){
@@ -182,7 +182,7 @@ import { API_CONFIG } from "@/common/apiConfig";
                     let k = JSON.parse(JSON.stringify(c))
 
                     let data = k.filter(e=>{
-                        return e.region == this.userinfo.schoolArea || e.region == this.userinfo.orgArea
+                        return e.region == this.roleUser.schoolArea || e.region == this.roleUser.orgArea
                     })
 
                     let data2 = k.filter(e=>{
@@ -202,7 +202,7 @@ import { API_CONFIG } from "@/common/apiConfig";
             appSignL(){
                 return function(val){
                     let data = []
-                    if (this.userinfo.type == 1 && this.userinfo.role == 1) {
+                    if (this.roleUser.type == 1 && this.roleUser.role == 1) {
                         val.forEach( e =>{
                             if (e.menuName || e.status == 0) {
                                 data.push(e)
@@ -226,6 +226,9 @@ import { API_CONFIG } from "@/common/apiConfig";
                     );
                     return difference
                 }
+            },
+            roleUser(){
+                return this.userinfo.role == 1 && this.userinfo.rrole == 1 && this.userinfo.type == 1&& this.userinfo2 !== "" ? this.userinfo2 : this.userinfo
             }
         },
         data() {
@@ -332,8 +335,8 @@ import { API_CONFIG } from "@/common/apiConfig";
                 let params = [
                     {
                         functionName: API_CONFIG.ajax_usuallyApp.functionName,
-                        uid: this.userinfo.userid, 
-                        cn: this.userinfo.schoolArea ? this.userinfo.schoolArea : this.userinfo.orgArea, //学校id
+                        uid: this.roleUser.userid, 
+                        cn: this.roleUser.schoolArea ? this.roleUser.schoolArea : this.roleUser.orgArea, //学校id
                     },
                 ];
                 
@@ -369,9 +372,9 @@ import { API_CONFIG } from "@/common/apiConfig";
                     let params = [
                         {
                             functionName: API_CONFIG.ajax_add_usuallyApp.functionName,
-                            oid:this.userinfo.organizeid,
+                            oid:this.roleUser.organizeid,
                             aid: val,
-                            uid: this.userinfo.userid,
+                            uid: this.roleUser.userid,
                         },
                     ];
                     
@@ -391,7 +394,7 @@ import { API_CONFIG } from "@/common/apiConfig";
                 let params = [
                     {
                         functionName: API_CONFIG.ajax_addedUsuallyApp.functionName,
-                        uid: this.userinfo.userid, 
+                        uid: this.roleUser.userid, 
                     },
                 ];
                 
@@ -410,7 +413,7 @@ import { API_CONFIG } from "@/common/apiConfig";
                 let val = JSON.parse(JSON.stringify(this.fromL.admin.index.list))
                 
                 // 用户是管理员全部展示
-                if (this.userinfo.type == 1 && this.userinfo.role == 1) {
+                if (this.roleUser.type == 1 && this.roleUser.role == 1) {
                     val.forEach( e =>{
                         if (e.menuName || e.status == 0) {
                             data.push(e)
@@ -471,13 +474,14 @@ import { API_CONFIG } from "@/common/apiConfig";
                 
                 let url = ''
                 val.url.forEach(e => {
-                     // if (e.region == this.userinfo.schoolArea || e.region == this.userinfo.orgArea) {
+                     // if (e.region == this.roleUser.schoolArea || e.region == this.roleUser.orgArea) {
                     if (e.region == this.$region) {
                         url = e.url
                     }
                 });
+                // console.log('_userinfo',JSON.parse(JSON.stringify(this.roleUser)));
 
-                let _userinfo = this.userinfo, //登录用户信息
+                let _userinfo = this.roleUser, //登录用户信息
                 { userid: _userid, organizeid: _oid, type: _type, org: _org, role: _role, classid: _classId } = _userinfo; // 解构赋值获取用户信息
                 const _TscreenType = 1, _SscreenType = 3; // 常量定义
                 let queryString = ''
@@ -506,7 +510,6 @@ import { API_CONFIG } from "@/common/apiConfig";
 
 
                   let kpl = ` <iframe 
-                                v-if="appSign && urlAddress"
                                 allow= "camera *; microphone *;display-capture;midi;encrypted-media;"
                                 frameborder="no" 
                                 border="0" 
@@ -659,7 +662,7 @@ import { API_CONFIG } from "@/common/apiConfig";
 
 /* 图片 */
 .footConLeft{
-    width: 400px;
+    width: 375px;
     min-width: 150px;
     box-sizing: border-box;
     display: flex;

+ 1 - 0
src/store/getters.js

@@ -8,5 +8,6 @@ const getters = {
   fromL: state => state.user.fromL,
   token: state => state.user.token,
   appSign: state => state.user.appSign,
+  userinfo2:state => state.user.userinfo2
 }
 export default getters

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

@@ -15,6 +15,7 @@ const getDefaultState = () => {
     avatar: "",
     is_init: false,
     userinfo: {},
+    userinfo2:{},
     // 应用权限
     fromL: {
       basics: {
@@ -76,6 +77,9 @@ const mutations = {
   SET_USERINFO: (state, userinfo) => {
     state.userinfo = userinfo;
   },
+  SET_USERINFO2: (state, userinfo2) => {
+    state.userinfo2 = userinfo2;
+  },
 };
 
 const actions = {

+ 35 - 15
src/views/HomeView.vue

@@ -10,8 +10,8 @@
         <div class="top">
           <div class="topCon">
             <div class="title">
-              <span v-if="userinfo.orgName">{{userinfo.orgName}}</span >
-              <span style="color: #0663FE;font-weight: 600;">{{ userinfo.schoolName }}</span>
+              <span v-if="roleUser.orgName">{{roleUser.orgName}}</span >
+              <span style="color: #0663FE;font-weight: 600;">{{ roleUser.schoolName }}</span>
                 
             </div>
             <div class="person">
@@ -19,13 +19,13 @@
                 <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="roleUser.headportrait ? roleUser.headportrait : require('../assets/img/toux.png')" alt="">
                 <div class="personInfo">
                   <div class="personInfoTit">
-                    {{  userinfo.username }}
+                    {{  roleUser.username }}
                   </div>
                   <div class="personInfoBri">
-                    {{ userinfo.accountNumber }}
+                    {{ userSuffix() }}
                   </div>
                 </div>
               </div>
@@ -84,7 +84,34 @@ export default {
     }
   },
   computed: {
-    ...mapGetters(['userinfo','appSign']),
+    ...mapGetters(['userinfo','appSign','userinfo2']),
+    userSuffix(){
+      let yym = ''
+      return function() {
+        
+        
+        yym = this.userinfo.role == 1 && this.userinfo.rrole == 1 && this.userinfo.type == 1 && this.userinfo2 !== '' ? this.userinfo2 : this.userinfo
+       
+        let val = yym.accountNumber
+
+        let userName = JSON.parse(JSON.stringify(val))
+
+        const regEmail = new RegExp("^[A-Za-z0-9_-]+@[a-zA-Z0-9_-]+(\\.[a-zA-Z0-9_-]+)+$");
+        
+        // // 判断用户输入账户带不带后缀
+        if (!regEmail.test(userName)) {
+          console.log('111');
+        } else {
+          const parts = userName.split('@');
+          userName = parts[0];
+        }
+
+        return userName
+      }
+    },
+    roleUser(){
+        return this.userinfo.role == 1 && this.userinfo.rrole == 1 && this.userinfo.type == 1&& this.userinfo2 !== '' ? this.userinfo2 : this.userinfo
+    }
   },
   methods: {
     ...mapActions({
@@ -101,12 +128,6 @@ export default {
       let data = this.AppJSon.filter(e=>{
         return val.toolId == e.toolId
       })
-     
-
-     
-      
-     
-
       // console.log('data',data);
 
       if (data.length == 0) {   //为0则添加进列表,并将其他的展示状态改为false
@@ -165,8 +186,8 @@ export default {
       let params = [
         {
           functionName: API_CONFIG.ajax_schoolPermission.functionName, // 调用存储过程的名称
-          org: this.userinfo.org, //组织id
-          oid: this.userinfo.organizeid, //学校id
+          org: this.roleUser.org, //组织id
+          oid: this.roleUser.organizeid, //学校id
         },
       ];
       
@@ -333,7 +354,6 @@ export default {
   font-weight: 300;
   font-size: 10px;
   line-height: 100%;
-  text-align: center;
   color: #969BA3;
 }
 .container {

+ 6 - 3
src/views/homepageL.vue

@@ -16,7 +16,10 @@ import { API_CONFIG } from "@/common/apiConfig";
     export default {
         props:['urlAddress'],
         computed: {
-            ...mapGetters(['userinfo']),
+            ...mapGetters(['userinfo','userinfo2']),
+            roleUser(){
+                return this.userinfo.role == 1 && this.userinfo.rrole == 1 && this.userinfo.type == 1&& this.userinfo2 !== "" ? this.userinfo2 : this.userinfo
+            }
         },
         components:{
             topPage,
@@ -44,8 +47,8 @@ import { API_CONFIG } from "@/common/apiConfig";
                 let params = [
                     {
                         functionName: API_CONFIG.ajax_allApp.functionName, // 调用存储过程的名称
-                        uid: this.userinfo.userid, 
-                        cn: this.userinfo.schoolArea ? this.userinfo.schoolArea : this.userinfo.orgArea, 
+                        uid: this.roleUser.userid, 
+                        cn: this.roleUser.schoolArea ? this.roleUser.schoolArea : this.roleUser.orgArea, 
                     },
                 ];
                 

+ 54 - 5
src/views/kanBan/components/AquickEntrance.vue

@@ -5,33 +5,81 @@
                 小学部
             </div>
             <div class="EntBloConList">
-                <div class="EntBloCon" v-for="i in 9" :key="i">
+                <div class="EntBloCon" @click="loginLiyuan" v-for="i in 1" :key="i">
                     <img style="width: 18px;margin-bottom: 10px;" src="../../../assets/img/tese.svg" alt="">
-                    <div>笔架山中学</div>
+                    <div>通新岭校区</div>
                 </div>
             </div>
         </div>
 
-        <div class="EntBlo">
+        <!-- <div class="EntBlo">
             <div style="text-align: center;margin-bottom: 60px;">
                 初中部
             </div>
             <div class="EntBloConList">
                 <div class="EntBloCon" v-for="i in 1" :key="i">
                     <img style="width: 18px;margin-bottom: 10px;" src="../../../assets/img/tese.svg" alt="">
-                    <div>笔架山中学</div>
+                    <div>通新岭校区</div>
                 </div>
             </div>
-        </div>
+        </div> -->
     </div>
 </template>
 
 <script>
+import { mapGetters } from 'vuex';
+import { API_CONFIG } from "@/common/apiConfig";
+import store from '../../../store'
+
     export default {
+        
         data(){
             return{
 
             }
+        },
+        computed: {
+            ...mapGetters(['userinfo','userinfo2']),
+        },
+        methods:{
+            async loginLiyuan(){
+                try{
+                    let email = ''
+                    let userName = JSON.parse(JSON.stringify(this.userinfo.accountNumber))
+                    const regEmail = new RegExp("^[A-Za-z0-9_-]+@[a-zA-Z0-9_-]+(\\.[a-zA-Z0-9_-]+)+$");
+                    
+                    // // 判断用户输入账户带不带后缀
+                    if (!regEmail.test(userName)) {
+                        console.log('111');
+                    } else {
+                        const parts = userName.split('@');
+                        email = parts[0] + '-010504@010504.com';
+                    }
+
+                    let params = [
+                        {
+                            functionName: API_CONFIG.ajax_roleUser.functionName, // 调用存储过程的名称
+                            uname: email
+                        },
+                    ];
+                    
+                    // 发起异步请求
+                    const res = await this.$ajax.post(API_CONFIG.baseUrl, params);
+                    console.log('res.data[0]',res.data[0]);
+                    if (res.data[0].length) {
+                        await store.commit('user/SET_USERINFO2', res.data[0][0])
+                        console.log('this.userinfo2',this.userinfo2);
+                        this.$router.push('homepageL');
+                    }else{
+                        this.addRoleZh()
+                    }
+                } catch (err) {
+                    console.error("请求失败,错误信息:", err);
+                }
+            },
+            addRoleZh(){
+              console.log('111');
+            }
         }
     }
 </script>
@@ -50,6 +98,7 @@
 
 
 .EntBloCon{
+    cursor: pointer;
     padding: 40px 20px;
     background: #fff;
     border-radius: 10px;

+ 148 - 3
src/views/kanBan/index.vue

@@ -1,11 +1,45 @@
 <template>
     <div class="KanBan">
+        <div class="top">
+          <div class="topCon">
+            <div class="title">
+              <span v-if="userinfo.orgName">{{userinfo.orgName}}</span >
+              <span style="color: #0663FE;font-weight: 600;">{{ userinfo.schoolName }}</span>
+            </div>
+            <div class="person">
+                <el-button v-if="isIndex2 == 2" type="text" @click="gotoli" style="margin-right: 20px">返回</el-button>
+              <div class="person_name">
+                <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="">
+                <div class="personInfo">
+                  <div class="personInfoTit">
+                    {{  userinfo.username }}
+                  </div>
+                  <div class="personInfoBri">
+                    {{ userSuffix(userinfo.accountNumber) }}
+                  </div>
+                </div>
+              </div>
+              <el-button type="text" @click="handleLogout" style="margin-left: 20px">退出</el-button>
+            </div>
+          </div>
+        </div>
         <div style="max-width: 1260px;margin: auto;">
             <div class="buttonArea">
                 <div style="width: 500px;display: flex;gap: 100px;">
-                    <div class="btnDiv" :class="{ active: isActive === 1 }" @click="setActive(1)">数据看板</div>
+                    <div class="btnDiv"  :class="{ active: isActive === 1 }" >
+                        <div v-if="userinfo.role == 1 && userinfo.rrole == 1 && userinfo.type ==1" @click="setActive(1)">
+                            数据看板
+                        </div>
+                    </div>
                     <div class="btnDiv" :class="{ active: isActive === 2 }" @click="setActive(2)">校区特色</div>
-                    <div class="btnDiv" :class="{ active: isActive === 3 }" @click="setActive(3)">快捷入口</div>
+                    <div class="btnDiv" :class="{ active: isActive === 3 }" >
+                        <div v-if="userinfo.role == 1 && userinfo.rrole == 1 && userinfo.type ==1"  @click="setActive(3)">
+                            快捷入口
+                        </div>
+                    </div>
                 </div>
             </div>
             
@@ -35,6 +69,8 @@ import schoolArea from '../../components/schoolArea.vue';
 import AdataKanban from './components/AdataKanban';
 import AquickEntrance from './components/AquickEntrance';
 import AschoolFeature from './components/AschoolFeature';
+import { mapGetters, mapActions } from 'vuex';
+import { loginOut } from '@/api/user';
 
 export default {
     name:'kanBan',
@@ -44,19 +80,127 @@ export default {
         AquickEntrance,
         AschoolFeature
     },
+    computed: {
+    ...mapGetters(['userinfo','userinfo2','appSign']),
+    userSuffix(){
+      return function(val) {
+        let userName = JSON.parse(JSON.stringify(val))
+        const regEmail = new RegExp("^[A-Za-z0-9_-]+@[a-zA-Z0-9_-]+(\\.[a-zA-Z0-9_-]+)+$");
+        
+        // // 判断用户输入账户带不带后缀
+        if (!regEmail.test(userName)) {
+          console.log('111');
+        } else {
+          const parts = userName.split('@');
+          userName = parts[0];
+        }
+        return userName
+      }
+    },
+    roleUser(){
+        return this.userinfo.type == 1 && this.userinfo.role == 1 && this.userinfo.rrole == 1 ? this.userinfo2 : this.userinfo
+    }
+  },
     data() {
         return {
-            isActive: 1
+            isActive: 1,
+            isIndex2:'',
         }
     },
     methods: {
+        gotoli(){
+            this.$router.push('/homepageL');
+        },
+        async handleLogout() {
+            this.$confirm('确定退出吗', '提示', {
+                confirmButtonText: '确定',
+                cancelButtonText: '取消',
+                type: 'warning'
+            }).then(async () => {
+                loginOut()
+                .then(async () => {
+                    this.$message({
+                    message: '退出成功',
+                    type: 'success'
+                    });
+                    await this.logout();
+                    this.$router.push('/login');
+                })
+                .catch(err => {
+                    console.error(err);
+                });
+            }).catch(() => {
+                // 取消操作
+            });
+        },
+        ...mapActions({
+            logout: 'user/logout'
+        }),
         setActive(Index) {
             this.isActive = Index; // 设置激活的按钮
         }
+    },
+    mounted() {
+        const index = this.$route.query.index; // 123
+        if (index == 2) {
+            this.isActive = 2
+            this.isIndex2 = 2
+        }
+        
+        
     }
 }
 </script>
 <style scoped>
+.top{
+  width: 100%;
+  display: flex;
+  height: 60px;
+  box-sizing: border-box;
+}
+.topCon{
+  display: flex;
+  width: 100%;
+  justify-content: space-between;
+  align-items: center;
+}
+.title{
+  font-family: PingFang SC;
+  font-weight: 400;
+  font-size: 14px;
+  line-height: 100%;
+  letter-spacing: 0%;
+  color: #969BA3;
+  display: flex;
+  gap: 11px;
+}
+.person{
+  display: flex;
+  align-items: center;
+}
+.person_name{
+  display: flex;
+  gap: 9px;
+}
+.personInfo{
+  display: flex;
+  flex-direction: column;
+  justify-content: space-between;
+}
+.personInfoTit{
+  font-family: PingFang SC;
+  font-weight: 500;
+  font-size: 16px;
+  line-height: 100%;
+  color: #000000;
+}
+.personInfoBri{
+  font-family: PingFang SC;
+  font-weight: 300;
+  font-size: 10px;
+  line-height: 100%;
+  color: #969BA3;
+}
 .KanBan {
     background-color: #FAFAFA;
     /* 设置高度为视口高度 */
@@ -113,6 +257,7 @@ export default {
 
 .btnDiv {
     height: 48px;
+    width: 64px;
     text-align: center;
     line-height: 48px;
     margin-left: 15px;

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

@@ -5,7 +5,7 @@
 				v-if="form.basics && form.basics.loginBanner"
 				:src="form.basics.loginBanner"
 			/>
-			<img v-else src="@/assets/login.png" />
+			<img v-else src="@/assets/login2.jpg" />
 		</div>
 		<div class="lp_right">
 			<div class="lp_r_box">
@@ -154,7 +154,7 @@ export default {
 			loading: false,
 			loginType: "default",
 			redirect: this.$route.query["redirect"],
-			org2: this.$route.query["org"] || window.sessionStorage.getItem('org2'),
+			org2: this.$route.query["org"] || (window.location.href.includes('/liyuan') ? window.sessionStorage.getItem('org2') : ''),
 			oid: this.$route.query["oid"],
 			// 组织列表
 			OrgOptions: [],
@@ -516,7 +516,7 @@ export default {
 .lp_left > img {
 	width: 100%;
 	height: 100%;
-	object-fit: cover;
+	object-fit: contain;
 	border-radius: 0 150px 0 0;
 }
 

部分文件因文件數量過多而無法顯示