Răsfoiți Sursa

优化需求列表

qinzhipeng_v 5 ani în urmă
părinte
comite
e8b48ae3ce

+ 44 - 0
src/api/requirement.js

@@ -230,3 +230,47 @@ export function settingQueryBizRqmtOrntList(id) {
     method: 'get'
   })
 }
+
+// 获取筛选项list
+export function filtergetFilterList(data) {
+  return request({
+    url: requestIp + `/filter/getFilterList`,
+    method: 'post',
+    data
+  })
+}
+
+// 删除筛选项
+export function filterDeleteFilter(data) {
+  return request({
+    url: requestIp + `/filter/deleteFilter`,
+    method: 'post',
+    data
+  })
+}
+
+// 更新筛选项
+export function filterUpdateFilter(data) {
+  return request({
+    url: requestIp + `/filter/updateFilter`,
+    method: 'post',
+    data
+  })
+}
+
+// 新建筛选项
+export function filterCreateFilter(data) {
+  return request({
+    url: requestIp + `/filter/createFilter`,
+    method: 'post',
+    data
+  })
+}
+
+// 获取单个筛选项
+export function filterGetFilter(id) {
+  return request({
+    url: requestIp + `/filter/getFilter?id=${id}`,
+    method: 'get'
+  })
+}

+ 194 - 0
src/views/projectManage/components/filterList.vue

