瀏覽代碼

新版导航栏

princeLee 4 年之前
父節點
當前提交
8db4c6ee11

+ 3 - 1
src/App.vue

@@ -87,7 +87,9 @@ export default {
             this.$router.options.routes[i].children.push(route)
           }
         }
-        this.$store.dispatch('data/setRoutes', this.$router.options.routes)
+        // 去掉项目管理的路由
+        const oldRouter = this.$router.options.routes.filter(item => item.name.search(/工作台|业务线|项目管理/) < 0)
+        this.$store.dispatch('data/setRoutes', oldRouter)
       })
     }
   }

+ 14 - 9
src/components/newLayout/Aside.vue

@@ -1,5 +1,5 @@
 <template>
-  <div>
+  <div class="aside-main">
     <section
       v-show="showNavTag"
       :class="{
@@ -29,9 +29,9 @@
         </li>
       </ul>
       <div v-show="!collapsed && navTagType === 1" class="bottom-collapsed">
-        <a-button class="collapsed" @click="toggleCollapsed()">
-          <i v-if="collapsed" class="el-icon-s-fold" />
-        </a-button>
+        <el-button class="collapsed" @click="toggleCollapsed()">
+          <i v-if="!collapsed" class="el-icon-s-fold" />
+        </el-button>
       </div>
     </section>
     <section v-show="collapsed && navTagType === 1 && showNavTag" class="left-aside-collapsed">
@@ -41,7 +41,7 @@
 </template>
 <script>
 import { mapGetters } from 'vuex'
