qinqiao_v@didichuxing.com 5 vuotta sitten
vanhempi
sitoutus
39ad485b76

+ 64 - 0
src/api/configure.js

@@ -0,0 +1,64 @@
+// 团队管理
+import request from '@/utils/request'
+import { TeamManagement } from '@/apiConfig/api'
+
+// 新建团队
+export function teamCreateTeam(data) {
+  return request({
+    url: TeamManagement + `/team/createTeam`,
+    method: 'post',
+    data
+  })
+}
+
+// 搜索员工信息
+export function memberQueryMemberInfoByIDAPorName(data) {
+  return request({
+    url: TeamManagement + `/member/queryMemberInfoByIDAPorName`,
+    method: 'post',
+    data
+  })
+}
+
+// 查询接口(团队)
+export function teamQueryTeamInfoList(data) {
+  return request({
+    url: TeamManagement + `/team/queryTeamInfoList`,
+    method: 'post',
+    data
+  })
+}
+
+// 查询接口(团队)
+export function configShowTeamAndMemberEnum() {
+  return request({
+    url: TeamManagement + `/config/showTeamAndMemberEnum`,
+    method: 'get'
+  })
+}
+
+// 团队名称是否重复
+export function teamIsTeamNameRepetition(data) {
+  return request({
+    url: TeamManagement + `/team/isTeamNameRepetition`,
+    method: 'post',
+    data
+  })
+}
+
+// 查询团队
+export function teamQueryTeamInfo(data) {
+  return request({
+    url: TeamManagement + `/team/queryTeamInfo?teamId=` + data,
+    method: 'get'
+  })
+}
+
+// 编辑团队
+export function teamModifyTeam(data) {
+  return request({
+    url: TeamManagement + `/team/modifyTeam`,
+    method: 'post',
+    data
+  })
+}

+ 4 - 2
src/apiConfig/api.js

@@ -6,5 +6,7 @@ export const mockUrl = 'http://10.179.24.176:8980' // 线下
 
 export const qualityUrl = 'http://10.179.181.103:8898' // 质量度量
 
-export const HMvehicleUrl = 'http://10.96.113.197:9999' // 电单车 线下
-  // export const HMvehicleUrl = 'http://10.179.91.236:9999' // 电单车 线上
+// export const HMvehicleUrl = 'http://10.96.113.197:9999' // 电单车 线下
+export const HMvehicleUrl = 'http://10.179.91.236:9999' // 电单车 线上
+
+export const TeamManagement = 'http://10.179.24.176:8990' // 团队配置

BIN
src/assets/内页logo2@2x.png


BIN
src/assets/内页logo2@2x1.png


BIN
src/assets/编组 22.png


+ 4 - 4
src/components/Breadcrumb/index.vue

@@ -1,9 +1,9 @@
 <template>
-  <el-breadcrumb class="app-breadcrumb" separator="/">
+  <el-breadcrumb class="app-breadcrumb" separator-class="el-icon-arrow-right">
     <transition-group name="breadcrumb">
       <el-breadcrumb-item v-for="(item,index) in levelList" :key="item.path">
         <span v-if="item.redirect==='noRedirect'||index==levelList.length-1" class="no-redirect">{{ item.meta.title }}</span>
-        <a v-else @click.prevent="handleLink(item)">{{ item.meta.title }}</a>
+        <a v-else class="no-redirect" @click.prevent="handleLink(item)">{{ item.meta.title }}</a>
       </el-breadcrumb-item>
     </transition-group>
   </el-breadcrumb>