@@ -0,0 +1,194 @@
+<template>
+  <div v-if="show" class="filterList">
+    <el-table
+      :data="filterList"
+      style="width: 100%"
+      height="288"
+      border
+      :header-cell-style="{background:'#EBEEF5'}"
+    >
+      <el-table-column
+        fixed
+        prop="name"
+        label="过滤器名称"
+      >
+        <template slot-scope="scope">
+          <el-row>
+            <el-col v-show="scope.row.showEdit" :span="22">
+              <input
+                :ref="'input'+scope.row.index"
+                v-model="filterList[scope.row.index].name"
+                v-focus="focusState"
+                autofocus
+                placeholder="请输入过滤器名称"
+                @keyup.enter="updateFilter(scope.row,true)"
+                @blur="updateFilter(scope.row)"
+              >
+              <i class="el-icon-edit" @click.stop="cancel(scope.row)" />
+            </el-col>
+            <el-col v-if="!scope.row.showEdit" :span="22">
+              <span class="item-name">{{ scope.row.name }}</span>
+              <i class="el-icon-edit" @click.stop="editFilter(scope.row)" />
+            </el-col>
+          </el-row>
+        </template>
+      </el-table-column>
+      <el-table-column
+        fixed="right"
+        align="center"
+        label="操作"
+        width="80"
+      >
+        <template slot-scope="scope">
+          <i class="el-icon-delete" @click="deleteFilter(scope.row)" />
+        </template>
+      </el-table-column>
+    </el-table>
+    <el-col :span="24">
+      <div align="right">
+        <el-pagination
+          :page-sizes="[5, 10, 15, total]"
+          :current-page="curIndex"
+          :page-size="pageSize"
+          background
+          layout="total, prev, pager, next, jumper"
+          :total="total"
+          @size-change="handleSizeChange"
+          @current-change="handleCurrentChange"
+        />
+      </div>
+    </el-col>
+  </div>
+</template>
+<script>
+import { filterDeleteFilter, filterUpdateFilter, filtergetFilterList } from '@/api/requirement.js'
+import { deepClone } from '@/utils/global'
+export default {
+  directives: {
+    focus: {
+      update: function(el, { value }) {
+        if (value) {
+          el.focus()
+        }
+      }
+    }
+  },
+  props: {
+    showFilter: {
+      type: Boolean,
+      default: false,
+      required: true
+    }
+  },
+  data() {
+    return {
+      focusState: false,
+      show: this.showFilter,
+      filterList: [],
+      copyFilterList: [],
+      total: 0,
+      curIndex: 1,
+      pageSize: 5,
+      showEdit: false,
+      filterName: '', // 当前修改的过滤器名称
+      isControl: NaN
+    }
+  },
+  watch: {
+    showFilter(newV) {
+      this.show = newV
+      this.getFilterList()
+    }
+  },
+  created() {
+    this.getFilterList()
+  },
+  methods: {
+    async getFilterList() { // 获取过滤器列表
+      const params = {
+        pageSize: this.pageSize,
+        curIndex: this.curIndex,
+        bizId: Number(localStorage.getItem('bizId')),
+        filterType: 3
+      }
+      const res = await filtergetFilterList(params)
+      if (res.code === 200) {
+        this.total = res.total
+        this.filterList = res.data.map((item, key) => {
+          item.showEdit = false
+          item.index = key
+          return item
+        })
+        this.copyFilterList = deepClone(this.filterList)
+      }
+    },
+    editFilter(e) {
+      this.isControl = e.index
+      this.focusState = true
+      this.$set(this.filterList[e.index], 'showEdit', true)
+    },
+    cancel(e) {
+      this.$set(this.filterList[e.index], 'showEdit', false)
+      this.$set(this.filterList[e.index], 'name', this.copyFilterList[e.index].name)
+    },
+    async deleteFilter(item) {
+      this.confirmDelete(item.id)
+    },
+
+    async confirmDelete(id) { // 删除筛选项
+      console.log(id, 'XSAXAS')
+      const res = await filterDeleteFilter({ 'id': id })
+      this.$emit('deleteFilter')
+      if (res.code === 200) {
+        this.$message({ showClose: true, message: '删除成功', type: 'success' })
+      }
+      this.getFilterList()
+    },
+
+    async updateFilter(e, keyup = null) { // 修改筛选项
+      if (this.isControl !== e.index) { return false }
+      if (keyup) {
+        this.$set(this.filterList[e.index], 'showEdit', false)
+        return false
+      }
+      if (e.name === null || e.name.replace(/\s+/g, '') === '') {
+        this.$message({
+          showClose: true,
+          message: '请填写名称',
+          type: 'error'
+        })
+        this.$set(this.filterList[e.index], 'name', this.copyFilterList[e.index].name)
+        return false
+      }
+      const res = await filterUpdateFilter({ id: e.id, name: e.name, filterType: 3, creator: localStorage.getItem('username') })
+      if (res.code === 200) {
+        this.$message({ showClose: true, message: '修改名称成功', type: 'success' })
+        this.getFilterList()
+      }
+      this.$set(this.filterList[e.index], 'showEdit', false)
+      this.$emit('deleteFilter')
+    },
+
+    handleSizeChange(e) {
+      this.pageSize = e
+    },
+    handleCurrentChange(e) {
+      this.curIndex = e
+      this.getFilterList()
+    }
+  }
+}
+</script>
+
+<style scoped lang="scss">
+.el-icon-edit {
+  margin-left: 10px;
+}
+i {
+  cursor: pointer;
+}
+input {
+  outline: none;
+  color: #606266;
+}
+</style>

+ 18 - 20
src/views/projectManage/iteration/components/requiredTable.vue

@@ -67,11 +67,11 @@
       show-overflow-tooltip="true"
       @selection-change="handleSelectionChange"
     >
-      <el-table-column width="35">
+      <el-table-column fixed width="35">
         <img style="display: inline-block; width: 8px; vertical-align: middle;" :src="image_role">
       </el-table-column>
-      <el-table-column type="selection" min-width="40" align="center" />
-      <el-table-column type="expand" width="40">
+      <el-table-column type="selection" fixed min-width="40" align="center" />
+      <el-table-column type="expand" fixed width="40">
         <template slot="header">
           <div class="expand"><i v-show="!allChange" class="el-icon-plus" @click="expandAll(true)" /></div>
           <div class="expand"><i v-show="allChange" class="el-icon-minus" @click="expandAll(false)" /></div>
@@ -80,7 +80,7 @@
           <iterationTable :id="props.row.id" :type-list="taskScheduleEvent" />
         </template>
       </el-table-column>
-      <el-table-column label="优先级" min-width="80" align="center">
+      <el-table-column label="优先级" fixed min-width="80" align="center">
         <template v-slot="scope">
           <div align="center">
             <div
@@ -100,7 +100,7 @@
           </div>
         </template>
       </el-table-column>
