Browse Source

Merge branch 'qz_daily_0.0.2' into http_test

qinzhipeng_v@didiglobal.com 4 years ago
parent
commit
62b6e80d93

+ 9 - 0
src/api/taskIndex.js

@@ -291,3 +291,12 @@ export function taskUpdatePreOnlineVersion(id) {
     method: 'get'
   })
 }
+
+// 根据需求id获取任务
+export function getRelDpmTask(data) {
+  return request({
+    url: TeamManagement + `/requirement/getRelDpmTask`,
+    method: 'post',
+    data
+  })
+}

+ 10 - 0
src/api/toConfigure.js

@@ -168,3 +168,13 @@ export function queryMemberInfoByIDAPorNameAndTeam(data) {
     data
   })
 }
+
+// 修改排期同步望岳时间
+export function updateBiz(data) {
+  return request({
+    url: TeamManagement + `/setting/updateBiz`,
+    method: 'post',
+    data
+  })
+}
+

+ 63 - 6
src/views/ToConfigure/components/bizConfigure.vue

@@ -1,25 +1,46 @@
 <template>
   <div style="margin: 0 10px;">
-    <p class="biz_property">业务线属性</p>
+    <p class="biz_property">
+      业务线属性
+      <i v-if="Prohibit" class="el-icon-edit icon-sty" @click="Prohibit = false" />
+    </p>
     <el-radio-group v-model="radio" :disabled="Prohibit" class="biz_radio">
       <el-radio label="0"> 公开 </el-radio>
       <el-radio label="1"> 私密(仅成员可见)</el-radio>
-    </el-radio-group><br>
-    <el-button v-if="Prohibit" size="small" class="biz_buttom" type="primary" @click="Prohibit = false"> 编辑 </el-button>
+    </el-radio-group>
     <el-button v-if="!Prohibit" size="small" class="biz_buttom" @click="cancel"> 取消 </el-button>
     <el-button v-if="!Prohibit" size="small" class="biz_buttom" type="primary" @click="preservation"> 保存 </el-button>
+
+    <div v-if="bizObj.fromDpm">
+      <p class="biz_property">
+        排期同步望岳
+        <el-tooltip class="item" effect="dark" content="设置质惠排期调整后同步到望岳的时间。可配置时间范围为5~60分钟。默认30分钟。" placement="top">
+          <i class="el-icon-info" />
+        </el-tooltip>
+        <i v-if="Schedule" class="el-icon-edit icon-sty" @click="Schedule = false" />
+      </p>
+      <div v-if="Schedule" class="biz-Wangyue biz_radio"> {{ num }} 分钟</div>
+      <div v-if="!Schedule" class="biz_layout biz_radio">
+        <el-input-number v-if="!Schedule" v-model="num" size="mini" :min="5" :max="60" :controls="false" controls-position="right" />
+        <div v-if="!Schedule" class="biz-Wangyue" style="margin-left: 10px;"> 分钟</div>
+        <el-button v-if="!Schedule" size="small" class="biz_buttom" @click="cloneSchedule"> 取消 </el-button>
+        <el-button v-if="!Schedule" size="small" class="biz_buttom" type="primary" @click="changeSchedule"> 保存 </el-button>
+      </div>
+    </div>
   </div>
 </template>
 
 <script>
 import { mapGetters } from 'vuex'
