|
@@ -98,72 +98,6 @@
|
|
|
<div class="title-left-name">基础信息</div>
|
|
|
</div>
|
|
|
<BasicsCode :value="form_query" @update="getRequirementById" />
|
|
|
- <div class="detail-info">
|
|
|
- <el-form :inline="true" :model="form_query" class="demo-form-inline" label-position="left" label-width="100px">
|
|
|
- <el-form-item label="PM:">
|
|
|
- <search-people :value.sync="form_query.pm" :clearable="false" @change="changeArea" />
|
|
|
- </el-form-item>
|
|
|
- <el-form-item label="开发Leader:">
|
|
|
- <div v-if="show2" class="public_Jump" @click="show2 = false">{{ form_query.pm }} <i class="el-icon-edit" /></div>
|
|
|
- <search-people v-if="show2 === false" :value.sync="form_query.pm" :clearable="false" @change="changeArea" @blur="show2 = true" />
|
|
|
- </el-form-item>
|
|
|
- <el-form-item label="测试Leader:">
|
|
|
- <search-people :value.sync="form_query.pm" :clearable="false" @change="changeArea" />
|
|
|
- </el-form-item>
|
|
|
- </el-form>
|
|
|
- <el-form :inline="true" :model="form_query" class="demo-form-inline" label-position="left" label-width="100px">
|
|
|
- <el-form-item label="所属项目:" class="module">
|
|
|
- <div v-if="form_query.belongingProject !== -1" @click="jump('项目详情',form_query.belongingProject)">{{ form_query.belongingProjectName }}</div>
|
|
|
- <template v-else>{{ form_query.belongingProjectName }}</template>
|
|
|
- </el-form-item>
|
|
|
- <el-form-item label="所属迭代:">
|
|
|
- <el-select v-model="form_query.iterationId" placeholder="请选择" size="small" @change="changeArea">
|
|
|
- <el-option v-for="(item,index) in iterationList" :key="item.name + index" :label="item.name" :value="item.id" />
|
|
|
- </el-select>
|
|
|
- </el-form-item>
|
|
|
- <el-form-item label="PM:">
|
|
|
- <search-people :value.sync="form_query.pm" :clearable="false" @change="changeArea" />
|
|
|
- </el-form-item>
|
|
|
- </el-form>
|
|
|
- <el-form :inline="true" :model="form_query" class="demo-form-inline" label-position="left" label-width="100px">
|
|
|
- <el-form-item label="需求方向:">
|
|
|
- <el-cascader v-model="form_query.rqmtOrntIds" size="small" collapse-tags :props="props" :options="demandDirection" placeholder="请选择" @change="changeArea" />
|
|
|
- </el-form-item>
|
|
|
- <el-form-item label="需求来源:">
|
|
|
- <el-select v-model="form_query.sourceType" size="small" filterable placeholder="请选择" @change="changeArea">
|
|
|
- <el-option v-for="(item,index) in sourceTypeList" :key="item.msg + index" :label="item.msg" :value="item.code" />
|
|
|
- </el-select>
|
|
|
- </el-form-item>
|
|
|
- <el-form-item label="需求提出人:">
|
|
|
- <search-people :value.sync="form_query.rqmtProposer" :clearable="false" :multiple="true" @change="changeArea" />
|
|
|
- </el-form-item>
|
|
|
- </el-form>
|
|
|
- <el-form :inline="true" :model="form_query" class="demo-form-inline" label-position="left" label-width="100px">
|
|
|
- <el-form-item label="优先级:">
|
|
|
- <el-select v-model="form_query.priority" size="small" filterable placeholder="请选择" @change="changeArea">
|
|
|
- <el-option v-for="(item,index) in priorityList" :key="item.msg + index" :label="item.msg" :value="item.code" />
|
|
|
- </el-select>
|
|
|
- </el-form-item>
|
|
|
- <el-form-item label="是否跟版:">
|
|
|
- <el-select v-model="form_query.dependOnRelease" size="small" filterable placeholder="请选择" @change="changeArea">
|
|
|
- <el-option v-for="(item,index) in dependList" :key="item.msg + index" :label="item.msg" :value="item.code" />
|
|
|
- </el-select>
|
|
|
- </el-form-item>
|
|
|
- <el-form-item v-if="form_query.dependOnRelease === 1" label="跟版客户端:">
|
|
|
- <el-select v-model="form_query.referredClientType" size="small" multiple filterable placeholder="请选择" @change="changeArea">
|
|
|
- <el-option v-for="(item,index) in appClient" :key="item.msg + index" :label="item.msg" :value="item.code" />
|
|
|
- </el-select>
|
|
|
- </el-form-item>
|
|
|
- </el-form>
|
|
|
- <el-form :model="form_query" class="demo-form-inline" label-position="left" label-width="100px">
|
|
|
- <el-form-item label="BRD链接:" class="PRD">
|
|
|
- <span class="PRD-link"><a :href="form_query.brdUrl" target="_blank">{{ form_query.brdUrl }}</a></span>
|
|
|
- </el-form-item>
|
|
|
- <el-form-item label="PRD链接:" prop="mrdUrl" class="PRD">
|
|
|
- <span class="PRD-link"><a :href="form_query.mrdUrl" target="_blank">{{ form_query.mrdUrl }}</a></span>
|
|
|
- </el-form-item>
|
|
|
- </el-form>
|
|
|
- </div>
|
|
|
</section>
|
|
|
<section class="main-section">
|
|
|
<div class="el-main-title">
|
|
@@ -184,7 +118,7 @@
|
|
|
v-if="!form_query.needGrey || isScheduleLocked === 1"
|
|
|
class="titleStatus"
|
|
|
:class="isScheduleLocked === 1 ? 'el-icon-lock' : 'el-icon-unlock'"
|
|
|
- @click="changeSchedule"
|
|
|
+ @click="scheduleVisble = true"
|
|
|
>
|
|
|
{{ isScheduleLocked === 1 ? '已锁定' : '未锁定' }}
|
|
|
</span>
|
|
@@ -401,22 +335,18 @@ import {
|
|
|
updateRequirementStatus,
|
|
|
updateRequirement,
|
|
|
deleteRequirement,
|
|
|
- showRequirementEnum,
|
|
|
- iterationList,
|
|
|
getCommentList,
|
|
|
addComment,
|
|
|
listByRequire,
|
|
|
requirementHold,
|
|
|
requirementUnhold,
|
|
|
- configShowRequireStatusEnum,
|
|
|
+ // configShowRequireStatusEnum,
|
|
|
scheduleGetRequireScheduleHistory,
|
|
|
- scheduleGetHistoryRequireScheduleById,
|
|
|
+ scheduleGetHistoryRequireScheduleById
|
|
|
// scheduleGetHistoryScheduleById,
|
|
|
- settingQueryBizRqmtOrntList
|
|
|
+ // settingQueryBizRqmtOrntList
|
|
|
} from '@/api/requirement.js'
|
|
|
-import { projectGetMemberList } from '@/api/drewer'
|
|
|
import { configShowTaskEnum } from '@/api/taskIndex'
|
|
|
-import searchPeople from '@/components/select/searchPeople'
|
|
|
import textArea from '@/components/input/textArea'
|
|
|
import drawer from '@/views/projectManage/Drawer'
|
|
|
import createRequirement from '@/views/projectManage/requirement/list/create.vue'
|
|
@@ -426,7 +356,6 @@ 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' // 排期锁定弹窗
|
|
|
import urgent from '@/assets/urgent.png'
|
|
@@ -439,7 +368,6 @@ import ganntViews from './components/ganntViews'
|
|
|
import '@/styles/PublicStyle/index.scss'
|
|
|
export default {
|
|
|
components: {
|
|
|
- searchPeople,
|
|
|
textArea,
|
|
|
drawer,
|
|
|
createRequirement,
|
|
@@ -469,18 +397,8 @@ export default {
|
|
|
return {
|
|
|
urgent: urgent,
|
|
|
showunlock: true,
|
|
|
- show2: true,
|
|
|
- activeTitle: '1', // 默认展示列表视图
|
|
|
- taskShow: 1, // 默认展示仅任务
|
|
|
- taskArray: [{ code: 1, name: '仅任务' }, { code: 2, name: '仅子任务' }, { code: 3, name: '所有任务' }], // 需求下任务展示
|
|
|
textarea2: '',
|
|
|
HoldTask: '',
|
|
|
- props: {
|
|
|
- value: 'id',
|
|
|
- label: 'rqmtOrntName',
|
|
|
- children: 'childRqmtOrnts',
|
|
|
- multiple: true
|
|
|
- },
|
|
|
rules: {
|
|
|
brdPassRealTime: [{ required: true, message: '请输入BRD评审通过时间', trigger: 'change' }],
|
|
|
prdPassRealTime: [{ required: true, message: '请输入PRD评审通过时间', trigger: 'change' }],
|
|
@@ -491,7 +409,6 @@ export default {
|
|
|
statusName: '',
|
|
|
statusValue: '',
|
|
|
dialogStatusVisible: false,
|
|
|
- demandDirection: [], // 需求方向option
|
|
|
brdPassRealTime: false, // BRD评审通过时间
|
|
|
prdPassRealTime: false, // PRD评审通过时间
|
|
|
techInRealTime: false, // 技术准入
|
|
@@ -503,16 +420,10 @@ export default {
|
|
|
LockState: {}, // 锁定状态
|
|
|
scheduleVisble: false, // 排期锁定
|
|
|
activeName: '1', // 顶部tab切换
|
|
|
- userInformation: localStorage.getItem('username'),
|
|
|
- userNames: localStorage.getItem('realname'),
|
|
|
textarea: '', // 评论
|
|
|
requirementId: Number(this.$route.query.id), // 需求id
|
|
|
- statusList: [], // 状态列表
|
|
|
- priorityList: [], // 优先级列表
|
|
|
- sourceTypeList: [], // 需求来源列表
|
|
|
- appClient: [], // 跟版客户端列表
|
|
|
+ // statusList: [], // 状态列表
|
|
|
taskScheduleEvent: [], // 排期类型列表
|
|
|
- dependList: [{ msg: '否', code: 0 }, { msg: '是', code: 1 }], // 是否跟版
|
|
|
form_query: { pm: null, rqmtOrntIds: [] },
|
|
|
display: false, // 设置成员弹框
|
|
|
num: 0, // 成员数量
|
|
@@ -523,17 +434,13 @@ export default {
|
|
|
task_open: false, // 新建任务弹框
|
|
|
bug_open: false, // 新建缺陷弹框
|
|
|
// belongProjectList: [], // 所属项目列表
|
|
|
- iterationList: [], // 所属迭代列表
|
|
|
commentContent: null, // 评论内容
|
|
|
comments: [], // 评论列表
|
|
|
taskScheduleList: [], // 排期数据
|
|
|
lockHide: false, // 隐藏排期变更记录
|
|
|
isScheduleLocked: '', // 锁定状态1锁定0未锁定
|
|
|
SchedulingContent: [], // 排期历史变更记录
|
|
|
- listOrGannt: '列表',
|
|
|
- activeClick: {
|
|
|
- pm: false
|
|
|
- }
|
|
|
+ listOrGannt: '列表'
|
|
|
}
|
|
|
},
|
|
|
computed: {
|
|
@@ -554,10 +461,8 @@ export default {
|
|
|
this.$nextTick(() => {
|
|
|
this.activeName = this.$route.query.page ? this.$route.query.page : '1'
|
|
|
})
|
|
|
- this.showRequirementEnum()
|
|
|
+ // this.showRequirementEnum()
|
|
|
this.getRequirementById()
|
|
|
- // this.getBelongProject()
|
|
|
- this.getIterationList()
|
|
|
this.getCommentList()
|
|
|
this.getTaskStatus()
|
|
|
this.GetRequireScheduleHistory()
|
|
@@ -592,24 +497,6 @@ export default {
|
|
|
this.taskScheduleList = res.data
|
|
|
this.BackToTheLatest = true
|
|
|
},
|
|
|
- async changeSchedule() { // 修改锁定状态
|
|
|
- if (this.isScheduleLocked === 1) {
|
|
|
- const res = await projectGetMemberList({ projectId: this.form_query.belongingProject, requireId: this.requirementId })
|
|
|
- if (res.code === 200) {
|
|
|
- const data = res.data.PM
|
|
|
- data.map(item => {
|
|
|
- if (item.memberInfoResponse.idap === localStorage.getItem('username')) {
|
|
|
- this.scheduleVisble = true
|
|
|
- }
|
|
|
- })
|
|
|
- if (!this.scheduleVisble) {
|
|
|
- this.$message({ message: '没有权限,请联系PM执行解锁!', type: 'error', duration: 2000, offset: 150 })
|
|
|
- }
|
|
|
- }
|
|
|
- } else {
|
|
|
- this.scheduleVisble = true
|
|
|
- }
|
|
|
- },
|
|
|
setChangeArea() {
|
|
|
this.$refs.form_query.validate((valid) => {
|
|
|
if (valid) {
|
|
@@ -639,55 +526,15 @@ export default {
|
|
|
this.$refs.timeLine1.taskGetWorkFlow()
|
|
|
this.$message({ message: '修改成功', type: 'success', duration: 1000, offset: 150 })
|
|
|
}
|
|
|
- // }
|
|
|
this.getRequirementById()
|
|
|
},
|
|
|
- // async getBelongProject() { // 获取所属项目列表
|
|
|
- // const res = await projectListProject({ bizId: Number(localStorage.getItem('bizId')) })
|
|
|
- // if (res.code === 200) {
|
|
|
- // this.belongProjectList = res.data
|
|
|
+ // async showRequirementEnum() { // 获取需求状态列表,优先级列表,需求来源
|
|
|
+ // const res1 = await configShowRequireStatusEnum(localStorage.getItem('bizId'))
|
|
|
+ // if (res1.code === 200) {
|
|
|
+ // this.statusList = []
|
|
|
+ // this.statusList = res1.data.requirementStatus
|
|
|
// }
|
|
|
// },
|
|
|
- async getIterationList() { // 获取所属迭代列表
|
|
|
- const res = await iterationList({
|
|
|
- bizId: Number(localStorage.getItem('bizId')),
|
|
|
- curIndex: 1,
|
|
|
- pageSize: 999
|
|
|
- })
|
|
|
- if (res.code === 200) {
|
|
|
- this.iterationList = res.data.list
|
|
|
- }
|
|
|
- this.iterationList.unshift({ id: -1, name: '无' })
|
|
|
- },
|
|
|
- async showRequirementEnum() { // 获取需求状态列表,优先级列表,需求来源
|
|
|
- const res1 = await configShowRequireStatusEnum(localStorage.getItem('bizId'))
|
|
|
- if (res1.code === 200) {
|
|
|
- this.statusList = []
|
|
|
- this.statusList = res1.data.requirementStatus
|
|
|
- }
|
|
|
- const res = await showRequirementEnum()
|
|
|
- if (res.code === 200) {
|
|
|
- this.priorityList = res.data.priority
|
|
|
- this.sourceTypeList = res.data.sourceType
|
|
|
- this.appClient = res.data.appClient
|
|
|
- }
|
|
|
- const res3 = await settingQueryBizRqmtOrntList(localStorage.getItem('bizId'))
|
|
|
- if (res3.code === 200) { // 需求方向
|
|
|
- this.demandDirection = this.getTreeData(res3.data)
|
|
|
- }
|
|
|
- },
|
|
|
- getTreeData(data) {
|
|
|
- for (var i = 0; i < data.length; i++) {
|
|
|
- if (data[i].childRqmtOrnts.length < 1) {
|
|
|
- // children若为空数组,则将children设为undefined
|
|
|
- data[i].childRqmtOrnts = undefined
|
|
|
- } else {
|
|
|
- // children若不为空数组,则继续 递归调用 本方法
|
|
|
- this.getTreeData(data[i].childRqmtOrnts)
|
|
|
- }
|
|
|
- }
|
|
|
- return data
|
|
|
- },
|
|
|
changeBtn() {
|
|
|
if (this.HoldTask === 'Hold 需求') {
|
|
|
this.visible = !this.visible
|
|
@@ -702,7 +549,7 @@ export default {
|
|
|
const res = await requirementHold(this.requirementId, { 'remark': val })
|
|
|
if (res.code === 200) {
|
|
|
this.getRequirementById()
|
|
|
- this.showRequirementEnum()
|
|
|
+ // this.showRequirementEnum()
|
|
|
this.$refs.timeLine1.taskGetWorkFlow()
|
|
|
this.visible = false
|
|
|
this.$message({ message: '已修改状态为 Hold', type: 'success', duration: 1000, offset: 150 })
|
|
@@ -712,7 +559,7 @@ export default {
|
|
|
const res = await requirementUnhold(this.requirementId)
|
|
|
if (res.code === 200) {
|
|
|
this.getRequirementById()
|
|
|
- this.showRequirementEnum()
|
|
|
+ // this.showRequirementEnum()
|
|
|
this.$refs.timeLine1.taskGetWorkFlow()
|
|
|
this.$message({ message: 'Hold 状态已解除', type: 'success', duration: 1000, offset: 150 })
|
|
|
}
|
|
@@ -847,9 +694,6 @@ export default {
|
|
|
this.lockHide === false ? this.BackToTheLatest = false : ''
|
|
|
this.showunlock = true
|
|
|
},
|
|
|
- jump(page, id) { // 跳转
|
|
|
- this.$router.push({ name: page, query: { id: id }})
|
|
|
- },
|
|
|
dpmUrl(url) {
|
|
|
window.open(url, '_blank')
|
|
|
},
|
|
@@ -935,31 +779,6 @@ border-radius: 50%;
|
|
|
|
|
|
.detail-info {
|
|
|
padding: 0 34px 20px 34px;
|
|
|
- /deep/.el-input__inner{
|
|
|
- border: 1px solid rgba(220,223,230,0)
|
|
|
- }
|
|
|
- /deep/.el-input__inner:hover{
|
|
|
- border: 1px solid rgba(220,223,230,1)
|
|
|
- }
|
|
|
- /deep/.is-focus .el-input__inner {
|
|
|
- border: 1px solid #409EFF;
|
|
|
- }
|
|
|
- /deep/.el-select{
|
|
|
- .el-input__suffix-inner {
|
|
|
- visibility: hidden;
|
|
|
- }
|
|
|
- }
|
|
|
- /deep/.el-select:hover{
|
|
|
- .el-input__suffix-inner {
|
|
|
- visibility: visible;
|
|
|
- }
|
|
|
- }
|
|
|
- .demo-form-inline {
|
|
|
- .el-form-item {
|
|
|
- width: 33%;
|
|
|
- margin-right: 0;
|
|
|
- }
|
|
|
- }
|
|
|
.comment-main {
|
|
|
list-style: none;
|
|
|
padding: 15px 0 0 0;
|
|
@@ -985,30 +804,20 @@ border-radius: 50%;
|
|
|
white-space: pre-line;
|
|
|
}
|
|
|
}
|
|
|
- .PRD-link {
|
|
|
- width: 50%;
|
|
|
- overflow: hidden;
|
|
|
- text-overflow:ellipsis;
|
|
|
- white-space: nowrap;
|
|
|
- padding-left: 15px;
|
|
|
- }
|
|
|
- .PRD-link:hover{
|
|
|
- color:#409EFF;
|
|
|
- }
|
|
|
}
|
|
|
}
|
|
|
->>>.module .el-form-item__content {
|
|
|
- display: inline-block;
|
|
|
- width: calc(100% - 100px);
|
|
|
- div {
|
|
|
- line-height: 18px;
|
|
|
- padding-top: 12px;
|
|
|
- cursor: pointer;
|
|
|
- }
|
|
|
- div:hover{
|
|
|
- color: #409EFF;
|
|
|
- }
|
|
|
- }
|
|
|
+// >>>.module .el-form-item__content {
|
|
|
+// display: inline-block;
|
|
|
+// width: calc(100% - 100px);
|
|
|
+// div {
|
|
|
+// line-height: 18px;
|
|
|
+// padding-top: 12px;
|
|
|
+// cursor: pointer;
|
|
|
+// }
|
|
|
+// div:hover{
|
|
|
+// color: #409EFF;
|
|
|
+// }
|
|
|
+// }
|
|
|
>>>.el-input--small {
|
|
|
font-size: 14px;
|
|
|
}
|
|
@@ -1019,9 +828,9 @@ border-radius: 50%;
|
|
|
.paddingLeft {
|
|
|
padding-left: 0px;
|
|
|
}
|
|
|
-.el-tabs-spacing {
|
|
|
- padding: 20px 30px;
|
|
|
- }
|
|
|
+// .el-tabs-spacing {
|
|
|
+// padding: 20px 30px;
|
|
|
+// }
|
|
|
.sign-tabs {
|
|
|
padding: 0 30px;
|
|
|
}
|
|
@@ -1038,4 +847,3 @@ border-radius: 50%;
|
|
|
}
|
|
|
}
|
|
|
</style>
|
|
|
-
|