|
@@ -114,33 +114,40 @@
|
|
|
<div class="el-main-title">
|
|
|
<div class="title-left-icon" />
|
|
|
<div class="title-left-name">
|
|
|
- <div class="require-plan">
|
|
|
- 需求计划
|
|
|
- <div> 🔒已锁定</div><br>
|
|
|
- <span><i class="el-icon-warning-outline" />每个任务仅支持一次提测和一次准出,请合理拆解后任务再排期</span>
|
|
|
+ <div>需求计划
|
|
|
+ <el-tooltip class="item" effect="dark" :content="isScheduleLocked === 1? '点击解锁排期' : '点击锁定排期'" placement="top">
|
|
|
+ <span class="titleStatus" @click="changeSchedule"><img :src="lock" style="width: 12.31px;display: inline-block; vertical-align: text-top;"> {{ isScheduleLocked === 1 ? '已锁定' : '未锁定' }}</span>
|
|
|
+ </el-tooltip>
|
|
|
</div>
|
|
|
- </div>
|
|
|
+ </div><br>
|
|
|
</div>
|
|
|
+ <section class="main-section">
|
|
|
+ <div class="allTips">
|
|
|
+ <div class="tips"><i class="el-icon-warning-outline" />每个任务仅支持一次提测和一次准出,请合理拆解后任务再排期</div>
|
|
|
+ <div v-if="BackToTheLatest" class="Scheduling" @click="GetRequireScheduleHistory"><img :src="scheduling"> 回到最新</div>
|
|
|
+ <div align="left" class="Scheduling" @click="scheduleHiHide"><img :src="scheduling"> 排期变更记录</div>
|
|
|
+ </div>
|
|
|
+ </section>
|
|
|
+
|
|
|
<el-container>
|
|
|
<el-main style="padding: 0;">
|
|
|
- <schedule-list :id="requirementId" :type-list="taskScheduleEvent" :required-list="taskScheduleList" class-name="white" :all="true" :no-move="false" />
|
|
|
+ <schedule-list :id="requirementId" ref="ScheduleEvent" :type-list="taskScheduleEvent" :required-list="taskScheduleList" class-name="white" :all="true" :no-move="false" />
|
|
|
</el-main>
|
|
|
- <el-aside>
|
|
|
- <div align="center" class="Scheduling">排期变更记录</div>
|
|
|
- <el-timeline style=" padding: 10px 0 0 10px; width: 270px;">
|
|
|
- <el-timeline-item
|
|
|
- v-for="(item, index) in SchedulingContent"
|
|
|
- :key="index"
|
|
|
- icon="el-icon-goods"
|
|
|
- color="#f6f6f6"
|
|
|
- class="timeline"
|
|
|
- @click.native="clickScheduling(item)"
|
|
|
- >
|
|
|
- <div>{{ item.modifyTime }}</div>
|
|
|
- <div>{{ item.operatorObject.name !== null ? item.operatorObject.name : '' }}{{ item.operation }}</div>
|
|
|
- <div>{{ item.remark }}</div>
|
|
|
- </el-timeline-item>
|
|
|
- </el-timeline>
|
|
|
+ <el-aside v-if="lockHide" class="SchedulingAside">
|
|
|
+ <div v-for="(item, index) in SchedulingContent" :key="index" class="SchedulingDiv" @click="clickScheduling(item)">
|
|
|
+ <div class="SchedulingTow">
|
|
|
+ <img v-if="item.type === 1" :src="lock" class="image">
|
|
|
+ <img v-if="item.type === 2" :src="Unlock" class="image">
|
|
|
+ </div>
|
|
|
+ <i v-show="index < SchedulingContent.length - 1" />
|
|
|
+ <div class="timeline">
|
|
|
+ <div class="modifyTime">{{ item.modifyTime }}</div>
|
|
|
+ <div>{{ item.operatorObject.name !== null ? item.operatorObject.name : '' }} <span class="btn">{{ item.operation }}</span></div>
|
|
|
+ <div v-if="item.remarkTypeName"><span class="modifyTime">{{ '解锁原因 : ' }}</span>{{ item.remarkTypeName }}</div>
|
|
|
+ <div v-if="item.remark"><span class="modifyTime">{{ '具体描述 : ' }}</span>{{ item.remark }}</div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div v-if="SchedulingContent.length === 0" style="width: 270px; text-align: center;"> 暂无排期变更记录!</div>
|
|
|
</el-aside>
|
|
|
</el-container>
|
|
|
</section>
|
|
@@ -222,6 +229,9 @@
|
|
|
<!-- 删除 -->
|
|
|
<openDialog v-if="task_open" ref="task_createdUpdata" :no-jump="true" @change="reloadList" />
|
|
|
<createdBug v-if="bug_open" ref="createdBug" :required="requirementId" @reloadList="reloadList" />
|
|
|
+ <!-- 排期锁定 -->
|
|
|
+ <schedule :visible.sync="scheduleVisble" :name="'需求'" :is-schedule-locked="isScheduleLocked" :require-id="requirementId" @updataData="GetRequireScheduleHistory" />
|
|
|
+ <!-- 排期锁定 -->
|
|
|
<drawer
|
|
|
ref="drawer"
|
|
|
title="需求成员"
|
|
@@ -250,6 +260,7 @@ import {
|
|
|
iterationList,
|
|
|
getCommentList,
|
|
|
addComment,
|
|
|
+ listByRequire,
|
|
|
scheduleGetRequireScheduleHistory,
|
|
|
scheduleGetHistoryScheduleById
|
|
|
} from '@/api/requirement.js'
|
|
@@ -265,6 +276,10 @@ import tasksList from './components/taskList'
|
|
|
import dataStatistics from './components/dataStatistics'
|
|
|
import scheduleList from './components/scheduleList'
|
|
|
import bugTableDialog from '@/views/projectManage/bugList/details/bugTableDialog' // 缺陷表格
|
|
|
+import scheduling from '@/assets/scheduling.png'
|
|
|
+import lock from '@/assets/lock.png' // 排期锁定图标
|
|
|
+import Unlock from '@/assets/Unlock.png' // 排期锁定图标
|
|
|
+import schedule from '@/views/projectManage/schedule' // 排期锁定弹窗
|
|
|
export default {
|
|
|
components: {
|
|
|
searchPeople,
|
|
@@ -276,7 +291,8 @@ export default {
|
|
|
tasksList,
|
|
|
dataStatistics,
|
|
|
scheduleList,
|
|
|
- bugTableDialog
|
|
|
+ bugTableDialog,
|
|
|
+ schedule
|
|
|
},
|
|
|
filters: {
|
|
|
ellipsis(value, num) {
|
|
@@ -289,6 +305,12 @@ export default {
|
|
|
},
|
|
|
data() {
|
|
|
return {
|
|
|
+ BackToTheLatest: false, // 回到最新
|
|
|
+ LockState: {}, // 锁定状态
|
|
|
+ Unlock: Unlock, // 解锁排期
|
|
|
+ lock: lock, // 锁定排期
|
|
|
+ scheduleVisble: false, // 排期锁定
|
|
|
+ scheduling: scheduling, // 排期变更记录图标
|
|
|
activeName: '1', // 顶部tab切换
|
|
|
userInformation: localStorage.getItem('username'),
|
|
|
userNames: localStorage.getItem('realname'),
|
|
@@ -314,6 +336,8 @@ export default {
|
|
|
commentContent: null, // 评论内容
|
|
|
comments: [], // 评论列表
|
|
|
taskScheduleList: [], // 排期数据
|
|
|
+ lockHide: false, // 隐藏排期变更记录
|
|
|
+ isScheduleLocked: '', // 锁定状态1锁定0未锁定
|
|
|
SchedulingContent: [] // 排期历史变更记录
|
|
|
}
|
|
|
},
|
|
@@ -339,13 +363,26 @@ export default {
|
|
|
},
|
|
|
methods: {
|
|
|
async GetRequireScheduleHistory() {
|
|
|
+ this.scheduleVisble = false
|
|
|
const res = await scheduleGetRequireScheduleHistory(this.requirementId)
|
|
|
this.SchedulingContent = res.data
|
|
|
+ const res1 = await listByRequire(this.requirementId)
|
|
|
+ this.BackToTheLatest = false // 回到最新
|
|
|
+ this.lockHide = false // 隐藏排期变更记录
|
|
|
+ this.taskScheduleList = res1.data.schedulDetailResponses
|
|
|
+ this.isScheduleLocked = res1.data.isScheduleLocked // 锁定状态1锁定0未锁定
|
|
|
},
|
|
|
async clickScheduling(ele) {
|
|
|
const res = await scheduleGetHistoryScheduleById(ele.id)
|
|
|
this.taskScheduleList = res.data.schedulDetailResponses
|
|
|
+ this.BackToTheLatest = true
|
|
|
},
|
|
|
+ changeSchedule() { // 修改锁定状态
|
|
|
+ this.scheduleVisble = true
|
|
|
+ },
|
|
|
+ // clickBackToTheLatest() {
|
|
|
+ // this.$refs.ScheduleEvent.rowDrop()
|
|
|
+ // },
|
|
|
async changeArea(e) { // area修改
|
|
|
const requirementInfo = _.cloneDeep(this.form_query)
|
|
|
requirementInfo.pm = requirementInfo.pm.idap
|
|
@@ -461,6 +498,10 @@ export default {
|
|
|
this.$refs.createdBug.init(1)
|
|
|
})
|
|
|
},
|
|
|
+ scheduleHiHide() { // 排期变更显示隐藏
|
|
|
+ this.lockHide = !this.lockHide
|
|
|
+ this.lockHide === false ? this.BackToTheLatest = false : ''
|
|
|
+ },
|
|
|
jump(page, id) { // 跳转
|
|
|
this.$router.push({ name: page, query: { id: id }})
|
|
|
},
|
|
@@ -500,26 +541,8 @@ export default {
|
|
|
}
|
|
|
.main-section {
|
|
|
@include main-section;
|
|
|
- .require-plan {
|
|
|
- display: flex;
|
|
|
- align-items: center;
|
|
|
- span {
|
|
|
- margin-left: 20px;
|
|
|
- color: #E6A23C;
|
|
|
- font-size: 12px;
|
|
|
- }
|
|
|
- }
|
|
|
- .Scheduling {
|
|
|
- margin:0px 30px 20px 0px;
|
|
|
- cursor: pointer;
|
|
|
- }
|
|
|
- .timeline {
|
|
|
- padding: 2px;
|
|
|
- cursor: pointer;
|
|
|
- }
|
|
|
- .timeline:hover {
|
|
|
- color:#409EFF !important;
|
|
|
- }
|
|
|
+ line-height: 20px;
|
|
|
+
|
|
|
.detail-info {
|
|
|
padding: 0 34px 20px 34px;
|
|
|
/deep/.el-input__inner{
|