qinzhipeng_v@didiglobal.com 4 tahun lalu
induk
melakukan
698d1a7bd9

+ 4 - 4
src/views/projectManage/components/demand.vue

@@ -4,13 +4,13 @@
     <el-table v-if="tableHeader === false" max-height="38px" :data="datas" class="tableHeader" border size="mini" :header-cell-style="{ background: 'rgba(247,247,247,1)', color: 'rgb(74, 74, 74)', fontSize: '14px', fontWeight: '500'}" @selection-change="changeCheckout(1)">
       <el-table-column v-if="locking" type="selection" width="50" align="center" />
       <el-table-column prop="date" label="任务" width="300" />
-      <el-table-column prop="taskStatus" label="任务状态" width="200" />
+      <el-table-column prop="taskStatus" label="任务状态" width="150" />
       <el-table-column prop="type" label="类型" min-width="70" />
-      <el-table-column prop="desc" label="描述" min-width="150" />
+      <el-table-column prop="desc" label="描述" min-width="140" />
       <el-table-column prop="seperateDaysNoHoliday" label="排期" min-width="160" />
       <el-table-column prop="dayLength" label="时长" min-width="50" />
       <el-table-column prop="peopleList" label="参与人员" min-width="150" />
-      <el-table-column prop="dayLength" label="关联任务" min-width="100" />
+      <el-table-column prop="dayLength" label="关联任务" min-width="80" />
       <el-table-column label="操作" width="120" />
     </el-table>
     <div v-if="tableHeader === true" class="Layout_space_between" style="height: 40px;;border: 1px solid #EBEEF5;">
@@ -115,7 +115,7 @@
           <el-input v-if="scope.row.vsInput" ref="taskName" v-model="taskName" type="textarea" rows="4" placeholder="请输入内容" maxlength="150" show-word-limit @blur="changeTaskName(scope.row)" />
         </template>
       </el-table-column>
-      <el-table-column width="200" align="center">
+      <el-table-column width="150" align="center">
         <template slot-scope="scope">
           <el-select
             v-model="scope.row.status"

+ 98 - 0
src/views/projectManage/components/requirementStatus.vue

