浏览代码

排期导出功能

qinzhipeng_v 5 年之前
父节点
当前提交
0e2dca2c68

+ 8 - 0
src/api/requirement.js

@@ -172,3 +172,11 @@ export function scheduleUnlockRequireSchedule(data, id) {
     data
   })
 }
+
+// 导出需求下排期
+export function scheduleDownLoadByRequireId(id) {
+  return request({
+    url: requestIp + '/schedule/downLoadByRequireId?id=' + id,
+    method: 'get'
+  })
+}

+ 8 - 0
src/api/taskIndex.js

@@ -217,3 +217,11 @@ export function scheduleUnlockTaskSchedule(data, id) {
     data
   })
 }
+
+// 导出任务下排期
+export function scheduleDownLoadByTaskId(id) {
+  return request({
+    url: TeamManagement + `/schedule/downLoadByTaskId?id=` + id,
+    method: 'get'
+  })
+}

+ 11 - 1
src/api/version.js

@@ -3,9 +3,19 @@ import { projectManagementUrl } from '@/apiConfig/api'
 
 const requestIp = projectManagementUrl
 
+// 版本页获取需求
 export function getVersionHomePageList(data) {
   return request({
-    url: requestIp + '/Version/versionHomePageList',
+    url: requestIp + '/Version/versionHomeRequireList',
+    method: 'post',
+    data
+  })
+}
+
+// 版本页获取任务
+export function getVersionHomeTaskList(data) {
+  return request({
+    url: requestIp + '/Version/versionHomeTaskList',
     method: 'post',
     data
   })

二进制
src/assets/ordinary.png


二进制
src/assets/紧急.png


+ 47 - 0
src/views/projectManage/components/export.vue

@@ -0,0 +1,47 @@
+<template>
+  <div align="left" class="Scheduling" @click="saveFile()"><div class="el-icon-download" /> 导出排期</div>
+</template>
+
+<script>
+import { scheduleDownLoadByRequireId } from '@/api/requirement.js'
+import { scheduleDownLoadByTaskId } from '@/api/taskIndex.js'
+export default {
+  props: {
+    id: { type: Number, required: true },
+    name: { type: String, required: true }
+  },
+  data() {
+    return {
+      data: ''
+    }
+  },
+  methods: {
+    async saveFile() {
+      this.name === '需求' ? this.data = await scheduleDownLoadByRequireId(this.id) : ''
+      this.name === '任务' ? this.data = await scheduleDownLoadByTaskId(this.id) : ''
+      this.exportRaw(this.data)
+    },
+    fakeClick(obj) {
+      var ev = document.createEvent('MouseEvents')
+      ev.initMouseEvent('click', true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null)
+      obj.dispatchEvent(ev)
+    },
+    exportRaw() {
+      var urlObject = window.URL || window.webkitURL || window
+      var export_blob = new Blob([this.data])
+      var save_link = document.createElementNS('http://www.w3.org/1999/xhtml', 'a')
+      save_link.href = urlObject.createObjectURL(export_blob)
+      save_link.download = this.name + this.id + '.txt'
+      this.fakeClick(save_link)
+    }
+  }
+}
+</script>
+
+<style scoped lang="scss">
+.Scheduling {
+  margin: 0px 20px 0px 0px;
+    color: #1890FF;
+    cursor: pointer;
+}
+</style>

+ 14 - 2
src/views/projectManage/requirement/list/create.vue

@@ -22,8 +22,8 @@
         <div style="flex; 1;">
           <el-form-item label="需求类型" prop="type">
             <el-radio-group v-model="form.type">
-              <el-radio :label="0">普通</el-radio>
-              <el-radio :label="1" style="margin-left:14px;">紧急</el-radio>
+              <el-radio :label="0">普通 <img class="imageWidthOne" :src="ordinary"></el-radio>
+              <el-radio :label="1">紧急 <img class="imageWidth" :src="urgentUrl"></el-radio>
             </el-radio-group>
           </el-form-item>
           <el-form-item label="优先级" prop="priority">
@@ -101,6 +101,8 @@
 <script>
 import { getMemberInfo, createRequirement, updateRequirement, showRequirementEnum, settingGetBizList, projectListProject } from '@/api/requirement.js'
 import { iterationList } from '@/api/requirement.js'
+import urgentUrl from '@/assets/紧急.png'
+import ordinary from '@/assets/ordinary.png'
 export default {
   props: {
     title: {
@@ -120,6 +122,8 @@ export default {
   },
   data() {
     return {
+      ordinary: ordinary,
+      urgentUrl: urgentUrl,
       all_bizId: '', // 业务线
       iterationList: [], // 所属迭代列表
       formBackgroungInfo: {
@@ -358,4 +362,12 @@ export default {
   left: 20px;
 }
 }
+.imageWidth {
+  width: 12px;
+  padding-bottom: 1px;
+}
+.imageWidthOne {
+   width: 10px;
+  padding-bottom: 1px;
+}
 </style>

+ 4 - 1
src/views/projectManage/requirement/requirementDetail.vue

@@ -128,6 +128,7 @@
               <div class="allTips">
                 <div v-if="BackToTheLatest" class="Scheduling" @click="GetRequireScheduleHistory"><i class="el-icon-refresh" /> 回到最新</div>
                 <div align="left" class="Scheduling" @click="scheduleHiHide"><div class="el-icon-document" /> 排期变更记录</div>
+                <download :id="requirementId" :name="'需求'" />
               </div>
             </div>
           </section>
@@ -281,6 +282,7 @@ import scheduleList from './components/scheduleList'
 import bugTableDialog from '@/views/projectManage/bugList/details/bugTableDialog' // 缺陷表格
 import schedule from '@/views/projectManage/schedule' // 排期锁定弹窗
 import urgent from '@/assets/urgent.png'
+import download from '@/views/projectManage/components/export.vue'
 export default {
   components: {
     searchPeople,
@@ -293,7 +295,8 @@ export default {
     dataStatistics,
     scheduleList,
     bugTableDialog,
-    schedule
+    schedule,
+    download
   },
   filters: {
     ellipsis(value, num) {

+ 4 - 1
src/views/projectManage/taskList/taskViewDetail.vue

@@ -139,6 +139,7 @@
                   <div v-show="BackToTheLatest === true" class="Scheduling" style="margin-right: 20px;" @click="clickAddScheduling()"><i class="el-icon-circle-plus-outline" /> 添加排期</div>
                 </div>
                 <div align="left" class="Scheduling" @click="scheduleHiHide"><div class="el-icon-document" /> 排期变更记录</div>
+                <download :id="taskId" :name="'任务'" />
               </div>
             </div>
           </section>
@@ -293,6 +294,7 @@ import taskDialog from '@/views/projectManage/taskList/dialog/taskDialog' // 任
 import bugTableDialog from '@/views/projectManage/bugList/details/bugTableDialog' // 缺陷表格
 import '@/styles/PublicStyle/index.scss'
 import schedule from '@/views/projectManage/schedule' // 排期锁定弹窗
+import download from '@/views/projectManage/components/export.vue'
 export default {
   components: {
     searchPeople,
@@ -309,7 +311,8 @@ export default {
     ClientReport,
     taskDialog,
     bugTableDialog,
-    schedule
+    schedule,
+    download
   },
   filters: {
     ellipsis(value, num) {

+ 45 - 5
src/views/projectManage/version/components/taskList.vue

@@ -67,6 +67,9 @@
           </el-select>
         </template>
       </el-table-column>
+      <el-table-column label="健康状态" width="200" align="center" show-overflow-tooltip>
+        <template slot-scope="scope">{{ scope.row.stageString }}</template>
+      </el-table-column>
       <el-table-column label="所属需求" width="200" align="center" show-overflow-tooltip>
         <template slot-scope="scope">{{ scope.row.requireName }}</template>
       </el-table-column>
@@ -79,12 +82,24 @@
       <el-table-column label="测试负责人" width="100" align="center" show-overflow-tooltip>
         <template slot-scope="scope">{{ scope.row.qaObject ? scope.row.qaObject.name : '' }}</template>
       </el-table-column>
-      <el-table-column label="任务进度" min-width="150" align="center">
+      <el-table-column label="任务进度" min-width="100" align="center">
         <template slot-scope="scope">
           <el-progress :percentage="Number(scope.row.rate && scope.row.rate.substring(0,4))" color="#409eff" />
         </template>
       </el-table-column>
     </el-table>
+    <div align="right">
+      <el-pagination
+        background
+        layout="total, sizes, prev, pager, next, jumper"
+        :current-page="searchForm.curIndex"
+        :page-size="searchForm.pageSize"
+        :page-sizes="[15,30,45]"
+        :total="total"
+        @size-change="handleSizeChange"
+        @current-change="handleCurrentChange"
+      />
+    </div>
     <TestReport v-if="dialogTestReport" ref="TestReport" />
     <DailyReport v-if="dialogDailyReport" ref="DailyReport" />
     <ClientReport v-if="dialogClientReport" ref="ClientReport" />
@@ -105,12 +120,12 @@ import '@/styles/PublicStyle/index.scss'
 import TestReport from '@/views/Platform/presentation/Templates/TestReport' // 提测
 import DailyReport from '@/views/Platform/presentation/Templates/DailyReport' // 日报
 import ClientReport from '@/views/Platform/presentation/Templates/ClientReport' // 准出
-import { taskList } from '@/api/projectIndex'
 import { taskUpdate } from '@/api/projectViewDetails'
 import { configShowTaskEnum } from '@/api/taskIndex'
 import scheduleList from './scheduleList'
 import modifySchedule from './modifySchedule'
 import taskDialog from '@/views/projectManage/taskList/dialog/taskDialog' // 任务状态修改(已上线/已提测/已准出)
+import { getVersionHomeTaskList } from '@/api/version.js'
 export default {
   components: {
     TestReport,
@@ -120,9 +135,19 @@ export default {
     taskDialog,
     modifySchedule
   },
+  props: {
+    searchForms: { type: Object, required: true }
+  },
   data() {
     return {
       imgUrl: imgUrl,
+      total: 0,
+      searchForm: {
+        clientType: null,
+        versionType: null,
+        curIndex: 1,
+        pageSize: 15
+      },
       tableList: [], // 排期bable验证
       changeData: new Map(),
       allChange: false, // 是否全展开
@@ -152,11 +177,16 @@ export default {
   },
   methods: {
     async get_allTask() { // 获取全部任务
-      const res = await taskList({
-        projectId: this.$route.query.id
+      const res = await getVersionHomeTaskList({
+        bizid: localStorage.getItem('bizId'),
+        curIndex: this.searchForm.curIndex,
+        pageSize: this.searchForm.pageSize,
+        versionType: this.searchForms.versionType,
+        clientType: this.searchForms.clientType
       })
       if (res.code === 200) {
-        this.all_task = res.data
+        this.all_task = res.data.list
+        this.total = res.data.total
       }
     },
     async getTaskStatus() { // 获取任务状态列表
@@ -271,6 +301,16 @@ export default {
     },
     link_task(id) { // 跳转到任务详情页
       this.$router.push({ name: '任务详情', query: { id: id }})
+    },
+    // 分页pageSize选择
+    handleSizeChange(pageSize) {
+      this.searchForm.pageSize = pageSize
+      this.get_allTask()
+    },
+    // 当前页选择
+    handleCurrentChange(currentPage) {
+      this.searchForm.curIndex = currentPage
+      this.get_allTask()
     }
   }
 }

+ 22 - 17
src/views/projectManage/version/list/index.vue

@@ -55,7 +55,7 @@
                   </el-table-column>
                   <el-table-column prop="requirementName" label="需求名称" min-width="33%">
                     <template v-slot="scope">
-                      <div class="biz-id">REQUIREMENT-{{ scope.row.requirementId }}</div>
+                      <div class="biz-id">REQUIREMENT-{{ scope.row.requirementId }}  <img v-if="scope.row.type === 1" :src="extraUrgent" style="padding: 0 10px;"></div>
                       <div>
                         <el-tooltip class="item" effect="dark" placement="bottom" :content="scope.row.requirementName" :disabled="scope.row.requirementName.length < 16">
                           <div style="cursor: pointer;" @click="getToRequirementDetails(scope.row.requirementId)">
@@ -107,7 +107,7 @@
             </el-row>
           </el-tab-pane>
           <el-tab-pane label="任务" name="second">
-            <tasks-list />
+            <tasks-list ref="tasklist" :search-forms="searchForm" />
           </el-tab-pane>
         </el-tabs>
       </div>
@@ -120,7 +120,7 @@ import TimeLine from './timeLine'
 import { getEvent } from '@/api/versionsCalendar'
 import { getVersionHomePageList, showAppClientEnum, showVersionEnum } from '@/api/version.js'
 import tasksList from '../components/taskList'
-
+import extraUrgent from '@/assets/extraUrgent.png'
 import VersionChart from '@/components/chart/index.vue'
 
 export default {
@@ -131,6 +131,7 @@ export default {
   },
   data() {
     return {
+      extraUrgent: extraUrgent,
       activeName: 'first', // 默认展示需求
       timeLineSteps: [],
       timeLineShow: false,
@@ -323,6 +324,11 @@ export default {
         return str.substring(0, 6) + '...'
       }
     },
+    handleClick(tab, event) {
+      console.log(tab, event)
+      tab.label === '任务' ? this.$refs.tasklist.get_allTask() : ''
+      tab.label === '需求' ? this.getVersionHomePageList() : ''
+    },
     getToRequirementDetails(id) {
       this.$router.push({ name: '需求详情', query: { id: id }})
     },
@@ -336,21 +342,20 @@ export default {
       this.searchForm.curIndex = currentPage
       this.getVersionHomePageList()
     },
-    getVersionHomePageList() {
+    async getVersionHomePageList() {
       this.loading = true
-      getVersionHomePageList(this.searchForm)
-        .then(res => {
-          this.getEvent(this.searchForm.versionType)
-          if (res.code === 200) {
-            this.createTaskOption(res.data.list)
-            this.createTaskHealthOption(res.data.list)
-            this.tableData = res.data.list
-            this.total = res.data.total
-          } else {
-            this.tableData = []
-          }
-          this.loading = false
-        })
+      this.searchForm.bizid = localStorage.getItem('bizId')
+      const res = await getVersionHomePageList(this.searchForm)
+      this.getEvent(this.searchForm.versionType)
+      if (res.code === 200) {
+        this.createTaskOption(res.data.list)
+        this.createTaskHealthOption(res.data.list)
+        this.tableData = res.data.list
+        this.total = res.data.total
+      } else {
+        this.tableData = []
+      }
+      this.loading = false
     },
     // 获取版本事件
     getEvent(id) {