qinzhipeng_v@didiglobal.com il y a 4 ans
Parent
commit
ee55e850bd

+ 87 - 3
src/views/projectManage/components/demand.vue

@@ -158,7 +158,7 @@
     <el-row>
       <span class="demandLayout">排期:</span>
       <span class="demandeta">{{ dataList.startTime || '' }} ~ {{ dataList.endTime }}</span>
-      <span style="color: #999999; font-size: 14px;">{{ '(' + dataList.scheduleTimeAnnotation.所有 + ')' }}</span>
+      <span v-if="dataList.scheduleTimeAnnotation" style="color: #999999; font-size: 14px;">{{ '(' + dataList.scheduleTimeAnnotation.所有 + ')' }}</span>
     </el-row>
     <el-row :gutter="20">
       <el-col v-for="(item, index) in scheduleDetail" :key="index" :span="12">
@@ -168,8 +168,31 @@
       </el-col>
     </el-row>
     <el-row>
-      <span class="demandLayout">预计上线版本:</span>
-      <span v-for="item in preOnlineVersion" :key="item" class="demandeta"> {{ item }} </span>
+      <span class="demandLayout">预计上线版本1111:</span>
+      <span v-if="preOnlineVersion && preOnlineVersion.length > 0">
+        <span v-for="item in dataList.preOnlineVersionInfos" :key="item.id">
+          <el-popover placement="top" width="200" trigger="click" class="test">
+            <div class="popover-title">版本时间轴</div>
+            <div class="timeline-soll">
+              <div v-for="(i, y) in timeline" :key="y" class="dateTime-flexStart">
+                <div style="width: 24px">
+                  <span class="circular" />
+                  <div v-show="y < timeline.length - 1" class="qz-timeline" />
+                </div>
+                <div class="qz-over-hidden">
+                  <el-tooltip v-if="i.name.length + i.version.length > 10" class="item" effect="dark" :content="i.name + i.version" placement="right">
+                    <span class="version">{{ i.name }}{{ i.version }}</span>
+                  </el-tooltip>
+                  <span v-else class="version">{{ i.name + i.version }}</span><br>
+                  <span class="createTime">{{ i.endTime }}</span>
+                </div>
+              </div>
+            </div>
+            <span slot="reference" class="onlineVersion" @click="getEventList(item.id)"> {{ item.appName + " " + item.version }} </span>
+          </el-popover>
+        </span>
+      </span>
+      <!-- <span v-for="item in preOnlineVersion" :key="item" class="demandeta"> {{ item }} </span> -->
       <el-tooltip class="item" effect="dark" content="版本有问题?点击触发重新计算!" placement="right">
         <svg-icon :icon-class="icon_problem ? 'problem1' : 'problem'" class="cursorPo" @mouseenter="icon_problem = true" @mouseleave="icon_problem = false" @click="requirementUpdatePreOnlineVersion" />
       </el-tooltip>
@@ -196,6 +219,7 @@ import { taskUpdates } from '@/api/projectViewDetails'
 import { memberQueryMemberInfoByIDAPorName } from '@/api/projectIndex'
 import schedule from '@/views/projectManage/schedule' // 排期锁定弹窗
 import taskDialog from '@/views/projectManage/taskList/dialog/taskDialog' // 任务状态修改(已上线/已提测/已准出)
