qinzhipeng_v@didiglobal.com 4 năm trước cách đây
mục cha
commit
e7fd2b5ad8

+ 144 - 0
src/views/projectManage/requirement/components/timeStatistics.vue

@@ -0,0 +1,144 @@
+<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="status.label === 'BRD评审通过'" :label="status.label + '时间:'" 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="status.label === 'PRD评审通过'" :label="status.label + '时间:'" prop="prdPassRealTime">
+          <el-date-picker v-model="form_query.prdPassRealTime" type="date" size="large" :clearable="false" placeholder="请选择" format="yyyy.MM.dd" value-format="yyyy.MM.dd" style="width: 93%;" />
+        </el-form-item><br>
+        <el-form-item v-if="status.label === 'PRD评审通过'" label="开发Leader" prop="rdLeader">
+          <search-people :value.sync="form_query.rdLeader" :size="'medium'" :clearable="false" :multiple="true" style="width: 100%;" />
+        </el-form-item><br>
+        <el-form-item v-if="status.label === 'PRD评审通过'" label="测试Leader" prop="qaLeader">
+          <search-people :value.sync="form_query.qaLeader" :size="'medium'" :clearable="false" :multiple="true" style="width: 100%;" />
+        </el-form-item>
+        <el-form-item v-if="status.label === '技术准入'" :label="status.label + '时间:'" 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="status.label === '已上线'" :label="status.label + '时间:'" 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="cloneDialogStatusVisible">取 消</el-button>
+      <el-button type="primary" @click="changeArea(1)">确 定</el-button>
+    </span>
+  </el-dialog>
+</template>
+
+<script>
+const _ = require('lodash')
+import moment from 'moment'
+import '@/styles/PublicStyle/index.scss'
+import searchPeople from '@/components/select/searchPeople'
+import { updateRequirementStatus } from '@/api/requirement.js'
+
+export default {
+  components: {
+    searchPeople
+  },
+  props: {
+    visible: { type: Boolean, default: true, required: true },
+    personnel: { type: Object, default: null },
+    status: { type: Object, required: true }
+  },
+  data() {
+    return {
+      rules: {
+        brdPassRealTime: [{ required: true, message: '请输入BRD评审通过时间', trigger: 'change' }],
+        prdPassRealTime: [{ required: true, message: '请输入PRD评审通过时间', trigger: 'change' }],
+        qaLeader: [{ required: true, message: '请输入测试Leader', trigger: 'change' }],
+        rdLeader: [{ required: true, message: '请输入开发Leader', trigger: 'change' }],
+        techInRealTime: [{ required: true, message: '请输入技术准入时间', trigger: 'change' }],
+        onlineRealTime: [{ required: true, message: '请输入实际上线时间', trigger: 'change' }]
+      },
+      form_query: {
+        rdLeader: [],
+        qaLeader: []
+      },
+      dialogStatusVisible: false
+    }
+  },
+  watch: {
+    visible: {
+      handler(newV, old) {
+        this.dialogStatusVisible = newV
+        this.init()
+      },
+      deep: true,
+      immediate: true
+    },
+    personnel: {
+      handler(newV, old) {
+        if (newV.rdLeader) {
+          this.form_query = _.cloneDeep(newV)
+        }
+      },
+      deep: true,
+      immediate: true
+    }
+  },
+  methods: {
+    init() {
+      this.$nextTick(() => {
+        if (this.form_query.rdLeader === null || this.form_query.rdLeader === '') {
+          this.form_query.rdLeader = []
+        } else {
+          this.form_query.rdLeader = this.form_query.rdLeader.split(',')
+        }
+        if (this.form_query.qaLeader === null || this.form_query.qaLeader === '') {
+          this.form_query.qaLeader = []
+        } else {
+          this.form_query.qaLeader = this.form_query.qaLeader.split(',')
+        }
+      })
+      this.status.label === 'BRD评审通过' ? this.form_query.brdPassRealTime = moment().locale('zh-cn').format('YYYY.MM.DD') : '' // BRD评审通过时间
+      this.status.label === 'PRD评审通过' ? this.form_query.prdPassRealTime = moment().locale('zh-cn').format('YYYY.MM.DD') : '' // PRD评审通过时间
+      this.status.label === '技术准入' ? this.form_query.techInRealTime = moment().locale('zh-cn').format('YYYY.MM.DD') : '' // 技术准入
+      this.status.label === '已上线' ? this.form_query.onlineRealTime = moment().locale('zh-cn').format('YYYY.MM.DD') : '' // 实际上线
+    },
+    changeArea() { // 更新状态
+      this.$refs.form_query.validate(async(valid) => {
+        if (valid) {
+          const data = {
+            brdPassRealTime: this.form_query.brdPassRealTime,
+            prdPassRealTime: this.form_query.prdPassRealTime,
+            techInRealTime: this.form_query.techInRealTime,
+            onlineRealTime: this.form_query.onlineRealTime,
+            rdLeader: this.form_query.rdLeader.join(),
+            qaLeader: this.form_query.qaLeader.join(),
+            id: this.$route.query.id,
+            status: this.status.value,
+            modifier: localStorage.getItem('username')
+          }
+          const res = await updateRequirementStatus(data)
+          if (res.code === 200) {
+            this.$emit('updata')
+            this.dialogStatusVisible = false
+            this.$message({ message: '修改成功', type: 'success', duration: 1000, offset: 150 })
+          }
+        } else {
+          this.$message({ message: '还有必填项未填写', type: 'error', duration: 1000, offset: 150 })
+        }
+      })
+    },
+    cloneDialogStatusVisible() {
+      this.$emit('updata')
+      this.dialogStatusVisible = false
+    }
+  }
+}
+</script>
+
+<style>
+
+</style>

