|
@@ -2,27 +2,19 @@
|
|
|
<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" />
|
|
|
+ <over-click id="pm-select" :active.sync="activeClick.pm" @overMouse="changeArea">
|
|
|
+ <template slot="active">
|
|
|
+ <search-people :value.sync="form_query.pm" :clearable="false" />
|
|
|
+ </template>
|
|
|
+ <template slot="overMouse">
|
|
|
+ <span v-if="form_query.pm">{{ form_query.pmMemberInfoResponse.name }}</span>
|
|
|
+ </template>
|
|
|
+ </over-click>
|
|
|
</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="请选择" @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:">
|
|
|
+ <el-form-item label="测试Leader:">
|
|
|
<search-people :value.sync="form_query.pm" :clearable="false" @change="changeArea" />
|
|
|
</el-form-item>
|
|
|
</el-form>
|
|
@@ -45,17 +37,29 @@
|
|
|
<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-form-item label="所属迭代:">
|
|
|
+ <el-select v-model="form_query.iterationId" placeholder="请选择" @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="是否跟版:">
|
|
|
<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> -->
|
|
|
<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 :inline="true" :model="form_query" class="demo-form-inline" label-position="left" label-width="100px">
|
|
|
+ <el-form-item label="所属项目:">
|
|
|
+ <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>
|
|
|
+
|
|
|
<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>
|
|
@@ -68,14 +72,53 @@
|
|
|
</template>
|
|
|
|
|
|
<script>
|
|
|
+const _ = require('lodash')
|
|
|
import '@/styles/PublicStyle/index.scss'
|
|
|
-import { updateRequirement } from '@/api/requirement.js'
|
|
|
+import searchPeople from '@/components/select/searchPeople'
|
|
|
+import overClick from '@/components/click/overClick'
|
|
|
+import { updateRequirement, iterationList, configShowRequireStatusEnum, showRequirementEnum, settingQueryBizRqmtOrntList } from '@/api/requirement.js'
|
|
|
+
|
|
|
export default {
|
|
|
+ components: {
|
|
|
+ searchPeople,
|
|
|
+ overClick
|
|
|
+ },
|
|
|
+ props: {
|
|
|
+ value: { type: Object, required: true }
|
|
|
+ },
|
|
|
data() {
|
|
|
return {
|
|
|
- form_query: {}
|
|
|
+ dependList: [{ msg: '否', code: 0 }, { msg: '是', code: 1 }], // 是否跟版
|
|
|
+ form_query: { pm: null, rqmtOrntIds: [] },
|
|
|
+ statusList: [], // 状态列表
|
|
|
+ priorityList: [], // 优先级列表
|
|
|
+ sourceTypeList: [], // 需求来源列表
|
|
|
+ appClient: [], // 跟版客户端列表
|
|
|
+ demandDirection: [], // 需求方向option
|
|
|
+ iterationList: [], // 所属迭代
|
|
|
+ activeClick: {
|
|
|
+ pm: false
|
|
|
+ },
|
|
|
+ props: {
|
|
|
+ value: 'id',
|
|
|
+ label: 'rqmtOrntName',
|
|
|
+ children: 'childRqmtOrnts',
|
|
|
+ multiple: true
|
|
|
+ }
|
|
|
+ }
|
|
|
+ },
|
|
|
+ watch: {
|
|
|
+ value: {
|
|
|
+ handler(newV, old) {
|
|
|
+ this.form_query = newV
|
|
|
+ },
|
|
|
+ deep: true,
|
|
|
+ immediate: true
|
|
|
}
|
|
|
},
|
|
|
+ created() {
|
|
|
+ this.showRequirementEnum()
|
|
|
+ },
|
|
|
methods: {
|
|
|
async changeArea(e) { // area修改
|
|
|
const requirementInfo = _.cloneDeep(this.form_query)
|
|
@@ -92,13 +135,49 @@ export default {
|
|
|
requirementInfo.status = this.statusValue
|
|
|
const res = await updateRequirement(requirementInfo)
|
|
|
if (res.code === 200) {
|
|
|
- this.dialogStatusVisible = false
|
|
|
- this.getRequirementById()
|
|
|
- this.$refs.timeLine1.taskGetWorkFlow()
|
|
|
+ // this.dialogStatusVisible = false
|
|
|
+ // this.getRequirementById()
|
|
|
+ // this.$refs.timeLine1.taskGetWorkFlow()
|
|
|
this.$message({ message: '修改成功', type: 'success', duration: 1000, offset: 150 })
|
|
|
}
|
|
|
- // }
|
|
|
- this.getRequirementById()
|
|
|
+ this.$emit('getRequirementById')
|
|
|
+ },
|
|
|
+ jump(page, id) { // 跳转
|
|
|
+ this.$router.push({ name: page, query: { id: id }})
|
|
|
+ },
|
|
|
+ async showRequirementEnum() { // 获取需求状态列表,优先级列表,需求来源
|
|
|
+ const res1 = await configShowRequireStatusEnum(localStorage.getItem('bizId'))
|
|
|
+ if (res1.code === 200) {
|
|
|
+ this.statusList = []
|
|
|
+ this.statusList = res1.data.requirementStatus
|
|
|
+ }
|
|
|
+ const res4 = await iterationList({ bizId: Number(localStorage.getItem('bizId')), curIndex: 1, pageSize: 999 }) // 获取所属迭代列表
|
|
|
+ if (res4.code === 200) {
|
|
|
+ this.iterationList = res4.data.list
|
|
|
+ }
|
|
|
+ this.iterationList.unshift({ id: -1, name: '无' })
|
|
|
+ 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
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -107,25 +186,25 @@ export default {
|
|
|
<style lang="scss" scoped>
|
|
|
.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;
|
|
|
- }
|
|
|
- }
|
|
|
+ // /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%;
|
|
@@ -163,9 +242,7 @@ export default {
|
|
|
text-overflow:ellipsis;
|
|
|
white-space: nowrap;
|
|
|
padding-left: 15px;
|
|
|
- }
|
|
|
- .PRD-link:hover{
|
|
|
- color:#409EFF;
|
|
|
+ color:#409EFF;
|
|
|
}
|
|
|
}
|
|
|
</style>
|