@@ -0,0 +1,98 @@
+<template>
+  <el-dialog
+    title="状态变更"
+    :visible.sync="dialogStatusVisible"
+    width="30%"
+    class="public_task"
+  >
+    <div class="blueStripe" />
+    <div align="center">
+      <el-form ref="form_query" :inline="true" :model="form_query" :rules="rules" label-position="left" label-width="158px">
+        <el-form-item v-if="statusName === 'BRD评审通过'" :label="statusName + '时间:'" prop="brdPassRealTime">
+          <el-date-picker v-model="form_query.brdPassRealTime" type="date" placeholder="请选择" format="yyyy.MM.dd" value-format="yyyy.MM.dd" style="width: 100%;" />
+        </el-form-item>
+        <el-form-item v-if="statusName === 'PRD评审通过'" :label="statusName + '时间:'" prop="prdPassRealTime">
+          <el-date-picker v-model="form_query.prdPassRealTime" type="date" :clearable="false" placeholder="请选择" format="yyyy.MM.dd" value-format="yyyy.MM.dd" style="width: 100%;" />
+        </el-form-item>
+        <el-form-item v-if="statusName === '技术准入'" :label="statusName + '时间:'" prop="techInRealTime">
+          <el-date-picker v-model="form_query.techInRealTime" type="date" placeholder="请选择" format="yyyy.MM.dd" value-format="yyyy.MM.dd" style="width: 100%;" />
+        </el-form-item>
+        <el-form-item v-if="statusName === '已上线'" :label="statusName + '时间:'" prop="onlineRealTime">
+          <el-date-picker v-model="form_query.onlineRealTime" type="date" placeholder="请选择" format="yyyy.MM.dd" value-format="yyyy.MM.dd" style="width: 100%;" />
+        </el-form-item>
+      </el-form>
+    </div>
+    <span slot="footer" class="dialog-footer">
+      <el-button @click="clone">取 消</el-button>
+      <el-button type="primary" @click="updateRequirementStatus">确 定</el-button>
+    </span>
+  </el-dialog>
+</template>
+
+<script>
+import moment from 'moment'
+import { updateRequirementStatus } from '@/api/requirement'
+export default {
+  props: {
+    statusObj: { type: Object, default: null }
+  },
+  data() {
+    return {
+      statusName: '',
+      statusValue: '',
+      rqmtStatusShow: true,
+      status: {},
+      form_query: {},
+      rules: {
+        brdPassRealTime: [{ required: true, message: '请输入BRD评审通过时间', trigger: 'change' }],
+        prdPassRealTime: [{ required: true, message: '请输入PRD评审通过时间', trigger: 'change' }],
+        techInRealTime: [{ required: true, message: '请输入技术准入时间', trigger: 'change' }],
+        onlineRealTime: [{ required: true, message: '请输入实际上线时间', trigger: 'change' }]
+      }
+    }
+  },
+  watch: {
+    statusObj: {
+      handler(newV, oldV) {
+        if (newV) {
+          this.status = newV
+          this.setStatusData()
+        }
+      },
+      deep: true,
+      immediate: true
+    }
+  },
+  methods: {
+    setStatusData() {
+      this.dialogStatusVisible = true
+      this.statusName = this.status.name
+      this.statusValue = this.status.code
+      this.status.name === 'BRD评审通过' ? this.$set(this.form_query, 'brdPassRealTime', moment().locale('zh-cn').format('YYYY.MM.DD')) : '' // BRD评审通过时间
+      this.status.name === 'PRD评审通过' ? this.$set(this.form_query, 'prdPassRealTime', moment().locale('zh-cn').format('YYYY.MM.DD')) : '' // PRD评审通过时间
+      this.status.name === '技术准入' ? this.$set(this.form_query, 'techInRealTime', moment().locale('zh-cn').format('YYYY.MM.DD')) : '' // 技术准入
+      this.status.name === '已上线' ? this.$set(this.form_query, 'onlineRealTime', moment().locale('zh-cn').format('YYYY.MM.DD')) : '' // 实际上线
+    },
+
+    async updateRequirementStatus() {
+      this.form_query.id = this.status.id
+      this.form_query.status = this.status.code
+      this.form_query.modifier = localStorage.getItem('username')
+      const res = await updateRequirementStatus(this.form_query)
+      if (res.code === 200) {
+        this.dialogStatusVisible = false
+        this.$emit('update')
+        this.$message({ message: '修改成功', type: 'success', offset: 150 })
+      }
+    },
+    clone() {
+      this.dialogStatusVisible = false
+      this.$emit('update')
+    }
+  }
+}
+</script>
+
+<style>
+
+</style>

+ 2 - 2
src/views/projectManage/components/scheduleList.vue

@@ -18,7 +18,7 @@
           <div :class="scope.row.isScheduleLocked === 1 ? 'el-icon-lock' : 'el-icon-unlock'" />
         </template>
       </el-table-column>
-      <el-table-column prop="desc" label="描述" min-width="150" align="left" show-overflow-tooltip />
+      <el-table-column prop="desc" label="描述" min-width="140" align="left" />
       <el-table-column prop="seperateDaysNoHoliday" label="排期" min-width="160" show-overflow-tooltip />
       <el-table-column prop="dayLength" label="时长" min-width="50" />
       <el-table-column prop="peopleList" label="参与人员" min-width="150" show-overflow-tooltip>
@@ -26,7 +26,7 @@
           <span v-for="(item, index) in scope.row.peopleObjectList" :key="index">{{ item.name }} {{ ' ' }}</span>
         </template>
       </el-table-column>
-      <el-table-column prop="dayLength" class="popover-blue" label="关联任务" min-width="100">
+      <el-table-column prop="dayLength" class="popover-blue" label="关联任务" min-width="80">
         <template slot-scope="scope">
           <el-popover placement="bottom" title="关联任务" width="500" trigger="click">
             <div class="blueStr" />

+ 15 - 5
src/views/projectManage/iteration/components/requiredTable.vue

@@ -133,9 +133,8 @@
             ]"
             class="btnSize"
             size="mini"
-            @change="iterationUpdateReqStatus(scope.row, 2)"
           >
