Преглед изворни кода

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

qinzhipeng_v пре 5 година
родитељ
комит
9d2d2b7889

+ 10 - 23
src/views/projectManage/iteration/components/iterationTable.vue

@@ -66,7 +66,7 @@
       >
         <template slot-scope="scope">
           <el-button type="text" size="small" @click="editSchedule(scope.row)">编辑</el-button>
-          <el-button type="text" size="small" @click="confirmDel(scope.row)">删除</el-button>
+          <el-button type="text" size="small" @click="deleteSchedule(scope.row)">删除</el-button>
         </template>
       </el-table-column>
 
@@ -79,6 +79,7 @@
     <modify-schedule
       v-if="visibleSchedule"
       :visible.sync="visibleSchedule"
+      :is-delete.sync="isDelete"
       :detail-data="detailData"
       :title="DialogTitle"
       @update="listByTask(id)"
@@ -91,7 +92,7 @@ import moment from 'moment'
 import 'moment/locale/zh-cn'
 import imgUrl from '@/assets/麻将@2x.png'
 import { scheduleListByRequire } from '@/api/iteration.js'
-import { scheduleDelete, sortForTask } from '@/api/projectViewDetails'
+import { sortForTask } from '@/api/projectViewDetails'
 import modifySchedule from './modifySchedule'
 // import 'ant-design-vue/dist/antd.css'
 export default {
@@ -123,7 +124,8 @@ export default {
       visibleSchedule: false,
       detailData: null,
       taskScheduleEvent: [], // 排期类型
-      DialogTitle: '新建排期'
+      DialogTitle: '新建排期',
+      isDelete: false // 删除排期操作
     }
   },
   watch: {
@@ -181,26 +183,11 @@ export default {
       this.DialogTitle = '新建排期'
       this.visibleSchedule = true
     },
-    confirmDel(row) {
-      this.$confirm('是否删除排期?', '提示', {
-        confirmButtonText: '确定',
-        cancelButtonText: '取消',
-        type: 'warning'
-      }).then(() => {
-        this.deleteSchedule(row)
-      }).catch(() => {
-        this.$message({
-          type: 'info',
-          message: '已取消删除'
-        })
-      })
-    },
-    async deleteSchedule(row) { // 删除排期
-      const res = await scheduleDelete(row.id)
-      if (res.code === 200) {
-        this.listByTask(this.id)
-        this.$message({ message: '删除成功', type: 'success', duration: 1000, offset: 150 })
-      }
+    deleteSchedule(row) { // 删除排期
+      this.DialogTitle = '删除排期'
+      this.isDelete = true
+      this.visibleSchedule = true
+      this.detailData = row
     },
     editSchedule(row) { // 编辑排期
       this.DialogTitle = '编辑排期'

+ 99 - 4
src/views/projectManage/iteration/components/modifySchedule.vue

@@ -1,6 +1,15 @@
 <template>
-  <normal-dialog :show-dialog.sync="show" :title="title" :is-default-close="false" @confirm="confirmForm()" @cancel="cancel()">
-    <article>
+  <normal-dialog
+    :show-dialog.sync="show"
+    :title="title"
+    :is-default-close="false"
+    :submit-button="isDeleteStatus?'我知道了,删除':'确定'"
+    :buttom-type="isDeleteStatus?'danger':'primary'"
+    width="55%"
+    @confirm="confirmForm()"
+    @cancel="cancel()"
+  >
+    <article v-if="!isDeleteStatus">
       <el-form ref="form" :model="form" :rules="form_rules" label-width="100px" :label-position="'left'">
         <el-form-item label="排期类型" prop="type">
           <el-select v-model="form.type" clearable placeholder="请选择" style="width: 100%" :disabled="disabled">
@@ -53,6 +62,28 @@
         </div>
       </div>
     </article>
+    <article v-if="isDeleteStatus">
+      <div class="danger-img">
+        <img :src="dangerImg">
+      </div>
+      <div class="delete-title">
+        执行删除后,所有关联任务下的此排期均会被删除,并无法恢复,请谨慎操作!
+      </div>
+      <div class="people-list-show">
+        <p>参与人:</p>
+        <span>{{ peopleObjectList.join(',') }}</span>
+      </div>
+      <div class="task-list-show">
+        <p>关联任务:</p>
+        <div v-for="item in tasksDetailList" :key="'task'+item.id" class="task-list-item">
+          <div v-if="item.taskIdSting" class="item-id">{{ item.taskIdSting }}</div>
+          <div v-if="item.taskId" class="item-id">{{ item.taskId }}</div>
+          <div class="item-name"><span>{{ item.name }}</span></div>
+          <div class="item-qa">测试负责人:<span>{{ item.qaObject !== null?item.qaObject.name: '' }}</span></div>
+          <div class="item-rd">开发负责人:<span>{{ item.rdObject !== null?item.rdObject.name: '' }}</span></div>
+        </div>
+      </div>
+    </article>
   </normal-dialog>
 </template>
 <script>
@@ -63,7 +94,8 @@ import selDatePicker from '@/components/picker/SelDatePicker'
 // import { taskList } from '@/api/projectIndex'
 import { getTaskByRequireId } from '@/api/requirement'
 import { taskList as allTaskList, configShowTaskEnum } from '@/api/taskIndex'
-import { getSeprateDayInfo, scheduleCreate, scheduleGet, scheduleUpdate } from '@/api/projectViewDetails'
+import { getSeprateDayInfo, scheduleCreate, scheduleGet, scheduleUpdate, scheduleDelete } from '@/api/projectViewDetails'
+import danger from '@/assets/感叹@2x.png'
 export default {
   components: {
     searchPeople,
@@ -90,10 +122,16 @@ export default {
       type: Boolean,
       default: false,
       required: false
+    },
+    isDelete: {// 是否删除状态
+      type: Boolean,
+      default: false,
+      required: false
     }
   },
   data() {
     return {
+      dangerImg: danger,
       form_rules: {
         type: [{ required: true, message: '事件类型不能为空', trigger: 'blur' }],
         peopleList: [{ required: true, message: '参与人员不能为空', trigger: 'blur' }],
@@ -101,6 +139,7 @@ export default {
         taskList: [{ required: true, message: '关联任务不能为空', trigger: 'blur' }]
       },
       show: this.visible,
+      isDeleteStatus: this.isDelete,
       taskScheduleEvent: [],
       form: {
         bizId: localStorage.getItem('bizId'),
@@ -115,7 +154,8 @@ export default {
       selectTask: '', // 选择的任务id
       tasksOptions: [], // 任务下拉选项
       tasksDetailList: [], // 已有任务项目
-      loading: false
+      loading: false,
+      peopleObjectList: [] // 参与人
     }
   },
   watch: {
@@ -135,6 +175,14 @@ export default {
     },
     title(newV, oldV) {
       this.title = newV
+    },
+    isDelete: {
+      handler(newV, old) {
+        this.isDeleteStatus = newV
+        console.log(this.isDeleteStatus)
+      },
+      immediate: true,
+      deep: true
     }
   },
   created() {
@@ -163,6 +211,7 @@ export default {
       this.detailDayList = obj.dayList || []
       this.schedule = obj.seperateDaysNoHoliday
       this.tasksDetailList = obj.taskObjectList || []
+      this.peopleObjectList = obj.peopleObjectList.map(item => item.name) || []
     },
     async getType() {
       const resEnum = await configShowTaskEnum()
@@ -236,7 +285,19 @@ export default {
       this.$emit('update')
       this.cancel()
     },
+    async scheduleDelete() { // 删除排期
+      const res = await scheduleDelete(this.form.id)
+      if (res.code === 200) {
+        this.$message({ message: '删除成功', type: 'success', duration: 1000, offset: 150 })
+      }
+      this.$emit('update')
+      this.cancel()
+    },
     confirmForm() { // 确认提交表单
+      if (this.isDeleteStatus) {
+        this.scheduleDelete()
+        return
+      }
       this.$refs['form'].validate((valid) => {
         if (valid) {
           const params = _.cloneDeep(this.form)
@@ -247,7 +308,9 @@ export default {
     },
     cancel() { // 关闭弹框
       this.show = false
+      this.isDeleteStatus = false
       this.$emit('update:visible', this.show)
+      this.$emit('update:isDelete', this.isDeleteStatus)
     }
   }
 }
@@ -300,4 +363,36 @@ article {
     }
   }
 }
+.danger-img {
+  width: 100%;
+  padding: 0 60px 50px 60px;
+  margin-bottom: 50px;
+  position: relative;
+  img {
+    height: 50px;
+    width: 50px;
+    position: absolute;
+    left: 50%;
+    transform: translate(-50%,0);
+  }
+}
+.delete-title {
+  width: 100%;
+  padding: 0 60px 100px 60px;
+  color: #333B4A;
+  font-size: 18px;
+  text-align: center;
+}
+.people-list-show {
+  width: 100%;
+  padding: 0 60px 50px 60px;
+  p {
+    color: #666666;
+    font-size: 14px;
+    margin-bottom: 20px;
+  }
+  span {
+    color: #333333;
+  }
+}
 </style>

+ 8 - 3
src/views/workbench/team/index.vue

@@ -47,7 +47,7 @@
         </el-tabs>
         <div class="detail-info">
           <div v-show="activeSchedule === '1'" class="member-list">
-            <el-checkbox v-model="checkAllMember" style="margin: 0 20px 0 5px" @change="checkAllChange">全选</el-checkbox>
+            <el-checkbox v-model="checkAllMember" :indeterminate="isIndeterminate" style="margin: 0 20px 0 5px" @change="checkAllChange">全选</el-checkbox>
             <el-checkbox-group v-model="checkedMembers" @change="membersChange">
               <el-checkbox v-for="item in memberList" :key="item.idap" :label="item.idap">{{ item.name }}</el-checkbox>
             </el-checkbox-group>
@@ -146,6 +146,7 @@ export default {
       memberList: [], // 团队成员列表
       checkAllMember: false, // 选择全部成员
       checkedMembers: [], // 被选中的成员列表
+      isIndeterminate: false,
       calendarEvents: [// 日程图标数据
         {
           title: 'Event Now',
@@ -214,9 +215,13 @@ export default {
     },
     checkAllChange(val) { // 成员全部选择
       this.checkedMembers = val ? this.memberList.map(item => item.idap) : []
-      this.membersChange()
+      this.isIndeterminate = false
+      this.queryTeamWorkListByTime(this.calendarView)
     },
-    membersChange() { // 成员变动
+    membersChange(value) { // 成员变动
+      const checkedCount = value.length
+      this.checkAllMember = checkedCount === this.memberList.length
+      this.isIndeterminate = checkedCount > 0 && checkedCount < this.memberList.length
       this.queryTeamWorkListByTime(this.calendarView)
     },
     handleTeams(e) { // 团队变动