-      <el-table-column label="需求名称" min-width="250" show-overflow-tooltip>
+      <el-table-column label="需求名称" fixed min-width="250" show-overflow-tooltip>
         <template v-slot="scope">
           <div class="table-project-name" @click="clickRequiredName(scope.row.id)">
             <span class="id">{{ scope.row.requirementDisplayId }} <img v-if="scope.row.type === 1" :src="extraUrgent" style="height: 17px;padding: 0 10px;"></span>
@@ -108,7 +108,6 @@
           </div>
         </template>
       </el-table-column>
-      <el-table-column label="需求状态" prop="statusName" min-width="150" align="center" />
       <el-table-column label="状态" min-width="100" align="center">
         <template v-slot="scope">
           <el-select
@@ -127,35 +126,34 @@
         </template>
       </el-table-column>
       <el-table-column label="PM" min-width="100" show-overflow-tooltip align="center">
-        <template v-slot="scope">
-          {{ scope.row.pmMemberInfoResponse.name }}
+        <template v-if="scope.row.pmMemberInfoResponse" slot-scope="scope">
+          <span>{{ scope.row.pmMemberInfoResponse.name }}</span>
         </template>
       </el-table-column>
-      <el-table-column label="需求来源" min-width="100" show-overflow-tooltip align="center">
-        <template v-slot="scope">
-          {{ scope.row.sourceTypeName }}
-        </template>
-      </el-table-column>
-      <el-table-column label="需求方向" min-width="150" align="center">
+      <el-table-column label="需求方向" min-width="150" align="center" show-overflow-toolti>
         <template v-slot="scope">
           {{ scope.row.rqmtOrntNames }}
         </template>
       </el-table-column>
-      <el-table-column label="需求提出人" min-width="150" align="center">
-        <template v-slot="scope">
-          <span v-for="(item,index) in scope.row.rqmtProposers" :key="index">{{ item.name }}</span>
-        </template>
-      </el-table-column>
       <el-table-column label="跟版客户端" min-width="100" show-overflow-tooltip align="center">
         <template v-slot="scope">
           <span v-for="(item, index) in scope.row.referredClientTypeName" :key="index">{{ item }}</span>
         </template>
       </el-table-column>
-      <el-table-column label="PRD链接" min-width="100" show-overflow-tooltip align="center">
+      <el-table-column label="PRD链接" min-width="300" show-overflow-tooltip align="center">
         <template v-slot="scope">
           <a :href="scope.row.mrdUrl" style="color: #409EFF;" target="_blank">{{ scope.row.mrdUrl }}</a>
         </template>
       </el-table-column>
+      <el-table-column label="交付日期" min-width="200" align="center">
+        <template slot-scope="scope">{{ scope.row.gmtModify }}</template>
+      </el-table-column>
+      <el-table-column label="任务数量" min-width="150" align="center">
+        <template slot-scope="scope">{{ scope.row.taskCount }}</template>
+      </el-table-column>
+      <el-table-column label="缺陷数量" min-width="150" align="center">
+        <template slot-scope="scope">{{ scope.row.bugCount }}</template>
+      </el-table-column>
     </el-table>
     <el-footer class="public_footer" />
     <!-- 移出迭代 dialog -->

+ 17 - 17
src/views/projectManage/projectList/components/needsList.vue

@@ -11,14 +11,14 @@
       show-overflow-tooltip="true"
       :header-row-style="{height: '50px'}"
     >
-      <el-table-column label="优先级" prop="priority" width="100" sortable align="center">
+      <el-table-column label="优先级" fixed prop="priority" width="100" sortable align="center">
         <template slot-scope="scope" style="text-align: center;">
           <span class="div_priority" :class="scope.row.priorityName">
             {{ scope.row.priorityName }}
           </span>
         </template>
       </el-table-column>
-      <el-table-column label="需求名称" width="250" align="left" show-overflow-tooltip>
+      <el-table-column label="需求名称" fixed width="250" align="left" show-overflow-tooltip>
         <template slot-scope="scope">
           <div class="table-project-name" @click="needs_link(scope.row.id)">
             <span class="id">{{ scope.row.requirementDisplayId }} <img v-if="scope.row.type === 1" :src="extraUrgent" style="height: 17px;padding: 0 10px;"></span>
