Browse Source

主页消息通知

Karsa 1 year ago
parent
commit
b05bb9af10

+ 1 - 1
index.html

@@ -2,7 +2,7 @@
 <html lang="en">
   <head>
     <meta charset="UTF-8" />
-    <link rel="icon" type="image/x-icon" href="./static/fa.ico" id="icon"/>
+    <link rel="icon" type="image/x-icon" href="./static/fa.png" id="icon"/>
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
     <title>crm</title>
   </head>

+ 150 - 0
src/components/questionMsgDia.vue

@@ -0,0 +1,150 @@
+<script setup>
+import { ref } from "vue";
+import { useRoute, useRouter } from "vue-router";
+import { interactiveInterface } from "@/api/api.js";
+
+const $route = useRoute();
+const $router = useRouter();
+
+function handleShow() {
+  getList();
+}
+
+const isshow = ref(false);
+const list = ref([]);
+async function getList() {
+  const res = await interactiveInterface.getAllNoticeList();
+  if (res.Ret === 200) {
+    const arr = res.Data.List || [];
+    isshow.value = res.Data.IsShow;
+    list.value = arr;
+  }
+}
+getList()
+function goDetail(item) {
+  // 去到留言管理页面
+  if ($route.path === "/ybComment") {
+    $router.go(0);
+  } else {
+    $router.push("/ybComment");
+  }
+}
+</script>
+<template>
+  <el-popover
+    placement="bottom"
+    width="404"
+    trigger="hover"
+    popper-class="question-msg-pop"
+    @show="handleShow"
+    @hide="handleShow"
+    v-if="isshow"
+  >
+    <div class="question-msg-pop-content">
+      <div style="font-size: 16px">待处理消息({{ list.length }})</div>
+      <div class="list-box">
+        <div
+          class="item"
+          v-for="item in list"
+          :key="item.CommentId"
+          @click="goDetail(item)"
+        >
+          <img
+            class="avatar"
+            :src="
+              item.HeadImgUrl
+                ? item.HeadImgUrl
+                : '~@/assets/img/icons/msg-inner.png'
+            "
+            alt=""
+          />
+          <div style="overflow: hidden">
+            <div class="title">{{ item.Content }}</div>
+            <div class="time">{{ item.CreateTime }}</div>
+          </div>
+        </div>
+      </div>
+    </div>
+    <template #reference >
+      <div class="icon-box-item">
+        <img
+          src="~@/assets/img/icons/msg2.png"
+          alt=""
+          style="height: 20px; width: 20px"
+        />
+        <span
+          style="
+            width: 8px;
+            height: 8px;
+            border-radius: 50%;
+            background: #f00;
+            display: block;
+            position: absolute;
+            right: 5px;
+            top: 3px;
+          "
+          v-show="list.length > 0"
+        ></span>
+      </div>
+    </template>
+  </el-popover>
+</template>
+<style scoped lang="scss">
+.question-msg-pop-content {
+  min-width: 404px !important;
+  .list-box {
+    margin-top: 20px;
+    border-top: 1px solid #dcdfe6;
+    min-height: 400px;
+    max-height: 600px;
+    overflow-y: auto;
+    .item {
+      display: flex;
+      margin: 17px 0;
+      cursor: pointer;
+      align-items: center;
+      .avatar {
+        width: 40px;
+        height: 40px;
+        object-fit: cover;
+        margin-right: 15px;
+      }
+      .title {
+        font-size: 16px;
+        color: #666;
+        overflow: hidden;
+        text-overflow: ellipsis;
+        white-space: nowrap;
+      }
+      .time {
+        color: #999;
+        font-size: 12px;
+      }
+    }
+  }
+}
+.icon-box-item {
+  height: 32px;
+  padding: 0 10px;
+  border-radius: 4px;
+  cursor: pointer;
+  margin-right: 30px;
+  flex-shrink: 0;
+  display: flex;
+  align-items: center;
+  color: #333;
+  position: relative;
+  &:hover {
+    background-color: #eaf3fe;
+    color: #409eff;
+  }
+  svg {
+    width: 20px;
+    height: 20px;
+  }
+  img {
+    width: 20px;
+    height: 20px;
+  }
+}
+</style>

+ 75 - 3
src/layouts/components/breadcrumb/index.vue

@@ -1,9 +1,81 @@
 <script setup>
