qinzhipeng_v@didiglobal.com 4 gadi atpakaļ
vecāks
revīzija
2985a8c274

+ 125 - 48
src/views/projectManage/requirement/components/BasicsCode.vue

@@ -2,27 +2,19 @@
   <div class="detail-info">
     <el-form :inline="true" :model="form_query" class="demo-form-inline" label-position="left" label-width="100px">
       <el-form-item label="PM:">
-        <search-people :value.sync="form_query.pm" :clearable="false" @change="changeArea" />
+        <over-click id="pm-select" :active.sync="activeClick.pm" @overMouse="changeArea">
+          <template slot="active">
+            <search-people :value.sync="form_query.pm" :clearable="false" />
+          </template>
+          <template slot="overMouse">
+            <span v-if="form_query.pm">{{ form_query.pmMemberInfoResponse.name }}</span>
+          </template>
+        </over-click>
       </el-form-item>
       <el-form-item label="开发Leader:">
-        <div v-if="show2" class="public_Jump" @click="show2 = false">{{ form_query.pm }} <i class="el-icon-edit" /></div>
-        <search-people v-if="show2 === false" :value.sync="form_query.pm" :clearable="false" @change="changeArea" @blur="show2 = true" />
-      </el-form-item>
-      <el-form-item label="测试Leader:">
         <search-people :value.sync="form_query.pm" :clearable="false" @change="changeArea" />
       </el-form-item>
-    </el-form>
-    <el-form :inline="true" :model="form_query" class="demo-form-inline" label-position="left" label-width="100px">
-      <el-form-item label="所属项目:" class="module">
-        <div v-if="form_query.belongingProject !== -1" @click="jump('项目详情',form_query.belongingProject)">{{ form_query.belongingProjectName }}</div>
-        <template v-else>{{ form_query.belongingProjectName }}</template>
-      </el-form-item>
-      <el-form-item label="所属迭代:">
-        <el-select v-model="form_query.iterationId" placeholder="请选择" @change="changeArea">
-          <el-option v-for="(item,index) in iterationList" :key="item.name + index" :label="item.name" :value="item.id" />
-        </el-select>
-      </el-form-item>
-      <el-form-item label="PM:">
+      <el-form-item label="测试Leader:">
         <search-people :value.sync="form_query.pm" :clearable="false" @change="changeArea" />
       </el-form-item>
     </el-form>
@@ -45,17 +37,29 @@
           <el-option v-for="(item,index) in priorityList" :key="item.msg + index" :label="item.msg" :value="item.code" />
         </el-select>
       </el-form-item>
-      <el-form-item label="是否跟版:">
+      <el-form-item label="所属迭代:">
+        <el-select v-model="form_query.iterationId" placeholder="请选择" @change="changeArea">
+          <el-option v-for="(item,index) in iterationList" :key="item.name + index" :label="item.name" :value="item.id" />
+        </el-select>
+      </el-form-item>
+      <!-- <el-form-item label="是否跟版:">
         <el-select v-model="form_query.dependOnRelease" size="small" filterable placeholder="请选择" @change="changeArea">
           <el-option v-for="(item,index) in dependList" :key="item.msg + index" :label="item.msg" :value="item.code" />
         </el-select>
-      </el-form-item>
+      </el-form-item> -->
       <el-form-item v-if="form_query.dependOnRelease === 1" label="跟版客户端:">
         <el-select v-model="form_query.referredClientType" size="small" multiple filterable placeholder="请选择" @change="changeArea">
           <el-option v-for="(item,index) in appClient" :key="item.msg + index" :label="item.msg" :value="item.code" />
         </el-select>
       </el-form-item>
     </el-form>
+    <el-form :inline="true" :model="form_query" class="demo-form-inline" label-position="left" label-width="100px">
+      <el-form-item label="所属项目:">
+        <div v-if="form_query.belongingProject !== -1" @click="jump('项目详情',form_query.belongingProject)">{{ form_query.belongingProjectName }}</div>
+        <template v-else>{{ form_query.belongingProjectName }}</template>
+      </el-form-item>
+    </el-form>
+
     <el-form :model="form_query" class="demo-form-inline" label-position="left" label-width="100px">
       <el-form-item label="BRD链接:" class="PRD">
         <span class="PRD-link"><a :href="form_query.brdUrl" target="_blank">{{ form_query.brdUrl }}</a></span>
@@ -68,14 +72,53 @@
 </template>
 
 <script>
+const _ = require('lodash')
 import '@/styles/PublicStyle/index.scss'
