Explorar o código

Merge branch 'http_test' of git.xiaojukeji.com:jacklijiajia/thoth-frontend into http_test

qinzhipeng_v@didiglobal.com %!s(int64=4) %!d(string=hai) anos
pai
achega
a7e203e791

+ 8 - 0
src/api/taskIndex.js

@@ -275,3 +275,11 @@ export function showRelatedDpmTask(id) {
     method: 'get'
   })
 }
+// 按需求搜索需求和任务的接口
+export function listRequireAndTask(data) {
+  return request({
+    url: TeamManagement + `/task/listRequireAndTask`,
+    method: 'post',
+    data
+  })
+}

+ 84 - 18
src/views/projectManage/projectList/components/modifySchedule.vue

@@ -32,7 +32,7 @@
         </el-form-item>
         <h2>关联任务</h2>
         <el-form-item label="业务线" prop="bizId">
-          {{ bizName }}
+          {{ form.bizName }}
         </el-form-item>
         <el-form-item label="关联任务" prop="taskList">
           <el-select v-model="selectBy" placeholder="请选择" style="width: 22%" class="select-by" size="medium">
@@ -53,6 +53,7 @@
             :disabled="disabled"
             @change="tasksChange"
           >
+            <!-- 任务名称搜索 -->
             <template v-if="selectBy==='task'">
               <el-option
                 v-for="item in tasksOptions"
@@ -61,7 +62,7 @@
                 :value="item.id"
                 :disabled="item.isScheduleLocked === 1"
               >
-                <div class="Layout_space_between">
+                <div class="task-option">
                   <div class="belong-task">
                     <div class="task-id">{{ item.taskIdSting }}</div>
                     <div class="modules-name">
@@ -74,9 +75,39 @@
                 </div>
               </el-option>
             </template>
+            <!-- 任务名称搜索 -->
+            <!-- 需求名称搜索 -->
+            <template v-if="selectBy==='requirement'">
+              <el-option-group
+                v-for="group in tasksByOptions"
+                :key="'task-group'+group.id"
+                :label="group.idString+group.name"
+              >
+                <el-option
+                  v-for="item in group.taskInfoList"
+                  :key="'taskBy-option'+item.id"
+                  :label="item.name"
+                  :value="item.id"
+                  :disabled="item.isScheduleLocked === 1"
+                >
+                  <div class="task-option">
+                    <div class="belong-task">
+                      <div class="task-id">{{ item.taskId }}</div>
+                      <div class="modules-name">
+                        <span class="name" :class="{'blue': innerList(item,tasksDetailList)}">{{ item.name }}</span>
+                        <span v-if="item.moduleInfoName" class="modules" :class="{'blue': innerList(item,tasksDetailList)}">{{ item.moduleInfoName }}</span>
+                        <i v-show="innerList(item,tasksDetailList)" class="el-icon-check blue" />
+                      </div>
+                    </div>
+                    <div :class="item.isScheduleLocked === 1 ? 'el-icon-lock': 'el-icon-unlock'" />
+                  </div>
+                </el-option>
+              </el-option-group>
+            </template>
+            <!-- 需求名称搜索 -->
             <span id="load-more" class="load-more">
-              <template v-if="loading">正在加载更多...</template>
-              <template v-if="!loading">没有更多了</template>
+              <template v-if="loadMore">正在加载更多...</template>
+              <template v-if="!loadMore">没有更多了</template>
             </span>
           </el-select>
         </el-form-item>
@@ -119,10 +150,9 @@ const _ = require('lodash')
 import searchPeople from '@/components/select/searchPeople'
 import normalDialog from '@/components/dialog/normalDialog'
 import selDatePicker from '@/components/picker/SelDatePicker'
-import { taskList, configShowTaskEnum, taskGet } from '@/api/taskIndex'
+import { taskList, configShowTaskEnum, taskGet, listRequireAndTask } from '@/api/taskIndex'
 import { getSeprateDayInfo, scheduleCreate, scheduleGet, scheduleUpdate, scheduleDelete } from '@/api/projectViewDetails'
 import danger from '@/assets/感叹@2x.png'