@@ -26,7 +26,6 @@
           </div>
         </template>
       </el-table-column>
-      <el-table-column label="需求状态" prop="statusName" min-width="150" align="center" />
       <el-table-column label="状态" width="105" align="center">
         <template slot-scope="scope">
           <el-select
@@ -41,33 +40,30 @@
         </template>
       </el-table-column>
       <el-table-column label="PM" width="120" align="center" show-overflow-tooltip>
-        <template v-if="scope.row.pm" slot-scope="scope">
-          <span>{{ scope.row.pm.name }}</span>
+        <template v-if="scope.row.pmMemberInfoResponse" slot-scope="scope">
+          <span>{{ scope.row.pmMemberInfoResponse.name }}</span>
         </template>
       </el-table-column>
-      <el-table-column label="需求来源" width="150" align="center" show-overflow-tooltip>
-        <template slot-scope="scope">{{ scope.row.sourceTypeName }}</template>
-      </el-table-column>
       <el-table-column label="需求方向" min-width="150" align="center">
         <template v-slot="scope">
           {{ scope.row.rqmtOrntNames }}
         </template>
       </el-table-column>
-      <el-table-column label="需求提出人" min-width="150" align="center">
-        <template v-slot="scope">
-          <span v-for="(item,index) in scope.row.rqmtProposers" :key="index">{{ item.name }}</span>
-        </template>
-      </el-table-column>
       <el-table-column label="跟版客户端" width="150" align="center" show-overflow-tooltip>
         <template slot-scope="scope">{{ scope.row.referredClientTypeName }}</template>
       </el-table-column>
-      <el-table-column label="PRD连接" width="180" align="center" show-overflow-tooltip>
-        <template slot-scope="scope"><a :href="scope.row.mrdUrl">{{ scope.row.mrdUrl }}</a></template>
+      <el-table-column label="PRD连接" width="300" align="center" show-overflow-tooltip>
+        <template slot-scope="scope">
+          <el-link :href="scope.row.mrdUrl" class="mrdUrl" target="_blank">{{ scope.row.mrdUrl }}</el-link>
+        </template>
+      </el-table-column>
+      <el-table-column label="交付日期" min-width="200" align="center" show-overflow-tooltip>
+        <template slot-scope="scope">{{ scope.row.gmtModify }}</template>
       </el-table-column>
-      <el-table-column label="任务数量" align="center">
+      <el-table-column label="任务数量" min-width="150" align="center">
         <template slot-scope="scope">{{ scope.row.taskCount }}</template>
       </el-table-column>
-      <el-table-column label="缺陷数量" align="center">
+      <el-table-column label="缺陷数量" min-width="150" align="center">
         <template slot-scope="scope">{{ scope.row.bugCount }}</template>
       </el-table-column>
     </el-table>
@@ -204,4 +200,8 @@ export default {
     text-overflow: ellipsis;
   }
 }
+.mrdUrl{
+  cursor: pointer;
+  color: #69B3FF;
+}
 </style>

+ 3 - 3
src/views/projectManage/requirement/list/create.vue