-import routes from '@/router/router'
+import routes from '@/router/newRouter'
 export default {
   data() {
     return {
@@ -101,8 +101,13 @@ export default {
 }
 </script>
 <style lang="scss" scoped>
+ul,li{
+  list-style: none;
+  padding: 0;
+  margin: 0;
+}
 section {
-  position: relative;
+  height: 100%;
 }
 @keyframes expande {
   0% {
@@ -139,6 +144,7 @@ section {
 //左边导航栏样式
 .left-aside,
 .hidden-left-aside {
+  height: 100%;
   position: relative;
   overflow: hidden;
   background-color: #ffffff;
@@ -303,13 +309,12 @@ section {
 .left-aside-collapsed {
   background-color: #f7f8fc;
   color: #409eff;
-  position: relative;
+  height: 100%;
   .button-collapsed {
-    padding-left: 2px;
     cursor: pointer;
     position: absolute;
     bottom: 20px;
-    width: 15px;
+    width: 12px;
     height: 30px;
     background-color: #ffffff;
     font-size: 10px;

+ 10 - 4
src/components/newLayout/Head.vue

@@ -1,11 +1,11 @@
 <template>
   <div class="head-wrapper">
     <div class="head-logo">
-      <svg-icon class="zhihui-logo" />
+      <svg-icon icon-class="zhihui-logo" />
     </div>
     <div v-for="item in headList" :key="item.path" class="nav-tag" @click="changeNavTag(item)">
       <div v-if="item.icon" class="icon">
-        <svg-icon :class="item.icon" />
+        <svg-icon :icon-class="item.icon" />
       </div>
       <div class="name">{{ item.name }}</div>
     </div>
@@ -22,7 +22,7 @@
             <div class="user-name">{{ userInfo.name }}</div>
             <div class="line" />
             <div class="user-logout">
-              <a-button type="primary" ghost size="small" @click="layout()">退出登录</a-button>
+              <el-button type="primary" plain size="small" @click="layout()">退出登录</el-button>
             </div>
           </div>
         </template>
@@ -33,7 +33,7 @@
 </template>
 <script>
 import { mapGetters } from 'vuex'
-import routes from '@/router/router'
+import routes from '@/router/newRouter'
 import { memberGetLoginInMemberInfoByLdap } from '@/api/projectIndex'
 import { logoutUrl } from '@/apiConfig/requestIP.js'
 export default {
@@ -107,6 +107,10 @@ export default {
   height: 40px;
   width: 40px;
   margin-bottom: 42px;
+  .svg-icon {
+    width: 100%;
+    height: 100%;
+  }
 }
 .nav-tag {
   width: 100%;
@@ -127,6 +131,8 @@ export default {
     position: absolute;
     top: 0;
     left: 0;
+    width: 100%;
+    height: 100%;
   }
 }
 .nav-tag-type {

+ 2 - 2
src/components/newLayout/Main.vue

@@ -128,8 +128,8 @@ export default {
   box-sizing: border-box;
   height: 100%;
   width: 100%;
-  padding-left: 10px;
+  // padding-left: 10px;
   overflow-y: scroll;
-  background-color: #f7f8fc;
+  background-color: rgb(242, 243, 246);
 }
 </style>

+ 16 - 0
src/icons/svg/person-workbench.svg

@@ -0,0 +1,16 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="19.997" height="19.964" viewBox="0 0 19.997 19.964">
+  <defs>
+    <clipPath id="clip-path">
+      <path id="Clip_2" data-name="Clip 2" d="M0,0H20V19.964H0Z" transform="translate(0 0.011)" fill="none"/>
+    </clipPath>
+  </defs>
+  <g id="icon_personal" transform="translate(0 -0.011)">
+    <g id="编组">
+      <path id="Clip_2-2" data-name="Clip 2" d="M0,0H20V19.964H0Z" transform="translate(0 0.011)" fill="none"/>
+      <g id="编组-2" data-name="编组" clip-path="url(#clip-path)">
+        <path id="Fill_1" data-name="Fill 1" d="M18.539,19.965H1.486a1.533,1.533,0,0,1-1.178-.537,1.346,1.346,0,0,1-.294-1.049,5.376,5.376,0,0,1,1.633-3.547C3.361,13.085,6.171,12.2,10,12.2s6.638.886,8.353,2.633a5.415,5.415,0,0,1,1.633,3.574,1.4,1.4,0,0,1-.321,1.075A1.42,1.42,0,0,1,18.539,19.965Zm-8.513-6.557c-3.491,0-6,.759-7.469,2.257a4.159,4.159,0,0,0-1.312,2.767v.107a.244.244,0,0,0,.027.135c.026.052.1.08.214.08H18.539c.112,0,.188-.028.214-.08a.15.15,0,0,0,.027-.162v-.107a4.159,4.159,0,0,0-1.312-2.768C15.994,14.159,13.49,13.408,10.026,13.408Zm0-1.586A5.911,5.911,0,0,1,10.026,0h5.3a.625.625,0,0,1,.616.618v5.32A5.942,5.942,0,0,1,10.026,11.822Zm0-10.64a4.7,4.7,0,0,0,0,9.4,4.717,4.717,0,0,0,4.685-4.7v-4.7Z" transform="translate(0 0.011)" fill="#fff"/>
+      </g>
+    </g>
+    <path id="Fill_3" data-name="Fill 3" d="M3.395,3a.674.674,0,0,1-.606-.711V.711A.674.674,0,0,1,3.395,0,.657.657,0,0,1,4,.711V2.289A.65.65,0,0,1,3.395,3ZM.6,3A.673.673,0,0,1,0,2.289V.711A.673.673,0,0,1,.6,0a.658.658,0,0,1,.606.711V2.289A.65.65,0,0,1,.6,3Z" transform="translate(7 3)" fill="#fff"/>
+  </g>
+</svg>

+ 6 - 0
src/icons/svg/project-manage.svg

@@ -0,0 +1,6 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="19.997" height="18.376" viewBox="0 0 19.997 18.376">
+  <g id="项目管理_base_goods_project_" data-name="项目管理 base_goods_project " transform="translate(-35.328 -75.769)">
+    <path id="路径_1" data-name="路径 1" d="M211.017,436.437H202.57a.533.533,0,1,0,0,1.066h8.447a.542.542,0,0,0,.533-.533A.557.557,0,0,0,211.017,436.437Zm-12.041-.288a.832.832,0,1,0,.832.832A.833.833,0,0,0,198.976,436.149Zm0-4.533a.847.847,0,0,0-.832.832.832.832,0,1,0,.832-.832Zm12.073.363H202.57a.533.533,0,0,0,0,1.067h8.447a.542.542,0,0,0,.533-.533A.521.521,0,0,0,211.049,431.979Z" transform="translate(-159.425 -348.435)" fill="#fff"/>
+    <path id="路径_2" data-name="路径 2" d="M54.013,78.691H48.179l-.1-.267a3.648,3.648,0,0,0-3.306-2.656H36.64a1.288,1.288,0,0,0-1.312,1.269V92.876a1.289,1.289,0,0,0,1.312,1.269H54.034a1.291,1.291,0,0,0,1.29-1.269V79.96A1.288,1.288,0,0,0,54.013,78.691ZM52.829,92.94H38.3c-1.429,0-1.61-.085-1.61-1.61V79.939H52.723a1.638,1.638,0,0,1,1.13.267c.2.213.2.555.192,1.024V91.553C54.034,92.94,53.97,92.94,52.829,92.94ZM37.877,76.846H43.4c2.208,0,2.688.523,3.05,1.152l.267.661H36.693V77.6c0-.341.043-.523.149-.629C36.992,76.825,37.312,76.836,37.877,76.846Z" transform="translate(0)" fill="#fff"/>
+  </g>
+</svg>

+ 1 - 0
src/icons/svg/statistics.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 class="icon" width="200px" height="200.00px" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M512.056889 1024C794.453333 1024 1024 794.282667 1024 512s-229.717333-512-511.943111-512C229.888 0 0 229.603556 0 512s229.717333 512 512.056889 512z m0-963.868444c249.116444 0 451.811556 202.752 451.811555 451.868444 0 249.173333-202.695111 451.868444-451.811555 451.868444-249.059556 0-451.754667-202.752-451.754667-451.868444C60.302222 262.826667 262.997333 60.131556 512 60.131556z" fill="#565656" p-id="2162"></path><path d="M586.524444 648.305778l-159.630222-180.337778L305.493333 603.704889l-46.535111-52.053333 167.822222-187.733334L586.524444 542.321778 722.773333 389.916444l48.241778 52.053334z" fill="#409EFF" p-id="2163"></path><path d="M824.888889 881.777778m-85.333333 0a85.333333 85.333333 0 1 0 170.666666 0 85.333333 85.333333 0 1 0-170.666666 0Z" fill="#409EFF" p-id="2164"></path></svg>

+ 26 - 0
src/icons/svg/team-workbench.svg

@@ -0,0 +1,26 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="24.997" height="20.964" viewBox="0 0 24.997 20.964">
+  <defs>
+    <clipPath id="clip-path">
+      <path id="Clip_2" data-name="Clip 2" d="M0,0H20V19.964H0Z" transform="translate(0 0.011)" fill="none"/>
+    </clipPath>
+  </defs>
+  <g id="icon_personal" transform="translate(0 -23.022)">
+    <g id="_" data-name="❤️" transform="translate(0 23.011)">
+      <g id="_2" data-name="❤️">
+        <g id="编组" transform="translate(5 1)">
+          <path id="Clip_2-3" data-name="Clip 2" d="M0,0H20V19.964H0Z" transform="translate(0 0.011)" fill="none"/>
+          <g id="编组-2" data-name="编组" clip-path="url(#clip-path)">
+            <path id="Fill_1" data-name="Fill 1" d="M12.061,17.21h-5.5c.013,0,1.335-.1,1.595-.428a1.391,1.391,0,0,0,.262-.565H8.259a2.97,2.97,0,0,0-.243-1.179c-.72-1.533-3.283-2.849-3.392-2.9h.081a10.793,10.793,0,0,1,1.163.072c-.372-.257-.727-.478-1.013-.655-.435-.27-.722-.449-.7-.525.007-.025.047-.039.123-.042.111,0,.225-.006.339-.006a14.7,14.7,0,0,1,4.95,1,7.77,7.77,0,0,1,2.782,1.9,2.707,2.707,0,0,1,.869,1.948v.027a1.186,1.186,0,0,1-.274.934A1.278,1.278,0,0,1,12.061,17.21ZM5.868,12.2A7.283,7.283,0,0,1,8.16,14.474a2.825,2.825,0,0,1,.262,1.742h3.306c.1,0,.208-.026.232-.075a.756.756,0,0,0,.031-.162,2.787,2.787,0,0,0-.769-1.512,5.945,5.945,0,0,0-2.136-1.428A11.279,11.279,0,0,0,5.868,12.2ZM4.1,9.752A15.6,15.6,0,0,1,0,9.3,8.511,8.511,0,0,0,3.806,7.1,2.589,2.589,0,0,1,1.923,8.829c.007,0,.249,0,.768,0,.275,0,.634,0,1.091,0a4.7,4.7,0,0,0,2.39-.794A3.525,3.525,0,0,0,7.5,5.884v-4.7H4.48C4.389.4,4.3,0,4.3,0H7.981A.625.625,0,0,1,8.6.618v5.32C8.582,7.7,6.613,9.752,4.1,9.752ZM3.809,7.1h0A3.822,3.822,0,0,0,3.99,5.884a39.576,39.576,0,0,1,.287-4.7h.2a32.564,32.564,0,0,1,.19,3.694A3.363,3.363,0,0,1,3.809,7.1Z" transform="translate(5.721 1)" fill="#fff"/>
+          </g>
+        </g>
+        <g id="_3" data-name="❤️">
+          <path id="Clip_2-4" data-name="Clip 2" d="M0,0H20V19.964H0Z" transform="translate(0 0.011)" fill="none"/>
+          <g id="_4" data-name="❤️" clip-path="url(#clip-path)">
+            <path id="Fill_1-2" data-name="Fill 1" d="M18.539,19.965H1.486a1.533,1.533,0,0,1-1.178-.537,1.346,1.346,0,0,1-.294-1.049,5.376,5.376,0,0,1,1.633-3.547C3.361,13.085,6.171,12.2,10,12.2s6.638.886,8.353,2.633a5.415,5.415,0,0,1,1.633,3.574,1.4,1.4,0,0,1-.321,1.075A1.42,1.42,0,0,1,18.539,19.965Zm-8.513-6.557c-3.491,0-6,.759-7.469,2.257a4.159,4.159,0,0,0-1.312,2.767v.107a.244.244,0,0,0,.027.135c.026.052.1.08.214.08H18.539c.112,0,.188-.028.214-.08a.15.15,0,0,0,.027-.162v-.107a4.159,4.159,0,0,0-1.312-2.768C15.994,14.159,13.49,13.408,10.026,13.408Zm0-1.586A5.911,5.911,0,0,1,10.026,0h5.3a.625.625,0,0,1,.616.618v5.32A5.942,5.942,0,0,1,10.026,11.822Zm0-10.64a4.7,4.7,0,0,0,0,9.4,4.717,4.717,0,0,0,4.685-4.7v-4.7Z" transform="translate(0 0.011)" fill="#fff"/>
+          </g>
+        </g>
+      </g>
+      <path id="Fill_3" data-name="Fill 3" d="M3.395,3a.674.674,0,0,1-.606-.711V.711A.674.674,0,0,1,3.395,0,.657.657,0,0,1,4,.711V2.289A.65.65,0,0,1,3.395,3ZM.6,3A.673.673,0,0,1,0,2.289V.711A.673.673,0,0,1,.6,0a.658.658,0,0,1,.606.711V2.289A.65.65,0,0,1,.6,3Z" transform="translate(7 3)" fill="#fff"/>
+    </g>
+  </g>
+</svg>

+ 3 - 0
src/icons/svg/zhihui-logo.svg

@@ -0,0 +1,3 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="40" height="40" viewBox="0 0 40 40">
+  <image id="图层2" width="40" height="40" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEgAAABICAMAAABiM0N1AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyhpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTQwIDc5LjE2MDQ1MSwgMjAxNy8wNS8wNi0wMTowODoyMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTggKE1hY2ludG9zaCkiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NkQ4NTU2RjkxQTkwMTFFQjkzQzI5NUIzMEJBNURBNzUiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NkQ4NTU2RkExQTkwMTFFQjkzQzI5NUIzMEJBNURBNzUiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo2RDg1NTZGNzFBOTAxMUVCOTNDMjk1QjMwQkE1REE3NSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo2RDg1NTZGODFBOTAxMUVCOTNDMjk1QjMwQkE1REE3NSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Ph5dOMQAAAAGUExURf///wAAAFXC034AAAACdFJOU/8A5bcwSgAAAR9JREFUeNrE2DEOwzAMQ9Gv+1+6HQp0KCxSMpFmz0PgmJJlKvTwIMT7CUB8nlsITMmHuILAlSYQMYgYRAwiBhH4/b1k72wlUSHJDK2WOL46lGi+YCRhxdSQWmgiYcZUSrgxvYVw84sf01sIr8pRW2kB4bQCaik5WXOkQWhPS9unX+5jmgrzhZxEqDKBnXf6cwF+3mnLBMdtJiUXUhI2JKQBJMrZD1TmgnaLeP79M+m8IWdV5RsRHYPum9rQJlq2sTVr1GmHCbYO1puWbQZPQrCUcA/WlxD22R27Y9fVseYs1UXvrxHk533Rsp3BlH3eVy17O2UvJCokUSGJCkkEplA1Zs0kIiO2GvxiUGXWSOX9T9c+sYuo3NXY47d+LwEGAKNYDbMzksdEAAAAAElFTkSuQmCC"/>
+</svg>

+ 2 - 2
src/main.js

@@ -6,8 +6,8 @@ import ElementUI from 'element-ui'
 import 'element-ui/lib/theme-chalk/index.css'
 // import locale from 'element-ui/lib/locale/lang/en' // lang i18n 英文
 
-import { DatePicker } from 'ant-design-vue'
-Vue.use(DatePicker)
+import { DatePicker, Popover } from 'ant-design-vue'
+Vue.use(DatePicker).use(Popover)
 
 import '@/styles/index.scss' // global css
 

+ 11 - 223
src/router/index.js

@@ -10,6 +10,9 @@ import Layout from '@/layout'
 /* Home */
 import Home from '@/views/home/index'
 
+// 新的项目管理路由router
+import newRouter from './newRouter'
+
 /**
  * Note: sub-menu only appear when route children.length >= 1
  * Detail see: https://panjiachen.github.io/vue-element-admin-site/guide/essentials/router-and-nav.html
@@ -37,17 +40,20 @@ import Home from '@/views/home/index'
 export const constantRoutes = [{
   path: '/login',
   component: (resolve) => require(['@/views/login/index'], resolve),
-  hidden: true
+  hidden: true,
+  name: '登录'
 },
 {
   path: '/404',
   component: (resolve) => require(['@/views/404'], resolve),
-  hidden: true
+  hidden: true,
+  name: '404'
 },
 {
   path: '/',
   component: Home,
-  hidden: true
+  hidden: true,
+  name: '默认'
 },
 {
   path: '/home',
@@ -55,194 +61,6 @@ export const constantRoutes = [{
   name: '首页',
   hidden: true
 },
-{
-  path: '/Platform/workbench/person',
-  component: Layout,
-  redirect: '/Platform/workbench/person',
-  meta: { title: '个人工作台', icon: '工作台' },
-  children: [{
-    path: 'person',
-    name: '个人工作台',
-    component: (resolve) => require(['@/views/workbench/person/index.vue'], resolve),
-    meta: { title: '个人工作台' }
-  }]
-},
-{
-  path: '/Platform/workbench/team',
-  component: Layout,
-  redirect: '/Platform/workbench/team',
-  meta: { title: '团队工作台', icon: '团队工作台' },
-  children: [{
-    path: 'team',
-    name: '团队工作台',
-    component: (resolve) => require(['@/views/workbench/team/index.vue'], resolve),
-    meta: { title: '团队工作台' }
-  }]
-},
-{
-  path: '/Platform/projectManage',
-  name: '项目管理',
-  component: Layout,
-  redirect: '/Platform/projectManage/projectList/projectIndex',
-  meta: { title: '项目管理', icon: '项目管理' },
-  children: [{
-    path: 'bizIdSelect',
-    name: '业务线选择',
-    hidden: true,
-    component: () => import('@/views/business/bizIdSelect.vue'),
-    meta: { title: '业务线选择' }
-  },
-  {
-    path: 'projectIndex',
-    name: '项目',
-    component: (resolve) => require(['@/views/projectManage/projectList/projectIndex'], resolve),
-    meta: { title: '项目' }
-  },
-  {
-    path: 'projectViewDetails',
-    name: '项目详情',
-    hidden: true,
-    component: (resolve) => require(['@/views/projectManage/projectList/projectViewDetails'], resolve),
-    meta: { title: '项目详情' }
-  },
-  {
-    path: 'requirement',
-    name: '需求',
-    component: (resolve) => require(['@/views/projectManage/requirement/list/index.vue'], resolve),
-    meta: { title: '需求' }
-  },
-  {
-    path: 'iteration',
-    name: '迭代',
-    component: (resolve) => require(['@/views/projectManage/iteration/index'], resolve),
-    meta: { title: '迭代' }
-  },
-  {
-    path: 'iterationDetails',
-    name: '迭代详情',
-    hidden: true,
-    component: (resolve) => require(['@/views/projectManage/iteration/details/iterationDetails.vue'], resolve),
-    meta: { title: '迭代详情' }
-  },
-  {
-    path: 'requirementDetails',
-    name: '需求详情',
-    hidden: true,
-    props: true,
-    component: (resolve) => require(['@/views/projectManage/requirement/requirementDetail.vue'], resolve),
-    meta: { title: '需求详情' }
-  },
-  {
-    path: 'taskIndex',
-    name: '任务',
-    component: (resolve) => require(['@/views/projectManage/taskList/taskIndex'], resolve),
-    meta: { title: '任务' }
-  },
-  {
-    path: 'taskViewDetails',
-    name: '任务详情',
-    hidden: true,
-    component: (resolve) => require(['@/views/projectManage/taskList/taskViewDetail'], resolve),
-    meta: { title: '任务详情' }
-  },
-  {
-    path: 'childDetail',
-    name: '子任务详情',
-    hidden: true,
-    component: (resolve) => require(['@/views/projectManage/taskList/childrenTask/childDetail'], resolve),
-    meta: { title: '子任务详情' }
-  },
-  {
-    path: '/Platform/projectManage/version',
-    name: '版本',
-    component: (resolve) => require(['@/views/Platform/presentation/testa'], resolve),
-    redirect: '/Platform/projectManage/version',
-    meta: { title: '版本' },
-    children: [{
-      path: 'version',
-      name: '版本1',
-      component: (resolve) => require(['@/views/projectManage/version/list/index.vue'], resolve),
-      meta: { title: '版本' }
-    },
-    {
-      path: 'versionsCalendar',
-      name: '版本日历',
-      hidden: true,
-      component: (resolve) => require(['@/views/projectManage/taskList/versionsCalendar'], resolve),
-      meta: { title: '版本日历' }
-    }
-    ]
-  },
-  {
-    path: '/projectManage/bugList/bugindex',
-    name: '缺陷',
-    component: (resolve) => require(['@/views/projectManage/bugList/bugindex'], resolve),
-    meta: { title: '缺陷' }
-  },
-  {
-    path: 'bugDetails',
-    name: '缺陷详情',
-    hidden: true,
-    component: (resolve) => require(['@/views/projectManage/bugList/details/index.vue'], resolve),
-    meta: { title: '缺陷详情' }
-  },
-  {
-    path: '/Platform/presentation',
-    component: (resolve) => require(['@/views/Platform/presentation/testa'], resolve),
-    redirect: '/reportManagement/testPresentation',
-    meta: { title: '报告' },
-    children: [{
-      path: 'reportManagement',
-      name: '报告',
-      component: (resolve) => require(['@/views/reportManagement/testPresentation'], resolve),
-      meta: { title: '报告' }
-    },
-    {
-      path: 'dailyDetails',
-      name: '日报详情',
-      hidden: true,
-      component: (resolve) => require(['@/views/reportManagement/daily/components/dailyDetails'], resolve),
-      meta: { title: '报告详情' }
-    },
-    {
-      path: 'releaseDetails',
-      name: '准出详情',
-      hidden: true,
-      component: (resolve) => require(['@/views/reportManagement/ReleaseReport/components/releaseDetails'], resolve),
-      meta: { title: '报告详情' }
-    },
-    {
-      path: 'deliverDetails',
-      name: '提测详情',
-      hidden: true,
-      component: (resolve) => require(['@/views/reportManagement/Testing/components/deliverDetails'], resolve),
-      meta: { title: '报告详情' }
-    },
-    {
-      path: 'acceptTheReport',
-      name: '提测预览',
-      hidden: true,
-      component: (resolve) => require(['@/views/Platform/presentation/acceptTheReport'], resolve),
-      meta: { title: '提测预览' }
-    },
-    {
-      path: 'testPresenyL',
-      name: '日报预览',
-      hidden: true,
-      component: (resolve) => require(['@/views/Platform/presentation/testPresenyL'], resolve),
-      meta: { title: '日报预览' }
-    },
-    {
-      path: 'ResultPageyL',
-      name: '准出预览',
-      hidden: true,
-      component: (resolve) => require(['@/views/Platform/presentation/ResultPageyL'], resolve),
-      meta: { title: '准出预览' }
-    }
-    ]
-  }
-  ]
-},
 {
   path: '/Platform/useCasePage',
   component: Layout,
@@ -408,24 +226,6 @@ export const constantRoutes = [{
     component: (resolve) => require(['@/views/quality/qualityMeasurement.vue'], resolve),
     meta: { title: '老版统计' }
   },
-  {
-    path: 'requireStatistics',
-    name: '需求统计',
-    component: (resolve) => require(['@/views/quality/requireStatistics.vue'], resolve),
-    meta: { title: '需求统计' }
-  },
-  {
-    path: 'taskStatistics',
-    name: '任务统计',
-    component: (resolve) => require(['@/views/quality/taskStatistics.vue'], resolve),
-    meta: { title: '任务统计' }
-  },
-  {
-    path: 'defectStatistics',
-    name: '缺陷统计',
-    component: (resolve) => require(['@/views/quality/defectStatistics.vue'], resolve),
-    meta: { title: '缺陷统计' }
-  },
   {
     path: 'qualityProcess',
     name: '上线过程',
@@ -687,20 +487,8 @@ export const constantRoutes = [{
   ]
 },
 
-{ path: '*', redirect: '/404', hidden: true },
-
-{
-  path: '/Platform/setUp',
-  component: Layout,
-  name: '配置',
-  meta: { title: '配置', icon: '组织配置' },
-  children: [{
-    path: 'configure',
-    name: '配置',
-    component: (resolve) => require(['@/views/ToConfigure/configure'], resolve),
-    meta: { title: '配置' }
-  }]
-}
+{ path: '*', redirect: '/404', hidden: true, name: '*' },
+...newRouter
 ]
 
 const createRouter = () => new Router({

+ 202 - 0
src/router/newRouter.js

@@ -0,0 +1,202 @@
+import Layout from '@/views/newLayout/layout.vue'
+const layout = [
+  {
+    path: '/workbench/person',
+    name: '个人工作台',
+    component: Layout,
+    icon: 'person-workbench',
+    redirect: '/workbench/person/personDetail',
+    children: [
+      {
+        path: 'personDetail',
+        name: '个人工作台',
+        component: () => import('@/views/workbench/person/index.vue'),
+        meta: { title: '个人工作台' }
+      }
+    ]
+  },
+  {
+    path: '/workbench/team',
+    name: '团队工作台',
+    component: Layout,
+    icon: 'team-workbench',
+    redirect: '/workbench/team/teamDetail',
+    children: [
+      {
+        path: 'teamDetail',
+        name: '团队工作台',
+        component: () => import('@/views/workbench/team/index.vue'),
+        meta: { title: '团队工作台' }
+      }
+    ]
+  },
+  {
+    path: '/business',
+    name: '业务线',
+    component: Layout,
+    children: [
+      {
+        path: '/bizIdSelect',
+        name: '业务线选择',
+        component: () => import('@/views/business/bizIdSelect.vue'),
+        meta: { title: '业务线' }
+      }
+    ]
+  },
+  {
+    path: '/projectManage',
+    name: '项目管理',
+    component: Layout,
+    icon: 'project-manage',
+    redirect: '/projectManage/projectIndex',
+    meta: { title: '项目管理' },
+    children: [
+      {
+        path: 'projectIndex',
+        name: '项目',
+        component: () => import('@/views/projectManage/projectList/projectIndex.vue'),
+        meta: { title: '项目' }
+      },
+      {
+        path: 'projectDetail',
+        name: '项目详情',
+        hidden: true,
+        component: () => import('@/views/projectManage/projectList/projectViewDetails.vue'),
+        meta: { title: '项目' }
+      },
+      {
+        path: 'requirementIndex',
+        name: '需求',
+        component: () => import('@/views/projectManage/requirement/list/index.vue'),
+        meta: { title: '需求' }
+      },
+      {
+        path: 'requirementDetails',
+        name: '需求详情',
+        hidden: true,
+        component: () => import('@/views/projectManage/requirement/requirementDetail.vue'),
+        meta: { title: '需求详情' }
+      },
+      {
+        path: 'iteration',
+        name: '迭代',
+        component: () => import('@/views/projectManage/iteration/index'),
+        meta: { title: '迭代' }
+      },
+      {
+        path: 'iterationDetails',
+        name: '迭代详情',
+        hidden: true,
+        component: () => import('@/views/projectManage/iteration/details/iterationDetails.vue'),
+        meta: { title: '迭代详情' }
+      },
+      {
+        path: 'taskIndex',
+        name: '任务',
+        component: () => import('@/views/projectManage/taskList/taskIndex'),
+        meta: { title: '任务' }
+      },
+      {
+        path: 'taskViewDetails',
+        name: '任务详情',
+        hidden: true,
+        component: () => import('@/views/projectManage/taskList/taskViewDetail'),
+        meta: { title: '任务详情' }
+      },
+      {
+        path: 'childDetail',
+        name: '子任务详情',
+        hidden: true,
+        component: () => import('@/views/projectManage/taskList/childrenTask/childDetail'),
+        meta: { title: '子任务详情' }
+      },
+      {
+        path: 'version',
+        name: '版本',
+        component: () => import('@/views/projectManage/version/list/index.vue'),
+        meta: { title: '版本' }
+      },
+      {
+        path: 'versionsCalendar',
+        name: '版本日历',
+        hidden: true,
+        component: () => import('@/views/projectManage/taskList/versionsCalendar'),
+        meta: { title: '版本日历' }
+      },
+      {
+        path: 'reportManagement',
+        name: '报告',
+        component: () => import('@/views/reportManagement/testPresentation'),
+        meta: { title: '报告' }
+      },
+      {
+        path: 'dailyDetails',
+        name: '日报详情',
+        hidden: true,
+        component: () => import('@/views/reportManagement/daily/components/dailyDetails'),
+        meta: { title: '报告详情' }
+      },
+      {
+        path: 'releaseDetails',
+        name: '准出详情',
+        hidden: true,
+        component: () => import('@/views/reportManagement/ReleaseReport/components/releaseDetails'),
+        meta: { title: '报告详情' }
+      },
+      {
+        path: 'deliverDetails',
+        name: '提测详情',
+        hidden: true,
+        component: () => import('@/views/reportManagement/Testing/components/deliverDetails'),
+        meta: { title: '报告详情' }
+      },
+      {
+        path: 'acceptTheReport',
+        name: '提测预览',
+        hidden: true,
+        component: () => import('@/views/Platform/presentation/acceptTheReport'),
+        meta: { title: '提测预览' }
+      },
+      {
+        path: 'testPresenyL',
+        name: '日报预览',
+        hidden: true,
+        component: () => import('@/views/Platform/presentation/testPresenyL'),
+        meta: { title: '日报预览' }
+      },
+      {
+        path: 'ResultPageyL',
+        name: '准出预览',
+        hidden: true,
+        component: () => import('@/views/Platform/presentation/ResultPageyL'),
+        meta: { title: '准出预览' }
+      },
+      {
+        path: 'requireStatistics',
+        name: '需求统计',
+        component: () => import('@/views/quality/requireStatistics.vue'),
+        meta: { title: '需求统计' }
+      },
+      {
+        path: 'taskStatistics',
+        name: '任务统计',
+        component: () => import('@/views/quality/taskStatistics.vue'),
+        meta: { title: '任务统计' }
+      },
+      {
+        path: 'defectStatistics',
+        name: '缺陷统计',
+        component: () => import('@/views/quality/defectStatistics.vue'),
+        meta: { title: '缺陷统计' }
+      },
+      {
+        path: 'configure',
+        name: '配置',
+        component: () => import('@/views/ToConfigure/configure'),
+        meta: { title: '配置' }
+      }
+    ]
+  }
+]
+
+export default layout

+ 132 - 81
src/views/business/bizIdSelect.vue

@@ -2,28 +2,36 @@
   <section class="business-contain">
     <div class="bizId-select">
       <div class="bizId-user">
-        <div class="user-name">{{ username }},欢迎您!</div>
-        <div class="user-tips">请选择您的业务线</div>
-      </div>
-      <div class="bizId-table">
-        <div v-for="item in bizSelectList" :key="item.code" class="table-item">
-          <span class="item-name">{{ item.name }}</span>
-          <span class="item-button" /><el-button type="primary" size="small" @click="enter(item)">进入</el-button></div>
-      </div>
-      <div class="select-pagination">
-        <el-pagination
-          background
-          :current-page.sync="curIndex"
-          :page-size="14"
-          layout="total, prev, pager, next, jumper"
-          :total="total"
-          @current-change="handleCurrentChange"
-        />
+        <div class="user-tips">请选择业务线</div>
       </div>
+      <article>
+        <div class="my-business">
+          <div class="business-title">我的业务线</div>
+          <div class="business-name my-business-name" @click="enter({ code: bizId, name: bizName })">
+            {{ bizName }}
+          </div>
+        </div>
+        <div class="all-business">
+          <div class="business-title">所有业务线</div>
+          <div class="all-business-list">
+            <div
+              v-for="(item, index) in bizSelectList"
+              :key="item.code"
+              class="business-name"
+              :class="'business-item' + (index % 4)"
+              @click="enter(item)"
+            >
+              {{ item.name }}
+            </div>
+          </div>
+        </div>
+      </article>
     </div>
     <div class="business-tips">
-      <div class="title">业务线不存在?请联系系统管理员添加</div>
-      <div class="contacts ">叶宏钢(yehonggang) 廖子君(amyliaozijun)</div>
+      <div class="title">
+        业务线不存在?请联系系统管理员添加,获取业务线访问权限,请联系系统管理员或业务线现有成员将您加入业务线即可
+      </div>
+      <div class="contacts">叶宏钢(yehonggang) 廖子君(amyliaozijun)</div>
     </div>
   </section>
 </template>
@@ -36,22 +44,14 @@ let fromRoute = null
 export default {
   data() {
     return {
-      originBizList: [], // 原始业务线列表
-      bizSelectList: [], // 业务线选择列表
-      total: 0,
-      curIndex: 1
+      bizSelectList: [] // 业务线选择列表
     }
   },
   computed: {
-    ...mapGetters([
-      'bizId'
-    ]),
-    username() {
-      return localStorage.getItem('realname')
-    }
+    ...mapGetters(['bizId', 'bizName'])
   },
   beforeRouteEnter(to, from, next) {
-    fromRoute = from
+    fromRoute = from // 上一个页面的路由
     next()
   },
   created() {
@@ -60,21 +60,15 @@ export default {
   methods: {
     async settingGetBizList() {
       const res = await settingGetBizList({})
-      if (res.code === 200) {
-        this.originBizList = res.data || []
-        this.total = res.data.length
-        this.bizSelectList = this.originBizList.slice((this.curIndex - 1) * 14, this.curIndex * 14)
-      }
+      if (res.code === 200) this.bizSelectList = res.data || []
     },
-    async settingUserSetBiz(bizId) { // 设置成员登录业务线
+    // 设置成员登录业务线
+    async settingUserSetBiz(bizId) {
       await settingUserSetBiz({ bizId: bizId })
     },
-    handleCurrentChange() {
-      this.bizSelectList = this.originBizList.slice((this.curIndex - 1) * 14, this.curIndex * 14)
-    },
     enter(biz) {
       this.$store.dispatch('global/setBizId', biz.code)
-      localStorage.setItem('bizId', biz.code)
+      this.$store.dispatch('global/setBizName', biz.name)
       this.settingUserSetBiz(biz.code)
       if (!fromRoute || !fromRoute.name) {
         this.$router.push({ name: '项目', query: { bizId: EncryptId(biz.code) }})
@@ -92,7 +86,7 @@ export default {
         this.$router.push({
           path: fromRoute.path,
           query: { ...this.$route.query, bizId: EncryptId(biz.code) }
-        })// 更新路由连接
+        }) // 更新路由连接
       }
     }
   }
@@ -100,22 +94,32 @@ export default {
 </script>
 <style lang="scss" scoped>
 .business-contain {
-  position: fixed;
-  z-index: 9999;
-  left: 0;
   height: 100%;
   width: 100%;
-  overflow: scroll;
-  padding: 48px 44px;
-  background-color: #F2F3F6;
+  padding: 120px 130px;
+  background-color: #f7f8fc;
 }
-.bizId-select{
+.bizId-select {
   position: relative;
   height: 628px;
   width: 100%;
-  background-color:#FFFFFF;
+  padding-bottom: 32px;
+  background-color: #ffffff;
   border-radius: 10px;
-  box-shadow: 0px 30px 16px #EEF0F5;
+  box-shadow: 0px 30px 16px #eef0f5;
+  article {
+    height: 480px;
+    overflow: scroll;
+  }
+  // article::-webkit-scrollbar {
+  //   -webkit-appearance: none;
+  //   width: 7px;
+  // }
+  // article::-webkit-scrollbar-thumb {
+  //   border-radius: 4px;
+  //   background-color: rgba(0, 0, 0, 0.5);
+  //   box-shadow: 0 0 1px rgba(255, 255, 255, 0.5);
+  // }
 }
 .bizId-user {
   height: 90px;
@@ -124,52 +128,99 @@ export default {
   flex-direction: column;
   align-items: center;
   justify-content: center;
-  border-bottom: 2px solid #F2F3F6;
-}
-.user-name {
+  border-bottom: 2px solid #f7f8fc;
   color: #333333;
   font-size: 24px;
 }
-.user-tips {
-  color: #999999;
-  font-size: 14px;
-}
-.bizId-table {
-  display: flex;
-  justify-content: space-between;
-  flex-wrap: wrap;
-  padding: 42px 106px 0 116px;
+.my-business {
+  width: 100%;
+  padding: 64px 46px 0 46px;
+  color: #666666;
+  font-size: 18px;
 }
-.table-item {
-  width: 40%;
-  display: flex;
-  flex-shrink: 0;
-  justify-content: space-between;
-  margin-bottom: 30px;
-  .item-name {
-    color: #333B4A;
-    font-size: 18px;
-  }
-  .item-button {
-    font-size: 14px;
+.all-business {
+  width: 100%;
+  padding: 43px 46px;
+  color: #666666;
+  font-size: 18px;
+  .all-business-list {
+    padding: 27px 32px;
+    display: grid;
+    grid-template-columns: repeat(4, 25%);
+    grid-gap: 50px 0;
   }
 }
-.select-pagination {
-  position: absolute;
-  bottom: 10px;
-  right: 40px;
+.business-name {
+  width: 155px;
+  height: 48px;
   display: flex;
-  justify-content: flex-end;
+  align-items: center;
+  justify-content: center;
+  background-color: #ffffff;
+  border-radius: 6px;
+  cursor: pointer;
+}
+.my-business-name {
+  color: #409eff;
+  margin: 25px 32px;
+  border: 1px solid #409eff;
+  box-shadow: 0px 6px 12px rgba(64, 158, 255, 0.2);
+}
+.my-business-name:hover {
+  color: #ffffff;
+  background-color: #409eff;
+}
+.business-item0 {
+  color: #409eff;
+  border: 1px solid #409eff;
+  box-shadow: 0px 6px 12px rgba(64, 158, 255, 0.2);
+}
+.business-item0:hover {
+  color: #ffffff;
+  background-color: #409eff;
+}
+.business-item1 {
+  color: #f88c51;
+  border: 1px solid #f88c51;
+  box-shadow: 0px 6px 12px rgba(239, 160, 117, 0.2);
+}
+.business-item1:hover {
+  color: #ffffff;
+  background-color: #f88c51;
+}
+.business-item2 {
+  color: #ae61cf;
+  border: 1px solid #ae61cf;
+  box-shadow: 0px 6px 12px rgba(174, 97, 207, 0.2);
+}
+.business-item2:hover {
+  color: #ffffff;
+  background-color: #ae61cf;
+}
+.business-item3 {
+  color: #13cbc2;
+  border: 1px solid #13cbc2;
+  box-shadow: 0px 6px 12px rgba(19, 203, 194, 0.2);
+}
+.business-item3:hover {
+  color: #ffffff;
+  background-color: #13cbc2;
 }
 .business-tips {
-  margin-top: 26px;
+  margin-top: 43px;
   margin-bottom: 50px;
   display: flex;
   flex-direction: column;
   align-items: center;
   .title {
-    color: #409EFF;
+    margin-top: 7px;
+    color: #666666;
+    font-size: 14px;
+  }
+  .contacts {
+    margin-top: 7px;
     font-weight: 500;
+    color: #333333;
   }
 }
 </style>

+ 1 - 0
src/views/mock/interface.vue

@@ -742,6 +742,7 @@ export default {
     margin: 0 auto 1% auto;
     background-color: #fff;
     border-radius: 4px;
+    position: relative;
 }
 .stylus-content{
     width: 98%;

+ 3 - 0
src/views/projectManage/projectList/projectIndex.vue

@@ -534,6 +534,9 @@ export default {
 </script>
 
 <style lang="scss" scoped>
+.stylus-head {
+  position: relative;
+}
 .new-tab-open {
   position: absolute;
   left: 120px;

+ 3 - 0
src/views/projectManage/requirement/list/index.vue

@@ -578,6 +578,9 @@ export default {
 
 </style>
 <style scoped lang="scss">
+.stylus-head {
+  position: relative;
+}
 .filter {
   font-size: 14px;
   width: 100%;

+ 3 - 0
src/views/projectManage/taskList/taskIndex.vue

@@ -446,6 +446,9 @@ export default {
 }
 </script>
 <style lang="scss" scoped>
+.stylus-head {
+  position: relative;
+}
 .new-tab-open {
   position: absolute;
   left: 120px;