-import '@/styles/PublicStyle/index.scss'
 export default {
   components: {
     searchPeople,
@@ -181,6 +211,7 @@ export default {
       taskScheduleEvent: [], // 排期类型选项
       form: {
         bizId: localStorage.getItem('bizId'),
+        bizName: '',
         type: '',
         peopleList: [],
         taskList: [],
@@ -197,8 +228,10 @@ export default {
       },
       taskTotal: 0, // 任务总数
       tasksOptions: [], // 任务下拉选项
+      tasksByOptions: [], // 需求下任务下拉选项
       tasksDetailList: [], // 已有任务项目
-      loading: true, // 正在加载状态
+      loadMore: true, // 加载更多
+      loading: false, // 正在加载
       peopleObjectList: [], // 参与人
       observer: null, // 滚动的观察类
       nowQuery: null // 当前的筛选项
@@ -232,7 +265,7 @@ export default {
       },
       immediate: true
     },
-    title(newV, oldV) {
+    title(newV) { // 弹框标题
       this.title = newV
     },
     isDelete: {
@@ -241,6 +274,9 @@ export default {
       },
       immediate: true,
       deep: true
+    },
+    selectBy(newV) { // 任务选择类型变化时
+      this.nowQuery = ''
     }
   },
   created() {
@@ -262,9 +298,10 @@ export default {
       this.$nextTick(() => {
         this.observer = new IntersectionObserver(entries => {
           entries.forEach(item => {
-            if (item.isIntersecting) {
+            if (item.isIntersecting && !this.loading) {
               this.selectPages.curIndex++
               if (this.selectBy === 'task') this.searchByTask(this.nowQuery)
+              if (this.selectBy === 'requirement') this.listRequireAndTask(this.nowQuery)
             }
           })
         }, {
@@ -289,7 +326,7 @@ export default {
         dayList: [obj.dayList[0], obj.dayList[len - 1]]
       }
       this.form.bizId = obj.bizId.code
-      this.bizName = obj.bizId.name
+      this.form.bizName = obj.bizId.name
       this.detailDayList = obj.dayList || []
       this.schedule = obj.dayList[0] === obj.dayList[len - 1] ? `${obj.dayList[0]}` : `${obj.dayList[0]}-${obj.dayList[len - 1]}`
     },
@@ -303,7 +340,8 @@ export default {
       }
       this.form = {
         id: obj.id,
-        bizId: localStorage.getItem('bizId'),
+        bizId: obj.bizId,
+        bizName: obj.bizName,
         type: obj.type,
         peopleList: obj.peopleList || [],
         taskList: obj.taskObjectList.map(item => item.id),
@@ -337,14 +375,16 @@ export default {
       if (this.nowQuery === query) return // 值没发生变化,返回
       // 初始化
       this.nowQuery = query
-      this.loading = true
+      this.loadMore = true
       this.selectPages.curIndex = 1
-      this.tasksOptions = []
       this.taskTotal = 0
+      this.tasksOptions = []
+      this.tasksByOptions = []
       if (this.selectBy === 'task') this.searchByTask(query)
+      if (this.selectBy === 'requirement') this.listRequireAndTask(query)
     },
     async searchByTask(query) { // 根据任务去搜索
-      if (!this.loading) return
+      if (!this.loadMore || this.loading) return
       const res = await taskList({
         bizId: this.form.bizId,
         name: query,
@@ -353,10 +393,23 @@ export default {
       if (res.code === 200) {
         this.taskTotal = res.total
         this.tasksOptions = this.tasksOptions.concat(res.data)
-        if (this.taskTotal <= this.tasksOptions.length) this.loading = false// 全部数据已加载完成
-      } else {
-        this.loading = false
+        if (this.taskTotal <= this.tasksOptions.length) this.loadMore = false// 全部数据已加载完成
+      }
+      this.loading = false
+    },
+    async listRequireAndTask(query) { // 需求下的任务搜索
+      if (!this.loadMore || this.loading) return
+      const res = await listRequireAndTask({
+        bizId: this.form.bizId,
+        name: query,
+        ...this.selectPages
+      })
+      if (res.code === 200) {
+        this.taskTotal = res.total
+        this.tasksByOptions = this.tasksByOptions.concat(res.data)
+        if (this.taskTotal <= this.tasksByOptions.length) this.loadMore = false// 全部数据已加载完成
       }
+      this.loading = false
     },
     innerList(val, list) { // 判断是否在任务列表中
       const res = list.find(item => item.id === val.id)
@@ -369,7 +422,15 @@ export default {
         this.selectTask = null
         return false
       }
-      const res = this.tasksOptions.find(item => item.id === id)
+      let res
+      if (this.selectBy === 'task') res = this.tasksOptions.find(item => item.id === id)
+      if (this.selectBy === 'requirement') {
+        let taskInfoList = []
+        this.tasksByOptions.map(item => {
+          taskInfoList = [...taskInfoList, ...item.taskInfoList]
+        })
+        res = taskInfoList.find(item => item.id === id)
+      }
       this.tasksDetailList.push(res)
       this.form.taskList.push(res.id)
       this.selectTask = null
@@ -473,6 +534,11 @@ article {
   justify-content: center;
   align-items: center;
 }
+.task-option {  // 布局
+  display: flex;
+  align-items: center;
+  justify-content: space-between;
+}
 .belong-task {
   max-width: 500px;
   display: flex;

+ 7 - 4
src/views/workbench/person/index.vue

@@ -311,7 +311,7 @@ export default {
       userInfo: {},
       username: localStorage.getItem('username'),
       realname: localStorage.getItem('realname'),
-      nowDetailData: {}, // 当前日程详情
+      nowDetailData: {}, // 当前排期/日程详情
       showDetail: false,
       visibleSchedule: false, // 排期任务弹框
       detailXY: [0, 0], // 详情弹框位置
@@ -374,7 +374,7 @@ export default {
         this.$refs.bugTableDialog.bugGetTableList()
       }
     },
-    showSchedule(e) { // 查看日程详情
+    showSchedule(e) { // 查看排期/日程详情
       const res = this.calendarEvents.find(item => item.id === Number(e.event.id))
       this.nowDetailData = res.detailData
       this.showDetail = true
@@ -407,14 +407,16 @@ export default {
       this.createSchedule.data = arg
       this.createSchedule.visible = true
     },
-    editSchedule(data) { // 编辑日程弹框
+    editSchedule(data) { // 编辑日程/排期弹框
       if (data) {
         this.nowDetailData = data
       }
+      console.log(this.nowDetailData)
       const dayArr = this.nowDetailData.theDays.split(',')
-      const form = {
+      const form = { // 日程的form
         detailDayList: dayArr,
         id: this.nowDetailData.id,
+        bizName: this.nowDetailData.bizName,
         name: this.nowDetailData.name,
         dayList: Array.from(new Set([dayArr[0], dayArr[dayArr.length - 1]])),
         syncTeam: this.nowDetailData.syncTeam, // 是否同步 0 不同步 1同步
@@ -427,6 +429,7 @@ export default {
       if (this.nowDetailData.origin === 1) {
         this.updateSchedule.visible = true
       } else if (this.nowDetailData.origin === 0) {
+        this.DialogTitle = '编辑排期'
         this.visibleSchedule = true
       }
     },