@@ -219,7 +219,6 @@ export default {
       if (newVisible) {
         if (this.title === '编辑需求') {
           this.form = JSON.parse(JSON.stringify(this.data))
-          this.form.rqmtProposer = this.form.rqmtProposer.split(',')
           this.form.pm = this.form.pm.idap
           this.form.referredClientType = this.form.referredClientType.split(',')
           this.init()
@@ -227,7 +226,8 @@ export default {
           if (this.form.belongingProject !== '' && this.form.belongingProject !== -1) {
             this.belProject = true
             this.form.source = 2
-          } else {
+          }
+          if (this.form.belongingProject === -1) {
             this.belProject = false
             this.form.source = 1
           }
@@ -364,7 +364,7 @@ export default {
           } else {
             let data = {}
             data = this.form
-            data.rqmtProposer = this.form.rqmtProposer.join()
+            data.rqmtProposer = data.rqmtProposer ? this.form.rqmtProposer.join() : null
             data.referredClientType = this.form.referredClientType.join()
             updateRequirement(data)
               .then(res => {

+ 73 - 37
src/views/projectManage/requirement/list/index.vue

@@ -73,7 +73,7 @@
               <span style="color:rgba(51,51,51,1)"> 需求状态</span>
               <span class="contain"> 包含 </span>
             </div>
-            <el-checkbox-group v-model="searchForm.checkList" class="allCheckbox">
+            <el-checkbox-group v-model="searchForm.containStatus" class="allCheckbox">
               <el-checkbox v-for="item in requiredStatus" :key="item.code" :label="item.code">{{ item.msg }}</el-checkbox>
             </el-checkbox-group>
             <div style="margin-bottom: auto;" class="Layout">
@@ -121,37 +121,32 @@
         size="small"
         show-overflow-tooltip="true"
       >
-        <el-table-column label="优先级" min-width="90" sortable align="left">
+        <el-table-column label="优先级" fixed min-width="90" sortable align="left">
           <template v-slot="scope">
             <div class="div_priority" :style="{background: priorityColors[scope.row.priority % priorityColors.length]}">{{ 'P'+scope.row.priority }}</div>
           </template>
         </el-table-column>
-        <el-table-column label="需求名称" min-width="250" show-overflow-tooltip align="left">
+        <el-table-column label="需求名称" fixed min-width="250" show-overflow-tooltip align="left">
           <template v-slot="scope">
             <span style="font-size: 12px;color: rgba(167,174,188,1);">{{ scope.row.requirementDisplayId }}<img v-if="scope.row.type === 1" :src="extraUrgent" style="height: 17px; padding: 0 10px;"></span><br>
             <span class="stylus-hover" @click="getToRequirementDetails(scope.row.id)">{{ scope.row.name }}</span>
           </template>
         </el-table-column>
-        <el-table-column label="需求状态" prop="statusName" min-width="150" align="center" />
+        <el-table-column label="状态" prop="statusName" min-width="150" align="center" />
         <el-table-column prop="sourceTypeName" label="需求来源" min-width="100" show-overflow-tooltip align="center" />
-        <el-table-column label="需求方向" min-width="150" align="center">
-          <template v-slot="scope">
-            {{ scope.row.rqmtOrntNames }}
+        <el-table-column label="PM" min-width="100" show-overflow-tooltip align="center">
+          <template v-if="scope.row.pmMemberInfoResponse" slot-scope="scope">
+            <span>{{ scope.row.pmMemberInfoResponse.name }}</span>
           </template>
         </el-table-column>
-        <el-table-column label="需求提出人" min-width="150" align="center">
+        <el-table-column label="需求方向" min-width="150" align="center">
           <template v-slot="scope">
-            <span v-for="(item,index) in scope.row.rqmtProposers" :key="index">{{ item.name }}</span>
+            {{ scope.row.rqmtOrntNames }}
           </template>
         </el-table-column>
+        <el-table-column prop="taskCount" min-width="100" label="任务数量" show-overflow-tooltip align="center" />
+        <el-table-column prop="bugCount" min-width="100" label="缺陷数量" show-overflow-tooltip align="center" />
         <el-table-column prop="belongingProjectName" label="所属项目" min-width="250" show-overflow-tooltip align="center" />
-        <el-table-column label="PM" min-width="100" show-overflow-tooltip align="center">
-          <template v-slot="scope">
-            {{ scope.row.pmMemberInfoResponse.name }}
-          </template>
-        </el-table-column>
-        <el-table-column prop="taskCount" min-width="100" label="任务总数" show-overflow-tooltip align="center" />
-        <el-table-column prop="bugCount" min-width="100" label="bug总数" show-overflow-tooltip align="center" />
         <el-table-column prop="creator" min-width="130" label="创建人" show-overflow-tooltip align="center" />
         <el-table-column min-width="130" label="创建日期" show-overflow-tooltip align="center">
           <template v-slot="scope">{{ scope.row.gmtCreate.substring(0, 10) }}</template>
@@ -197,11 +192,15 @@ import {
   showRequirementEnum,
   projectListProject,
   configShowRequireStatusEnum,
-  settingQueryBizRqmtOrntList
+  settingQueryBizRqmtOrntList,
+  filterCreateFilter,
+  filtergetFilterList,
+  filterGetFilter
 } from '@/api/requirement.js'
 import '@/styles/PublicStyle/index.scss'
 import { deepClone } from '@/utils/global'
 import RequirementCreate from './create'
+import filterList from '@/views/projectManage/components/filterList'
 import '@/views/projectManage/publicCss/index.css'
 import extraUrgent from '@/assets/extraUrgent.png'
 import searchPeople from '@/components/select/searchPeople'
@@ -211,7 +210,8 @@ export default {
   components: {
     RequirementCreate,
     searchPeople,
-    normalDialog
+    normalDialog,
+    filterList
   },
   data() {
     return {
@@ -224,6 +224,7 @@ export default {
       FilterItems: {
         name: ''
       },
+      stratAndEnd: [], // 创建日期
       searchInfo: {
         belongingProject: [],
         sourceType: [],
@@ -243,7 +244,7 @@ export default {
       requiredStatus: [], // 需求状态option
       demandDirection: [], // 需求方向option
       searchForm: {
-        checkList: []
+        containStatus: [] // 包含
       }, // 查询字段
       pageSize: 15,
       curIndex: 1,
@@ -362,29 +363,43 @@ export default {
       })
     },
     async toSave() {
-      const saveObj = deepClone(this.formInline)
+      const saveObj = deepClone(this.searchForm)
       delete saveObj.curIndex
       delete saveObj.pageSize
-      // const res = await createFilter({
-      //   name: this.FilterItems.name,
-      //   content: JSON.stringify(saveObj),
-      //   bizId: Number(localStorage.getItem('bizId'))
-      // })
-      // if (res.code === 200) {
-      //   this.$message({ showClose: true, message: '保存成功', type: 'success' })
-      //   this.showSaveSearch = false
-      //   this.getFilterList()
-      //   this.FilterItems.name = null
-      // }
+      const res = await filterCreateFilter({ name: this.FilterItems.name, content: JSON.stringify(saveObj), bizId: Number(localStorage.getItem('bizId')), filterType: 3, creator: localStorage.getItem('username') })
+      if (res.code === 200) {
+        this.$message({ showClose: true, message: '保存成功', type: 'success' })
+        this.showSaveSearch = false
+        this.getFilterList()
+        this.FilterItems.name = null
+      }
     },
     async getFilterList() { // 获取过滤器列表
-      // const params = {
-      //   bizId: Number(localStorage.getItem('bizId'))
-      // }
-      // const res = await getFilterList(params)
-      // this.filterList = res.data
+      const params = {
+        bizId: Number(localStorage.getItem('bizId')),
+        filterType: 3
+      }
+      const res = await filtergetFilterList(params)
+      this.filterList = res.data
+    },
+    async getFilterItem(filterId) { // 获取单个过滤器
+      // this.stratAndEnd = []
+      // const combination = deepClone(this.searchForm)
+      // const { bugId, status, priorityLevel } = combination
+      // this.searchForm = { bugId, status, priorityLevel }
+      // this.$router.push({ path: this.$route.path, query: { filterId: filterId }})
+      const res = await filterGetFilter(filterId)
+      if (res.code === 200) {
+        const filter = JSON.parse(res.data.content)
+        if (filter.createStartTime && filter.createEndTime) {
+          this.stratAndEnd = [filter.createStartTime, filter.createEndTime]
+        }
+        // this.getClient(filter.appId)
+        Object.assign(this.searchForm, filter)
+        this.curIndex = 1
+        this.getTableData()
+      }
     },
-
     deleteFilter() {
       this.$router.push({ path: this.$route.path })
       this.getFilterList()
@@ -481,6 +496,27 @@ export default {
   color: #606266;
 }
 
+</style>
+<style scoped lang="scss">
+.filter {
+  font-size: 14px;
+  width: 100%;
+  padding: 15px 11px 15px 15px;
+  color: #606266;
+  cursor: pointer;
+  .mine-filter {
+    .filter-item {
+      display: inline-block;
+      width: 15%;
+      color: #409EFF;
+      margin-right: 15px;
+      overflow: hidden;
+      text-overflow:ellipsis;
+      white-space: nowrap;
+      margin-bottom: 5px;
+    }
+  }
+}
 </style>
 <style lang="stylus" scoped>
 .contain {

+ 17 - 14
src/views/workbench/team/components/needsList.vue

@@ -17,14 +17,14 @@
       show-overflow-tooltip="true"
       :header-row-style="{height: '50px'}"
     >
-      <el-table-column label="优先级" prop="priority" width="100" sortable align="center">
+      <el-table-column label="优先级" fixed prop="priority" width="100" sortable align="center">
         <template slot-scope="scope" style="text-align: center;">
           <span class="div_priority" :class="scope.row.priorityName">
             {{ scope.row.priorityName }}
           </span>
         </template>
       </el-table-column>
-      <el-table-column label="需求名称" min-width="250" align="left" show-overflow-tooltip>
+      <el-table-column label="需求名称" fixed min-width="250" align="left" show-overflow-tooltip>
         <template slot-scope="scope">
           <div class="table-project-name" @click="needs_link(scope.row.id)">
             <span class="id">{{ scope.row.requirementDisplayId }} <img v-if="scope.row.type === 1" :src="extraUrgent" style="height: 17px;padding: 0 10px;"></span>
@@ -32,8 +32,6 @@
           </div>
         </template>
       </el-table-column>
-      <el-table-column label="需求状态" prop="statusName" min-width="150" align="center" />
-      <el-table-column label="业务线" width="150" align="center" prop="bizName" show-overflow-tooltip />
       <el-table-column label="状态" width="105" align="center">
         <template slot-scope="scope">
           <el-select
@@ -47,24 +45,25 @@
           </el-select>
         </template>
       </el-table-column>
-      <el-table-column label="需求来源" width="200" align="center" prop="sourceTypeName" show-overflow-tooltip />
-      <el-table-column label="需求方向" min-width="150" align="center">
-        <template v-slot="scope">
-          {{ scope.row.rqmtOrntNames }}
+      <el-table-column label="PM" width="150" align="center" show-overflow-tooltip>
+        <template v-if="scope.row.pmMemberInfoResponse" slot-scope="scope">
+          <span>{{ scope.row.pmMemberInfoResponse.name }}</span>
         </template>
       </el-table-column>
-      <el-table-column label="需求提出人" min-width="150" align="center">
+      <el-table-column label="需求方向" min-width="150" align="center" show-overflow-tooltip>
         <template v-slot="scope">
-          <span v-for="(item,index) in scope.row.rqmtProposers" :key="index">{{ item.name }}</span>
+          {{ scope.row.rqmtOrntNames }}
         </template>
       </el-table-column>
-      <el-table-column label="所属项目" width="250" align="center" prop="belongingProjectName" show-overflow-tooltip />
       <el-table-column label="跟版客户端" width="150" align="center" prop="referredClientTypeName" show-overflow-tooltip />
-      <el-table-column label="PM" width="150" align="center" show-overflow-tooltip>
-        <template v-if="scope.row.pm" slot-scope="scope">
-          <span>{{ scope.row.pm.name }}</span>
+      <el-table-column label="PRD链接" width="300" align="center" prop="mrdUrl" show-overflow-tooltip>
+        <template v-slot="scope">
+          <el-link :href="scope.row.mrdUrl" class="mrdUrl" target="_blank">{{ scope.row.mrdUrl }}</el-link>
         </template>
       </el-table-column>
+      <el-table-column label="交付日期" width="150" align="center" prop="gmtModify" show-overflow-tooltip />
+      <el-table-column label="任务数量" width="150" align="center" prop="taskCount" show-overflow-tooltip />
+      <el-table-column label="缺陷数量" width="150" align="center" prop="bugCount" show-overflow-tooltip />
     </el-table>
     <div align="right">
       <el-pagination
@@ -287,4 +286,8 @@ export default {
     text-overflow: ellipsis;
   }
 }
+.mrdUrl{
+  cursor: pointer;
+  color: #69B3FF;
+}
 </style>