+ 15 - 97
src/views/projectManage/requirement/requirementDetail.vue

@@ -305,40 +305,7 @@
         @childValInput="childVal"
         @click.stop
       />
-      <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" size="large" :clearable="false" placeholder="请选择" format="yyyy.MM.dd" value-format="yyyy.MM.dd" style="width: 93%;" />
-            </el-form-item><br>
-            <el-form-item v-if="statusName === 'PRD评审通过'" label="开发Leader" prop="rdLeader">
-              <search-people :value.sync="form_query.rdLeader" :size="'medium'" :clearable="false" :multiple="true" style="width: 100%;" />
-            </el-form-item><br>
-            <el-form-item v-if="statusName === 'PRD评审通过'" label="测试Leader" prop="qaLeader">
-              <search-people :value.sync="form_query.qaLeader" :size="'medium'" :clearable="false" :multiple="true" 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="dialogStatusVisible = false">取 消</el-button>
-          <el-button type="primary" @click="setChangeArea(1)">确 定</el-button>
-        </span>
-      </el-dialog>
+      <timeStatist v-if="dialogStatusVisible" :visible.sync="dialogStatusVisible" :status="status_dialong" :personnel="from_data" @updata="init_status" />
     </el-container>
   </div>
 </template>
@@ -360,8 +327,6 @@ import {
   unlockScheduleCheck,
   scheduleGetRequireScheduleHistory,
   scheduleGetHistoryRequireScheduleById
-  // scheduleGetHistoryScheduleById,
-  // settingQueryBizRqmtOrntList
 } from '@/api/requirement.js'
 import { configShowTaskEnum } from '@/api/taskIndex'
 import textArea from '@/components/input/textArea'
@@ -372,7 +337,6 @@ import image_url from '@/assets/home_images/home_u.png'
 import createdBug from '@/views/projectManage/bugList/file/createdBug'
 import tasksList from './components/taskList'
 import dataStatistics from './components/dataStatistics'
-import moment from 'moment'
 import bugTableDialog from '@/views/projectManage/bugList/details/bugTableDialog' // 缺陷表格
 import schedule from '@/views/projectManage/schedule' // 排期锁定弹窗
 import urgent from '@/assets/urgent.png'
@@ -383,7 +347,7 @@ import timeLine from '@/views/projectManage/components/timeLine.vue'
 import BasicsCode from '@/views/projectManage/requirement/components/BasicsCode.vue'
 import workflowAndStatus from '@/views/projectManage/components/workflowAndStatus.vue'
 import ganntViews from './components/ganntViews'