+import { getEvent } from '@/api/versionsCalendar'
 export default {
   components: {
     scheduleList,
@@ -231,6 +255,7 @@ export default {
       showTaskDialog: false,
       taskScheduleList: [],
       scheduleList: [],
+      timeline: [],
       datas: [{
         date: '',
         type: '',
@@ -351,6 +376,12 @@ export default {
       }
     },
 
+    getEventList(ele) {
+      getEvent(ele).then(response => {
+        this.timeline = response.data
+      })
+    },
+
     async changeStatus(e) { // 状态改变
       if (e.status === 70 || e.status === 90 || e.status === 100) {
         this.taskIdObject = e
@@ -713,3 +744,56 @@ export default {
   color: #FFF;
 }
 </style>
+<style lang="scss" scoped>
+.version {
+  white-space: nowrap;
+  font-size: 12px;
+  color: #333333;
+}
+.qz-over-hidden {
+  width: 144px;
+  overflow: hidden;
+  text-overflow: ellipsis;
+}
+.createTime {
+  font-size: 12px;
+  color: #999999;
+}
+.timeline-soll {
+  width: 100%;
+  height: 245px;
+  overflow: hidden;
+  overflow-y: auto;
+  padding-right: 15px;
+}
+.qz-timeline {
+  width: 0px;
+  height: calc(100% + 8px);
+  border: 1px solid #E5E5E5;
+  position: relative;
+  top: -8px;
+  left: 8px;
+}
+.dateTime-flexStart {
+  display: flex;
+  justify-content: flex-start;
+  margin-bottom: 20px;
+
+}
+.circular {
+  width: 8px;
+  height: 8px;
+  margin: 5px;
+  display: inline-block;
+  border: 1px solid #60AEFF;
+  border-radius: 50%;
+}
+.popover-title {
+  font-size: 14px;
+  font-family: Microsoft Sans Serif;
+  font-weight: 400;
+  margin: 0 0 20px;
+  color: #333333;
+  text-align: center;
+}
+</style>

+ 107 - 68
src/views/projectManage/components/onlineTime.vue

@@ -1,45 +1,47 @@
 <template>
   <div class="bottom-detail">
-    <el-row>交付日期:{{ scheduleDetail.endTime }}</el-row>
-    <el-row class="date-laout">排期:{{ scheduleDetail.startTime | handlerDate }} ~ {{ scheduleDetail.endTime | handlerDate }} <span style="color: #999999; font-size: 14px;">{{ '(' + scheduleDetail.scheduleTimeAnnotation ? scheduleDetail.scheduleTimeAnnotation.所有 : '' + ')' }}</span></el-row>
+    <el-row>交付日期:{{ scheduleDetail.endTize }}</el-row>
+    <el-row class="date-laout">排期:{{ scheduleDetail.startTime | handlerDate }} ~ {{ scheduleDetail.endTime | handlerDate }}
+      <span v-if="scheduleDetail.scheduleTimeAnnotation" style="color: #999999; font-size: 14px;">
+        {{ '(' + scheduleDetail.scheduleTimeAnnotation.所有 + ')' }}
+      </span>
+    </el-row>
     <el-row>预计上线版本:
       <span v-if="scheduleDetail.preOnlineVersion && scheduleDetail.preOnlineVersion.length > 0">
-        <span v-for="item in scheduleDetail.preOnlineVersion" :key="item">{{ item }}</span>
+        <span v-for="item in scheduleDetail.preOnlineVersionInfos" :key="item.id">
+          <el-popover placement="top" width="200" trigger="click" class="test">
+            <div class="popover-title">版本时间轴</div>
+            <div class="timeline-soll">
+              <div v-for="(i, y) in timeline" :key="y" class="dateTime-flexStart">
+                <div style="width: 24px">
+                  <span class="circular" />
+                  <div v-show="y < timeline.length - 1" class="qz-timeline" />
+                </div>
+                <div class="qz-over-hidden">
+                  <el-tooltip v-if="i.name.length + i.version.length > 10" class="item" effect="dark" :content="i.name + i.version" placement="right">
+                    <span class="version">{{ i.name }}{{ i.version }}</span>
+                  </el-tooltip>
+                  <span v-else class="version">{{ i.name + i.version }}</span><br>
+                  <span class="createTime">{{ i.endTime }}</span>
+                </div>
+              </div>
+            </div>
+            <span slot="reference" class="onlineVersion" @click="getEventList(item.id)"> {{ item.appName + " " + item.version }} </span>
+          </el-popover>
+        </span>
       </span>
-      <el-popover placement="top" title="版本时间轴" width="200" trigger="click">
-        <el-timeline>
-          <el-timeline-item v-for="(activity, index) in activities" :key="index" :icon="activity.icon" :type="activity.type" :color="activity.color" :size="activity.size">
-            {{ activity.content }}
-          </el-timeline-item>
-        </el-timeline>
-        <span slot="reference"> 猜猜猜 </span>
-      </el-popover>
       <el-tooltip class="item" effect="dark" content="版本有问题?点击触发重新计算!" placement="right">
         <svg-icon :icon-class="icon_problem ? 'problem1' : 'problem'" style="cursor: pointer;" @mouseenter="icon_problem = true" @mouseleave="icon_problem = false" @click="taskUpdatePreOnlineVersion" />
       </el-tooltip>
     </el-row>
-    <div class="border-top">
-      <el-divider />
-      <el-form ref="scheduleDetail" :inline="true" :model="form_query" class="Layout_space_start" label-position="left" label-width="110px">
-        <el-form-item label="实际提测时间">
-          <el-date-picker v-model="form_query.launchTestRealTime" type="date" :clearable="false" placeholder="请选择" format="yyyy.MM.dd" value-format="yyyy-MM-dd" style="width: 100%;" size="small" @change="setChangeArea(2)" />
-        </el-form-item>
-        <el-form-item label="实际准出时间:">
-          <el-date-picker v-model="form_query.testFinishRealTime" type="date" :clearable="false" placeholder="请选择" format="yyyy.MM.dd" value-format="yyyy-MM-dd" style="width: 100%;" size="small" @change="setChangeArea(2)" />
-        </el-form-item>
-        <el-form-item label="实际上线时间:">
-          <el-date-picker v-model="form_query.onlineRealTime" type="date" :clearable="false" placeholder="请选择" format="yyyy.MM.dd" value-format="yyyy-MM-dd" style="width: 100%;" size="small" @change="setChangeArea(2)" />
-        </el-form-item>
-      </el-form>
-    </div>
   </div>
 </template>
 
 <script>
 import { taskUpdatePreOnlineVersion } from '@/api/taskIndex.js'
 import { analysisBizId_id } from '@/utils/crypto-js.js'
+import { getEvent } from '@/api/versionsCalendar'
 import moment from 'moment'
-import { taskGet } from '@/api/taskIndex'
 export default {
   filters: {
     handlerDate(val) {
@@ -53,24 +55,23 @@ export default {
     return {
       scheduleDetail: this.data,
       icon_problem: false,
-      form_query: {
-        launchTestRealTime: '',
-        testFinishRealTime: '',
-        onlineRealTime: ''
-      },
+      timeline: [],
       activities: [{
-        content: '支持使用图标 2018-04-03',
-        size: 'large',
-        type: 'primary',
-        icon: 'el-icon-more'
+        name: '开发',
+        endTime: '2018-04-03',
+        version: 'large'
       }, {
-        content: '支持自定义颜色 2018-04-03',
-        color: '#0bbd87'
+        name: '开发',
+        endTime: '2018-04-03',
+        version: 'large'
       }, {
-        content: '支持自定义尺寸 2018-04-03',
-        size: 'large'
+        name: '开发',
+        endTime: '2018-04-03',
+        version: 'large'
       }, {
-        content: '默认样式的节点 2018-04-03'
+        name: '开发',
+        endTime: '2018-04-03',
+        version: 'large'
       }]
     }
   },
@@ -82,18 +83,7 @@ export default {
       deep: true
     }
   },
-  created() {
-    this.getQueryData()
-  },
   methods: {
-    async getQueryData() {
-      const bizId_id = analysisBizId_id(this.$route.query.bizId_id)
-      const res = await taskGet(bizId_id[1])
-      if (res.code === 200) {
-        this.form_query = res.data
-        // this.form_query.testFinishRealTime = '2021.01.19'
-      }
-    },
     async taskUpdatePreOnlineVersion() {
       const bizId_id = analysisBizId_id(this.$route.query.bizId_id)
       const res = await taskUpdatePreOnlineVersion(bizId_id[0])
@@ -102,8 +92,10 @@ export default {
         this.$message({ message: '预计上线版本重新计算中,请稍后刷新页面查看!', type: 'success', offset: 150 })
       }
     },
-    setChangeArea(e) {
-      console.log(e, 'cs')
+    getEventList(ele) {
+      getEvent(ele).then(response => {
+        this.timeline = response.data
+      })
     }
   }
 
@@ -111,33 +103,80 @@ export default {
 </script>
 
 <style lang="scss" scoped>
-.Layout_space_start {
-  display: flex;
-  justify-content: flex-start;
-}
 .bottom-detail {
   font-size: 14px;
   width: calc(100% - 40px);
   padding-top: 20px;
 }
+
 .el-timeline {
   margin: 0;
   font-size: 14px;
   list-style: none;
   padding: 0px;
 }
-.border-top {
-  >>>.el-form-item {
-    margin: 0 30px  10px 0;
-  }
-  >>>.el-divider--horizontal {
-    display: block;
-    height: 1px;
-    width: 100%;
-    margin: 10px 0;
-  }
-}
 .date-laout {
   margin: 15px 0;
 }
+.onlineVersion:hover {
+  cursor: pointer;
+  color: #409eff;
+}
+.popover-title {
+  font-size: 14px;
+  font-family: Microsoft Sans Serif;
+  font-weight: 400;
+  margin: 0 0 20px;
+  color: #333333;
+  text-align: center;
+}
+.el-timeline-item__content {
+  font-size: 12px;
+  color: #303133;
+}
+.version {
+  white-space: nowrap;
+  font-size: 12px;
+  color: #333333;
+}
+.qz-over-hidden {
+  width: 144px;
+  overflow: hidden;
+  text-overflow: ellipsis;
+}
+.createTime {
+  font-size: 12px;
+  color: #999999;
+}
+.timeline-soll {
+  width: 100%;
+  height: 245px;
+  overflow: hidden;
+  overflow-y: auto;
+  padding-right: 15px;
+}
+.qz-timeline {
+  width: 0px;
+  height: calc(100% + 8px);
+  border: 1px solid #E5E5E5;
+  position: relative;
+  top: -8px;
+  left: 8px;
+}
+</style>
+<style lang="scss" scoped>
+.dateTime-flexStart {
+  display: flex;
+  justify-content: flex-start;
+  margin-bottom: 20px;
+
+}
+.circular {
+  width: 8px;
+  height: 8px;
+  margin: 5px;
+  display: inline-block;
+  border: 1px solid #60AEFF;
+  border-radius: 50%;
+}
 </style>

+ 34 - 2
src/views/projectManage/taskList/taskViewDetail.vue

@@ -230,6 +230,20 @@
           <el-container>
             <el-main style="padding: 0;">
               <schedule-list :id="taskId" ref="taskSchedule" :showunlock="showunlock" :type-list="taskScheduleEvent" class-name="white" @updataData="getSchedule" />
+              <div v-if="form_query.status >= 70" class="border-top">
+                <el-divider />
+                <el-form :inline="true" :model="form_query" class="Layout_space_start" label-position="left" label-width="110px">
+                  <el-form-item v-if="form_query.status >= 70" label="实际提测时间">
+                    <el-date-picker v-model="form_query.launchTestRealTime" type="date" :clearable="false" placeholder="请选择" format="yyyy.MM.dd" value-format="yyyy-MM-dd" style="width: 100%;" size="small" @change="setChangeArea(2)" />
+                  </el-form-item>
+                  <el-form-item v-if="form_query.status >= 90" label="实际准出时间:">
+                    <el-date-picker v-model="form_query.testFinishRealTime" type="date" :clearable="false" placeholder="请选择" format="yyyy.MM.dd" value-format="yyyy-MM-dd" style="width: 100%;" size="small" @change="setChangeArea(2)" />
+                  </el-form-item>
+                  <el-form-item v-if="form_query.status >= 100" label="实际上线时间:">
+                    <el-date-picker v-model="form_query.onlineRealTime" type="date" :clearable="false" placeholder="请选择" format="yyyy.MM.dd" value-format="yyyy-MM-dd" style="width: 100%;" size="small" @change="setChangeArea(2)" />
+                  </el-form-item>
+                </el-form>
+              </div>
             </el-main>
             <el-aside v-if="lockHide" class="SchedulingAside">
               <div v-for="(item, index) in SchedulingContent" :key="index" class="SchedulingDiv" @click="clickScheduling(item)">
@@ -324,7 +338,6 @@
 
       <!-- 发布 -->
       <el-container v-if="activeName === '6'" class="is-vertical">
-        <!-- <section class="main-section contain"> -->
         <publishTask
           v-if="loaded"
           :task-id="form_query.id"
@@ -332,7 +345,6 @@
           :user-names="userNames"
           :user-information="userInformation"
         />
-        <!-- </section> -->
       </el-container>
       <!-- 发布 -->
 
@@ -629,6 +641,14 @@ export default {
       this.lockHide = false
       this.$refs.taskSchedule.listByTask(this.taskId)
     },
+    async setChangeArea(e) {
+      const user = { name: localStorage.getItem('username'), ename: localStorage.getItem('realname'), id: '' }
+      const taskInfoDO = this.form_query
+      const resTask = await taskUpdate({ taskInfoDO, user })
+      if (resTask.code === 200) {
+        this.$message({ message: '修改成功', type: 'success', offset: 150 })
+      }
+    },
     changeSchedule() { // 修改锁定状态
       if (this.isParentRequireScheduleLocked === 1) {
         this.$message({ message: '无法解锁,请先变更归属需求的排期状态为未锁定状态!', type: 'error', duration: 3000, offset: 150 })
@@ -920,6 +940,18 @@ export default {
 }
 </script>
 <style scoped lang="scss">
+.border-top {
+  margin: 0 20px;
+  >>>.el-form-item {
+    margin: 0 30px  10px 0;
+  }
+  >>>.el-divider--horizontal {
+    display: block;
+    height: 1px;
+    width: 100%;
+    margin: 10px 0;
+  }
+}
 @import '@/styles/detail-pages.scss';
 /deep/.el-button {
   cursor: pointer;