|
@@ -1,7 +1,7 @@
|
|
|
<template>
|
|
|
<div>
|
|
|
- <!-- <div class="top"> -->
|
|
|
- <!-- <div class="topBlock">
|
|
|
+ <div class="top">
|
|
|
+ <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>
|
|
@@ -11,25 +11,29 @@
|
|
|
{{ fromL.basics.brief }}
|
|
|
</div>
|
|
|
</div>
|
|
|
- <img style="width: 96px;height: 96px;" src="../assets/img/root.png" alt=""> -->
|
|
|
-
|
|
|
- <div style="height: 282px;overflow: hidden;margin: 20px 0;border-radius: 15px;">
|
|
|
- <img style="width: 100%;object-fit: cover;" :src="fromL.basics.loginBanner" alt="">
|
|
|
- </div>
|
|
|
- <!-- </div> -->
|
|
|
+ <img style="width: 96px;height: 96px;" src="../assets/img/root.png" alt="">
|
|
|
+
|
|
|
+ <!-- <div v-if="fromL.basics.loginBanner" style="margin: 20px 0;border-radius: 10px;overflow: hidden;">
|
|
|
+ <el-carousel :interval="5000" arrow="always">
|
|
|
+ <el-carousel-item v-for="(item,index) in bannerL(fromL.basics.loginBanner)" :key="index">
|
|
|
+ <img style="width: 100%;object-fit: cover;" :src="fromL.basics.loginBanner" alt="">
|
|
|
+ </el-carousel-item>
|
|
|
+ </el-carousel>
|
|
|
+ </div> -->
|
|
|
+ </div>
|
|
|
|
|
|
<!-- 平台应用 -->
|
|
|
<div class="TabList">
|
|
|
<div
|
|
|
- @mouseenter="setHovered(index, true)"
|
|
|
+ @mouseenter="setHovered(index, true)"
|
|
|
@mouseleave="setHovered(index, false)"
|
|
|
- style="position: relative;"
|
|
|
+ class="TabListAll"
|
|
|
@click="openApp(item)"
|
|
|
- v-for="(item,index) in appSignL(fromL.admin.index.list)"
|
|
|
+ v-for="(item,index) in tabList"
|
|
|
:key="index+'1p'">
|
|
|
<div class="TabListCon">
|
|
|
<div v-for="(p,pin) in AppCon(item.url)" :key="pin+'p'">
|
|
|
- <img class="imgApp" :src="hovList[index] ? p.hoverIcon : p.platformIcon" alt="">
|
|
|
+ <img class="imgApp" v-if="tabList[index].hovered ? p.hoverIcon : p.platformIcon" :src="tabList[index].hovered ? p.hoverIcon : p.platformIcon" alt="">
|
|
|
<div class="TabListName">
|
|
|
{{ p.name }}
|
|
|
</div>
|
|
@@ -41,6 +45,7 @@
|
|
|
</span>
|
|
|
</el-tooltip>
|
|
|
</div>
|
|
|
+
|
|
|
</div>
|
|
|
|
|
|
</div>
|
|
@@ -52,50 +57,53 @@
|
|
|
<img src="../assets/img/dong.png" alt="">
|
|
|
</div>
|
|
|
|
|
|
- <div class="footList">
|
|
|
- <div class="footListCon" v-for="(item,index) in admincocoFlow" @click="openNewWindow(item)" :key="index+'2p'">
|
|
|
- <div class="footListConimg"><img style="margin-bottom: 12px;height: 24px;width: 22px;" :src="JSON.parse(item.json).icon" alt=""></div>
|
|
|
- <div class="TabListName">{{ item.name }}</div>
|
|
|
- <div class="TabListBri">
|
|
|
- <el-tooltip class="item" effect="light" :content="item.detail" placement="bottom">
|
|
|
- <span>
|
|
|
- {{ item.detail }}
|
|
|
- </span>
|
|
|
- </el-tooltip>
|
|
|
+ <div style="display: flex;gap: 16px;flex: 1;">
|
|
|
+ <div class="footList">
|
|
|
+ <div class="footListCon" v-for="(item,index) in admincocoFlow" @click="openNewWindow(item)" :key="index+'2p'">
|
|
|
+ <div class="footListConimg"><img style="margin-bottom: 12px;height: 24px;width: 22px;" :src="JSON.parse(item.json).icon" alt=""></div>
|
|
|
+ <div class="TabListName">{{ item.name }}</div>
|
|
|
+ <div class="TabListBri">
|
|
|
+ <el-tooltip class="item" effect="light" :content="item.detail" placement="bottom">
|
|
|
+ <span>
|
|
|
+ {{ item.detail }}
|
|
|
+ </span>
|
|
|
+ </el-tooltip>
|
|
|
+ </div>
|
|
|
+ <!-- <div class="cha" @click.stop="delApp(item.lid)">
|
|
|
+ <img style="width: 20px;" src="../assets/img/cha.svg" alt="">
|
|
|
+ </div> -->
|
|
|
</div>
|
|
|
- <!-- <div class="cha" @click.stop="delApp(item.lid)">
|
|
|
- <img style="width: 20px;" src="../assets/img/cha.svg" alt="">
|
|
|
- </div> -->
|
|
|
</div>
|
|
|
- </div>
|
|
|
|
|
|
- <div class="footList2">
|
|
|
- <div class="footList2Tit">
|
|
|
- 常见应用
|
|
|
- </div>
|
|
|
- <div v-for="(i,index) in (4 - CocoFlowList.length)" @click="openUsuallyApp"
|
|
|
- :key="index+'3p'" class="footListCon2">
|
|
|
- <div style="margin-bottom: 8px;font-size: 40px;color: #0354D7;">
|
|
|
- <img src="../assets//img/add.svg" alt="">
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- <div class="footListCon" v-for="(item,index) in CocoFlowList" @click="openNewWindow(item)" :key="index+'4p'">
|
|
|
- <div class="footListConimg">
|
|
|
- <img style="margin-bottom: 12px;height: 24px;width: 22px;" :src="JSON.parse(item.json).icon" alt="">
|
|
|
+ <div class="footList2">
|
|
|
+ <div class="footList2Tit">
|
|
|
+ 常见应用
|
|
|
</div>
|
|
|
- <div class="TabListName">{{ item.name }}</div>
|
|
|
- <div class="TabListBri">
|
|
|
- <el-tooltip class="item" effect="light" :content="item.detail" placement="bottom">
|
|
|
- <span>
|
|
|
- {{ item.detail }}
|
|
|
- </span>
|
|
|
- </el-tooltip>
|
|
|
- </div>
|
|
|
- <div class="cha" @click.stop="delApp(item.lid)">
|
|
|
- <img style="width: 20px;" src="../assets/img/cha.svg" alt="">
|
|
|
+ <div v-for="(i,index) in (4 - CocoFlowList.length)" @click="openUsuallyApp"
|
|
|
+ :key="index+'3p'" class="footListCon2">
|
|
|
+ <div style="margin-bottom: 8px;font-size: 40px;color: #0354D7;">
|
|
|
+ <img src="../assets//img/add.svg" alt="">
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div class="footListCon6" v-for="(item,index) in CocoFlowList" @click="openNewWindow(item)" :key="index+'4p'">
|
|
|
+ <div class="footListConimg">
|
|
|
+ <img style="margin-bottom: 12px;height: 24px;width: 22px;" :src="JSON.parse(item.json).icon" alt="">
|
|
|
+ </div>
|
|
|
+ <div class="TabListName">{{ item.name }}</div>
|
|
|
+ <div class="TabListBri">
|
|
|
+ <el-tooltip class="item" effect="light" :content="item.detail" placement="bottom">
|
|
|
+ <span>
|
|
|
+ {{ item.detail }}
|
|
|
+ </span>
|
|
|
+ </el-tooltip>
|
|
|
+ </div>
|
|
|
+ <div class="cha" @click.stop="delApp(item.lid)">
|
|
|
+ <img style="width: 20px;" src="../assets/img/cha.svg" alt="">
|
|
|
+ </div>
|
|
|
</div>
|
|
|
</div>
|
|
|
</div>
|
|
|
+
|
|
|
</div>
|
|
|
|
|
|
<!-- 常见应用弹框 -->
|
|
@@ -143,8 +151,15 @@ import { API_CONFIG } from "@/common/apiConfig";
|
|
|
export default {
|
|
|
computed: {
|
|
|
...mapGetters(['userinfo','fromL']),
|
|
|
- // 如果hk,com没有图标,默认使用cn的
|
|
|
- AppCon(){
|
|
|
+ // banner循环图
|
|
|
+ // bannerL(){
|
|
|
+ // return function(val){
|
|
|
+ // console.log('val',val);
|
|
|
+ // return val.split(',')
|
|
|
+ // }
|
|
|
+ // },
|
|
|
+ // 如果hk,com没有图标,默认使用cn的
|
|
|
+ AppCon(){
|
|
|
return function(c) {
|
|
|
let k = JSON.parse(JSON.stringify(c))
|
|
|
|
|
@@ -161,6 +176,7 @@ import { API_CONFIG } from "@/common/apiConfig";
|
|
|
data[0].icon = data2[0].icon
|
|
|
data[0].activeIcon = data2[0].activeIcon
|
|
|
}
|
|
|
+
|
|
|
return data
|
|
|
};
|
|
|
},
|
|
@@ -206,13 +222,20 @@ import { API_CONFIG } from "@/common/apiConfig";
|
|
|
admincocoFlow:[],
|
|
|
// 用户ai应用数组
|
|
|
CocoFlowList:[],
|
|
|
+ // 平台工具
|
|
|
+ tabList:[],
|
|
|
|
|
|
hovList:[],
|
|
|
}
|
|
|
},
|
|
|
methods: {
|
|
|
setHovered(index, value) {
|
|
|
- this.hovList.splice(index,1,value)
|
|
|
+ // console.log(index, value);
|
|
|
+
|
|
|
+
|
|
|
+ this.tabList[index].hovered = value;
|
|
|
+ // console.log('this.tabList',this.tabList[index].hovered);
|
|
|
+
|
|
|
},
|
|
|
// 删除应用
|
|
|
delApp(val){
|
|
@@ -349,7 +372,34 @@ import { API_CONFIG } from "@/common/apiConfig";
|
|
|
this.$message.error("获取工具数据失败");
|
|
|
});
|
|
|
},
|
|
|
+ siftCoco(){
|
|
|
+ let data = []
|
|
|
+ let val = JSON.parse(JSON.stringify(this.fromL.admin.index.list))
|
|
|
+
|
|
|
+ // 用户是管理员全部展示
|
|
|
+ if (this.userinfo.type == 1 && this.userinfo.role == 1) {
|
|
|
+ val.forEach( e =>{
|
|
|
+ if (e.menuName || e.status == 0) {
|
|
|
+ data.push(e)
|
|
|
+ }
|
|
|
+ })
|
|
|
+ } else {
|
|
|
+ // 用户不是管理员,判断是否为用户可见 isAdmin 0普通用户 status是否被删除
|
|
|
+ val.forEach( e =>{
|
|
|
+ if (e.menuName || (e.isAdmin == '0' && e.status == 0)) {
|
|
|
+ data.push(e)
|
|
|
+ }
|
|
|
+ })
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ this.tabList = data
|
|
|
+ console.log('this.tabList',this.tabList);
|
|
|
+
|
|
|
+ },
|
|
|
getAdmincocoFlow(){
|
|
|
+ // 筛选可用平台工具
|
|
|
+ this.siftCoco()
|
|
|
// console.log('getAdmincocoFlow',this.fromL);
|
|
|
|
|
|
// 如果后台预设常用ai工具为0则不执行
|
|
@@ -477,17 +527,23 @@ import { API_CONFIG } from "@/common/apiConfig";
|
|
|
.TabList{
|
|
|
display: grid;
|
|
|
grid-template-columns: repeat(3, 1fr);
|
|
|
- gap: 106px; /* 网格间距 */
|
|
|
+ gap: 20px; /* 网格间距 */
|
|
|
margin-bottom: 16px;
|
|
|
}
|
|
|
+
|
|
|
+.TabListAll{
|
|
|
+ position: relative !important;
|
|
|
+ display: flex;
|
|
|
+ justify-content: flex-end;
|
|
|
+}
|
|
|
.imgApp{
|
|
|
width: 120px;
|
|
|
height: 140px;
|
|
|
object-fit: contain;
|
|
|
position: absolute;
|
|
|
top: 50%;
|
|
|
- transform: translate(0,-50%);
|
|
|
- left: -50px;
|
|
|
+ transform: translate(0,-50%) !important;
|
|
|
+ left: 0px;
|
|
|
}
|
|
|
.TabListCon{
|
|
|
width: 170px;
|
|
@@ -496,9 +552,8 @@ import { API_CONFIG } from "@/common/apiConfig";
|
|
|
box-sizing: border-box;
|
|
|
background-color: #fff;
|
|
|
border-radius: 10px;
|
|
|
- width: 100%;
|
|
|
+ width: calc(100% - 60px);
|
|
|
transition: all 0.3s ease; /* 统一过渡效果 */
|
|
|
- /* background-image: radial-gradient(#E6F0FF 1px, transparent 1px); */
|
|
|
background-size: 20px 20px;
|
|
|
cursor: pointer;
|
|
|
box-shadow: 0px 4px 10px 0px #0000000D;
|
|
@@ -508,7 +563,9 @@ import { API_CONFIG } from "@/common/apiConfig";
|
|
|
align-items: end;
|
|
|
}
|
|
|
.TabListCon:hover{
|
|
|
- transform: translate(-5px,-10px); /* 向上位移 */
|
|
|
+ width: calc(100% - 50px);
|
|
|
+ height: 125px;
|
|
|
+ margin-right: 10px;
|
|
|
box-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);
|
|
|
}
|
|
|
.TabListCon:hover TabListBri{
|
|
@@ -550,10 +607,10 @@ import { API_CONFIG } from "@/common/apiConfig";
|
|
|
/* 常见应用样式 */
|
|
|
.footCon{
|
|
|
display: flex;
|
|
|
+ height: 350px;
|
|
|
justify-content: space-between;
|
|
|
box-sizing: border-box;
|
|
|
border-radius: 10px;
|
|
|
- gap: 30px;
|
|
|
margin: 80px 0;
|
|
|
/* background-image: radial-gradient(#E6F0FF 1px, transparent 1px); */
|
|
|
background-size: 20px 20px;
|
|
@@ -561,43 +618,54 @@ import { API_CONFIG } from "@/common/apiConfig";
|
|
|
|
|
|
/* 图片 */
|
|
|
.footConLeft{
|
|
|
- /* width: 360px; */
|
|
|
- flex: 1;
|
|
|
+ width: 400px;
|
|
|
box-sizing: border-box;
|
|
|
+ display: flex;
|
|
|
+ justify-content: center;
|
|
|
+ align-items: center;
|
|
|
}
|
|
|
.footConLeft img{
|
|
|
- width: 100%;
|
|
|
+ object-fit: contain;
|
|
|
}
|
|
|
|
|
|
/* 中间后面设置应用 */
|
|
|
.footList{
|
|
|
display: grid;
|
|
|
grid-template-columns: repeat(4, 1fr);
|
|
|
+ grid-template-rows: repeat(2, 1fr); /* 创建两行,每行高度相等 */
|
|
|
gap: 16px; /* 网格间距 */
|
|
|
flex: 2;
|
|
|
}
|
|
|
.footListCon{
|
|
|
background-color: #fff;
|
|
|
border-radius: 10px;
|
|
|
+ box-shadow: 0px 0px 22.4px 0px #0000000D;
|
|
|
padding: 16px;
|
|
|
box-sizing: border-box;
|
|
|
transition: all 0.3s ease; /* 统一过渡效果 */
|
|
|
- height: 10vw;
|
|
|
- width: 10vw;
|
|
|
- min-height: 146px;
|
|
|
- max-width: 175px;
|
|
|
- max-height: 175px;
|
|
|
- background-size: 20px 20px;
|
|
|
+ cursor: pointer;
|
|
|
+}
|
|
|
+.footListCon6{
|
|
|
+ background-color: #fff;
|
|
|
+ border-radius: 10px;
|
|
|
+ box-shadow: 0px 0px 22.4px 0px #0000000D;
|
|
|
+ padding: 16px;
|
|
|
+ box-sizing: border-box;
|
|
|
cursor: pointer;
|
|
|
position: relative;
|
|
|
}
|
|
|
+.footListCon6:hover .cha{
|
|
|
+ display: block;
|
|
|
+}
|
|
|
.footListCon:hover{
|
|
|
transform: translate(-5px,-10px); /* 向上位移 */
|
|
|
-
|
|
|
box-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);
|
|
|
}
|
|
|
+
|
|
|
.footListConimg{
|
|
|
height: 40%;
|
|
|
+ padding-top: 8px;
|
|
|
+ box-sizing: border-box;
|
|
|
}
|
|
|
.cha{
|
|
|
display: none;position: absolute;top: 10px;right: 10px;
|
|
@@ -610,6 +678,7 @@ import { API_CONFIG } from "@/common/apiConfig";
|
|
|
.footList2{
|
|
|
display: grid;
|
|
|
grid-template-columns: repeat(2, 1fr);
|
|
|
+ grid-template-rows: repeat(2, 1fr); /* 创建两行,每行高度相等 */
|
|
|
gap: 16px;
|
|
|
flex: 1;
|
|
|
position: relative;
|
|
@@ -629,16 +698,14 @@ import { API_CONFIG } from "@/common/apiConfig";
|
|
|
flex-direction: column;
|
|
|
align-items: center;
|
|
|
border: 1px dashed #000000;
|
|
|
- width: 10vw;
|
|
|
- height: 10vw;
|
|
|
- min-height: 146px;
|
|
|
box-sizing: border-box;
|
|
|
- max-width: 175px;
|
|
|
- max-height: 175px;
|
|
|
border-radius: 12px;
|
|
|
border-width: 1px;
|
|
|
background-color: #E5E5E5;
|
|
|
}
|
|
|
+.footListCon2:hover {
|
|
|
+ background: #C9C9C9;
|
|
|
+}
|
|
|
|
|
|
|
|
|
|