|
@@ -176,8 +176,11 @@
|
|
|
</div>
|
|
|
<section class="main-section">
|
|
|
<div class="allTips">
|
|
|
- <div class="tips"><i class="el-icon-warning-outline" /> 每个任务仅支持一次提测和一次准出,请合理拆解后任务再排期</div><br>
|
|
|
- <div class="allTips">
|
|
|
+ <el-radio-group v-model="listOrGannt" size="small" style="margin-left: 10px">
|
|
|
+ <el-radio-button label="列表" />
|
|
|
+ <el-radio-button label="甘特图" />
|
|
|
+ </el-radio-group>
|
|
|
+ <div v-show="listOrGannt === '列表'" class="allTips">
|
|
|
<div v-if="BackToTheLatest" class="Scheduling" @click="GetRequireScheduleHistory"><i class="el-icon-refresh" /> 回到最新</div>
|
|
|
<div v-if="Latest" align="left" class="Scheduling" @click="scheduleHiHide"><div class="el-icon-document" /> 排期变更记录</div>
|
|
|
<download :id="requirementId" :name="'需求'" />
|
|
@@ -185,7 +188,7 @@
|
|
|
</div>
|
|
|
</section>
|
|
|
|
|
|
- <el-container>
|
|
|
+ <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" />
|
|
@@ -207,6 +210,36 @@
|
|
|
<div v-if="SchedulingContent.length === 0" style="width: 270px; margin: 50% 20px; text-align: center;"> 暂无排期变更记录!</div>
|
|
|
</el-aside>
|
|
|
</el-container>
|
|
|
+ <gannt-views v-if="listOrGannt === '甘特图'" />
|
|
|
+ <div class="detail-info border-top">
|
|
|
+ <el-divider />
|
|
|
+ <el-form ref="form_query" :inline="true" :model="form_query" class="Layout_space_start" label-position="left" label-width="140px">
|
|
|
+ <el-form-item
|
|
|
+ v-if="brdPassRealTime"
|
|
|
+ label="BRD评审通过时间:"
|
|
|
+ >
|
|
|
+ <el-date-picker v-model="form_query.brdPassRealTime" type="date" :clearable="false" placeholder="请选择" format="yyyy.MM.dd" value-format="yyyy.MM.dd" style="width: 100%;" size="small" @change="setChangeArea" />
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item
|
|
|
+ v-if="prdPassRealTime"
|
|
|
+ label="PRD评审通过时间:"
|
|
|
+ >
|
|
|
+ <el-date-picker v-model="form_query.prdPassRealTime" type="date" :clearable="false" placeholder="请选择" format="yyyy.MM.dd" value-format="yyyy.MM.dd" style="width: 100%;" size="small" @change="setChangeArea" />
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item
|
|
|
+ v-if="techInRealTime"
|
|
|
+ label="技术准入时间:"
|
|
|
+ >
|
|
|
+ <el-date-picker v-model="form_query.techInRealTime" type="date" :clearable="false" placeholder="请选择" format="yyyy.MM.dd" value-format="yyyy.MM.dd" style="width: 100%;" size="small" @change="setChangeArea" />
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item
|
|
|
+ v-if="onlineRealTime"
|
|
|
+ label="实际上线时间:"
|
|
|
+ >
|
|
|
+ <el-date-picker v-model="form_query.onlineRealTime" type="date" :clearable="false" placeholder="请选择" format="yyyy.MM.dd" value-format="yyyy.MM.dd" style="width: 100%;" size="small" @change="setChangeArea" />
|
|
|
+ </el-form-item>
|
|
|
+ </el-form>
|
|
|
+ </div>
|
|
|
</section>
|
|
|
<section class="main-section">
|
|
|
<div class="el-main-title">
|
|
@@ -303,6 +336,34 @@
|
|
|
@childValInput="childVal"
|
|
|
@click.stop
|
|
|
/>
|
|
|
+ <el-dialog
|
|
|
+ title="状态变更"
|
|
|
+ :visible.sync="dialogStatusVisible"
|
|
|
+ width="30%"
|
|
|
+ class="public_task"
|
|
|
+ >
|
|
|
+ <div class="blueStripe" />
|
|
|
+ <div align="center">
|
|
|
+ <el-form ref="form_query" :inline="true" :model="form_query" :rules="rules" label-position="left" label-width="158px">
|
|
|
+ <el-form-item v-if="statusName === 'BRD评审通过'" :label="statusName + '时间:'" prop="brdPassRealTime">
|
|
|
+ <el-date-picker v-model="form_query.brdPassRealTime" type="date" placeholder="请选择" format="yyyy.MM.dd" value-format="yyyy.MM.dd" style="width: 100%;" />
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item v-if="statusName === 'PRD评审通过'" :label="statusName + '时间:'" prop="prdPassRealTime">
|
|
|
+ <el-date-picker v-model="form_query.prdPassRealTime" type="date" :clearable="false" placeholder="请选择" format="yyyy.MM.dd" value-format="yyyy.MM.dd" style="width: 100%;" />
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item v-if="statusName === '技术准入'" :label="statusName + '时间:'" prop="techInRealTime">
|
|
|
+ <el-date-picker v-model="form_query.techInRealTime" type="date" placeholder="请选择" format="yyyy.MM.dd" value-format="yyyy.MM.dd" style="width: 100%;" />
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item v-if="statusName === '已上线'" :label="statusName + '时间:'" prop="onlineRealTime">
|
|
|
+ <el-date-picker v-model="form_query.onlineRealTime" type="date" placeholder="请选择" format="yyyy.MM.dd" value-format="yyyy.MM.dd" style="width: 100%;" />
|
|
|
+ </el-form-item>
|
|
|
+ </el-form>
|
|
|
+ </div>
|
|
|
+ <span slot="footer" class="dialog-footer">
|
|
|
+ <el-button @click="dialogStatusVisible = false">取 消</el-button>
|
|
|
+ <el-button type="primary" @click="setChangeArea">确 定</el-button>
|
|
|
+ </span>
|
|
|
+ </el-dialog>
|
|
|
</el-container>
|
|
|
</div>
|
|
|
</template>
|
|
@@ -341,6 +402,7 @@ import image_url from '@/assets/home_images/home_u.png'
|
|
|
import createdBug from '@/views/projectManage/bugList/file/createdBug'
|
|
|
import tasksList from './components/taskList'
|
|
|
import dataStatistics from './components/dataStatistics'
|
|
|
+import moment from 'moment'
|
|
|
// import scheduleList from './components/scheduleList'
|
|
|
import bugTableDialog from '@/views/projectManage/bugList/details/bugTableDialog' // 缺陷表格
|
|
|
import schedule from '@/views/projectManage/schedule' // 排期锁定弹窗
|
|
@@ -350,6 +412,7 @@ import demand from '@/views/projectManage/components/demand.vue'
|
|
|
import '@/styles/PublicStyle/index.scss'
|
|
|
import record from '@/views/projectManage/components/record.vue'
|
|
|
import timeLine from '@/views/projectManage/components/timeLine.vue'
|
|
|
+import ganntViews from './components/ganntViews'
|
|
|
export default {
|
|
|
components: {
|
|
|
searchPeople,
|
|
@@ -366,7 +429,8 @@ export default {
|
|
|
download,
|
|
|
record,
|
|
|
timeLine,
|
|
|
- demand
|
|
|
+ demand,
|
|
|
+ ganntViews
|
|
|
},
|
|
|
filters: {
|
|
|
ellipsis(value, num) {
|
|
@@ -389,8 +453,21 @@ export default {
|
|
|
children: 'childRqmtOrnts',
|
|
|
multiple: true
|
|
|
},
|
|
|
+ rules: {
|
|
|
+ brdPassRealTime: [{ required: true, message: '请输入BRD评审通过时间', trigger: 'change' }],
|
|
|
+ prdPassRealTime: [{ required: true, message: '请输入PRD评审通过时间', trigger: 'change' }],
|
|
|
+ techInRealTime: [{ required: true, message: '请输入技术准入时间', trigger: 'change' }],
|
|
|
+ onlineRealTime: [{ required: true, message: '请输入实际上线时间', trigger: 'change' }]
|
|
|
+ },
|
|
|
Latest: true,
|
|
|
+ statusName: '',
|
|
|
+ statusValue: '',
|
|
|
+ dialogStatusVisible: false,
|
|
|
demandDirection: [], // 需求方向option
|
|
|
+ brdPassRealTime: false, // BRD评审通过时间
|
|
|
+ prdPassRealTime: false, // PRD评审通过时间
|
|
|
+ techInRealTime: false, // 技术准入
|
|
|
+ onlineRealTime: false, // 实际上线
|
|
|
optionName: 'first',
|
|
|
visible: false, // Hold任务
|
|
|
ScheduId: '', // 排期ID
|
|
@@ -424,7 +501,8 @@ export default {
|
|
|
taskScheduleList: [], // 排期数据
|
|
|
lockHide: false, // 隐藏排期变更记录
|
|
|
isScheduleLocked: '', // 锁定状态1锁定0未锁定
|
|
|
- SchedulingContent: [] // 排期历史变更记录
|
|
|
+ SchedulingContent: [], // 排期历史变更记录
|
|
|
+ listOrGannt: '列表'
|
|
|
}
|
|
|
},
|
|
|
computed: {
|
|
@@ -492,6 +570,15 @@ export default {
|
|
|
// clickBackToTheLatest() {
|
|
|
// this.$refs.ScheduleEvent.rowDrop()
|
|
|
// },
|
|
|
+ setChangeArea() {
|
|
|
+ this.$refs.form_query.validate((valid) => {
|
|
|
+ if (valid) {
|
|
|
+ this.changeArea()
|
|
|
+ } else {
|
|
|
+ this.$message({ message: '还有必填项未填写', type: 'error', duration: 1000, offset: 150 })
|
|
|
+ }
|
|
|
+ })
|
|
|
+ },
|
|
|
async changeArea(e) { // area修改
|
|
|
const requirementInfo = _.cloneDeep(this.form_query)
|
|
|
requirementInfo.rqmtProposer = requirementInfo.rqmtProposer ? requirementInfo.rqmtProposer.join() : null
|
|
@@ -504,8 +591,10 @@ export default {
|
|
|
if (requirementInfo.referredClientType !== null) {
|
|
|
requirementInfo.referredClientType = requirementInfo.referredClientType.join()
|
|
|
}
|
|
|
+ requirementInfo.status = this.statusValue
|
|
|
const res = await updateRequirement(requirementInfo)
|
|
|
if (res.code === 200) {
|
|
|
+ this.dialogStatusVisible = false
|
|
|
this.$message({ message: '修改成功', type: 'success', duration: 1000, offset: 150 })
|
|
|
}
|
|
|
this.getRequirementById()
|
|
@@ -606,6 +695,28 @@ export default {
|
|
|
this.form_query.rqmtProposer = this.form_query.rqmtProposer.split(',')
|
|
|
}
|
|
|
}
|
|
|
+ this.availableStatusList.map(item => {
|
|
|
+ if (item.name === 'BRD评审通过') {
|
|
|
+ if (this.form_query.status >= item.code) {
|
|
|
+ this.brdPassRealTime = true
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (item.name === 'PRD评审通过') {
|
|
|
+ if (this.form_query.status >= item.code) {
|
|
|
+ this.prdPassRealTime = true
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (item.name === '技术准入') {
|
|
|
+ if (this.form_query.status >= item.code) {
|
|
|
+ this.techInRealTime = true
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (item.name === '已上线') {
|
|
|
+ if (this.form_query.status >= item.code) {
|
|
|
+ this.onlineRealTime = true
|
|
|
+ }
|
|
|
+ }
|
|
|
+ })
|
|
|
},
|
|
|
async getCommentList() { // 获取需求评论
|
|
|
const res = await getCommentList({ type: 4, joinId: this.$route.query.id })
|
|
@@ -631,6 +742,16 @@ export default {
|
|
|
}
|
|
|
},
|
|
|
async updateStatus(status) { // 修改状态
|
|
|
+ if (status.label === 'PRD评审通过' || status.label === 'BRD评审通过' || status.label === '技术准入' || status.label === '已上线') {
|
|
|
+ this.statusName = status.label
|
|
|
+ this.statusValue = status.value
|
|
|
+ this.dialogStatusVisible = true
|
|
|
+ status.label === 'BRD评审通过' ? this.form_query.brdPassRealTime = moment().locale('zh-cn').format('YYYY.MM.DD') : '' // BRD评审通过时间
|
|
|
+ status.label === 'PRD评审通过' ? this.form_query.prdPassRealTime = moment().locale('zh-cn').format('YYYY.MM.DD') : '' // PRD评审通过时间
|
|
|
+ status.label === '技术准入' ? this.form_query.techInRealTime = moment().locale('zh-cn').format('YYYY.MM.DD') : '' // 技术准入
|
|
|
+ status.label === '已上线' ? this.form_query.onlineRealTime = moment().locale('zh-cn').format('YYYY.MM.DD') : '' // 实际上线
|
|
|
+ return false
|
|
|
+ }
|
|
|
const res = await updateRequirementStatus({
|
|
|
id: this.$route.query.id,
|
|
|
status: status.value,
|
|
@@ -753,7 +874,7 @@ export default {
|
|
|
}
|
|
|
.demo-form-inline {
|
|
|
.el-form-item {
|
|
|
- width: 33%;
|
|
|
+ width: 20%;
|
|
|
margin-right: 0;
|
|
|
}
|
|
|
}
|
|
@@ -822,5 +943,14 @@ export default {
|
|
|
.el-btn-size {
|
|
|
margin: 10px 30px;
|
|
|
}
|
|
|
+.border-top {
|
|
|
+ padding: 0 20px 10px !important;
|
|
|
+ >>>.el-divider--horizontal {
|
|
|
+ display: block;
|
|
|
+ height: 1px;
|
|
|
+ width: 100%;
|
|
|
+ margin: 10px 0;
|
|
|
+}
|
|
|
+}
|
|
|
</style>
|
|
|
|