+import { computed } from "vue";
+import { useRoute, useRouter } from "vue-router";
+
+const $route = useRoute();
+const $router = useRouter();
+
+const RoleType = computed(() => {
+  return localStorage.getItem('RoleType') || ''
+})
+
+function handleClickBread(item){
+  if(item.meta.pathFrom=='dayorweek'){
+    $router.go(-1)
+  }else{
+    $router.push({path:'/'+item.meta.pathFrom})
+  }
+}
+
+function routeClick(item) {
+  if($route.path == item.path) {
+        window.location.reload();
+  }else {
+    $router.push({path:item.path})
+  }
+}
 
 </script>
 <template>
-  <div></div>
+  <el-breadcrumb separator="/" class="breadcrumb-container">
+    <el-breadcrumb-item v-for="item in $route.matched" :key="item.path">
+      <span
+        v-if="item.meta.pathFrom"
+        @click.stop="handleClickBread(item)"
+        style="cursor: pointer; color: #4099ef;"
+      >
+        <template v-if="item.meta.pathFrom == 'pickList'">
+          {{ RoleType == "ficc" ? "权益客户" : "ficc客户" }}
+        </template>
+        <template v-if="item.meta.pathFrom == '/regionCustomerDetail'">
+          {{
+            $route.query.title ? $route.query.title.split("/")[1] || "" : ""
+          }}客户列表
+        </template>
+        <template v-else>
+          {{ item.meta.pathName }}
+        </template>
+      </span>
+      <span
+        v-if="item.meta.pathFrom"
+        style="margin: 0 9px; font-weight: 700; color: #c0c4cc; fontsize: 16px"
+        >/</span
+      >
+      <span
+        v-if="!item.children.length"
+        style="cursor: pointer; color: #4099ef;"
+        @click.stop="routeClick(item)"
+      >
+        <template v-if="item.path == '/pickList'">
+          {{ RoleType == "ficc" ? "权益客户" : "ficc客户" }}
+        </template>
+        <template v-if="item.path == '/regionCustomerDetail'">
+          {{
+            $route.query.title ? $route.query.title.split("/")[1] || "" : ""
+          }}客户列表
+        </template>
+        <template v-else>
+          {{ item.meta.title }}
+        </template>
+      </span>
+      <span v-else>{{ item.meta.title }}</span>
+    </el-breadcrumb-item>
+  </el-breadcrumb>
 </template>
 <style scoped lang="scss">
-
-</style>
+.el-breadcrumb {
+  :deep(.el-breadcrumb__item) {
+    font-size: 16px;
+  }
+}
+</style>

+ 106 - 117
src/layouts/components/container/index.vue

@@ -1,10 +1,12 @@
 <script setup>
-import { computed, reactive, ref, toRefs } from "vue";
+import { computed, reactive, ref, toRefs,watch } from "vue";
 import { useRoute,useRouter } from 'vue-router'
 import { useQuitSystem } from '@/hooks/login/use-login'
 import { customInterence, roadshowInterence,departInterence } from "@/api/api";
 import { ElMessageBox } from 'element-plus'
 import { Expand,Fold } from '@element-plus/icons-vue'