-import { settingGetBizList, settingUpdateBiz } from '@/api/toConfigure.js'
+import { settingGetBizList, settingUpdateBiz, updateBiz } from '@/api/toConfigure.js'
 export default {
   data() {
     return {
       radio: '1',
       Prohibit: true,
-      bizObj: {}
+      Schedule: true, // 排期同步望岳
+      bizObj: {},
+      num: 30
     }
   },
   computed: {
@@ -39,6 +60,7 @@ export default {
       const res = await settingGetBizList({ id: this.bizId })
       if (res.code === 200) {
         this.bizObj = res.data[0]
+        this.num = this.bizObj.syncScheduleDpm
         this.radio = JSON.stringify(this.bizObj.isSecret)
       }
     },
@@ -52,6 +74,19 @@ export default {
     cancel() {
       this.Prohibit = true
       this.radio = JSON.stringify(this.bizObj.isSecret)
+    },
+    async changeSchedule() { // 设置同步望岳时间
+      const res = await updateBiz({ id: this.bizId, syncScheduleDpm: this.num })
+      if (res.code === 200) {
+        this.getBizIdList()
+        this.Schedule = true
+        this.$message({ message: `修改时间为 ${this.num} 分钟`, type: 'success', duration: 1000, offset: 150 })
+      }
+    },
+    cloneSchedule() {
+      this.num = this.bizObj.syncScheduleDpm
+      this.Schedule = true
+      this.$message({ message: '已取消修改', type: 'success', duration: 1000, offset: 150 })
     }
   }
 }
@@ -67,6 +102,28 @@ export default {
   width: 70px;
 }
 .biz_radio {
-  margin: 30px 0;
+  margin: 20px 30px 30px 0;
+}
+.biz_layout {
+  display: flex;
+  justify-content: flex-start;
 }
+.icon-sty {
+  margin-left: 10px;
+  color: #409EFF;
+  cursor: pointer;
+}
+.biz-Wangyue {
+  margin-right: 30px;
+  font-size: 14px;
+  font-family: MicrosoftYaHei;
+  line-height: 28px;
+  color: #444444;
+}
+</style>
+
+<style lang="scss">
+.el-tooltip__popper.is-dark {
+    max-width: 200px;
+  }
 </style>

+ 46 - 12
src/views/projectManage/dialog_vue.vue

@@ -2,7 +2,7 @@
   <div class="task">
     <el-dialog :title="tit_Name" :visible.sync="dialogFormVisible" width="70%" :close-on-click-modal="false" :destroy-on-close="true">
       <div class="blueStripe" />
-      <el-form ref="task_form" :model="task_form" :rules="task_rulesForm" label-position="right" style="margin-right: 3%;" label-width="120px">
+      <el-form ref="task_form" :model="task_form" :rules="task_rulesForm" label-position="right" style="margin-right: 3%;" label-width="130px">
         <el-form-item label="任务名称" prop="name" style="width: 100%">
           <el-input v-model="task_form.name" autocomplete="off" placeholder="请输入任务名称" />
         </el-form-item>
@@ -16,7 +16,7 @@
           </el-form-item>
           <el-form-item v-if="ascription_demand" label="归属需求" prop="requireId">
             <el-select v-model="task_form.requireId" filterable clearable placeholder="请选择" style="width:20vw">
-              <el-option v-for="item in demandList" :key="item.id" :label="item.name" :value="item.id" />
+              <el-option v-for="item in demandList" :key="item.id" :label="item.name" :value="item.id" @click.native="tit_Name === '编辑任务' ? taskUpdateRequire(item.id, requirementIdList.taskId) : getRequireItem(item)" />
             </el-select>
           </el-form-item>
           <el-form-item v-if="ascription_project" label="归属项目" prop="projectId">
@@ -90,6 +90,14 @@
             </el-select>
           </el-form-item>
         </div>
+        <div v-if="ascription_demand && show_schedule" style="color: #E81C1C; font-size: 12px; margin: 0 20px 10px;">
+          <i class="el-icon-warning-outline" /> {{ tit_Name === '编辑任务' ? '您选择的任务归属需求来自望岳,该任务未设置关联的望岳任务,请进行设置,以便于后续排期的同步!' : '您选择的任务归属需求来自望岳,请设置该任务关联的望岳任务,以便于后期排期的同步!' }}
+        </div>
+        <el-form-item v-if="ascription_demand && show_schedule" clearable label="关联望岳的任务" prop="taskIdFromDpm">
+          <el-select v-model="task_form.taskIdFromDpm" filterable placeholder="请选择" style="width: 100%">
+            <el-option v-for="item in arr_schedule" :key="item.id" :label="item.name" :value="item.id" />
+          </el-select>
+        </el-form-item>
       </el-form>
       <div slot="footer">
         <el-button @click="dialogFormVisible = false">取 消</el-button>
@@ -104,7 +112,7 @@
 import { mapGetters } from 'vuex'
 import { analysisBizId_id, EncryptId } from '@/utils/crypto-js.js'
 const _ = require('lodash')
-import { taskCreate, memberQueryMemberInfoByIDAPorName, configShowTaskEnum, configShowRequirementVersionEnum, taskGet, taskUpdate, projectListProject } from '@/api/taskIndex' // ajax
+import { taskCreate, memberQueryMemberInfoByIDAPorName, configShowTaskEnum, configShowRequirementVersionEnum, taskGet, taskUpdate, projectListProject, getRelDpmTask } from '@/api/taskIndex' // ajax
 import { projectList, settingGetBizList, settingGetMyAndOtherBizList } from '@/api/projectIndex'
 import { settingQueryBizModuleList } from '@/api/defectManage'
 export default {
@@ -140,21 +148,23 @@ export default {
       show_Client: false, // 涉及的客户端(显示)
       projectList: [], // 归属项目数据
       demandList: [], // 需求list
+      arr_schedule: [], // 关联望岳的任务list
+      show_schedule: false,
       userInformation: localStorage.getItem('username'),
       userNames: localStorage.getItem('realname'),
       requirementIdList: {},
       task_rulesForm: {
-        name: [{ required: true, message: '请输入任务名称', trigger: 'blur' }],
-        // moduleIds: [{ required: true, message: '请选择模块', trigger: 'blur' }],
-        priority: [{ required: true, message: '请选择优先级', trigger: 'blur' }],
-        bizId: [{ required: true, message: '请选择业务线', trigger: 'blur' }],
-        source: [{ required: true, message: '请输入直接归属', trigger: 'blur' }],
-        requireId: [{ required: true, message: '请选择归属需求', trigger: 'blur' }],
-        projectId: [{ required: true, message: '请选择归属项目', trigger: 'blur' }],
+        name: [{ required: true, message: '请输入任务名称', trigger: 'change' }],
+        priority: [{ required: true, message: '请选择优先级', trigger: 'change' }],
+        bizId: [{ required: true, message: '请选择业务线', trigger: 'change' }],
+        source: [{ required: true, message: '请输入直接归属', trigger: 'change' }],
+        requireId: [{ required: true, message: '请选择归属需求', trigger: 'change' }],
+        projectId: [{ required: true, message: '请选择归属项目', trigger: 'change' }],
         followVersion: [{ required: true, message: '请选择是否跟版', trigger: 'blur' }],
         notest: [{ required: true, message: '请选择是否免测', trigger: 'blur' }],
         cliType: [{ required: true, message: '请选择业务/平台/模块', trigger: 'blur' }],
-        involveApp: [{ required: true, message: '请选择涉及的客户端', trigger: 'blur' }]
+        involveApp: [{ required: true, message: '请选择涉及的客户端', trigger: 'blur' }],
+        taskIdFromDpm: [{ required: true, message: '请选择关联望岳的任务', trigger: 'change' }]
       }
     }
   },
@@ -184,7 +194,7 @@ export default {
           this.ascription_demand = false
           this.ascription_project = false
           this.task_form = { 'notest': 0, 'followVersion': 2, 'source': 1, 'bizId': this.bizId }
-          this.requirementIdList = { 'name': '主页' }
+          this.requirementIdList = { 'name': '主页', 'data': {}}
           this.show_Client = false
           this.$nextTick(() => {
             this.$refs['task_form'].clearValidate()
@@ -206,6 +216,7 @@ export default {
         case 3: // 编辑任务(任务详情)
           this.tit_Name = '编辑任务'
           taskGet(id[1]).then(res => {
+            this.requirementIdList = { 'name': '需求', 'data': res.data.requireId, taskId: res.data.id }
             this.dialogFormVisible = true
             var that = this
             setTimeout(function() {
@@ -233,6 +244,7 @@ export default {
               }, [])
             }, 100)
             this.task_change_bizId(res.data.bizId, res.data.id)
+            this.taskUpdateRequire(res.data.requireId, res.data.id)
           })
           break
         case 4: // 新建任务(需求详情)
@@ -252,6 +264,7 @@ export default {
               this.requirementIdList = { 'name': '需求', 'data': data.requirementId }
             }
             this.task_change_bizId(this.bizId)
+            this.taskUpdateRequire(ss.id)
           })
           break
       }
@@ -397,13 +410,16 @@ export default {
           this.$set(this.task_form, 'bizId', this.bizId)
           this.$set(this.task_form, 'requireId', '')
           this.$set(this.task_form, 'projectId', '')
+          this.$set(this.task_form, 'taskIdFromDpm', '')
           this.bugDataGet(this.bizId)
           break
         case 2:
+          this.show_schedule = false
           this.ascription_demand = true
           this.ascription_project = false
           this.requirementIdList.name === '需求' ? this.$set(this.task_form, 'requireId', this.requirementIdList.data) : this.$set(this.task_form, 'requireId', '')
           this.$set(this.task_form, 'projectId', '')
+          this.tit_Name === '编辑任务' ? this.taskUpdateRequire(this.requirementIdList.data, this.requirementIdList.taskId) : this.getRequireItem({ id: this.requirementIdList.data })
           break
         case 3:
           this.ascription_demand = false
@@ -411,6 +427,7 @@ export default {
           this.$set(this.task_form, 'bizId', this.bizId)
           this.requirementIdList.name === '项目' ? this.$set(this.task_form, 'projectId', this.requirementIdList.data) : this.$set(this.task_form, 'projectId', '')
           this.$set(this.task_form, 'requireId', '')
+          this.$set(this.task_form, 'taskIdFromDpm', '')
           this.bugDataGet(this.bizId)
           break
       }
@@ -430,6 +447,23 @@ export default {
       e === 1 ? this.show_Client = true : ''
       e === 2 ? this.show_Client = false : ''
     },
+    async taskUpdateRequire(requireId, id) {
+      const res = await getRelDpmTask({ requireId: requireId, taskId: id })
+      if (res.code === 200) {
+        const show = res.data.relDpm
+        show ? this.show_schedule = show : this.show_schedule = show
+        this.arr_schedule = res.data.tasks
+      }
+    },
+    async getRequireItem(val) {
+      if (val) {
+        const res = await getRelDpmTask({ requireId: val.id })
+        if (res.code === 200) {
+          this.show_schedule = res.data.relDpm
+          this.arr_schedule = res.data.tasks
+        }
+      }
+    },
     bugDataGet(bizId) { // 所属模块
       settingQueryBizModuleList(bizId).then(res => {
         this.business_platform_Modular = res.data.map(item => ({

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

@@ -207,7 +207,7 @@
                 .任务状态未变更【已排期】前,排期不可锁定;状态变更为【已排期】时,任务排期将被系统自动锁定。<br>
                 .需求排期锁定时,任务排期将全部被锁定;所有任务锁定时,需求排期将被系统自动锁定。<br>
                 .任务排期锁定后,如果解锁了排期,排期将在24小时后再次自动锁定。请解锁后,及时进行排期调整。<br>
-                .任务锁定时,系统会自动将任务排期及交付时间同步至望岳。若多个任务关联同一个望岳任务,同步时排期会汇总一并同步到望岳,交付时间则按最晚日期同步至望岳。<br>
+                .任务新增、修改、删除排期时,系统会于半小时后将任务排期及交付时间同步至望岳。若多个任务关联同一个望岳任务,同步时排期会汇总一并同步到望岳,交付时间则按最晚日期同步至望岳。<br>
               </div>
             </div>
             <div class="list-tips">