-            <el-option v-for="item in scope.row.availableStatusList" :key="item.code" :label="item.name" :value="item.code" />
+            <el-option v-for="item in scope.row.availableStatusList" :key="item.code" :label="item.name" :value="item.code" @click.native="iterationUpdateReqStatus(scope.row, 2, item)" />
           </el-select>
         </template>
       </el-table-column>
@@ -172,11 +171,13 @@
     <el-footer class="public_footer" />
     <!-- 移出迭代 dialog -->
     <iteration-delete :show.sync="dialogVisibleDelete" :selected-data="selectedData" @iteratioFilter="iteratioFilter" />
+    <rqmtStatus v-if="rqmtStatusShow" :status-obj="statusObj" @update="iteratioFilter" />
   </el-container>
 </template>
 
 <script>
 import '@/styles/PublicStyle/index.scss'
+import rqmtStatus from '@/views/projectManage/components/requirementStatus.vue'
 import iterationDelete from '@/views/projectManage/iteration/components/delete.vue'
 import Sortable from 'sortablejs'
 import { configShowTaskEnum } from '@/api/taskIndex'
@@ -188,8 +189,8 @@ import demand from '@/views/projectManage/iteration/components/demand.vue'
 export default {
   components: {
     iterationDelete,
-    demand
-
+    demand,
+    rqmtStatus
   },
   filters: {
     ellipsis(value, index) {
@@ -210,6 +211,8 @@ export default {
       dialogVisibleDelete: false, // 移除迭代
       requiredArray: [], // 需求状态
       showHeader: true, // 是否显示表头
+      rqmtStatusShow: false, // 状态更改
+      statusObj: {},
       loading: true,
       searchResult: [], // 变更迭代下的数据
       SearchIterationValue: '',
@@ -232,6 +235,7 @@ export default {
   },
   methods: {
     async iteratioFilter() {
+      this.rqmtStatusShow = false
       const data = { id: this.iterationId, curIndex: 1, pageSize: 15, bizId: this.bizId }
       const list = await iterationList(data)
       const requiredList = await iterationRequire(data)
@@ -253,7 +257,7 @@ export default {
       })
     },
 
-    iterationUpdateReqStatus(ele, key) { // 修改需求状态
+    iterationUpdateReqStatus(ele, key, value) { // 修改需求状态
       const data = { reqIds: [], newStatus: '' }
       if (key === 1) { // 批量修改
         this.selectedData.map(item => {
@@ -264,6 +268,12 @@ export default {
       if (key === 2) { // 单独修改
         data.reqIds.push(ele.id)
         data.newStatus = ele.status
+        this.statusObj = value
+        this.statusObj.id = ele.id
+        if (value.name === 'PRD评审通过' || value.name === 'BRD评审通过' || value.name === '技术准入' || value.name === '已上线') {
+          this.rqmtStatusShow = true
+          return false
+        }
       }
       const modifier = localStorage.getItem('username')
       updateRequirementStatus({ id: ele.id, status: ele.status, modifier: modifier }).then(res => {

+ 18 - 6
src/views/projectManage/projectList/components/needsList.vue

@@ -49,9 +49,8 @@
             ]"
             class="btnSize"
             size="mini"
-            @change="changeStatus(scope.row)"
           >
-            <el-option v-for="item in scope.row.availableStatusList" :key="item.code" :label="item.name" :value="item.code" />
+            <el-option v-for="item in scope.row.availableStatusList" :key="item.code" :label="item.name" :value="item.code" @click.native="changeStatus(item,scope.row.id)" />
           </el-select>
         </template>
       </el-table-column>
@@ -83,18 +82,25 @@
         <template slot-scope="scope">{{ scope.row.bugCount }}</template>
       </el-table-column>
     </el-table>
+    <rqmtStatus v-if="rqmtStatusShow" :status-obj="statusObj" @update="getNeedsList" />
   </div>
 </template>
 <script>
 import { requirementQueryRequirementInfoList } from '@/api/projectIndex'
 import { configShowRequireStatusEnum, updateRequirementStatus } from '@/api/requirement'
 import extraUrgent from '@/assets/extraUrgent.png'
+import rqmtStatus from '@/views/projectManage/components/requirementStatus.vue'
 export default {
+  components: {
+    rqmtStatus
+  },
   data() {
     return {
       extraUrgent: extraUrgent,
       needsDataList: [],
-      allStatus: []
+      rqmtStatusShow: false, // 状态更改
+      allStatus: [],
+      statusObj: {}
     }
   },
   created() {
@@ -114,14 +120,20 @@ export default {
       // }
     },
     async getNeedsList() {
+      this.rqmtStatusShow = false
       const res = await requirementQueryRequirementInfoList({ belongingProject: this.$route.query.id })
       if (res.code === 200) {
         this.needsDataList = res.data.list
       }
     },
-    async changeStatus(e) { // 状态改变
-      const modifier = localStorage.getItem('username')
-      const res = await updateRequirementStatus({ id: e.id, status: e.status, modifier: modifier })
+    async changeStatus(e, ele) { // 状态改变
+      this.statusObj = e
+      this.statusObj.id = ele
+      if (e.name === 'PRD评审通过' || e.name === 'BRD评审通过' || e.name === '技术准入' || e.name === '已上线') {
+        this.rqmtStatusShow = true
+        return false
+      }
+      const res = await updateRequirementStatus({ id: ele, status: e.code, modifier: localStorage.getItem('username') })
       if (res.code === 200) {
         this.getNeedsList()
         this.$message({ message: '修改成功', type: 'success', offset: 150 })

+ 20 - 4
src/views/workbench/team/components/needsList.vue

@@ -60,7 +60,7 @@
             size="mini"
             @change="changeStatus(scope.row)"
           >
-            <el-option v-for="item in scope.row.availableStatusList" :key="item.code" :label="item.name" :value="item.code" />
+            <el-option v-for="item in scope.row.availableStatusList" :key="item.code" :label="item.name" :value="item.code" @click.native="changeStatus(scope.row, item)" />
           </el-select>
         </template>
       </el-table-column>
@@ -98,12 +98,17 @@
         @current-change="handleCurrentChange"
       />
     </div>
+    <rqmtStatus v-if="rqmtStatusShow" :status-obj="statusObj" @update="getNeedsListData" />
   </div>
 </template>
 <script>
 import { configShowRequireStatusEnum, updateRequirementStatus, getRequirement } from '@/api/requirement'
 import extraUrgent from '@/assets/extraUrgent.png'
+import rqmtStatus from '@/views/projectManage/components/requirementStatus.vue'
 export default {
+  components: {
+    rqmtStatus
+  },
   props: {
     idList: {
       type: Array,
@@ -122,6 +127,8 @@ export default {
       extraUrgent: extraUrgent, // 紧急图片
       needsDataList: [], // 需求列表
       allStatus: [], // 状态列表
+      rqmtStatusShow: false, // 状态更改
+      statusObj: {},
       pages: {
         pageSize: 10,
         curIndex: 1
@@ -176,15 +183,24 @@ export default {
         this.total = res.data.total
       }
     },
-    async changeStatus(e) { // 状态改变
-      const modifier = localStorage.getItem('username')
-      const res = await updateRequirementStatus({ id: e.id, status: e.status, modifier: modifier })
+    async changeStatus(item, value) { // 状态改变
+      this.statusObj = value
+      this.statusObj.id = item.id
+      if (value.name === 'PRD评审通过' || value.name === 'BRD评审通过' || value.name === '技术准入' || value.name === '已上线') {
+        this.rqmtStatusShow = true
+        return false
+      }
+      const res = await updateRequirementStatus({ id: item.id, status: value.code, modifier: localStorage.getItem('username') })
       if (res.code === 200) {
         this.$message({ message: '修改成功', type: 'success', offset: 150 })
         // this.getNeedsList()
         this.$emit('change', '需求')// 通知父组件,让父组件去执行子组件的数据更新
       }
     },
+    getNeedsListData() {
+      this.rqmtStatusShow = false
+      this.$emit('change', '需求')// 通知父组件,让父组件去执行子组件的数据更新
+    },
     needs_link(id) {
       if (this.newTabOpen) {
         const newTab = this.$router.resolve({ name: '需求详情', query: { id: id }})