-import searchPeople from '@/components/select/searchPeople'
+import timeStatist from '@/views/projectManage/requirement/components/timeStatistics.vue'
 import '@/styles/PublicStyle/index.scss'
 export default {
   components: {
@@ -403,7 +367,7 @@ export default {
     ganntViews,
     BasicsCode,
     workflowAndStatus,
-    searchPeople
+    timeStatist
   },
   filters: {
     ellipsis(value, num) {
@@ -421,18 +385,9 @@ export default {
       textarea2: '',
       HoldTask: '',
       dialogVisible: false,
+      status_dialong: {}, // 切换状态
       toilp: '',
-      rules: {
-        brdPassRealTime: [{ required: true, message: '请输入BRD评审通过时间', trigger: 'change' }],
-        prdPassRealTime: [{ required: true, message: '请输入PRD评审通过时间', trigger: 'change' }],
-        qaLeader: [{ required: true, message: '请输入测试Leader', trigger: 'change' }],
-        rdLeader: [{ required: true, message: '请输入开发Leader', trigger: 'change' }],
-        techInRealTime: [{ required: true, message: '请输入技术准入时间', trigger: 'change' }],
-        onlineRealTime: [{ required: true, message: '请输入实际上线时间', trigger: 'change' }]
-      },
       Latest: true,
-      statusName: '',
-      statusValue: '',
       dialogStatusVisible: false,
       brdPassRealTime: false, // BRD评审通过时间
       prdPassRealTime: false, // PRD评审通过时间
@@ -450,6 +405,7 @@ export default {
       // statusList: [], // 状态列表
       taskScheduleEvent: [], // 排期类型列表
       form_query: { pm: null, rqmtOrntIds: [], qaLeader: [] },
+      from_data: {},
       display: false, // 设置成员弹框
       num: 0, // 成员数量
       availableStatusList: [], // 状态
@@ -486,7 +442,6 @@ export default {
     this.$nextTick(() => {
       this.activeName = this.$route.query.page ? this.$route.query.page : '1'
     })
-    // this.showRequirementEnum()
     this.getRequirementById()
     this.getCommentList()
     this.getTaskStatus()
@@ -548,30 +503,9 @@ export default {
       if (this.form_query.iterationId === '') {
         requirementInfo.iterationId = -1
       }
-      requirementInfo.status = this.statusValue
-      if (e === 1) {
-        const data = {
-          techInRealTime: this.form_query.techInRealTime,
-          onlineRealTime: this.form_query.onlineRealTime,
-          rdLeader: this.form_query.rdLeader.join(),
-          qaLeader: this.form_query.qaLeader.join(),
-          id: this.$route.query.id,
-          status: this.statusValue,
-          modifier: localStorage.getItem('username')
-        }
-        const res = await updateRequirementStatus(data)
-        if (res.code === 200) {
-          this.$refs.timeLine1.taskGetWorkFlow()
-          this.$refs.record.operationLogTask()
-          this.getRequirementById()
-          this.dialogStatusVisible = false
-          this.$message({ message: '修改成功', type: 'success', duration: 1000, offset: 150 })
-        }
-        return false
-      }
+      requirementInfo.status = this.status_dialong.value
       const res = await updateRequirement(requirementInfo)
       if (res.code === 200) {
-        this.dialogStatusVisible = false
         this.getRequirementById()
         this.$refs.timeLine1.taskGetWorkFlow()
         this.$message({ message: '修改成功', type: 'success', duration: 1000, offset: 150 })
@@ -597,7 +531,6 @@ export default {
         const res = await requirementHold(this.requirementId, { 'remark': val })
         if (res.code === 200) {
           this.getRequirementById()
-          // this.showRequirementEnum()
           this.$refs.timeLine1.taskGetWorkFlow()
           this.visible = false
           this.$message({ message: '已修改状态为 Hold', type: 'success', duration: 1000, offset: 150 })
@@ -607,7 +540,6 @@ export default {
         const res = await requirementUnhold(this.requirementId)
         if (res.code === 200) {
           this.getRequirementById()
-          // this.showRequirementEnum()
           this.$refs.timeLine1.taskGetWorkFlow()
           this.$message({ message: 'Hold 状态已解除', type: 'success', duration: 1000, offset: 150 })
         }
@@ -619,10 +551,17 @@ export default {
         this.taskScheduleEvent = res.data.taskScheduleEvent || []
       }
     },
+    init_status() { // updataStatus
+      this.dialogStatusVisible = false
+      this.$refs.timeLine1.taskGetWorkFlow()
+      this.$refs.record.operationLogTask()
+      this.getRequirementById()
+    },
     async getRequirementById() { // 获取需求详情
       const res = await getRequirementById({ id: this.$route.query.id })
       if (res.code === 200) {
         this.form_query = res.data
+        this.from_data = _.cloneDeep(res.data)
         if (this.form_query.rdLeader === null || this.form_query.rdLeader === '') {
           this.$set(this.form_query, 'rdLeader', [])
         } else {
@@ -712,32 +651,11 @@ export default {
     },
     async updateStatus(status) { // 修改状态
       if (status.label === 'PRD评审通过' || status.label === 'BRD评审通过' || status.label === '技术准入' || status.label === '已上线') {
-        this.statusName = status.label
-        this.statusValue = status.value
+        this.status_dialong = status
         this.dialogStatusVisible = true
-        // this.$nextTick(() => {
-        //   if (this.form_query.rdLeader === null || this.form_query.rdLeader === '') {
-        //     this.$set(this.form_query, 'rdLeader', [])
-        //   } else {
-        //     this.form_query.rdLeader = this.form_query.rdLeader.split(',')
-        //   }
-        //   if (this.form_query.qaLeader === null || this.form_query.qaLeader === '') {
-        //     this.$set(this.form_query, 'qaLeader', [])
-        //   } else {
-        //     this.form_query.qaLeader = this.form_query.qaLeader.split(',')
-        //   }
-        // })
-        status.label === 'BRD评审通过' ? this.form_query.brdPassRealTime = moment().locale('zh-cn').format('YYYY.MM.DD') : '' // BRD评审通过时间
-        status.label === 'PRD评审通过' ? this.form_query.prdPassRealTime = moment().locale('zh-cn').format('YYYY.MM.DD') : '' // PRD评审通过时间
-        status.label === '技术准入' ? this.form_query.techInRealTime = moment().locale('zh-cn').format('YYYY.MM.DD') : '' // 技术准入
-        status.label === '已上线' ? this.form_query.onlineRealTime = moment().locale('zh-cn').format('YYYY.MM.DD') : '' // 实际上线
         return false
       }
-      const res = await updateRequirementStatus({
-        id: this.$route.query.id,
-        status: status.value,
-        modifier: localStorage.getItem('username')
-      })
+      const res = await updateRequirementStatus({ id: this.$route.query.id, status: status.value, modifier: localStorage.getItem('username') })
       if (res.code === 200) {
         this.$refs.timeLine1.taskGetWorkFlow()
         this.$refs.record.operationLogTask()