-import { updateRequirement } from '@/api/requirement.js'
+import searchPeople from '@/components/select/searchPeople'
+import overClick from '@/components/click/overClick'
+import { updateRequirement, iterationList, configShowRequireStatusEnum, showRequirementEnum, settingQueryBizRqmtOrntList } from '@/api/requirement.js'
+
 export default {
+  components: {
+    searchPeople,
+    overClick
+  },
+  props: {
+    value: { type: Object, required: true }
+  },
   data() {
     return {
-      form_query: {}
+      dependList: [{ msg: '否', code: 0 }, { msg: '是', code: 1 }], // 是否跟版
+      form_query: { pm: null, rqmtOrntIds: [] },
+      statusList: [], // 状态列表
+      priorityList: [], // 优先级列表
+      sourceTypeList: [], // 需求来源列表
+      appClient: [], // 跟版客户端列表
+      demandDirection: [], // 需求方向option
+      iterationList: [], // 所属迭代
+      activeClick: {
+        pm: false
+      },
+      props: {
+        value: 'id',
+        label: 'rqmtOrntName',
+        children: 'childRqmtOrnts',
+        multiple: true
+      }
+    }
+  },
+  watch: {
+    value: {
+      handler(newV, old) {
+        this.form_query = newV
+      },
+      deep: true,
+      immediate: true
     }
   },
+  created() {
+    this.showRequirementEnum()
+  },
   methods: {
     async changeArea(e) { // area修改
       const requirementInfo = _.cloneDeep(this.form_query)
@@ -92,13 +135,49 @@ export default {
       requirementInfo.status = this.statusValue
       const res = await updateRequirement(requirementInfo)
       if (res.code === 200) {
-        this.dialogStatusVisible = false
-        this.getRequirementById()
-        this.$refs.timeLine1.taskGetWorkFlow()
+        // this.dialogStatusVisible = false
+        // this.getRequirementById()
+        // this.$refs.timeLine1.taskGetWorkFlow()
         this.$message({ message: '修改成功', type: 'success', duration: 1000, offset: 150 })
       }
-      // }
-      this.getRequirementById()
+      this.$emit('getRequirementById')
+    },
+    jump(page, id) { // 跳转
+      this.$router.push({ name: page, query: { id: id }})
+    },
+    async showRequirementEnum() { // 获取需求状态列表,优先级列表,需求来源
+      const res1 = await configShowRequireStatusEnum(localStorage.getItem('bizId'))
+      if (res1.code === 200) {
+        this.statusList = []
+        this.statusList = res1.data.requirementStatus
+      }
+      const res4 = await iterationList({ bizId: Number(localStorage.getItem('bizId')), curIndex: 1, pageSize: 999 }) // 获取所属迭代列表
+      if (res4.code === 200) {
+        this.iterationList = res4.data.list
+      }
+      this.iterationList.unshift({ id: -1, name: '无' })
+      const res = await showRequirementEnum()
+      if (res.code === 200) {
+        this.priorityList = res.data.priority
+        this.sourceTypeList = res.data.sourceType
+        this.appClient = res.data.appClient
+      }
+      const res3 = await settingQueryBizRqmtOrntList(localStorage.getItem('bizId'))
+      if (res3.code === 200) { // 需求方向
+        this.demandDirection = this.getTreeData(res3.data)
+      }
+    },
+    getTreeData(data) {
+      for (var i = 0; i < data.length; i++) {
+        if (data[i].childRqmtOrnts.length < 1) {
+          // children若为空数组,则将children设为undefined
+          data[i].childRqmtOrnts = undefined
+        } else {
+          // children若不为空数组,则继续 递归调用 本方法
+          this.getTreeData(data[i].childRqmtOrnts)
+        }
+      }
+      return data
     }
   }
 }
@@ -107,25 +186,25 @@ export default {
 <style lang="scss" scoped>
 .detail-info {
     padding: 0 34px 20px 34px;
-    /deep/.el-input__inner{
-      border: 1px solid rgba(220,223,230,0)
-    }
-    /deep/.el-input__inner:hover{
-      border: 1px solid rgba(220,223,230,1)
-    }
-    /deep/.is-focus .el-input__inner {
-      border: 1px solid #409EFF;
-    }
-    /deep/.el-select{
-      .el-input__suffix-inner {
-        visibility: hidden;
-      }
-    }
-    /deep/.el-select:hover{
-      .el-input__suffix-inner {
-        visibility: visible;
-      }
-    }
+    // /deep/.el-input__inner{
+    //   border: 1px solid rgba(220,223,230,0)
+    // }
+    // /deep/.el-input__inner:hover{
+    //   border: 1px solid rgba(220,223,230,1)
+    // }
+    // /deep/.is-focus .el-input__inner {
+    //   border: 1px solid #409EFF;
+    // }
+    // /deep/.el-select{
+    //   .el-input__suffix-inner {
+    //     visibility: hidden;
+    //   }
+    // }
+    // /deep/.el-select:hover{
+    //   .el-input__suffix-inner {
+    //     visibility: visible;
+    //   }
+    // }
     .demo-form-inline {
       .el-form-item {
         width: 33%;
@@ -163,9 +242,7 @@ export default {
       text-overflow:ellipsis;
       white-space: nowrap;
       padding-left: 15px;
-    }
-    .PRD-link:hover{
-      color:#409EFF;
+       color:#409EFF;
     }
   }
 </style>

+ 12 - 23
src/views/projectManage/requirement/requirementDetail.vue

@@ -97,6 +97,7 @@
             <div class="title-left-icon" />
             <div class="title-left-name">基础信息</div>
           </div>
+          <BasicsCode :value="form_query" @update="getRequirementById" />
           <div class="detail-info">
             <el-form :inline="true" :model="form_query" class="demo-form-inline" label-position="left" label-width="100px">
               <el-form-item label="PM:">
@@ -221,7 +222,6 @@
 
           <el-container v-show="listOrGannt === '列表'" class="allTips">
             <el-main style="padding: 0;">
-              <!-- <schedule-list :id="requirementId" ref="ScheduleEvent" :showunlock="showunlock" :type-list="taskScheduleEvent" :required-list="taskScheduleList" class-name="white" :all="true" :no-move="false" /> -->
               <demand :id="requirementId" ref="ScheduleEvent" :showunlock="showunlock" :type-list="taskScheduleEvent" :required-list="taskScheduleList" @getRequirementById="getRequirementById" />
             </el-main>
             <el-aside v-if="lockHide" class="SchedulingAside">
@@ -409,7 +409,6 @@ import {
   updateRequirement,
   deleteRequirement,
   showRequirementEnum,
-  projectListProject,
   iterationList,
   getCommentList,
   addComment,
@@ -442,6 +441,7 @@ import download from '@/views/projectManage/components/export.vue'
 import demand from '@/views/projectManage/components/demand.vue'
 import record from '@/views/projectManage/components/record.vue'
 import timeLine from '@/views/projectManage/components/timeLine.vue'
+import BasicsCode from '@/views/projectManage/requirement/components/BasicsCode.vue'
 import ganntViews from './components/ganntViews'
 import overClick from '@/components/click/overClick'
 import '@/styles/PublicStyle/index.scss'
@@ -462,7 +462,8 @@ export default {
     timeLine,
     demand,
     ganntViews,
-    overClick
+    overClick,
+    BasicsCode
   },
   filters: {
     ellipsis(value, num) {
@@ -530,7 +531,7 @@ export default {
       deleteVisible: false, // 删除需求弹框
       task_open: false, // 新建任务弹框
       bug_open: false, // 新建缺陷弹框
-      belongProjectList: [], // 所属项目列表
+      // belongProjectList: [], // 所属项目列表
       iterationList: [], // 所属迭代列表
       commentContent: null, // 评论内容
       comments: [], // 评论列表
@@ -564,7 +565,7 @@ export default {
     })
     this.showRequirementEnum()
     this.getRequirementById()
-    this.getBelongProject()
+    // this.getBelongProject()
     this.getIterationList()
     this.getCommentList()
     this.getTaskStatus()
@@ -618,9 +619,6 @@ export default {
         this.scheduleVisble = true
       }
     },
-    // clickBackToTheLatest() {
-    //   this.$refs.ScheduleEvent.rowDrop()
-    // },
     setChangeArea() {
       this.$refs.form_query.validate((valid) => {
         if (valid) {
@@ -643,15 +641,6 @@ export default {
         requirementInfo.referredClientType = requirementInfo.referredClientType.join()
       }
       requirementInfo.status = this.statusValue
-      // if (e === 1) {
-      //   const res = await updateRequirementStatus(requirementInfo)
-      //   if (res.code === 200) {
-      //     this.dialogStatusVisible = false
-      //     this.getRequirementById()
-      //     this.$refs.timeLine1.taskGetWorkFlow()
-      //     this.$message({ message: '修改成功', type: 'success', duration: 1000, offset: 150 })
-      //   }
-      // } else {
       const res = await updateRequirement(requirementInfo)
       if (res.code === 200) {
         this.dialogStatusVisible = false
@@ -662,12 +651,12 @@ export default {
       // }
       this.getRequirementById()
     },
-    async getBelongProject() { // 获取所属项目列表
-      const res = await projectListProject({ bizId: Number(localStorage.getItem('bizId')) })
-      if (res.code === 200) {
-        this.belongProjectList = res.data
-      }
-    },
+    // async getBelongProject() { // 获取所属项目列表
+    //   const res = await projectListProject({ bizId: Number(localStorage.getItem('bizId')) })
+    //   if (res.code === 200) {
+    //     this.belongProjectList = res.data
+    //   }
+    // },
     async getIterationList() { // 获取所属迭代列表
       const res = await iterationList({
         bizId: Number(localStorage.getItem('bizId')),