+import BreadCrumb from '../breadcrumb/index.vue'
+import questionMsgDia from '@/components/questionMsgDia.vue'
 
 const props = defineProps({
   isCollapse: Boolean,
@@ -38,6 +40,15 @@ const isShowHelpDoc = computed(() => {
   return roleArr.includes(role)
 })
 
+watch(
+  () => $route.path,
+  (newval) => {
+    if(newval === '/sealApprovalList'){
+        isShowApprovalNotice.value = true
+    }
+  }
+)
+
 
 const isCollapse = computed(()=> props.isCollapse)
 function collapseHandle() {
@@ -158,6 +169,23 @@ function getNotice() {
   })
 }
 getNotice()
+ // 切换通知消息类型
+function handleNoticeTypeChange(e){
+  noticeState.noticeType=e
+  if(e==='客户'){
+    noticeState.currentNoticeList=noticeState.noticeList.Company.List
+  }else if(e==='合同'){
+    noticeState.currentNoticeList=noticeState.noticeList.Contract.List
+  }else if (e === '用印'){
+    noticeState.currentNoticeList=noticeState.noticeList.Seal.List
+  }else if(e==='ETA试用'){
+    noticeState.currentNoticeList=noticeState.noticeList.ETATrial.List
+  }else if(e==='出差'){
+    noticeState.currentNoticeList=noticeState.noticeList.BusinessTrip.List
+  }else{
+    noticeState.currentNoticeList=noticeState.noticeList.EdbReplace.List
+  }
+}
 /* 点击消息列表 跳转审批列表 */
 function noticeClick(item) {
   customInterence.readNotice({
@@ -254,6 +282,11 @@ async function linkToOtherMS(key){
   window.open(href,'_blank');
 }
 
+function toOperation (url) {
+  let {href} = $router.resolve({path:`/${url}`});
+  window.open(href,'_blank');
+}
+
 /* 退出 */
 function logout() {
   ElMessageBox.confirm(
@@ -267,6 +300,11 @@ function logout() {
   .catch()
 }
 
+//修改密码
+function resetpwd() {
+  $router.push({ path: "/resetpsd" });
+}
+
 const { noticeList,isShowNotice,currentNoticeList,noticeType,noticeCount,flag1,flag2,flag3,flag4,flag5,flag6 } = toRefs(noticeState);
 </script>
 <template>
@@ -284,38 +322,9 @@ const { noticeList,isShowNotice,currentNoticeList,noticeType,noticeCount,flag1,f
                 <Fold />
               </el-icon>
             </div>
+            
             <!-- 面包屑 -->
-            <!-- <el-breadcrumb separator="/" class="breadcrumb-inner">
-                <el-breadcrumb-item v-for="item in $route.matched" :key="item.path">
-                  <span
-                  v-if="item.meta.pathFrom"
-                  @click.stop="handleClickBread(item)"
-                  style="cursor:pointer; color:#4099ef;fontSize:16px;">
-                    <template v-if="item.meta.pathFrom == 'pickList'">
-                      {{RoleType=='ficc'?'权益客户':'ficc客户'}}
-                    </template>
-                    <template v-if="item.meta.pathFrom=='/regionCustomerDetail'">
-                      {{$route.query.title?($route.query.title.split('/')[1]||''):''}}客户列表
-                    </template>
-                    <template v-else>
-                      {{item.meta.pathName}}
-                    </template>
-                  </span>
-                  <span v-if="item.meta.pathFrom" style="margin:0 9px;font-weight:700;color:#C0C4CC;fontSize:16px;">/</span>
-                  <span v-if="item.parent" style="cursor:pointer; color:#4099ef;fontSize:16px;" @click.stop="routeClick(item)">
-                    <template v-if="item.path == '/pickList'">
-                      {{RoleType=='ficc'?'权益客户':'ficc客户'}}
-                    </template>
-                    <template v-if="item.path=='/regionCustomerDetail'">
-                      {{$route.query.title?($route.query.title.split('/')[1]||''):''}}客户列表
-                    </template>
-                    <template v-else>
-                      {{ item.name }}
-                    </template>
-                  </span>
-                  <span v-else style="fontSize:16px;">{{ item.name }}</span>
-                </el-breadcrumb-item>
-              </el-breadcrumb> -->
+            <BreadCrumb/>
           </div>
 
           <div class="approval_notice" v-show="isShowApprovalNotice">
@@ -355,7 +364,7 @@ const { noticeList,isShowNotice,currentNoticeList,noticeType,noticeCount,flag1,f
             popper-class="notice_poper"
           >
             <div>
-              <h4 style="paddingbottom: 12px; borderbottom: 1px solid #dcdfe6">
+              <h4 style="padding-bottom: 12px; border-bottom: 1px solid #dcdfe6">
                 待办事项({{ noticeCount }}项)
               </h4>
               <div class="notice-nav-box">
@@ -370,7 +379,7 @@ const { noticeList,isShowNotice,currentNoticeList,noticeType,noticeCount,flag1,f
                     style="
                       width: 8px;
                       height: 8px;
-                      borderradius: 50%;
+                      border-radius: 50%;
                       background: #f00;
                       display: block;
                       position: absolute;
@@ -391,7 +400,7 @@ const { noticeList,isShowNotice,currentNoticeList,noticeType,noticeCount,flag1,f
                     style="
                       width: 8px;
                       height: 8px;
-                      borderradius: 50%;
+                      border-radius: 50%;
                       background: #f00;
                       display: block;
                       position: absolute;
@@ -412,7 +421,7 @@ const { noticeList,isShowNotice,currentNoticeList,noticeType,noticeCount,flag1,f
                     style="
                       width: 8px;
                       height: 8px;
-                      borderradius: 50%;
+                      border-radius: 50%;
                       background: #f00;
                       display: block;
                       position: absolute;
@@ -432,7 +441,7 @@ const { noticeList,isShowNotice,currentNoticeList,noticeType,noticeCount,flag1,f
                     style="
                       width: 8px;
                       height: 8px;
-                      borderradius: 50%;
+                      border-radius: 50%;
                       background: #f00;
                       display: block;
                       position: absolute;
@@ -452,7 +461,7 @@ const { noticeList,isShowNotice,currentNoticeList,noticeType,noticeCount,flag1,f
                     style="
                       width: 8px;
                       height: 8px;
-                      borderradius: 50%;
+                      border-radius: 50%;
                       background: #f00;
                       display: block;
                       position: absolute;
@@ -471,26 +480,26 @@ const { noticeList,isShowNotice,currentNoticeList,noticeType,noticeCount,flag1,f
                   @click="noticeClick(item)"
                   style="
                     display: flex;
-                    justifycontent: space-between;
-                    alignitems: center;
-                    fontsize: 12px;
+                    justify-content: space-between;
+                    align-items: center;
+                    font-size: 12px;
                     cursor: pointer;
-                    marginbottom: 15px;
+                    margin-bottom: 15px;
                   "
                 >
-                  <div style="display: flex; alignitems: center">
+                  <div style="display: flex; align-items: center">
                     <div
                       style="
                         width: 36px;
                         min-width: 36px;
                         height: 36px;
                         background: #409eff;
-                        borderradius: 50%;
+                        border-radius: 50%;
                         color: #fff;
-                        textalign: center;
-                        lineheight: 36px;
-                        marginright: 8px;
-                        fontsize: 12px;
+                        text-align: center;
+                        line-height: 36px;
+                        margin-right: 8px;
+                        font-size: 12px;
                       "
                     >
                       {{ item.RealName.substr(item.RealName.length - 2) }}
@@ -512,7 +521,7 @@ const { noticeList,isShowNotice,currentNoticeList,noticeType,noticeCount,flag1,f
                 </li>
               </ul>
               <div
-                style="textalign: center; margin: 40px 0; color: #999"
+                style="text-align: center; margin: 40px 0; color: #999"
                 v-else
               >
                 暂无通知
@@ -536,7 +545,7 @@ const { noticeList,isShowNotice,currentNoticeList,noticeType,noticeCount,flag1,f
                   style="
                     width: 8px;
                     height: 8px;
-                    borderradius: 50%;
+                    border-radius: 50%;
                     background: #f00;
                     display: block;
                     position: absolute;
@@ -548,6 +557,7 @@ const { noticeList,isShowNotice,currentNoticeList,noticeType,noticeCount,flag1,f
               </div>
             </template>
           </el-popover>
+
           <!-- 销售待办 -->
           <el-tooltip effect="dark" content="待办事项" placement="bottom" 
               v-if="['rai_seller','ficc_seller'].includes(Role)">
@@ -702,45 +712,6 @@ const { noticeList,isShowNotice,currentNoticeList,noticeType,noticeCount,flag1,f
         }
       }
     }
-    .breadcrumb-container {
-      padding: 12px 20px;
-      box-sizing: border-box;
-      line-height: 18px;
-      margin-bottom: 0px;
-      .title {
-        width: 150px;
-        color: #475669;
-        float: left;
-      }
-      .breadcrumb-inner {
-        font: 14px/19px "微软雅黑";
-      }
-    }
-    .breadFixed {
-      display: block !important;
-      background: rgb(255, 255, 255);
-      border-bottom: 1px solid #eaeaea;
-      padding: 13px 245px 12px 20px;
-      box-sizing: border-box;
-      position: fixed;
-      top: 60px;
-      left: 150px;
-      right: 0;
-      z-index: 10;
-      overflow: hidden;
-    }
-    .breadCollapsedFixed {
-      display: block !important;
-      background: rgb(255, 255, 255);
-      border-bottom: 1px solid #eaeaea;
-      padding: 15px 105px 15px 25px;
-      box-sizing: border-box;
-      position: fixed;
-      top: 60px;
-      left: 60px;
-      right: 0;
-      z-index: 10;
-    }
     .userinfo {
       min-width: 210px;
       width: 220px;
@@ -814,34 +785,6 @@ const { noticeList,isShowNotice,currentNoticeList,noticeType,noticeCount,flag1,f
         line-height: 19px;
       }
     }
-    .icon-box-item {
-      height: 32px;
-      padding: 0 10px;
-      border-radius: 4px;
-      cursor: pointer;
-      margin-right: 30px;
-      flex-shrink: 0;
-      display: flex;
-      align-items: center;
-      color: #333;
-      position: relative;
-      &:hover {
-        background-color: #eaf3fe;
-        color: #409eff;
-      }
-      svg {
-        width: 20px;
-        height: 20px;
-      }
-      img {
-        width: 20px;
-        height: 20px;
-      }
-    }
-  }
-  .safariStyle {
-    border-right: none;
-    margin-left: -1px;
   }
   .content-container {
     height: calc(100vh - 90px);
@@ -900,4 +843,50 @@ const { noticeList,isShowNotice,currentNoticeList,noticeType,noticeCount,flag1,f
     }
   }
 }
+.icon-box-item {
+  height: 32px;
+  padding: 0 10px;
+  border-radius: 4px;
+  cursor: pointer;
+  margin-right: 30px;
+  flex-shrink: 0;
+  display: flex;
+  align-items: center;
+  color: #333;
+  position: relative;
+  &:hover {
+    background-color: #eaf3fe;
+    color: #409eff;
+  }
+  svg {
+    width: 20px;
+    height: 20px;
+  }
+  img {
+    width: 20px;
+    height: 20px;
+  }
+}
+.notice_item:hover {
+  color: #409EFF;
+}
+.notice_poper {
+  max-height: 500px;
+  overflow-y: auto;
+  .notice-nav-box{
+    display: flex;
+    padding-top: 12px;
+    padding-left: 5px;
+    .notice-nav-item{
+      cursor: pointer;
+      line-height: 2;
+      margin-right: 30px;
+      position: relative;
+    }
+  }
+  .notice-nav-active{
+    color: #409EFF;
+    border-bottom: 2px solid #409EFF;
+  }
+}
 </style>

+ 0 - 22
src/layouts/index.vue

@@ -54,28 +54,6 @@
   </div>
 </template>
 <style lang="scss" scoped>
-.notice_item:hover {
-  color: #409EFF;
-}
-.notice_poper {
-  max-height: 500px;
-  overflow-y: auto;
-  .notice-nav-box{
-    display: flex;
-    padding-top: 12px;
-    padding-left: 5px;
-    .notice-nav-item{
-      cursor: pointer;
-      line-height: 2;
-      margin-right: 30px;
-      position: relative;
-    }
-  }
-  .notice-nav-active{
-    color: #409EFF;
-    border-bottom: 2px solid #409EFF;
-  }
-}
 #containercon {
   min-width: 1000px;
   width: 100%;

+ 10 - 2
src/router/index.js

@@ -21,6 +21,12 @@ const routes = [
       title: "登录"
     },
   },
+  {
+		path: '/temppage',
+		component: ()=>import('@/views/transferPage.vue'),
+		name: 'transferPage',
+		hidden: true
+	},
   {
     name: '404',
     path: '/404',
@@ -56,8 +62,6 @@ router.beforeEach(async(to, from, next) => {
     if (window._hmt) {
       window._hmt.push(["_trackPageview", "/#" + to.fullPath]);
     }
-    //获取权限按钮
-    // to.path != "/login"&&to.path!='/temppage'&&await store.dispatch('getPermissionButtons')
     next();
   } else {
     next({ path: "/404" });
@@ -65,6 +69,10 @@ router.beforeEach(async(to, from, next) => {
 });
 
 router.afterEach((to, from, next) => {
+  // 页面标题
+	document.title = to.matched[to.matched.length-1].meta.title ?
+  `弘则-${to.matched[to.matched.length-1].meta.title}`:'弘则管理后台'
+
   window.scrollTo(0, 0);
 });
 

+ 9 - 3
src/router/modules/oldRoutes.js

@@ -33,11 +33,14 @@ export default [
 	{
 		path: '/',
 		component: Home,
-		name: '主页',
+		name: 'resetpsdHome',
+		meta: {
+			title: "首页"
+		},
 		hidden: true,
 		children: [
 			{
-				path: 'resetpsd',
+				path: '/resetpsd',
 				component: () => import('@/views/Resetpassword.vue'),
 				name: 'resetPassword',
 				hidden: true,
@@ -52,7 +55,10 @@ export default [
 	{
 		path: '/',
 		component: Home,
-		name: '首页',
+		name: 'dashBoardHome',
+		meta: {
+			title: "首页"
+		},
 		hidden: false,
 		children: [{
 			path: '/dashboard',

+ 80 - 45
src/styles/element.scss

@@ -1,49 +1,6 @@
+@charset "utf-8";
 ///* 改变主题色变量 */
 $color-primary:#5882EF;
-.el-dialog__close.el-icon.el-icon-close{ color:#fff; }
-.el-dialog__close.el-icon.el-icon-close:hover{ color:#fff; }
-#positionContent .avatar {width: 100px;height: 100px;}
-.color_primary{color:#5882EF};
-.goods_box .el-card__body{padding: 10px;}
-.goods_boxs .el-card__body{padding: 10px 0;}
-.has-gutter th{ background:#f9f9f9 !important; }
-.el-submenu.is-opened>ul{ overflow:hidden; }
-.el-submenu.is-opened>ul li{ background:#fff; }
-.el-submenu__title>span{ font:14px "微软雅黑"; letter-spacing:1px; }
-.el-submenu__title>i:nth-of-type(1){ color:#1F2E4D; font-size:14px; }
-.el-submenu__title>i:nth-of-type(2){ line-height:16px; z-index:10; right:0; left:100px; }
-.el-submenu.item .el-submenu__title{ text-align:left; }
-.el-submenu .el-menu-item{ padding:0 70px 0 45px !important; }
-.menu-collapsed .el-submenu .el-menu-item{ padding:0 85px 0 30px !important; }
-.box-card{ margin-bottom:20px !important; padding-bottom:30px; }
-.el-dialog .el-input{ width:60%; }
-.el-dialog .el-select>.el-input{ width:100%; }
-.el-dialog .el-dialog__headerbtn{ font-size:24px; padding:10px; top:3px; right:10px; }  // 右上角X
-.el-dialog .el-dialog__header{ background:$color-primary; color:#fff; padding:15px 0 15px 25px; text-align:left; }
-.el-dialog .el-dialog__header span{ font:15px "微软雅黑"; }
-.el-dialog .el-dialog__title{ color:#fff; }
-.el-dialog .el-dialog__body{ padding-bottom:5px !important; }
-.el-checkbox__input.is-disabled input[type=checkbox]{ border-radius:100% !important; background:red; }
-.el-carousel__container{ height:100% !important; }
-.el-input-group__prepend{ width:40px; height:45px; padding:0 13px !important; box-sizing:border-box; }
-.el-input.el-input-group.el-input-group--prepend input{ width:240px; height:45px; box-sizing:border-box; }
-.editwordSty{ color:#5882EF; margin-right:10px; cursor:pointer; }
-.theme-picker-dropdown .el-color-dropdown__link-btn{ display:none; }  //颜色选择器清除按钮消失
-.el-upload-dragger{ width:360px; height:150px; margin-left:20px; }  //拖拽上传样式
-.rolemanage .el-checkbox{ margin-left:0 !important; margin-right:20px !important; }
-.zdy{ display:block !important; }
-.fright{ float:right; margin-left:20px; }
-.zdyDialog .el-dialog__header{ display:none; }
-.el-select-dropdown__wrap{ max-height:574px; }
-.el-message-box__header .el-message-box__title{ color:#5882EF !important; }  //确认弹窗
-.confirmButton{ margin-left:-80px !important; }
-.cancelButton{ margin-right:-80px !important; }
-// a[href="https://froala.com/wysiwyg-editor"], a[href="https://www.froala.com/wysiwyg-editor?k=u"]{ display:none !important; position:absolute; top:-99999999px; }
-// .fr-wrapper > div[style*="z-index: 9999"] {position: absolute;top: -10000px;opacity: 0;}
-// .fr-element.fr-view {position: absolute;top: 0;}
-// .fr-placeholder{margin-top: 0 !important;}
-a[href="https://froala.com/wysiwyg-editor"], a[href="https://www.froala.com/wysiwyg-editor?k=u"]{ border:1px solid #eaeaea; background:#fff !important; color:#ccc !important; }
-@charset "utf-8";
 body,h1,h2,h3,h4,h5,h6,hr,p,blockquote,dl,dt,dd,ul,ol,li,button,input,textarea,th,td { margin:0; padding:0; }
 body{ font-size:12px; font-style:normal; font-family:"\5FAE\8F6F\96C5\9ED1", Helvetica, sans-serif,; }
 html{ overflow:auto; 
@@ -84,4 +41,82 @@ button:-moz-focusring,[type="button"]:-moz-focusring,[type="reset"]:-moz-focusri
 [type="search"]{ -webkit-appearance:textfield; outline-offset:-2px; }
 [type="search"]::-webkit-search-cancel-button,[type="search"]::-webkit-search-decoration{ -webkit-appearance:none; }
 ::-webkit-input-placeholder{ color:inherit; opacity:.54; }
-::-webkit-file-upload-button{ -webkit-appearance:button; font:inherit; }
+::-webkit-file-upload-button{ -webkit-appearance:button; font:inherit; }
+
+
+.el-dialog__close.el-icon.el-icon-close{ color:#fff; }
+.el-dialog__close.el-icon.el-icon-close:hover{ color:#fff; }
+#positionContent .avatar {width: 100px;height: 100px;}
+.color_primary{color:#5882EF};
+.goods_box .el-card__body{padding: 10px;}
+.goods_boxs .el-card__body{padding: 10px 0;}
+.has-gutter th{ background:#f9f9f9 !important; }
+.el-submenu.is-opened>ul{ overflow:hidden; }
+.el-submenu.is-opened>ul li{ background:#fff; }
+.el-submenu__title>span{ font:14px "微软雅黑"; letter-spacing:1px; }
+.el-submenu__title>i:nth-of-type(1){ color:#1F2E4D; font-size:14px; }
+.el-submenu__title>i:nth-of-type(2){ line-height:16px; z-index:10; right:0; left:100px; }
+.el-submenu.item .el-submenu__title{ text-align:left; }
+.el-submenu .el-menu-item{ padding:0 70px 0 45px !important; }
+.menu-collapsed .el-submenu .el-menu-item{ padding:0 85px 0 30px !important; }
+.box-card{ margin-bottom:20px !important; padding-bottom:30px; }
+.el-dialog .el-input{ width:60%; }
+.el-dialog .el-select>.el-input{ width:100%; }
+.el-dialog .el-dialog__headerbtn{ font-size:24px; padding:10px; top:3px; right:10px; }  // 右上角X
+.el-dialog .el-dialog__header{ background:$color-primary; color:#fff; padding:15px 0 15px 25px; text-align:left; }
+.el-dialog .el-dialog__header span{ font:15px "微软雅黑"; }
+.el-dialog .el-dialog__title{ color:#fff; }
+.el-dialog .el-dialog__body{ padding-bottom:5px !important; }
+.el-checkbox__input.is-disabled input[type=checkbox]{ border-radius:100% !important; background:red; }
+.el-carousel__container{ height:100% !important; }
+.el-input-group__prepend{ width:40px; height:45px; padding:0 13px !important; box-sizing:border-box; }
+.el-input.el-input-group.el-input-group--prepend input{ width:240px; height:45px; box-sizing:border-box; }
+.editwordSty{ color:#5882EF; margin-right:10px; cursor:pointer; }
+.theme-picker-dropdown .el-color-dropdown__link-btn{ display:none; }  //颜色选择器清除按钮消失
+.el-upload-dragger{ width:360px; height:150px; margin-left:20px; }  //拖拽上传样式
+.rolemanage .el-checkbox{ margin-left:0 !important; margin-right:20px !important; }
+.zdy{ display:block !important; }
+.fright{ float:right; margin-left:20px; }
+.zdyDialog .el-dialog__header{ display:none; }
+.el-select-dropdown__wrap{ max-height:574px; }
+.el-message-box__header .el-message-box__title{ color:#5882EF !important; }  //确认弹窗
+.confirmButton{ margin-left:-80px !important; }
+.cancelButton{ margin-right:-80px !important; }
+
+/* reset 表格头 */
+.el-table th.is-leaf {
+  background:#F0F2F5 !important;
+}
+.el-table td, .el-table th.is-leaf {
+  border-color: #DCDFE6 !important;
+}
+
+.el-color-predefine {
+  .el-color-predefine__color-selector {
+    box-shadow: 0 0 1px 1px #999;
+  }
+}
+
+//图表搜索select
+.chart-search-popper {
+  min-width: 300px !important;
+  width: auto !important;
+}
+
+//数据管理下的输入框
+.el-autocomplete-suggestion-data-entry {
+    width: auto !important;
+}
+
+.el-dialog__header{
+  background-color: $color-primary;
+  color: #fff;
+  margin-right: 0;
+  .el-dialog__title{
+    color: #fff;
+  }
+  .el-dialog__headerbtn{
+    .el-dialog__close{color: #fff;}
+  }
+}
+

+ 0 - 55
src/styles/global.scss

@@ -266,49 +266,9 @@ ul::-webkit-scrollbar-corner {
   background: #666;
 }
 
-/* reset 表格头 */
-.el-table th.is-leaf {
-  background:#F0F2F5 !important;
-}
-.el-table td, .el-table th.is-leaf {
-  border-color: #DCDFE6 !important;
-}
-
 textarea {
 	font-family: "Helvetica Neue",Helvetica,"PingFang SC","Hiragino Sans GB","Microsoft YaHei","微软雅黑",Arial,sans-serif;
 }
-// .el-dialog {
-//     display: flex;
-//     flex-direction: column;
-//     margin: 0 !important;
-//     position: absolute;
-//     top: 50%;
-//     left: 50%;
-//     transform: translate(-50%, -50%);
-//     max-height: calc(100% - 30px);
-//     max-width: calc(100% - 30px);
-//   }
-//   .el-dialog .el-dialog__body {
-//     flex: 1;
-//     overflow: auto;
-// }
-
-.el-color-predefine {
-  .el-color-predefine__color-selector {
-    box-shadow: 0 0 1px 1px #999;
-  }
-}
-
-//图表搜索select
-.chart-search-popper {
-  min-width: 300px !important;
-  width: auto !important;
-}
-
-//数据管理下的输入框
-.el-autocomplete-suggestion-data-entry {
-    width: auto !important;
-}
 
 // 英文图表标识
 .chartEn-mark{
@@ -341,19 +301,4 @@ textarea {
 .clear:after{ display:block; height:0; content:""; clear:both; }
 
 .highcharts-range-selector-group{ display:none; }
-// .highcharts-credits{ display:none; }
-// .highcharts-axis-title{ display:none; }
 .highcharts-legend-item tspan{ font-size:14px; font-weight:400; color:#960000; }
-// highcharts-legend-item highcharts-spline-series highcharts-color-undefined highcharts-series-2
-
-.el-dialog__header{
-  background-color: $color-primary;
-  color: #fff;
-  margin-right: 0;
-  .el-dialog__title{
-    color: #fff;
-  }
-  .el-dialog__headerbtn{
-    .el-dialog__close{color: #fff;}
-  }
-}

+ 2 - 1
src/views/Resetpassword.vue

@@ -1,9 +1,10 @@
 <script setup>
+import { ref } from 'vue'
 
 </script>
 <template>
   <div>修改密码</div>
 </template>
-<style scoped>
+<style scoped lang="scss">
 
 </style>

+ 75 - 0
src/views/transferPage.vue

@@ -0,0 +1,75 @@
+<script setup>
+import { useRoute, useRouter } from "vue-router";
+import { ElMessage } from "element-plus";
+import { useAppStore } from "@/store/modules/app";
+import { departInterence } from "@/api/api.js";
+
+const $route = useRoute();
+const $router = useRouter();
+
+const appStore = useAppStore();
+
+async function init() {
+  if ($route.query.code) {
+    const res = await departInterence.useCodeLogin({
+      AuthCode: $route.query.code,
+    });
+    if (res.Ret === 200) {
+      localStorage.setItem("auth", res.Data.Authorization);
+      localStorage.setItem("userName", res.Data.RealName);
+      localStorage.setItem("Role", res.Data.RoleTypeCode);
+      localStorage.setItem("RoleIdentity", res.Data.SysRoleTypeCode);
+      localStorage.setItem("RoleType", res.Data.ProductName);
+      localStorage.setItem("ManageType", res.Data.Authority);
+      localStorage.setItem("AdminId", res.Data.AdminId);
+      localStorage.setItem("AdminName", res.Data.AdminName);
+
+      // 如果路由参数有redirect_uri则跳转到redirect_uri,redirect_uri通过encode
+      if ($route.query.redirect_uri) {
+        const path = decodeURIComponent($route.query.redirect_uri);
+        $router.push(path);
+        return;
+      }
+
+      let path = await getOtherRolePath("myCalendar");
+      $router.push({ path });
+      return;
+    }
+  }
+
+  $router.replace("/login");
+}
+function getOtherRolePath(pathVal) {
+  return departInterence.getMenu().then((res) => {
+    let resolvePath = "";
+    if (res.Ret === 200) {
+      let menuList = res.Data.List || [];
+      if (!menuList.length) {
+        ElMessage.error("该账号没有任何菜单权限,请联系管理员");
+        return;
+      }
+      // 是否已经拿到菜单信息
+      sessionStorage.setItem("hasGetMenu", "true");
+      sessionStorage.setItem("MenuList", JSON.stringify(menuList));
+
+      /* 是否有数据报表权限 */
+      appStore.SET_DATA_AUTH(menuList.some((item) => item.name === "报表统计"));
+
+      for (let i = 0; i < menuList.length; i++) {
+        const element = menuList[i];
+        const arr = menuList[i].children || [];
+        if (arr.some((it) => it.path == pathVal)) {
+          resolvePath = "/" + pathVal;
+          break;
+        }
+      }
+      return resolvePath || "/" + menuList[0].children[0].path;
+    }
+    return "/" + pathVal;
+  });
+}
+</script>
+<template>
+  <div></div>
+</template>
+<style scoped lang="scss"></style>

BIN
static/fa.ico