@@ -66,12 +66,12 @@ export default {
 <style lang="scss" scoped>
 .app-breadcrumb.el-breadcrumb {
   display: inline-block;
-  font-size: 14px;
+  font-size: 16px;
   line-height: 50px;
   margin-left: 8px;
 
   .no-redirect {
-    color: #97a8be;
+    color: #FFFFFF;
     cursor: text;
   }
 }

+ 6 - 4
src/components/Hamburger/index.vue

@@ -1,14 +1,16 @@
 <template>
-  <div style="padding: 0 15px;" @click="toggleClick">
+  <div style="padding: 0 15px; background: #409EFF;" @click="toggleClick">
     <svg
       :class="{'is-active':isActive}"
       class="hamburger"
+      style="fill:#fff;"
       viewBox="0 0 1024 1024"
       xmlns="http://www.w3.org/2000/svg"
       width="64"
       height="64"
     >
-      <path d="M408 442h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8zm-8 204c0 4.4 3.6 8 8 8h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56zm504-486H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zm0 632H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zM142.4 642.1L298.7 519a8.84 8.84 0 0 0 0-13.9L142.4 381.9c-5.8-4.6-14.4-.5-14.4 6.9v246.3a8.9 8.9 0 0 0 14.4 7z" />
+      <!-- <path d="M408 442h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8zm-8 204c0 4.4 3.6 8 8 8h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56zm504-486H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zm0 632H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zM142.4 642.1L298.7 519a8.84 8.84 0 0 0 0-13.9L142.4 381.9c-5.8-4.6-14.4-.5-14.4 6.9v246.3a8.9 8.9 0 0 0 14.4 7z" /> -->
+      <path d="M0 0m70.550626 0l987.708758 0q70.550626 0 70.550625 70.550626l0 0q0 70.550626-70.550625 70.550625l-987.708758 0q-70.550626 0-70.550626-70.550625l0 0q0-70.550626 70.550626-70.550626Z" fill="#FFFFFF" p-id="567" /><path d="M0 423.303754m70.550626 0l564.405004 0q70.550626 0 70.550626 70.550625l0 0q0 70.550626-70.550626 70.550626l-564.405004 0q-70.550626 0-70.550626-70.550626l0 0q0-70.550626 70.550626-70.550625Z" fill="#FFFFFF" p-id="568" /><path d="M0 846.607507m70.550626 0l987.708758 0q70.550626 0 70.550625 70.550626l0 0q0 70.550626-70.550625 70.550625l-987.708758 0q-70.550626 0-70.550626-70.550625l0 0q0-70.550626 70.550626-70.550626Z" fill="#FFFFFF" p-id="569" />
     </svg>
   </div>
 </template>
@@ -34,8 +36,8 @@ export default {
 .hamburger {
   display: inline-block;
   vertical-align: middle;
-  width: 20px;
-  height: 20px;
+  width: 15px;
+  height: 15px;
 }
 
 .hamburger.is-active {

+ 0 - 1
src/icons/svg/MQ.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 class="icon" width="200px" height="200.00px" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path fill="#bfcbd9" d="M750.101 657.899c-16.512 0-30.272 2.752-44.032 8.256l-44.053-52.31c33.045-38.528 55.061-90.837 55.061-145.877 0-55.061-19.264-101.867-52.309-140.395l27.52-24.768c16.533 8.256 33.067 13.76 52.31 13.76 63.317 0 115.626-52.309 115.626-115.626 0-63.296-52.33-115.606-115.627-115.606-63.296 0-115.626 52.31-115.626 115.627 0 13.76 2.773 30.272 8.277 41.28l-35.776 30.293a223.147 223.147 0 0 0-112.853-30.293c-44.054 0-85.334 13.76-121.131 33.024l-41.301-52.288c0-5.504 2.773-13.781 2.773-19.285a74.027 74.027 0 0 0-74.325-74.304 74.027 74.027 0 0 0-74.326 74.304 74.027 74.027 0 0 0 74.304 74.325h8.278l44.032 55.04c-27.52 38.55-46.784 85.333-46.784 134.89 0 35.798 8.256 71.574 24.746 101.867l-35.776 30.294c-8.256-5.526-19.264-5.526-30.272-5.526-49.557 0-90.837 41.28-90.837 90.838s41.28 90.837 90.837 90.837 90.838-41.28 90.838-90.837c0-8.256 0-16.512-2.752-24.768l30.293-27.52c41.28 35.776 93.568 57.813 154.133 57.813 33.046 0 63.318-5.525 90.838-19.285l46.805 57.813c-11.008 19.264-19.264 44.032-19.264 68.8 0 77.077 63.296 140.395 143.147 140.395 79.808 0 143.146-63.318 143.146-140.374 0-77.098-66.09-140.394-145.92-140.394zM488.597 646.89c-99.093 0-181.674-79.83-181.674-178.923 0-99.115 82.581-178.944 181.674-178.944s181.675 79.83 181.675 178.944c0 99.093-82.56 178.923-181.675 178.923z m-57.813-181.696a33.024 33.024 0 1 1-66.027 0.021 33.024 33.024 0 0 1 66.048 0z m88.107 0a33.024 33.024 0 1 1-66.048 0.021 33.024 33.024 0 0 1 66.048 0z m90.837 0a33.024 33.024 0 1 1-66.048 0.021 33.024 33.024 0 0 1 66.048 0z"  /></svg>

Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 0 - 0
src/icons/svg/env.svg


+ 0 - 1
src/icons/svg/module.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 class="icon" width="200px" height="200.00px" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path fill="#bfcbd9" d="M238.933333 546.133333h204.8v-204.8H238.933333v204.8z m0 68.266667v204.8h204.8v-204.8H238.933333z m273.066667-68.266667h202.513067C752.298667 546.133333 785.066667 573.474133 785.066667 610.6112v212.3776C785.066667 860.16 752.264533 887.466667 714.513067 887.466667H204.8a34.133333 34.133333 0 0 1-34.133333-34.133334V307.2a34.133333 34.133333 0 0 1 34.133333-34.133333h273.066667a34.133333 34.133333 0 0 1 34.133333 34.133333v238.933333z m0 68.266667v204.8h202.513067c1.9456 0 2.2528 0.1024 2.286933 1.8432v-208.4864c-0.034133 1.706667-0.341333 1.8432-2.286933 1.8432H512z m136.533333-375.466667v170.666667h170.666667V238.933333h-170.666667z m-34.133333-68.266666h238.933333a34.133333 34.133333 0 0 1 34.133334 34.133333v238.933333a34.133333 34.133333 0 0 1-34.133334 34.133334h-238.933333a34.133333 34.133333 0 0 1-34.133333-34.133334V204.8a34.133333 34.133333 0 0 1 34.133333-34.133333z" /></svg>

+ 0 - 1
src/icons/svg/rule.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 class="icon" width="200px" height="200.00px" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path fill="#bfcbd9" d="M192 128V64H64v896h128v-64h-64V672h64v-64h-64V384h64v-64h-64V128h64zM960 637.67v-59.34a25.14 25.14 0 0 0-20.21-24.65l-76.67-15.33a25.25 25.25 0 0 1-18.75-16.2q-3.81-10.49-8.51-20.53a25.26 25.26 0 0 1 1.79-24.74L881 411.81a25.14 25.14 0 0 0-3.14-31.73l-42-42a25.14 25.14 0 0 0-31.67-3.08l-65.06 43.38a25.26 25.26 0 0 1-24.74 1.79q-10-4.69-20.53-8.51a25.25 25.25 0 0 1-16.2-18.75l-15.33-76.67A25.14 25.14 0 0 0 637.67 256h-59.34a25.14 25.14 0 0 0-24.65 20.21l-15.33 76.67a25.25 25.25 0 0 1-16.2 18.75q-10.49 3.81-20.53 8.51a25.26 25.26 0 0 1-24.74-1.79L411.81 335a25.14 25.14 0 0 0-31.73 3.14l-42 42a25.14 25.14 0 0 0-3.08 31.67l43.38 65.06a25.26 25.26 0 0 1 1.79 24.74q-4.69 10-8.51 20.53a25.25 25.25 0 0 1-18.75 16.2l-76.67 15.33A25.14 25.14 0 0 0 256 578.33v59.35a25.14 25.14 0 0 0 20.21 24.65l76.67 15.33a25.25 25.25 0 0 1 18.75 16.2q3.81 10.49 8.51 20.53a25.26 25.26 0 0 1-1.79 24.74L335 804.19a25.14 25.14 0 0 0 3.14 31.73l42 42a25.14 25.14 0 0 0 31.67 3.08l65.06-43.38a25.26 25.26 0 0 1 24.74-1.79q10 4.69 20.53 8.51a25.25 25.25 0 0 1 16.2 18.75l15.33 76.67A25.14 25.14 0 0 0 578.33 960h59.35a25.14 25.14 0 0 0 24.65-20.21l15.33-76.67a25.25 25.25 0 0 1 16.2-18.75q10.49-3.81 20.53-8.51a25.26 25.26 0 0 1 24.74 1.79L804.19 881a25.14 25.14 0 0 0 31.73-3.14l42-42a25.14 25.14 0 0 0 3.08-31.67l-43.38-65.06a25.26 25.26 0 0 1-1.79-24.74q4.69-10 8.51-20.53a25.25 25.25 0 0 1 18.75-16.2l76.67-15.33A25.14 25.14 0 0 0 960 637.67z m-245.33 77A150.86 150.86 0 1 1 758.86 608a149.87 149.87 0 0 1-44.19 106.67z" /></svg>

+ 0 - 1
src/icons/svg/上线质检.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="1567668256021" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2187" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M399.36 536.84A55 55 0 0 0 460.61 626l70.6 72.72a55 55 0 1 0 34.24-36.52l-73.3-75.51a55.29 55.29 0 0 0 0.38-19.8l69.5-69.5a55 55 0 1 0-1.67-100l-69.34-70a55 55 0 1 0-34.76 36l73.67 74.42a54.91 54.91 0 0 0 0.39 20.64l-67.93 67.93a55 55 0 0 0-63.03 10.46z" p-id="2188"></path><path d="M891 164.57c-12.66-3.71-91.55-26.8-172.69-49.62C536.09 63.73 520.74 63.73 512.5 63.73h-1c-8.25 0-23.6 0-205.77 51.23-81.14 22.82-160 45.91-172.69 49.62a44.07 44.07 0 0 0-35.74 43.21v277.93c0 55.41 11.8 112.58 35.09 169.94a564.11 564.11 0 0 0 91.68 150.94C307 904.26 411.86 960.27 511.81 960.27v-64c-81.13 0-168.22-47.78-238.94-131.09C203 682.89 161.3 578.42 161.3 485.72V223.25c155.16-45.72 324.39-92.69 350.7-95.44 26.31 2.75 195.54 49.72 350.7 95.44v262.47c0 92.7-41.71 197.17-111.57 279.46-70.73 83.31-157.82 131.09-238.94 131.09v64c99.95 0 204.82-56 287.73-153.67a564.12 564.12 0 0 0 91.69-150.94c23.28-57.36 35.09-114.53 35.09-169.94V207.79a44.07 44.07 0 0 0-35.7-43.22z" p-id="2189"></path></svg>

+ 5 - 0
src/icons/svg/工作台.svg

@@ -0,0 +1,5 @@
+<?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.193536 625.152c195.9424 0 339.8656 45.4144 427.6224 134.8096 78.1312 79.8208 83.6096 166.4512 83.6096 182.9888 2.7136 20.6336-4.096 39.936-16.4352 55.04-13.7216 16.4864-34.304 24.7296-57.6 24.7296H76.276736c-23.296 0-45.2096-9.6256-60.3136-27.4944a69.12 69.12 0 0 1-15.0528-53.6576c0-17.92 6.8096-103.168 83.6096-181.6064C172.225536 670.5664 316.097536 625.152 512.142336 625.152zM784.884736 0.5632c16.384 0 31.488 13.7728 31.488 31.6416v272.384c-1.3312 165.12-137.0624 301.312-302.8992 301.312-167.2192 0-301.568-136.192-301.568-302.6944 0-166.4 135.68-302.6432 301.568-302.6432h271.36z m-271.4112 686.4896c-178.176 0-307.0464 38.5024-382.464 115.5584-67.1232 67.4304-67.1232 138.9568-67.1232 141.7216v5.4784c0 2.7648 0 4.096 1.3824 6.912 1.3824 2.7136 5.4784 4.096 10.9568 4.096h873.1136c5.4784 0 9.6256-1.3824 10.9568-4.096 1.3824-1.3824 2.7648-4.1472 1.3824-8.2944v-5.4784c0-2.7648 0-74.2912-67.1744-141.7216-75.3664-75.6736-204.2368-114.176-381.0304-114.176z m0-625.9712c-132.9664 0-239.872 108.6976-239.872 240.7936 0 133.4272 108.288 240.7424 239.872 240.7424 131.584 0 239.872-108.6976 239.872-240.7424V61.0816h-239.872z" fill="#565656" p-id="1360"></path><path d="M389.569536 307.2C373.441536 307.2 358.593536 291.328 358.593536 270.7968V189.952c0-18.944 13.4656-36.4032 30.976-36.4032 17.5104 0 30.976 15.872 30.976 36.4032V270.848c0 20.5824-13.4656 36.4032-30.976 36.4032z m142.848 0c-16.1792 0-31.0272-15.872-31.0272-36.4032V189.952c0-18.944 13.5168-36.4032 31.0272-36.4032 17.5104 0 30.976 15.872 30.976 36.4032V270.848c0 20.5824-13.4656 36.4032-30.976 36.4032z" fill="#409EFF" p-id="1361"></path></svg>
+
+
+
+

Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 0 - 0
src/icons/svg/组织配置.svg


+ 1 - 0
src/icons/svg/质惠平台.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="M488.03229 51.637657h0.739526-0.739526z m24.518117 27.191786L135.961235 414.175843v531.036241H887.94496V414.175843L512.49352 78.829443zM887.94496 1024H135.904349A79.072349 79.072349 0 0 1 56.832 945.212084V414.175843c0-22.413313 9.613832-43.745781 26.338487-58.650066L459.759659 20.122491a79.299895 79.299895 0 0 1 105.695269 0.113773l375.28078 335.289513c16.724655 14.961171 26.281601 36.236753 26.281601 58.593179v531.093128A79.072349 79.072349 0 0 1 887.888074 1024z" fill="#565656" p-id="658"></path><path d="M568.811236 853.340255H455.038073v-248.878796c0-19.625871 20.365396-35.554114 45.509265-35.554114h22.754633c25.143869 0 45.509265 15.928243 45.509265 35.554114V853.340255z" fill="#409EFF" p-id="659"></svg>

+ 1 - 0
src/icons/svg/质量度量.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>

Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 0 - 0
src/icons/svg/项目管理.svg


+ 2 - 2
src/layout/components/AppMain.vue

@@ -22,13 +22,13 @@ export default {
 <style scoped>
 .app-main {
   /*50 = navbar  */
-  min-height: calc(100vh - 50px);
+  min-height: calc(100vh - 80px);
   width: 100%;
   position: relative;
   overflow: hidden;
 }
 .fixed-header+.app-main {
-  padding-top: 50px;
+  padding-top: 80px;
 }
 </style>
 

+ 35 - 56
src/layout/components/Navbar.vue

@@ -1,37 +1,14 @@
 <template>
   <div class="navbar">
-    <hamburger :is-active="sidebar.opened" class="hamburger-container" @toggleClick="toggleSideBar" />
-
-    <breadcrumb class="breadcrumb-container" />
-
-    <div class="right-menu">
-      <el-dropdown class="avatar-container" @command="handleCommand">
-        <div class="avatar-wrapper">
-          <img :src="navbarLogo.src" class="user-avatar">
-          <i class="el-icon-caret-bottom" />
-        </div>
-        <el-dropdown-menu slot="dropdown" class="user-dropdown">
-          <el-dropdown-item>
-            <span style="display:block;">{{ username }}</span>
-          </el-dropdown-item>
-          <router-link to="/">
-            <el-dropdown-item divided>
-              Home
-            </el-dropdown-item>
-          </router-link>
-          <el-dropdown-item divided command="b">
-            <span style="display:block;">Log Out</span>
-          </el-dropdown-item>
-        </el-dropdown-menu>
-      </el-dropdown>
+    <div>
+      <hamburger :is-active="sidebar.opened" class="hamburger-container" @toggleClick="toggleSideBar" />
+      <breadcrumb class="breadcrumb-container" />
+    </div>
+    <div>
+      <div class="right-menu">
+        <span class="avatar-container" style="color: #FFFFFF; font-size: 16px;">{{ username }}</span>
+      </div>
     </div>
-    <span>
-      <el-form :model="bizShow">
-        <el-select v-model="bizShow.id" style="width: 200px; float: right; padding: 5px;" placeholder="业务线" @change="bizchnage(bizShow.id)">
-          <el-option v-for="item in bizOptions" :key="item.id" :label="item.bizName" :value="item.id" />
-        </el-select>
-      </el-form>
-    </span>
   </div>
 </template>
 
@@ -39,10 +16,10 @@
 import { mapGetters } from 'vuex'
 import Breadcrumb from '@/components/Breadcrumb'
 import Hamburger from '@/components/Hamburger'
-import navbarLogo from '@/icons/rabbit-logo.gif'
+// import navbarLogo from '@/icons/rabbit-logo.gif'
 import { settingQueryBizTypeList } from '@/api/settingQueryBizTypeList.js'
 import Utils from '../../util.js'
-import { logoutUrl } from '@/api/user.js'
+// import { logoutUrl } from '@/api/user.js'
 
 export default {
   components: {
@@ -54,11 +31,11 @@ export default {
       bizOptions: [],
       bizShow: {
         id: ''
-      },
-      navbarLogo: {
-        name: 'navbarLogo',
-        src: navbarLogo
       }
+      // navbarLogo: {
+      //   name: 'navbarLogo',
+      //   src: navbarLogo
+      // }
     }
   },
   computed: {
@@ -77,18 +54,18 @@ export default {
     toggleSideBar() {
       this.$store.dispatch('app/toggleSideBar')
     },
-    logout() {
-      // await this.$store.dispatch('user/logout')
-      // this.$router.push(`/login?redirect=${this.$route.fullPath}`)
-      location.href = logoutUrl
-    },
-    handleCommand(command) {
-      switch (command) {
-        case 'b':
-          this.logout()
-          break
-      }
-    },
+    // logout() {
+    //   // await this.$store.dispatch('user/logout')
+    //   // this.$router.push(`/login?redirect=${this.$route.fullPath}`)
+    //   location.href = logoutUrl
+    // },
+    // handleCommand(command) {
+    //   switch (command) {
+    //     case 'b':
+    //       this.logout()
+    //       break
+    //   }
+    // },
     get_bizArr() {
       settingQueryBizTypeList({}).then(res => {
         this.bizOptions = res.data.list
@@ -108,10 +85,13 @@ export default {
 
 <style lang="scss" scoped>
 .navbar {
-  height: 50px;
+  display: flex;
+  align-items: center;
+  justify-content: space-between;
+  height: 80px;
   overflow: hidden;
   position: relative;
-  background: #fff;
+  background: #409EFF;
   box-shadow: 0 1px 4px rgba(0,21,41,.08);
 
   .hamburger-container {
@@ -132,9 +112,9 @@ export default {
   }
 
   .right-menu {
-    float: right;
-    height: 100%;
-    line-height: 50px;
+    // float: right;
+    // height: 100%;
+    // line-height: 50px;
 
     &:focus {
       outline: none;
@@ -145,7 +125,7 @@ export default {
       padding: 0 8px;
       height: 100%;
       font-size: 18px;
-      color: #5a5e66;
+      color: #c0c8d8;
       vertical-align: text-bottom;
 
       &.hover-effect {
@@ -162,7 +142,6 @@ export default {
       margin-right: 30px;
 
       .avatar-wrapper {
-        margin-top: 5px;
         position: relative;
 
         .user-avatar {

+ 17 - 15
src/layout/components/Sidebar/Logo.vue

@@ -3,11 +3,11 @@
     <transition name="sidebarLogoFade">
       <router-link v-if="collapse" key="collapse" class="sidebar-logo-link" to="/">
         <img v-if="logo" :src="logo" class="sidebar-logo">
-        <h6 v-else class="sidebar-title">{{ title }} </h6>
+        <span v-else class="sidebar-title">质惠 </span>
       </router-link>
       <router-link v-else key="expand" class="sidebar-logo-link" to="/">
         <img v-if="logo" :src="logo" class="sidebar-logo">
-        <h6 class="sidebar-title">{{ title }} </h6>
+        <span class="sidebar-title">质惠 </span>
       </router-link>
     </transition>
   </div>
@@ -26,7 +26,6 @@ export default {
   },
   data() {
     return {
-      title: '质惠',
       logo: logoUrl
     }
   }
@@ -46,38 +45,41 @@ export default {
 .sidebar-logo-container {
   position: relative;
   width: 100%;
-  height: 50px;
+  height: 80px;
   line-height: 50px;
-  background: #2b2f3a;
+  background: #409EFF;
   text-align: center;
   overflow: hidden;
 
   & .sidebar-logo-link {
     height: 100%;
     width: 100%;
+    display: flex !important;
+    overflow: hidden;
+    justify-content: center;
+    align-items: center;
 
     & .sidebar-logo {
-      width: 32px;
-      height: 32px;
-      vertical-align: middle;
-      margin-right: 12px;
+      width: 40px;
+      height: 40px;
     }
 
     & .sidebar-title {
-      display: inline-block;
-      margin: 1% 0 0 0 ;
-      color: #fff;
+      margin-left: 15px;
+      color: #FFFFFF;
       font-weight: 600;
       line-height: 50px;
-      font-size: 24px;
+      font-size: 20pt;
       font-family: Avenir, Helvetica Neue, Arial, Helvetica, sans-serif;
-      vertical-align: middle;
     }
   }
 
   &.collapse {
     .sidebar-logo {
-      margin-right: 0px;
+      display: flex;
+      overflow: hidden;
+      justify-content: center;
+      align-items: center;
     }
   }
 }

Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 38 - 28
src/layout/components/Sidebar/index.vue


+ 70 - 74
src/router/index.js

@@ -74,46 +74,33 @@ export const constantRoutes = [
   {
     path: '/Platform',
     component: Layout,
-    redirect: '/Platform/Workbench/PersonalWorkbench',
-    name: '流程管控',
-    meta: { title: '流程管控', icon: 'env' },
+    redirect: '/Platform/useCasePage',
+    name: '质惠平台',
+    meta: { title: '质惠平台', icon: '质惠平台' },
     children: [
       {
-        path: '/Platform/Workbench',
-        name: '工作台',
-        component: () => import('@/views/Platform/presentation/testa'),
-        redirect: '/Platform/Workbench/PersonalWorkbench',
-        meta: { title: '工作台' },
+        path: '/Platform/projectManage',
+        name: '项目管理',
+        component: () => import('@/views/projectManage/projectList/testa'),
+        redirect: '/Platform/projectManage/projectList/projectIndex',
+        meta: { title: '项目管理', icon: '项目管理' },
         children: [
           {
-            path: 'PersonalWorkbench',
-            name: '个人工作台',
-            component: () => import('@/views/Platform/Workbench/PersonalWorkbench'),
-            meta: { title: '个人工作台' }
+            path: 'projectIndex',
+            name: '项目列表',
+            component: () => import('@/views/projectManage/projectList/projectIndex'),
+            meta: { title: '项目' }
           },
           {
-            path: 'TeamWorkb1ench',
-            name: '团队工作台'
+            path: 'projectViewDetails',
+            name: '项目详情',
+            component: () => import('@/views/projectManage/projectList/projectViewDetails'),
+            meta: { title: '项目详情' }
           },
-          {
-            path: 'TeamWorkbench',
-            name: '团队工作台',
-            hidden: true,
-            component: () => import('@/views/Platform/Workbench/TeamWorkbench'),
-            meta: { title: '团队工作台' }
-          }
-        ]
-      },
-      {
-        path: '/Platform/projectManage',
-        name: '项目管理',
-        component: () => import('@/views/Platform/presentation/testa'),
-        redirect: '/Platform/projectManage/projectList',
-        meta: { title: '项目管理' },
-        children: [
           {
             path: 'projectList',
             name: '项目列表',
+            // hidden: true,
             component: () => import('@/views/projectManage/projectList/projectListIndex'),
             meta: { title: '项目列表' }
           },
@@ -163,37 +150,15 @@ export const constantRoutes = [
       {
         path: '/Platform/useCasePage',
         name: '测试计划管理',
-        component: () => import('@/views/Platform/useCase/test'),
-        redirect: 'useCasePage',
+        component: () => import('@/views/Platform/useCasePage'),
         meta: { title: '测试计划管理' },
         children: [
           {
             path: 'useCasePage',
             name: '用例管理',
+            hidden: true,
             component: () => import('@/views/Platform/useCasePage'),
             meta: { title: '用例管理' }
-            // children: [
-            //   {
-            //     path: 'createUse',
-            //     name: '用例新增',
-            //     hidden: true,
-            //     component: () => import('@/views/Platform/useCase/createUse'),
-            //     meta: { title: '用例新增' }
-            //   },
-            //   {
-            //     path: 'queryUse',
-            //     name: '用例查看',
-            //     hidden: true,
-            //     component: () => import('@/views/Platform/useCase/queryUse'),
-            //     meta: { title: '用例查看' }
-            //   },
-            //   {
-            //     path: 'updateUse',
-            //     name: '用例编辑',
-            //     hidden: true,
-            //     component: () => import('@/views/Platform/useCase/updateUse'),
-            //     meta: { title: '用例编辑' }
-            //   }]
           },
           {
             path: 'createUse',
@@ -212,6 +177,7 @@ export const constantRoutes = [
           {
             path: 'testPageData',
             name: '测试计划',
+            hidden: true,
             component: () => import('@/views/Platform/testPage.vue'),
             meta: { title: '测试计划' }
           }
@@ -221,6 +187,7 @@ export const constantRoutes = [
       {
         path: '/Platform/presentation',
         name: '报告管理',
+        hidden: true,
         component: () => import('@/views/Platform/presentation/testa'),
         redirect: '/Platform/presentation/testPresentation',
         meta: { title: '报告管理' },
@@ -228,18 +195,21 @@ export const constantRoutes = [
           {
             path: 'testPresentation',
             name: '日报报告',
+            hidden: true,
             component: () => import('@/views/Platform/presentation/testPresentation'),
             meta: { title: '日报报告' }
           },
           {
             path: 'ResultPage',
             name: '准出报告',
+            hidden: true,
             component: () => import('@/views/Platform/presentation/ResultPage'),
             meta: { title: '准出报告' }
           },
           {
             path: 'Assumptions',
             name: '提测报告',
+            hidden: true,
             component: () => import('@/views/Platform/presentation/Assumptions'),
             meta: { title: '提测报告' }
           },
@@ -299,25 +269,12 @@ export const constantRoutes = [
             component: () => import('@/views/Platform/presentation/PresentReport'),
             meta: { title: '新增客户端提测报告' }
           }
-          // {
-          //   path: 'projectQuery',
-          //   name: '项目查看编辑',
-          //   hidden: true,
-          //   component: () => import('@/views/Platform/projectQuery/projectQuery.vue'),
-          //   meta: { title: '项目查看编辑' }
-          // },
-          // {
-          //   path: 'taskQuery',
-          //   name: '任务查看编辑',
-          //   hidden: true,
-          //   component: () => import('@/views/Platform/projectQuery/taskQuery.vue'),
-          //   meta: { title: '任务查看编辑' }
-          // }
         ]
       },
       {
         path: '/Platform/defectManagement',
         name: '缺陷管理',
+        hidden: true,
         component: () => import('@/views/Platform/defectManagement'),
         meta: { title: '缺陷管理' }
       },
@@ -346,41 +303,48 @@ export const constantRoutes = [
         path: '/Platform/setUp',
         // component: Layout,
         name: '设置',
+        hidden: true,
         // meta: { title: '设置' },
         component: () => import('@/views/Platform/setUp/testa'),
         meta: { title: '设置' },
         children: [{
           path: 'systemSetup',
           name: '系统设置',
+          hidden: true,
           component: () => import('@/views/Platform/setUp/systemSetup/testa'),
           meta: { title: '系统设置' },
           children: [{
             path: 'bizPage',
             name: '业务线',
+            hidden: true,
             component: () => import('@/views/Platform/setUp/systemSetup/bizPage'),
             meta: { title: '业务线' }
           },
           {
             path: 'platformPage',
             name: '平台类型',
+            hidden: true,
             component: () => import('@/views/Platform/setUp/systemSetup/platformPage'),
             meta: { title: '平台类型' }
           },
           {
             path: 'modulePage',
             name: '业务模块',
+            hidden: true,
             component: () => import('@/views/Platform/setUp/systemSetup/modulePage'),
             meta: { title: '业务模块' }
           },
           {
             path: 'projectPage',
             name: '工程模块',
+            hidden: true,
             component: () => import('@/views/Platform/setUp/systemSetup/projectPage'),
             meta: { title: '工程模块' }
           },
           {
             path: 'confList',
             name: '业务配置列表',
+            hidden: true,
             component: () => import('@/views/Platform/setUp/systemSetup/confList'),
             meta: { title: '业务配置列表' }
           },
@@ -397,6 +361,7 @@ export const constantRoutes = [
         {
           path: 'teamPage',
           name: '团队设置',
+          hidden: true,
           component: () => import('@/views/Platform/setUp/teamPage'),
           meta: { title: '团队设置' }
         }
@@ -404,9 +369,37 @@ export const constantRoutes = [
       }
     ]
   },
+  {
+    path: '/Platform/Workbench',
+    name: '工作台',
+    component: Layout,
+    redirect: '/Platform/Workbench/PersonalWorkbench',
+    meta: { title: '工作台', icon: '工作台' },
+    children: [
+      {
+        path: 'PersonalWorkbench',
+        name: '个人工作台',
+        component: () => import('@/views/Platform/Workbench/PersonalWorkbench'),
+        meta: { title: '个人工作台' }
+      },
+      {
+        path: 'TeamWorkb1ench',
+        name: '团队工作台'
+      },
+      {
+        path: 'TeamWorkbench',
+        name: '团队工作台',
+        hidden: true,
+        component: () => import('@/views/Platform/Workbench/TeamWorkbench'),
+        meta: { title: '团队工作台' }
+      }
+    ]
+  },
+
   {
     path: '/env-platform',
     component: Layout,
+    hidden: true,
     redirect: '/env-platform/env',
     name: '环境',
     meta: { title: '环境平台', icon: 'env_platform' },
@@ -466,6 +459,7 @@ export const constantRoutes = [
   {
     path: '/mock',
     component: Layout,
+    hidden: true,
     redirect: '/mock/interface',
     name: 'Mock',
     meta: { title: 'Mock服务', icon: 'MQ' },
@@ -502,9 +496,9 @@ export const constantRoutes = [
   {
     path: '/data',
     component: Layout,
+    hidden: true,
     redirect: '/data/upload-file',
     name: '数据中心',
-    hidden: true,
     meta: { title: '数据中心', icon: 'examlpe' },
     children: [
       {
@@ -525,9 +519,10 @@ export const constantRoutes = [
   {
     path: '/virtualDevices',
     component: Layout,
+    hidden: true,
     redirect: '/virtualDevices/HTvehicle',
     name: '虚拟硬件',
-    meta: { title: '虚拟硬件', icon: 'module' },
+    meta: { title: '虚拟硬件', icon: 'zhiliangdapan' },
     children: [
       {
         path: 'HTvehicle',
@@ -554,6 +549,7 @@ export const constantRoutes = [
   {
     path: '/online-quality',
     component: Layout,
+    hidden: true,
     redirect: '/online-quality/check-list',
     name: '上线质检',
     meta: { title: '上线质检', icon: '上线质检' },
@@ -594,7 +590,7 @@ export const constantRoutes = [
     component: Layout,
     redirect: '/quality/qualityMeasurement',
     name: '质量度量',
-    meta: { title: '质量度量', icon: 'rule' },
+    meta: { title: '质量度量', icon: '质量度量' },
     children: [
       {
         path: 'qualityMeasurement',
@@ -657,15 +653,15 @@ export const constantRoutes = [
     name: '组织配置',
     component: Layout,
     redirect: '/ToConfigure/configure',
-    hidden: true,
+    // hidden: true,
     meta: { title: '组织配置', icon: '上线质检' },
     children: [
       {
         path: 'configure',
         name: '组织配置',
-        hidden: true,
+        // hidden: true,
         component: () => import('@/views/ToConfigure/configure'),
-        meta: { title: '组织配置' }
+        meta: { title: '组织配置', icon: '组织配置' }
       }
     ]
   }

+ 10 - 8
src/styles/sidebar.scss

@@ -37,11 +37,11 @@
       height: 100%;
     }
 
-    &.has-logo {
-      .el-scrollbar {
-        height: calc(100% - 50px);
-      }
-    }
+    // &.has-logo { // 导航栏设置隐藏高度
+    //   .el-scrollbar {
+    //     height: calc(100% - 50px);
+    //   }
+    // }
 
     .is-horizontal {
       display: none;
@@ -68,12 +68,13 @@
     .el-submenu__title {
       &:hover {
         background-color: $menuHover !important;
+        color: #409EFF !important;
       }
     }
 
-    .is-active>.el-submenu__title {
-      color: $subMenuActiveText !important;
-    }
+    // .is-active>.el-submenu__title {
+    //   color: $subMenuActiveText !important;
+    // }
 
     & .nest-menu .el-submenu>.el-submenu__title,
     & .el-submenu .el-menu-item {
@@ -82,6 +83,7 @@
       
       &:hover {
         background-color: $subMenuHover !important;
+        color: #409EFF !important;
       }
     }
   }

+ 16 - 7
src/styles/variables.scss

@@ -1,13 +1,23 @@
+// $menuText:#bfcbd9;
+// $menuActiveText:#409EFF;
+// $subMenuActiveText:#f4f4f5; //https://github.com/ElemeFE/element/issues/12951
+
+// $menuBg:#304156;
+// $menuHover:#263445;
+
+// $subMenuBg:#1f2d3d;
+// $subMenuHover:#001528;
+
+// $sideBarWidth: 210px;
 // sidebar
-$menuText:#bfcbd9;
+$menuText:#333B4A;
 $menuActiveText:#409EFF;
-$subMenuActiveText:#f4f4f5; //https://github.com/ElemeFE/element/issues/12951
 
-$menuBg:#304156;
-$menuHover:#263445;
+$menuBg:#FFFFFF;
+$menuHover:#F2F2F2;
 
-$subMenuBg:#1f2d3d;
-$subMenuHover:#001528;
+$subMenuBg:#FFFFFF;
+$subMenuHover:#F2F2F2;
 
 $sideBarWidth: 210px;
 
@@ -16,7 +26,6 @@ $sideBarWidth: 210px;
 :export {
   menuText: $menuText;
   menuActiveText: $menuActiveText;
-  subMenuActiveText: $subMenuActiveText;
   menuBg: $menuBg;
   menuHover: $menuHover;
   subMenuBg: $subMenuBg;

+ 2 - 2
src/views/Platform/projectPage.vue

@@ -196,7 +196,7 @@
           <el-input v-model="formQuery.name" autocomplete="off" placeholder="项目名称" />
         </el-form-item>
         <div style="display: flex;">
-          <div style="flex:1;">
+          <div style="flex:2;">
             <el-form-item label="业务线" prop="bizId" :label-width="formLabelWidths">
               <el-select v-model="formQuery.bizId" placeholder="业务线">
                 <el-option v-for="item in bizOptions" :key="item.value" :label="item.name" :value="item.name" />
@@ -213,7 +213,7 @@
               </el-select>
             </el-form-item>
           </div>
-          <div style="flex:1;">
+          <div style="flex:2;">
             <el-form-item label="优先级" prop="priorityString" :label-width="formLabelWidths">
               <el-select v-model="formQuery.priorityString" placeholder="优先级">
                 <el-option v-for="item in priorityStrings" :key="item.value" :label="item.name" :value="item.name" />

+ 262 - 93
src/views/ToConfigure/configure.vue

@@ -1,69 +1,84 @@
 <template>
-  <div class="bgColorSz">
-    <el-tabs v-model="activeName" class="abc">
-      <el-tab-pane label="我的" name="second">
-        <div align="right" style="margin-right: 1%;"><el-button size="mini" type="primary" @click="create_test(form)">新建团队</el-button></div>
-        <div align="center" style="margin: 1%;">
-          <el-table :data="tableData" max-height="1000" :header-cell-style="{ background: '#F0F2F4', color: '#333B4A' }" size="mini" border align="center" :show-overflow-tooltip="true">
-            <el-table-column label="团队名称" min-width="120" align="center"><template slot-scope="scope">{{ scope.row.name }}</template></el-table-column>
-            <el-table-column label="我的角色" min-width="120" align="center"><template slot-scope="scope">{{ scope.row.address }}</template></el-table-column>
-            <el-table-column label="成员名单" min-width="120" align="center"><template slot-scope="scope">{{ scope.row.date }}</template></el-table-column>
-            <el-table-column label="操作" align="center">
-              <template slot-scope="scope">
-                <el-button size="mini" type="primary" plain @click="update_test(scope.row)">编辑</el-button>
-              </template>
-            </el-table-column>
-          </el-table>
-        </div>
-      </el-tab-pane>
-
-      <el-tab-pane label="全部" name="third">
-        <div align="right" style="margin-right: 1%;"><el-button size="mini" type="primary" @click="create_test(form)">新建团队</el-button></div>
-        <div align="center" style="margin: 1%;">
-          <el-table :data="tableData" max-height="1000" :header-cell-style="{ background: '#F0F2F4', color: '#333B4A' }" size="mini" width="80%" border show-overflow-tooltip="true">
-            <el-table-column label="团队名称" min-width="120" align="center"><template slot-scope="scope">{{ scope.row.name }}</template></el-table-column>
-            <el-table-column label="团队属性" min-width="120" align="center"><template slot-scope="scope">{{ scope.row.address1 }}</template></el-table-column>
-            <el-table-column label="成员名单" min-width="120" align="center"><template slot-scope="scope">{{ scope.row.date }}</template></el-table-column>
-            <el-table-column label="操作" align="center">
-              <template slot-scope="scope">
-                <el-button size="mini" type="primary" plain @click="update_test(scope.row)">编辑</el-button>
-              </template>
-            </el-table-column>
-          </el-table>
-        </div>
-      </el-tab-pane>
-    </el-tabs>
-    <el-dialog title="新建团队" :visible.sync="dialogFormVisible" width="30%" center>
+  <div class="1hao" style="height: calc(100vh - 80px);background-color:#F2F3F6;display:flex;align-items: center;justify-content: center;">
+    <div class="2hao" style="height: 96%;width: 98%;background-color: white;overflow: auto;border-radius:8px;">
+      <el-tabs v-model="activeName" class="abc" @tab-click="handleClick">
+        <el-tab-pane label="我的" name="second">
+          <div align="right" style="margin-right: 1%;"><el-button size="mini" type="primary" @click="create_test(form)">新建团队</el-button></div>
+          <div align="center" style="margin: 1%;">
+            <el-table :data="table_Data" :header-cell-style="{ background: '#F0F2F4', color: '#333B4A' }" size="mini" width="80%" border show-overflow-tooltip="true">
+              <el-table-column label="团队名称" min-width="120" align="center"><template slot-scope="scope">{{ scope.row.teamName }}</template></el-table-column>
+              <el-table-column label="我的角色" min-width="120" align="center"><template slot-scope="scope">{{ scope.row.teamAttribute[0] }}, {{ scope.row.teamAttribute[1] }}</template></el-table-column>
+              <el-table-column label="成员名单" min-width="120" align="center">
+                <template slot-scope="scope">
+                  <span v-for="(item, i) in scope.row.memberName" :key=" i + 'a'">{{ item }}<span v-show="item" style="color: red; margin-left: 2%;">Leader 、</span></span>
+                  <span v-for="(item, index) in scope.row.memberName1" :key="index">{{ item }} 、 </span>
+                </template>
+              </el-table-column>
+              <el-table-column label="操作" align="center">
+                <template slot-scope="scope"><el-button size="mini" type="primary" plain @click="update_test(scope.row)">编辑</el-button></template>
+              </el-table-column>
+            </el-table>
+            <el-pagination :current-page.sync="currentPage1" :page-sizes="[15]" background layout="total, prev, pager, next" :total="total1" @size-change="handleSizeChange" @current-change="handleCurrentChange" />
+          </div>
+        </el-tab-pane>
+        <el-tab-pane label="全部" name="third">
+          <div align="right" style="margin-right: 1%;"><el-button size="mini" type="primary" @click="create_test(form)">新建团队</el-button></div>
+          <div align="center" style="margin: 1%;">
+            <el-table v-loading="loading" :data="tableData" :header-cell-style="{ background: '#F0F2F4', color: '#333B4A' }" size="mini" width="80%" border show-overflow-tooltip="true">
+              <el-table-column label="团队名称" min-width="100" align="center"><template slot-scope="scope">{{ scope.row.teamName }}</template></el-table-column>
+              <el-table-column label="团队属性" min-width="60" align="center"><template slot-scope="scope">{{ scope.row.teamAttribute[0] }}, {{ scope.row.teamAttribute[1] }}</template></el-table-column>
+              <el-table-column label="成员名单" min-width="120" align="center" show-overflow-tooltip>
+                <template slot-scope="scope">
+                  <span v-for="(item1, index) in scope.row.memberName" :key="index+'a'">{{ item1 }}<span v-show="item1" style="color: red; margin-left: 2%;">Leader 、</span></span>
+                  <span v-for="(item, index) in scope.row.memberName1" :key="index">{{ item }}、</span>
+                </template>
+              </el-table-column>
+              <el-table-column label="操作" align="center">
+                <template slot-scope="scope"><el-button size="mini" type="primary" plain @click="update_test(scope.row)">编辑</el-button></template>
+              </el-table-column>
+            </el-table>
+            <el-pagination :current-page.sync="currentPage1" :page-size="15" :page-sizes="[15, 30, 40, 50]" background layout="total, prev, pager, next" :total="total" @size-change="handleSizeChange" @current-change="handleCurrentChange" />
+          </div>
+        </el-tab-pane>
+      </el-tabs>
+    </div>
+    <el-dialog :title="title_name" :visible.sync="dialogFormVisible" width="30%" center>
       <el-form ref="form" label-position="left" :model="form" :rules="rules" label-width="110px">
-        <el-form-item label="团队名称" prop="address">
-          <el-input v-model="form.address" autocomplete="off" placeholder="请输入团队名称,不得超过20个汉字" />
+        <el-form-item label="团队名称" prop="teamName">
+          <el-input v-model="form.teamName" autocomplete="off" placeholder="请输入团队名称,不得超过20个汉字" @blur="blur_teamName(form.teamName)" />
         </el-form-item>
-        <el-form-item label="团队属性" prop="address1">
-          <el-select v-model="form.address1" style="width: 100%;" placeholder="请选择">
-            <el-option v-for="item in array_tim" :key="item.code" :label="item.name" :value="item.code" />
+        <el-form-item label="团队属性" prop="teamAttribute">
+          <el-select v-model="form.teamAttribute" style="width: 100%;" placeholder="请选择">
+            <el-option v-for="item in arr_team" :key="item.code" :label="item.msg" :value="item.code" />
           </el-select>
         </el-form-item>
-        <el-form-item label="团队Lerader" prop="name">
-          <el-select v-model="form.name" multiple collapse-tags filterable style="width: 100%;" placeholder="请输入姓名或者邮箱前缀">
-            <el-option v-for="item in array_tim" :key="item.code" :label="item.name" :value="item.code" />
+        <el-form-item label="团队Leader">
+          <el-select v-model="form.lerader" style="width: 100%;" multiple filterable remote reserve-keyword placeholder="请输入姓名或者邮箱前缀" :remote-method="remoteMethod" :loading="loading" @change="team_lerader(form.lerader)">
+            <el-option v-for="item in options" :key="item.idap" :label="item.name" :value="test2(item, 1)">
+              <span style="float: left">{{ item.name }}</span>
+              <span style="float: right; color: #8492a6; font-size: 13px,">{{ item.idap }}</span>
+            </el-option>
           </el-select>
         </el-form-item>
-        <el-form-item label="团队成员" prop="date">
-          <el-select v-model="form.date" multiple collapse-tags filterable style="width: 100%;" placeholder="请输入姓名或者邮箱前缀">
-            <el-option v-for="item in array_tim" :key="item.code" :label="item.name" :value="item.code" />
+        <el-form-item label="团队成员" prop="dates">
+          <el-select v-model="form.dates" style="width: 100%;" multiple filterable remote reserve-keyword placeholder="请输入姓名或者邮箱前缀" :remote-method="remoteMethod" :loading="loading" @change="team_dates(form.dates)">
+            <el-option v-for="item in options" :key="item.idap" :label="item.name" :value="test2(item, 0)">
+              <span style="float: left">{{ item.name }}</span>
+              <span style="float: right; color: #8492a6; font-size: 13px,">{{ item.idap }}</span>
+            </el-option>
           </el-select>
         </el-form-item>
       </el-form>
       <div slot="footer" class="dialog-footer">
-        <el-button size="mini" type="primary" plain @click="Preservation(form)">保 存</el-button>
         <el-button size="mini" type="danger" plain @click="dialogFormVisible = false">取 消</el-button>
+        <el-button size="mini" type="primary" plain @click="Preservation(form)">保 存</el-button>
       </div>
     </el-dialog>
   </div>
 </template>
 <script>
 
-// import {  } from '@/api/workbench'
+import { teamCreateTeam, memberQueryMemberInfoByIDAPorName, teamQueryTeamInfoList, configShowTeamAndMemberEnum, teamIsTeamNameRepetition, teamQueryTeamInfo, teamModifyTeam } from '@/api/configure'
 
 export default {
   name: 'PersonalWorkbench',
@@ -72,51 +87,219 @@ export default {
       userInformation: localStorage.getItem('username'),
       bizJson: localStorage.getItem('key'),
       dialogFormVisible: false,
+      dialogFormVisibleQuery: false,
       activeName: 'second',
+      title_name: '',
+      currentPage1: 1,
       gridData: [],
+      arr_team: [],
       rules: {
-        address: [{ required: true, message: '团队名称不能为空', trigger: 'change' }, { max: 20, message: '团队名称,不得超过20个汉字', trigger: 'blur' }],
-        address1: [{ required: true, message: '团队属性不能为空', trigger: 'change' }],
-        name: [{ required: true, message: '团队Lerader不能为空', trigger: ['blur', 'change'] }],
-        date: [{ required: true, message: '团队成员不能为空', trigger: ['blur', 'change'] }]
+        teamName: [{ required: true, message: '团队名称不能为空', trigger: 'change' }, { max: 20, message: '团队名称,不得超过20个汉字', trigger: 'blur' }],
+        teamAttribute: [{ required: true, message: '团队属性不能为空', trigger: 'change' }],
+        dates: [{ required: true, message: '团队成员不能为空', trigger: ['blur', 'change'] }]
       },
-      array_tim: [{ code: '1', name: '汝瑞' }, { code: '2', name: '汝瑞' }, { code: '3', name: '汝瑞' }],
+      teamRoleEnum: [],
+      teamMemberRelateInfos: [],
       form: {},
-      tableData: []
+      tableData: [],
+      table_Data: [],
+      options: [],
+      lerader: [],
+      tates: [],
+      depid: [],
+      loading: false,
+      test: {},
+      arry: [],
+      arr: [],
+      total: 0,
+      total1: 0,
+      curIndex: 1,
+      pageSize: 15
     }
   },
   created() {
-    this.haha()
+    this.get_select()
+    this.get_list(this.userInformation)
   },
   methods: {
-    haha() {
-      var arr = { date: '秦志鹏', name: '两轮车B端', address: 'rd qa pm', address1: '不知道' }
-      for (var i = 0; i <= 100; i++) {
-        this.tableData.push(arr)
+    test2(item, e) { // 获取团队人员信息
+      if (typeof this.test[item.idap] === 'undefined') {
+        item.role = e
+        this.test[item.idap] = item
       }
+      return item.idap
     },
+    get_list(e) { // 获得list
+      this.tableData = []
+      var arr = { memberIDAP: e, curIndex: this.curIndex, pageSize: this.pageSize }
+      teamQueryTeamInfoList(arr).then(res => {
+        if (res.code === 200 && res.data.list !== null) {
+          res.data.list.map(item => {
+            this.teamRoleEnum.map(item1 => {
+              item.teamAttribute[0] === item1.code ? item.teamAttribute[0] = item1.msg : ''
+              item.teamAttribute[1] === item1.code ? item.teamAttribute[1] = item1.msg : ''
+            })
+            item.memberName = []
+            item.memberName1 = []
+            item.teamLeaderRelateInfoResponseList.map(item2 => {
+              item.memberName.push(item2.memberName)
+            })
+            item.teamMemberRelateInfoResponseList.map(value => {
+              item.memberName1.push(value.memberName)
+            })
+            if (e === undefined) {
+              this.tableData = res.data.list
+              this.total = res.data.total
+            } else {
+              this.table_Data = res.data.list
+              this.total1 = res.data.total
+            }
+          })
 
-    // 点击新增按钮
-    create_test(form) {
+          this.loading = false
+        }
+      })
+    },
+    remoteMethod(query) {
+      if (query !== '') {
+        this.loading = true
+        setTimeout(() => {
+          this.loading = false
+          memberQueryMemberInfoByIDAPorName({ memberIDAP: query }).then(res => {
+            this.options = res.data
+          })
+        }, 200)
+      } else {
+        this.options = []
+      }
+    },
+    blur_teamName(e) { // 团队名称重复
+      teamIsTeamNameRepetition({ teamName: e }).then(res => {
+        if (res.data === true) {
+          this.$set(this.form, 'teamName', '')
+          this.$message({ message: '团队名称已存在,请重新设置', type: 'error' })
+        }
+      })
+    },
+    create_test() { // 点击新增按钮
       this.dialogFormVisible = true
-      this.form = {}
-      this.$refs[form].resetFields()
+      this.title_name = '新建团队'
+      this.$set(this.form, 'teamName', '')
+      this.$set(this.form, 'teamAttribute', '')
+      this.$set(this.form, 'lerader', [])
+      this.$set(this.form, 'dates', [])
+      this.$set(this.form, 'name', [])
+      if (this.$refs['form'] !== undefined) {
+        this.$refs['form'].resetFields()
+      }
     },
-
-    // 点击编辑按钮
-    update_test(e) {
-      console.log(e)
+    update_test(e) { // 点击编辑按钮
+      this.title_name = '编辑团队'
       this.dialogFormVisible = true
-      this.form = e
+      teamQueryTeamInfo(e.teamId).then(res => {
+        const teamLeaderRelateInfoResponseList = []
+        const teamMemberRelateInfoResponseList = []
+        const leader = []
+        const teamMember = []
+        res.data.teamLeaderRelateInfoResponseList.map(item => {
+          teamLeaderRelateInfoResponseList.push({ name: item.memberName, idap: item.memberIDAP, teamId: item.teamId })
+          leader.push(item.memberIDAP)
+          this.arr.push({ memberIDAP: item.memberIDAP, department: item.deptid, role: 1 })
+        })
+        res.data.teamMemberRelateInfoResponseList.map(item => {
+          teamMemberRelateInfoResponseList.push({ name: item.memberName, idap: item.memberIDAP, teamId: item.teamId })
+          teamMember.push(item.memberIDAP)
+          this.arry.push({ memberIDAP: item.memberIDAP, department: item.deptid, role: 0 })
+        })
+        var set_options = []
+        set_options = teamLeaderRelateInfoResponseList.concat(teamMemberRelateInfoResponseList)
+        const hash = {}
+        this.options = set_options.reduce((preVal, curVal) => {
+          hash[curVal.idap] ? '' : hash[curVal.idap] = true && preVal.push(curVal)
+          return preVal
+        }, [])
+        this.form = { teamName: res.data.teamName, teamAttribute: res.data.teamAttribute[0], lerader: leader, dates: teamMember, teamId: e.teamId }
+      })
     },
-
-    // 创建团队
-    Preservation(form) {
-      this.$refs[form].validate((valid) => {
+    team_lerader(e) { // 改变lerader
+      this.form.arr = []
+      for (const i in e) {
+        this.form.arr.push(this.test[e[i]])
+      }
+      this.arr = this.form.arr.map(item => {
+        return { memberIDAP: item.idap, department: item.deptid, role: 1 }
+      })
+      this.options = []
+    },
+    team_dates(e) { // 改变成员
+      this.form.arry = []
+      for (const i in e) {
+        this.form.arry.push(this.test[e[i]])
+      }
+      this.arry = this.form.arry.map(item => {
+        return { memberIDAP: item.idap, department: item.deptid, role: 0 }
+      })
+    },
+    Preservation(form) { // 创建团队
+      this.$refs['form'].validate((valid) => {
         if (valid) {
-          console.log(form)
+          var team = {
+            teamName: form.teamName,
+            teamAttribute: form.teamAttribute,
+            teamMemberRelateInfoRequests: this.arr.concat(this.arry),
+            creator: this.userInformation,
+            modifier: this.userInformation
+          }
+          switch (this.title_name) {
+            case '新建团队':
+              teamCreateTeam(team).then(res => {
+                if (res.code === 200) {
+                  this.dialogFormVisible = false
+                  this.$message({ message: res.msg, type: 'success' })
+                  this.get_list()
+                } else {
+                  this.dialogFormVisible = true
+                  this.$message({ message: res.msg, type: 'error' })
+                }
+              })
+              break
+            case '编辑团队':
+              team.teamId = form.teamId
+              teamModifyTeam(team).then(res => {
+                if (res.code === 200) {
+                  this.dialogFormVisible = false
+                  this.$message({ message: res.msg, type: 'success' })
+                  this.get_list()
+                } else {
+                  this.dialogFormVisible = true
+                  this.$message({ message: res.msg, type: 'error' })
+                }
+              })
+              break
+          }
         }
       })
+    },
+    handleClick(tab, event) { // 切换(我的/全部)
+      this.loading = true
+      tab.index === '0' ? this.get_list(this.userInformation) : this.get_list()
+    },
+    handleSizeChange(size) { //  分页
+      this.pageSize = size
+      this.get_list()
+    },
+    handleCurrentChange(curIndex) { //  分页
+      this.curIndex = curIndex
+      this.get_list()
+    },
+    get_select() { // 获取下拉菜单数据
+      configShowTeamAndMemberEnum().then(res => {
+        this.teamRoleEnum = res.data.teamRoleEnum // 团队属性
+        this.memberRoleEnum = res.data.memberRoleEnum // lerader
+        this.arr_team = this.teamRoleEnum.filter(item => {
+          return item.code <= 3
+        })
+      })
     }
   }
 }
@@ -125,29 +308,15 @@ export default {
   .abc .el-tabs__nav-wrap::after {
     background-color:#FFFFFF !important;
   }
-  .bgColorSz .el-tabs__nav-scroll {
-    padding: 1% 2% !important;
+  .abc .el-tabs__nav-scroll {
+    padding: 0% 2% 0 1% !important;
   }
-  .item .el-badge__content.is-fixed {
-    right: 50px;
+  .bgColorSz .el-dialog {
+    border-radius: 8px;
   }
 </style>
 <style scoped>
-  .abc {
-    background:#FFFFFF;
-    border-radius:8px;
-    margin: 0 1%;
-    width: 100%;
-    height: 98%;
-  }
-
-  .bgColorSz {
-    width: 100%;
-    height: 96vh;
-    background: #F2F3F6;
-    font-size: 0.9rem;
-    display: flex;
-    justify-content: center;
-    align-items: center;
+  .el-select-dropdown.is-multiple .el-select-dropdown__item.selected::after {
+    display: none;
   }
 </style>

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

@@ -0,0 +1,348 @@
+<template>
+  <div style="background-color:#F2F3F6;display:flex;align-items: center;justify-content: center;">
+    <el-container>
+      <el-header class="bgborder" style=" margin: 1%;display:flex;align-items: center;justify-content: space-between;">
+        <el-dropdown @command="handleCommand">
+          <span class="el-dropdown-link drop_down" style="cursor: pointer;">{{ form_all.all_all }}<i class="el-icon-arrow-down el-icon--right" /></span>
+          <el-dropdown-menu slot="dropdown" align="center">
+            <el-dropdown-item v-for="item in all_city_list" :key="item.value" :command="{value:item.value,label:item.label,flag:1}">{{ item.label }}</el-dropdown-item>
+          </el-dropdown-menu>
+        </el-dropdown>
+        <el-dropdown @command="handleCommand">
+          <span class="el-dropdown-link drop_down" style="cursor: pointer;">{{ form_all.all_bizId }}<i class="el-icon-arrow-down el-icon--right" /></span>
+          <el-dropdown-menu slot="dropdown" align="center">
+            <el-dropdown-item v-for="item in all_city_list" :key="item.value" :command="{value:item.value,label:item.label,flag:2}">{{ item.label }}</el-dropdown-item>
+          </el-dropdown-menu>
+        </el-dropdown>
+        <el-dropdown @command="handleCommand">
+          <span class="el-dropdown-link drop_down" style="cursor: pointer;">{{ form_all.all_projectType }}<i class="el-icon-arrow-down el-icon--right" /></span>
+          <el-dropdown-menu slot="dropdown" align="center">
+            <el-dropdown-item v-for="item in all_city_list" :key="item.value" :command="{value:item.value,label:item.label,flag:3}">{{ item.label }}</el-dropdown-item>
+          </el-dropdown-menu>
+        </el-dropdown>
+        <el-dropdown @command="handleCommand">
+          <span class="el-dropdown-link drop_down" style="cursor: pointer;">{{ form_all.all_priority }}<i class="el-icon-arrow-down el-icon--right" /></span>
+          <el-dropdown-menu slot="dropdown" align="center">
+            <el-dropdown-item v-for="item in all_city_list" :key="item.value" :command="{value:item.value,label:item.label, flag:4}">{{ item.label }}</el-dropdown-item>
+          </el-dropdown-menu>
+        </el-dropdown>
+        <!-- <el-select id="basicName" v-model="value" clearable size="mini" placeholder="全部">
+          <el-option v-for="item in options1" :key="item.value" :label="item.label" :value="item.value" />
+        </el-select>
+        <el-select id="basicName" v-model="value" clearable size="mini" placeholder="业务线">
+          <el-option v-for="item in options1" :key="item.value" :label="item.label" :value="item.value" />
+        </el-select>
+        <el-select id="basicName" v-model="value" clearable size="mini" placeholder="项目类型">
+          <el-option v-for="item in options1" :key="item.value" :label="item.label" :value="item.value" />
+        </el-select>
+        <el-select id="basicName" v-model="value" clearable size="mini" placeholder="优先级">
+          <el-option v-for="item in options1" :key="item.value" :label="item.label" :value="item.value" />
+        </el-select> -->
+        <el-select
+          id="basicName"
+          v-model="form_all.all_PersonInCharge"
+          filterable
+          remote
+          reserve-keyword
+          :remote-method="remoteMethod"
+          :loading="loading"
+          clearable
+          size="mini"
+          placeholder="负责人"
+        >
+          <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value" />
+        </el-select>
+        <el-select
+          id="basicName"
+          v-model="form_all.all_Founder"
+          filterable
+          remote
+          reserve-keyword
+          :remote-method="remoteMethod"
+          :loading="loading"
+          clearable
+          size="mini"
+          placeholder="创建人"
+        >
+          <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value" />
+        </el-select>
+        <el-button type="primary" size="mini" style="float: right">查询</el-button>
+        <el-button size="mini" style="float: right;" @click="query_Reset">重置</el-button>
+      </el-header>
+
+      <el-main class="bgborder" style=" margin: 0 1%;min-height: 79.5vh;padding:0 !important">
+        <div style="margin: 1.5%; font-weight: 600; white-space: nowrap;"><b style="color: #409EFF;margin: 0 0.5%; font-size: 20px; ">I</b>项目列表 <el-button type="primary" size="mini" icon="el-icon-plus" style="float: right;" @click="dialogFormVisible = true">新建</el-button></div>
+        <el-table :data="tableData" style="width: 100%;" size="mini" :header-cell-style="{ background: '#6AB4FF', color: '#FFFFFF' }" show-overflow-tooltip="true" :row-class-name="tableRowClassName">
+          <el-table-column label="优先级" min-width="100" sortable align="center">
+            <template slot-scope="scope"><el-tag size="mini" :type="random(scope.row)" effect="dark"> {{ scope.row.teamName }}</el-tag></template>
+          </el-table-column>
+          <el-table-column label="项目名称" min-width="200" align="center" show-overflow-tooltip>
+            <template slot-scope="scope"><span @click="link_project">{{ scope.row.address }}</span></template>
+          </el-table-column>
+          <el-table-column label="业务线" min-width="100" align="center">
+            <template slot-scope="scope">{{ scope.row.teamName }}</template>
+          </el-table-column>
+          <el-table-column label="项目类型" min-width="100" align="center">
+            <template slot-scope="scope">{{ scope.row.teamName }}</template>
+          </el-table-column>
+          <el-table-column label="项目负责人" min-width="100" align="center">
+            <template slot-scope="scope">{{ scope.row.teamName }}</template>
+          </el-table-column>
+          <el-table-column label="产品负责人" min-width="100" align="center">
+            <template slot-scope="scope">{{ scope.row.teamName }}</template>
+          </el-table-column>
+          <el-table-column label="开发负责人" min-width="100" align="center">
+            <template slot-scope="scope">{{ scope.row.teamName }}</template>
+          </el-table-column>
+          <el-table-column label="需求" min-width="80" align="center">
+            <template slot-scope="scope">{{ scope.row.teamName }}</template>
+          </el-table-column>
+          <el-table-column label="任务" min-width="80" align="center">
+            <template slot-scope="scope">{{ scope.row.teamName }}</template>
+          </el-table-column>
+          <el-table-column label="Bug" min-width="80" align="center">
+            <template slot-scope="scope">{{ scope.row.teamName }}</template>
+          </el-table-column>
+          <el-table-column label="创建人" min-width="100" align="center">
+            <template slot-scope="scope">{{ scope.row.teamName }}</template>
+          </el-table-column>
+          <el-table-column label="创建日期" min-width="120" align="center">
+            <template slot-scope="scope">{{ scope.row.date }}</template>
+          </el-table-column>
+        </el-table>
+      </el-main>
+      <el-footer class="footer" style="display:flex;align-items: center;justify-content: flex-end;">
+        <el-pagination background :current-page="currentPage" :page-sizes="[15, 20, 25, 30]" :page-size="100" layout="total, prev, pager, next, jumper" :total="100" @size-change="handleSizeChange" @current-change="handleCurrentChange" />
+      </el-footer>
+    </el-container>
+    <el-dialog title="新建项目" :visible.sync="dialogFormVisible" width="70%">
+      <el-form :model="form" label-position="left" style="margin: 0 3%;">
+        <el-form-item label="项目名称" :label-width="formLabelWidth">
+          <el-input v-model="form.name" autocomplete="off" placeholder="请输入项目名称" />
+        </el-form-item>
+        <div style="display: flex;">
+          <div style="flex; 1;">
+            <el-form-item label="项目类型" :label-width="formLabelWidth">
+              <el-select v-model="form.value" clearable placeholder="业务/产品" style="width: 100%">
+                <el-option v-for="item in options1" :key="item.value" :label="item.label" :value="item.value" />
+              </el-select>
+            </el-form-item>
+            <el-form-item label="业务线" :label-width="formLabelWidth">
+              <el-select v-model="form.value" clearable placeholder="请选择" style="width:20vw">
+                <el-option v-for="item in options1" :key="item.value" :label="item.label" :value="item.value" />
+              </el-select>
+            </el-form-item>
+            <el-form-item label="产品负责人" :label-width="formLabelWidth">
+              <el-select v-model="form.value1" filterable remote reserve-keyword :remote-method="remoteMethod" :loading="loading" clearable placeholder="请输入姓名或邮箱前缀" style="width: 100%">
+                <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value" />
+              </el-select>
+            </el-form-item>
+            <el-form-item label="测试负责人" :label-width="formLabelWidth">
+              <el-select v-model="form.value1" filterable remote reserve-keyword :remote-method="remoteMethod" :loading="loading" clearable placeholder="请输入姓名或邮箱前缀" style="width: 100%">
+                <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value" />
+              </el-select>
+            </el-form-item>
+          </div>
+          <div style="flex; 1; margin: 0 0 0 auto;">
+            <el-form-item label="优先级" :label-width="formLabelWidth">
+              <el-select v-model="form.value" clearable placeholder="请选择" style="width:20vw">
+                <el-option v-for="item in options1" :key="item.value" :label="item.label" :value="item.value" />
+              </el-select>
+            </el-form-item>
+            <el-form-item label="项目负责人" :label-width="formLabelWidth">
+              <el-select v-model="form.value1" filterable remote reserve-keyword :remote-method="remoteMethod" :loading="loading" clearable placeholder="请输入姓名或邮箱前缀" style="width: 100%">
+                <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value" />
+              </el-select>
+            </el-form-item>
+            <el-form-item label="开发负责人" :label-width="formLabelWidth">
+              <el-select v-model="form.value1" filterable remote reserve-keyword :remote-method="remoteMethod" :loading="loading" clearable placeholder="请输入姓名或邮箱前缀" style="width: 100%">
+                <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value" />
+              </el-select>
+            </el-form-item>
+          </div>
+        </div>
+        <el-form-item label="项目描述" :label-width="formLabelWidth">
+          <el-input v-model="form.textarea" type="textarea" placeholder="请输入" show-word-limit />
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button @click="dialogFormVisible = false">取 消</el-button>
+        <el-button type="primary" @click="dialogFormVisible = false">创 建</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+export default {
+  data() {
+    return {
+      curIndex: 1,
+      pageSize: 15,
+      options: [],
+      value1: [],
+      list: [],
+      form: {},
+      form_all: {
+        all_all: '全部',
+        all_bizId: '业务线',
+        all_projectType: '项目类型',
+        all_priority: '优先级',
+        all_PersonInCharge: '负责人',
+        all_Founder: '创建人'
+      },
+      loading: false,
+      dialogFormVisible: false,
+      formLabelWidth: '100px',
+      currentPage: 0,
+      gridData: [{
+        date: '2016-05-02',
+        name: '王小虎',
+        address: '上海市普陀区金沙江路 1518 弄'
+      }, {
+        date: '2016-05-03',
+        name: '王小虎',
+        address: '上海市普陀区金沙江路 1518 弄'
+      }],
+      tableData: [{
+        date: '2016-05-02',
+        teamName: 'p0',
+        address: '上海市普陀区金沙江路 1518 弄'
+      }, {
+        date: '2016-05-04',
+        teamName: 'p3',
+        address: '上海市普陀区金沙江路 1518 弄'
+      }, {
+        teamName: 'p8',
+        name: '王小虎',
+        address: '上海市普陀区金沙江路 1518 弄'
+      }, {
+        date: '2016-05-03',
+        teamName: 'p2',
+        address: '上海市普陀区金沙江路 1518 弄'
+      }],
+      options1: [{
+        teamName: '选项1',
+        label: '黄金糕'
+      }, {
+        teamName: '选项2',
+        label: '双皮奶'
+      }, {
+        teamName: '选项3',
+        label: '蚵仔煎'
+      }, {
+        value: '选项4',
+        label: '龙须面'
+      }, {
+        value: '选项5',
+        label: '北京烤系三星那些闹事你辛苦啦斯诺克选手内心鸭'
+      }],
+      items: [
+        { type: '' },
+        { type: 'success' },
+        { type: 'info' },
+        { type: 'danger' },
+        { type: 'warning' }
+      ],
+      value: '',
+      all_city_list: [{ value: 1, label: '秦志鹏' }, { value: 2, label: '汝瑞' }, { value: 3, label: '赵杰' }]
+    }
+  },
+  methods: {
+    handleCommand(command) {
+      console.log(command)
+      var isCommand = ''
+      switch (command.flag) {
+        case 1:
+          this.form_all.all_all = command.label
+          isCommand = command.label.value
+          break
+        case 2:
+          this.form_all.all_bizId = command.label
+          isCommand = command.label.value
+          break
+        case 3:
+          this.form_all.all_projectType = command.label
+          isCommand = command.label.value
+          break
+        case 4:
+          this.form_all.all_priority = command.label
+          isCommand = command.label.value
+          break
+      }
+      console.log(isCommand)
+    },
+    random(index) {
+      const number = Math.random() * 10
+      const a = Math.floor(number)
+      return this.items[a % 5].type
+    },
+    remoteMethod(query) {
+      if (query !== '') {
+        this.loading = true
+        setTimeout(() => {
+          this.loading = false
+          this.options = this.list.filter(item => {
+            return item.label.toLowerCase()
+              .indexOf(query.toLowerCase()) > -1
+          })
+        }, 200)
+      } else {
+        this.options = []
+      }
+    },
+    tableRowClassName({ row, rowIndex }) {
+      if (rowIndex === 1) {
+        return 'warning-row'
+      } else if (rowIndex === 3) {
+        return 'success-row'
+      }
+      return ''
+    },
+    link_project() {
+      window.open('http://localhost:9528/#/Platform/projectManage/projectViewDetails', '_blank')
+    },
+    query_Reset() { // 重置
+      this.$set(this.form_all, 'all_all', '全部')
+      this.$set(this.form_all, 'all_bizId', '业务线')
+      this.$set(this.form_all, 'all_projectType', '项目类型')
+      this.$set(this.form_all, 'all_priority', '优先级')
+      this.$set(this.form_all, 'all_PersonInCharge', '')
+      this.$set(this.form_all, 'all_Founder', '')
+    },
+    handleSizeChange(size) { //  分页
+      this.pageSize = size
+      // this.get_list()
+    },
+    handleCurrentChange(curIndex) { //  分页
+      this.curIndex = curIndex
+      // this.get_list()
+    }
+  }
+}
+</script>
+
+<style>
+  .footer { text-align: right; margin: 1%; background-color: #FFFFFF; border-radius: 8px; }
+
+  .bgborder { background-color: #FFFFFF; border-radius: 8px;}
+
+  .bgborder .el-input__inner { border: none; padding: 0px 50px 0px 0px;}
+
+  .bgborder .el-select .el-input .el-select__caret { color: #333333 !important; }
+
+  .bgborder .el-table .el-table__body tr:hover td { color: #409EFF; background: #EEF0F5; } /*hover时字体, 背景颜色*/
+
+  .bgborder .el-input__icon { width: 77px !important; }
+
+  .el-table .warning-row { background: oldlace; }
+
+  #basicName::-webkit-input-placeholder {
+    color: #333333;
+  }
+  .drop_down {
+     font-size: 13px;
+     color: #333333;
+     /* white-space: nowrap; */
+  }
+</style>

+ 647 - 0
src/views/projectManage/projectList/projectViewDetails.vue

@@ -0,0 +1,647 @@
+<template>
+  <div style="background-color:#F2F3F6;display:flex;align-items: center;justify-content: center;">
+    <el-container>
+      <el-header class="bgborder" style=" margin: 1%;height: 7vh;display: flex; justify-content: space-between; align-items: center;">
+        <el-tooltip class="item" effect="dark" content="爱啥啥" placement="bottom">
+          <span style="float: left;">项目名称:"cmckldmcklmdcklmdsklcmklmckldklcmdsdcklmdklcdsklcmkldsmcklm"</span>
+        </el-tooltip>
+        <span style="float: right;">
+          <el-dropdown>
+            <el-button size="mini" type="primary">未开始<i class="el-icon-arrow-down el-icon--right" /></el-button>
+            <el-dropdown-menu slot="dropdown">
+              <el-dropdown-item>进行中</el-dropdown-item>
+              <el-dropdown-item>已完成</el-dropdown-item>
+            </el-dropdown-menu>
+          </el-dropdown>
+          <el-dropdown>
+            <el-button size="mini" type="primary">新建<i class="el-icon-arrow-down el-icon--right" />
+            </el-button>
+            <el-dropdown-menu slot="dropdown">
+              <el-dropdown-item>新建需求</el-dropdown-item>
+              <el-dropdown-item>新建任务</el-dropdown-item>
+            </el-dropdown-menu>
+          </el-dropdown>
+        </span>
+      </el-header>
+      <el-container>
+        <el-aside class="bgborder" style=" margin:0 1%;minWidth: 55%;">
+          <div style="margin: 5%; font-weight: 600; white-space: nowrap;">
+            <b style="color: #409EFF;margin: 0 0.5%; font-size: 20px; ">I</b>数据统计
+            <el-button size="mini" type="primary" style="float: right;" @click="centerDialogVisible = true">删除项目</el-button>
+          </div>
+          <div style="display: flex; justify-content: space-between; align-items: center;">
+            <span style="text-align: center; margin-left: 10%">
+              <p>需求数量</p>
+              <p style="font-size: 44px;">0</p>
+              <p>
+                <el-button size="mini" type="primary">提需求</el-button>
+              </p>
+            </span>
+            <span style="text-align: center;">
+              <p>任务数量</p>
+              <p style="font-size: 44px;">0</p>
+              <p>
+                <el-button size="mini" type="primary">建任务</el-button>
+              </p>
+            </span>
+            <span style="text-align: center;margin-right:10%;">
+              <p>Bug数量</p>
+              <p style="font-size: 44px;">0</p>
+              <p>
+                <el-button size="mini" type="primary">提bug</el-button>
+              </p>
+            </span>
+          </div>
+        </el-aside>
+        <el-container>
+          <el-main class="bgborder" style="margin: 0 2.1% 0 0;min-height: 50vh;">
+            <div style="margin: 2.5%; font-weight: 600; white-space: nowrap;">
+              <b style="color: #409EFF;margin: 0 0.5%; font-size: 20px; ">I</b>基础信息
+            </div>
+            <el-form
+              label-position="left"
+              label-width="100px"
+              style="margin: 0 8%"
+              :model="formLabelAlign"
+            >
+              <el-row :gutter="20">
+                <el-col :span="12">
+                  <el-form-item label="项目类型:">
+                    <div class="grid-content bg-purple">1</div>
+                  </el-form-item>
+                </el-col>
+                <el-col :span="12" :push="7">
+                  <el-button
+                    size="mini"
+                    type="primary"
+                    @click="project_modifica(formLabelAlign.describe)"
+                  >修改</el-button>
+                </el-col>
+              </el-row>
+              <el-row :gutter="20">
+                <el-col :span="12">
+                  <el-form-item label="业务线:">
+                    <div class="grid-content bg-purple">1</div>
+                  </el-form-item>
+                </el-col>
+                <el-col :span="12">
+                  <el-form-item label="优先级:">
+                    <div class="grid-content bg-purple">2</div>
+                  </el-form-item>
+                </el-col>
+              </el-row>
+              <el-row :gutter="20">
+                <el-col :span="12">
+                  <el-form-item label="项目负责人:">
+                    <div class="grid-content bg-purple">1</div>
+                  </el-form-item>
+                </el-col>
+                <el-col :span="12">
+                  <el-form-item label="产品负责人:">
+                    <div class="grid-content bg-purple">2</div>
+                  </el-form-item>
+                </el-col>
+              </el-row>
+              <el-row :gutter="20">
+                <el-col :span="12">
+                  <el-form-item label="开发负责人:">
+                    <div class="grid-content bg-purple">1</div>
+                  </el-form-item>
+                </el-col>
+                <el-col :span="12">
+                  <el-form-item label="测试负责人:">
+                    <div class="grid-content bg-purple">2</div>
+                  </el-form-item>
+                </el-col>
+              </el-row>
+              <el-row :gutter="20">
+                <el-col :span="24">
+                  <el-form-item label="项目描述:">
+                    <el-input
+                      v-show="describe"
+                      ref="describe"
+                      v-model="formLabelAlign.describe"
+                      rows="3"
+                      type="textarea"
+                      placeholder="请输入内容"
+                      show-word-limit
+                      @blur="blur_describe(formLabelAlign.describe)"
+                    />
+                    <span v-show="describe1">{{ formLabelAlign.describe }}</span>
+                  </el-form-item>
+                </el-col>
+              </el-row>
+            </el-form>
+          </el-main>
+        </el-container>
+      </el-container>
+      <el-header class="bgborder" style="margin: 1%;min-height: 70vh;">
+        <el-tabs tab-position="top" @tab-click="handleClick">
+          <el-tab-pane label="项目总目标" style="position: relative;">
+            <div v-show="Addition" class="test">您还没有设定目标请<el-button type="text" @click="ImmediateAddition">立即添加</el-button></div>
+            <div v-show="Addition1">
+
+              <el-input ref="textarea" v-model="textarea" rows="10" type="textarea" placeholder="请输入内容" show-word-limit style="margin: 5% 0;" @blur="blur_textarea(textarea)" />
+            </div>
+            <div v-show="Addition2">
+              <el-row :gutter="20">
+                <el-col :span="24" :push="22" style="margin-bottom: 1.5%;">
+                  <el-button size="mini" type="primary" @click="ImmediateAddition">编辑</el-button>
+                </el-col>
+              </el-row>
+              {{ textarea }}
+            </div>
+          </el-tab-pane>
+          <el-tab-pane label="项目里程碑" style="overflow: auto;width: 100%;">
+            <div>
+              <el-divider style="position: absolute;" content-position="right">
+                <el-tooltip class="item" effect="dark" content="温馨提示:点击添加可以新建里程碑" placement="bottom-end">
+                  <el-button style="z-index: 999999;" size="mini" type="primary" icon="el-icon-plus" circle @click="dialogFormVisible = true" />
+                </el-tooltip>
+              </el-divider>
+              <ul class="time-horizontal" style="margin-top:15%;">
+                <li v-for="(item, index) in project_Milepost" :key="index">
+                  <i>
+                    <div>
+                      <el-popover class="popover" placement="top" width="200" trigger="click" style="border-radius: 10px;">
+                        <p style="text-align: center">
+                          <el-button size="mini">删除</el-button>
+                          <el-button size="mini" type="primary" @click="dialogFormVisible = true">编辑</el-button>
+                        </p>
+                        <b slot="reference">一&nbsp;</b>
+                      </el-popover>
+                    </div>
+                  </i>
+                  <div>
+                    {{ item.name }}
+                    <br>
+                    {{ item.date }}
+                  </div>
+                  <p>{{ item.code }}</p>
+                </li>
+              </ul>
+            </div>
+          </el-tab-pane>
+        </el-tabs>
+      </el-header>
+      <el-container>
+        <el-aside class="bgborder" style="margin:0 1%;">
+          <div style="margin: 5%; font-weight: 600; white-space: nowrap;">
+            <b style="color: #409EFF;margin: 0 0.5%; font-size: 20px; ">I</b>需求列表
+          </div>
+          <div class="aside">全部任务</div>
+          <div class="aside" @click="show2 = !show2">归属需求任务</div>
+          <transition name="el-zoom-in-top">
+            <div v-show="show2" class="transition-box">
+              <el-table :data="tableData" style="width: 100%;" size="mini" :header-cell-style="{ background: '#6AB4FF', color: '#FFFFFF' }" show-overflow-tooltip="true" :row-class-name="tableRowClassName">
+                <el-table-column label="需求名称" min-width="100" align="center">
+                  <template slot-scope="scope">
+                    <el-tag size="mini" :type="random(scope.row)" effect="dark">{{ scope.row.teamName }}</el-tag>
+                  </template>
+                </el-table-column>
+                <el-table-column label="PM" min-width="100" align="center" show-overflow-tooltip>
+                  <template slot-scope="scope">{{ scope.row.address }}</template>
+                </el-table-column>
+                <el-table-column label="状态" min-width="100" align="center">
+                  <template slot-scope="scope">{{ scope.row.teamName }}</template>
+                </el-table-column>
+              </el-table>
+            </div>
+          </transition>
+          <div class="aside">
+            无归属需求任务
+            <el-tooltip
+              class="item"
+              effect="dark"
+              content="点击“无归属需求的任务”,右边任务列表区域展示当前项目下所有无归属需求的任务。"
+              placement="bottom"
+            >
+              <i style="color: red;" class="el-icon-warning-outline" />
+            </el-tooltip>
+          </div>
+        </el-aside>
+        <el-container>
+          <el-main class="bgborder" style=" margin: 0 1.3% 0 0;min-height: 50vh;">
+            <div style="margin: 2.5%; font-weight: 600; white-space: nowrap;">
+              <b style="color: #409EFF;margin: 0 0.5%; font-size: 20px; ">I</b>任务列表
+            </div>
+            <el-table
+              :data="tableData"
+              style="width: 100%;"
+              size="mini"
+              :header-cell-style="{ background: '#6AB4FF', color: '#FFFFFF' }"
+              show-overflow-tooltip="true"
+              :row-class-name="tableRowClassName"
+            >
+              <el-table-column label="任务名称" min-width="100" align="center" show-overflow-tooltip>
+                <template slot-scope="scope">
+                  <el-tag
+                    size="mini"
+                    :type="random(scope.row)"
+                    effect="dark"
+                  >{{ scope.row.teamName }}</el-tag>
+                </template>
+              </el-table-column>
+              <el-table-column label="所属需求" min-width="100" align="center">
+                <template slot-scope="scope">{{ scope.row.address }}</template>
+              </el-table-column>
+              <el-table-column label="状态" min-width="100" align="center">
+                <template slot-scope="scope">{{ scope.row.teamName }}</template>
+              </el-table-column>
+              <el-table-column label="任务健康状态" min-width="100" align="center">
+                <template slot-scope="scope">{{ scope.row.teamName }}</template>
+              </el-table-column>
+              <el-table-column label="开发负责人" min-width="100" align="center">
+                <template slot-scope="scope">{{ scope.row.teamName }}</template>
+              </el-table-column>
+              <el-table-column label="测试负责人" min-width="100" align="center">
+                <template slot-scope="scope">{{ scope.row.teamName }}</template>
+              </el-table-column>
+              <el-table-column label="任务进度" min-width="100" align="center">
+                <template slot-scope="scope">{{ scope.row.teamName }}</template>
+              </el-table-column>
+            </el-table>
+          </el-main>
+        </el-container>
+      </el-container>
+      <el-footer class="footer" style="display:flex;align-items: center;justify-content: flex-end;">
+        <el-pagination
+          background
+          :current-page="currentPage"
+          :page-sizes="[15, 20, 25, 30]"
+          :page-size="100"
+          layout="total, prev, pager, next, jumper"
+          :total="100"
+          @size-change="handleSizeChange"
+          @current-change="handleCurrentChange"
+        />
+      </el-footer>
+    </el-container>
+    <el-dialog :visible.sync="dialogFormVisible" class="dialog">
+      <div style="margin:0 0 2% 3%; font-weight: 600; white-space: nowrap;font-size: 20px;">
+        <b style="color: #409EFF;margin: 0 0.5%;">I</b>编辑里程碑
+      </div>
+      <el-form :model="form" label-position="right">
+        <el-form-item label="标题" :label-width="formLabelWidth1">
+          <el-input v-model="form.name" autocomplete="off" placeholder="请输入标题" />
+        </el-form-item>
+        <el-form-item label="时间" :label-width="formLabelWidth1">
+          <el-date-picker v-model="form.date" type="date" placeholder="请选择日期" />
+        </el-form-item>
+        <el-form-item label="详情" :label-width="formLabelWidth1">
+          <el-input
+            v-model="textarea"
+            rows="3"
+            maxlength="200"
+            type="textarea"
+            placeholder="请输入详情内容,详情内容不可超过200字符"
+            show-word-limit
+          />
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button @click="dialogFormVisible = false">取 消</el-button>
+        <el-button type="primary" @click="dialogFormVisible = false">确 定</el-button>
+      </div>
+    </el-dialog>
+    <el-dialog title="新建项目" :visible.sync="dialog_FormVisible" width="70%">
+      <el-form :model="form" label-position="left" style="margin: 0 3%;">
+        <el-form-item label="项目名称" :label-width="formLabelWidth">
+          <el-input v-model="form.name" autocomplete="off" placeholder="请输入项目名称" />
+        </el-form-item>
+        <div style="display: flex;">
+          <div style="flex; 1;">
+            <el-form-item label="项目类型" :label-width="formLabelWidth">
+              <el-select v-model="form.value" clearable placeholder="业务/产品" style="width: 100%">
+                <el-option v-for="item in options1" :key="item.value" :label="item.label" :value="item.value" />
+              </el-select>
+            </el-form-item>
+            <el-form-item label="业务线" :label-width="formLabelWidth">
+              <el-select v-model="form.value" clearable placeholder="请选择" style="width:20vw">
+                <el-option v-for="item in options1" :key="item.value" :label="item.label" :value="item.value" />
+              </el-select>
+            </el-form-item>
+            <el-form-item label="产品负责人" :label-width="formLabelWidth">
+              <el-select v-model="form.value1" filterable remote reserve-keyword :remote-method="remoteMethod" :loading="loading" clearable placeholder="请输入姓名或邮箱前缀" style="width: 100%">
+                <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value" />
+              </el-select>
+            </el-form-item>
+            <el-form-item label="测试负责人" :label-width="formLabelWidth">
+              <el-select v-model="form.value1" filterable remote reserve-keyword :remote-method="remoteMethod" :loading="loading" clearable placeholder="请输入姓名或邮箱前缀" style="width: 100%">
+                <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value" />
+              </el-select>
+            </el-form-item>
+          </div>
+          <div style="flex; 1; margin: 0 0 0 auto;">
+            <el-form-item label="优先级" :label-width="formLabelWidth">
+              <el-select v-model="form.value" clearable placeholder="请选择" style="width:20vw">
+                <el-option v-for="item in options1" :key="item.value" :label="item.label" :value="item.value" />
+              </el-select>
+            </el-form-item>
+            <el-form-item label="项目负责人" :label-width="formLabelWidth">
+              <el-select v-model="form.value1" filterable remote reserve-keyword :remote-method="remoteMethod" :loading="loading" clearable placeholder="请输入姓名或邮箱前缀" style="width: 100%">
+                <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value" />
+              </el-select>
+            </el-form-item>
+            <el-form-item label="开发负责人" :label-width="formLabelWidth">
+              <el-select v-model="form.value1" filterable remote reserve-keyword :remote-method="remoteMethod" :loading="loading" clearable placeholder="请输入姓名或邮箱前缀" style="width: 100%">
+                <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value" />
+              </el-select>
+            </el-form-item>
+          </div>
+        </div>
+        <el-form-item label="项目描述" :label-width="formLabelWidth">
+          <el-input v-model="form.textarea" type="textarea" placeholder="请输入" show-word-limit />
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button @click="dialog_FormVisible = false">取 消</el-button>
+        <el-button type="primary" @click="dialog_FormVisible = false">创 建</el-button>
+      </div>
+    </el-dialog>
+    <el-dialog :visible.sync="centerDialogVisible" width="30%" center>
+      <div align="center">确定要删除此项目吗?</div>
+      <spn slot="footer" class="dialog-footer">
+        <el-button @click="centerDialogVisible = false">取 消</el-button>
+        <el-button type="primary" @click="centerDialogVisible = false">确 定</el-button>
+      </spn>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+export default {
+  data() {
+    return {
+      Addition: false,
+      Addition1: false,
+      Addition2: false,
+      textarea: '', // 项目总目标
+      total: 0,
+      tableData: [],
+      formLabelAlign: {
+        describe: ''
+      },
+      show2: true,
+      describe: false,
+      describe1: false,
+      dialogFormVisible: false,
+      dialog_FormVisible: false,
+      centerDialogVisible: false,
+      formLabelWidth: '120px',
+      form: {
+        name: '',
+        region: '',
+        date1: '',
+        date2: '',
+        delivery: false,
+        type: [],
+        resource: '',
+        desc: ''
+      },
+      formLabelWidth1: '60px',
+      project_Milepost: [
+        {
+          name: '第一阶段',
+          date: '2019/12/06',
+          code: '你丹江口市内存卡就是你的错'
+        },
+        {
+          name: '第一阶段',
+          date: '2019/12/06',
+          code: '你丹江口市内存卡就是你的错'
+        },
+        {
+          name: '第一阶段',
+          date: '2019/12/06',
+          code: '你丹江口市内存卡就是你的错'
+        },
+        {
+          name: '第一阶段',
+          date: '2019/12/06',
+          code: '你丹江口市内存卡就是你的错'
+        },
+        {
+          name: '第一阶段',
+          date: '2019/12/06',
+          code: '你丹江口市内存卡就是你的错'
+        },
+        {
+          name: '第一阶段',
+          date: '2019/12/06',
+          code: '你丹江口市内存卡就是你的错'
+        },
+        {
+          name: '第一阶段',
+          date: '2019/12/06',
+          code: '你丹江口市内存卡就是你的错'
+        },
+        {
+          name: '第一阶段',
+          date: '2019/12/06',
+          code: '你丹江口市内存卡就是你的错'
+        },
+        {
+          name: '第一阶段',
+          date: '2019/12/06',
+          code: '你丹江口市内存卡就是你的错'
+        },
+        {
+          name: '第一阶段',
+          date: '2019/12/06',
+          code: '你丹江口市内存卡就是你的错'
+        },
+        {
+          name: '第一阶段',
+          date: '2019/12/06',
+          code: '你丹江口市内存卡就是你的错'
+        }
+      ]
+    }
+  },
+  created() {
+    this.get_list()
+  },
+  methods: {
+    get_list() {
+      if (this.textarea === '') {
+        this.Addition = true
+      } else {
+        this.Addition2 = true
+      }
+      if (this.formLabelAlign.describe !== '') {
+        this.describe1 = true
+      } else {
+        this.describe = false
+      }
+    },
+    project_modifica(e) {
+      this.dialog_FormVisible = true
+      // this.describe = true
+      // this.describe1 = false
+      // this.$set(this.formLabelAlign, 'describe', e)
+      // setTimeout(() => {
+      //   this.$refs.describe.focus()
+      // }, 100)
+    },
+    blur_describe(e) {
+      this.describe = false
+      this.describe1 = true
+      this.$set(this.formLabelAlign, 'describe', e)
+    },
+    click_b() {
+      console.log('v')
+    },
+    handleClick(tab, event) {
+      console.log(tab, event)
+    },
+    tableRowClassName({ row, rowIndex }) {
+      if (rowIndex === 1) {
+        return 'warning-row'
+      } else if (rowIndex === 3) {
+        return 'success-row'
+      }
+      return ''
+    },
+
+    ImmediateAddition() { // 立即添加(编辑)
+      setTimeout(() => { this.$refs.textarea.focus() }, 100)
+      this.Addition = false
+      this.Addition1 = true
+      this.Addition2 = false
+    },
+    blur_textarea(e) { // 项目总目标失去焦点
+      if (e !== '') {
+        this.textarea = e
+        this.Addition2 = true
+        this.Addition1 = false
+        this.Addition = false
+      } else {
+        this.Addition2 = false
+        this.Addition1 = false
+        this.Addition = true
+      }
+    },
+    handleSizeChange(size) { //  分页
+      this.pageSize = size
+      // this.get_list()
+    },
+    handleCurrentChange(curIndex) { //  分页
+      this.curIndex = curIndex
+      // this.get_list()
+    }
+  }
+}
+</script>
+<style lang="stylus">
+.bgborder .el-tabs__nav-wrap::after {
+  background-color: #FFFFFF !important;
+}
+
+.bgborder {
+  background-color: #FFFFFF;
+  border-radius: 8px;
+}
+
+.footer {
+  text-align: right;
+  margin: 1%;
+  background-color: #FFFFFF;
+  border-radius: 8px;
+}
+
+.aside {
+  font-size: 14px;
+  margin: 5%;
+  cursor: pointer;
+}
+
+.aside:hover {
+  color: #409EFF;
+}
+
+.el-main {
+  padding: 0 !important;
+}
+
+.el-tooltip__popper {
+  max-width: 200px;
+}
+
+.test {
+  height: 50vh;
+  color: #666666;
+  font-size: 14px;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+}
+
+.time-horizontal {
+  list-style-type: none;
+  padding: 0px;
+  margin: 0px;
+  width: 100%;
+  height: 222px;
+  white-space: nowrap;
+}
+
+.dialog .el-dialog__header {
+  padding: 0;
+}
+
+.time-horizontal li {
+  display: inline-block;
+  position: relative;
+  text-align: center;
+  width: 25%;
+  padding-top: 7%;
+}
+
+.time-horizontal li i div {
+  position: absolute;
+  top: -10px;
+  left: 50%;
+  margin-left: -10px;
+  width: 20px;
+  height: 20px;
+}
+
+.time-horizontal li i div b {
+  display: inline-block;
+  cursor: pointer;
+  border: 2px solid #61D3B8;
+  border-radius: 50%;
+  background: #61D3B8;
+  color: #61D3B8;
+  z-index: 9999;
+  width: 20px;
+  height: 20px;
+}
+
+.time-horizontal li i:before {
+  content: '';
+  width: 0%;
+  text-align: center;
+  position: absolute;
+  top: -50%;
+  left: 49.3%;
+  height: 100%;
+  border: 1px dashed #BBBBBB;
+}
+
+.time-horizontal li div {
+  text-align: center;
+  width: 100%;
+  position: absolute;
+  bottom: 197%;
+}
+
+.el-divider--horizontal {
+  display: block;
+  height: 1px;
+  width: 100%;
+  position: absolute !important;
+  margin: 0 !important;
+}
+</style>

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

@@ -0,0 +1,3 @@
+<template>
+  <router-view />
+</template>

Kaikkia tiedostoja ei voida näyttää, sillä liian monta tiedostoa muuttui tässä diffissä