|
@@ -34,6 +34,9 @@
|
|
<i class="el-icon-circle-plus icon-add" />
|
|
<i class="el-icon-circle-plus icon-add" />
|
|
<el-dropdown-menu slot="dropdown">
|
|
<el-dropdown-menu slot="dropdown">
|
|
<el-dropdown-item @click.native="created_bug()">新建缺陷</el-dropdown-item>
|
|
<el-dropdown-item @click.native="created_bug()">新建缺陷</el-dropdown-item>
|
|
|
|
+ <el-dropdown-item @click.native="createReport(1, form_query)">新建提测报告</el-dropdown-item>
|
|
|
|
+ <el-dropdown-item @click.native="createReport(2, form_query)">新建测试报告</el-dropdown-item>
|
|
|
|
+ <el-dropdown-item @click.native="createReport(3, form_query)">新建准出报告</el-dropdown-item>
|
|
</el-dropdown-menu>
|
|
</el-dropdown-menu>
|
|
</el-dropdown>
|
|
</el-dropdown>
|
|
<div class="line" />
|
|
<div class="line" />
|
|
@@ -64,17 +67,49 @@
|
|
</el-select>
|
|
</el-select>
|
|
</el-form-item>
|
|
</el-form-item>
|
|
<el-form-item label="所属模块:">
|
|
<el-form-item label="所属模块:">
|
|
- {{ form_query.moduleInfoName }}
|
|
|
|
|
|
+ <span class="module">{{ form_query.moduleInfoName }}</span>
|
|
</el-form-item>
|
|
</el-form-item>
|
|
</el-form>
|
|
</el-form>
|
|
- <el-form :inline="true" :model="form_query" class="demo-form-inline" label-position="right" label-width="100px" />
|
|
|
|
- <el-form :inline="true" :model="form_query" class="demo-form-inline" label-position="right" label-width="100px" />
|
|
|
|
|
|
+ <el-form :inline="true" :model="form_query" class="demo-form-inline" label-position="right" label-width="100px">
|
|
|
|
+ <el-form-item label="开发负责人:">
|
|
|
|
+ <search-people :value.sync="form_query.rdOwner" @change="changeArea" />
|
|
|
|
+ </el-form-item>
|
|
|
|
+ <el-form-item label="测试负责人:">
|
|
|
|
+ <search-people :value.sync="form_query.qaOwner" @change="changeArea" />
|
|
|
|
+ </el-form-item>
|
|
|
|
+ <el-form-item label="是否跟版:">
|
|
|
|
+ <el-select v-model="form_query.followVersion" 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>
|
|
|
|
+ <el-form :inline="true" :model="form_query" class="demo-form-inline" label-position="right" label-width="100px">
|
|
|
|
+ <el-form-item label="跟版客户端:">
|
|
|
|
+ <el-select v-if="form_query.followVersion === 1" v-model="form_query.involveApp" size="small" 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-item label="任务进度:">
|
|
|
|
+ <div class="form-progress">
|
|
|
|
+ <el-progress :percentage="Number(form_query.rate && form_query.rate.substring(0,4)) || 0" color="#409eff" />
|
|
|
|
+ </div>
|
|
|
|
+ </el-form-item>
|
|
|
|
+ </el-form>
|
|
|
|
+ </div>
|
|
|
|
+ </section>
|
|
|
|
+ <section class="main-section">
|
|
|
|
+ <div class="el-main-title">
|
|
|
|
+ <div class="title-left-icon" />
|
|
|
|
+ <div class="title-left-name">任务计划</div>
|
|
|
|
+ </div>
|
|
|
|
+ <div>
|
|
|
|
+ <schedule-list :id="taskId" :type-list="taskScheduleEvent" />
|
|
</div>
|
|
</div>
|
|
</section>
|
|
</section>
|
|
<section class="main-section">
|
|
<section class="main-section">
|
|
<div class="el-main-title">
|
|
<div class="el-main-title">
|
|
<div class="title-left-icon" />
|
|
<div class="title-left-icon" />
|
|
- <div class="title-left-name">需求描述</div>
|
|
|
|
|
|
+ <div class="title-left-name">任务描述</div>
|
|
</div>
|
|
</div>
|
|
<div>
|
|
<div>
|
|
<text-area :id="'pro-desc'" :value.sync="form_query.description" :empty-text="'点击'" :input-button="'添加描述'" @change="changeArea" />
|
|
<text-area :id="'pro-desc'" :value.sync="form_query.description" :empty-text="'点击'" :input-button="'添加描述'" @change="changeArea" />
|
|
@@ -109,23 +144,30 @@
|
|
</section>
|
|
</section>
|
|
</el-container>
|
|
</el-container>
|
|
<!-- 概览 -->
|
|
<!-- 概览 -->
|
|
- <!-- 任务 -->
|
|
|
|
|
|
+ <!-- 缺陷 -->
|
|
<el-container v-show="activeName === '2'" class="is-vertical">
|
|
<el-container v-show="activeName === '2'" class="is-vertical">
|
|
- <section class="main-section" />
|
|
|
|
|
|
+ <section class="main-section">
|
|
|
|
+ <bugs-list />
|
|
|
|
+ </section>
|
|
</el-container>
|
|
</el-container>
|
|
- <!-- 任务 -->
|
|
|
|
<!-- 缺陷 -->
|
|
<!-- 缺陷 -->
|
|
|
|
+ <!-- 报告 -->
|
|
<el-container v-show="activeName === '3'" class="is-vertical">
|
|
<el-container v-show="activeName === '3'" class="is-vertical">
|
|
- <section class="main-section" />
|
|
|
|
|
|
+ <section class="main-section">
|
|
|
|
+ <report-list />
|
|
|
|
+ </section>
|
|
</el-container>
|
|
</el-container>
|
|
- <!-- 缺陷 -->
|
|
|
|
|
|
+ <!-- 报告 -->
|
|
<!-- 统计 -->
|
|
<!-- 统计 -->
|
|
<el-container v-if="activeName === '4'" class="is-vertical">
|
|
<el-container v-if="activeName === '4'" class="is-vertical">
|
|
<section class="main-section" />
|
|
<section class="main-section" />
|
|
</el-container>
|
|
</el-container>
|
|
<!-- 统计 -->
|
|
<!-- 统计 -->
|
|
<!-- 新建(bug) -->
|
|
<!-- 新建(bug) -->
|
|
- <createdBug v-if="updateVisible" ref="createdBug" />
|
|
|
|
|
|
+ <createdBug v-if="bug_open" ref="createdBug" />
|
|
|
|
+ <Test-report v-if="dialogTest" ref="TestReport" />
|
|
|
|
+ <Daily-report v-if="dialogDaily" ref="DailyReport" />
|
|
|
|
+ <Client-report v-if="dialogClient" ref="ClientReport" />
|
|
<!-- 新建 -->
|
|
<!-- 新建 -->
|
|
<!-- 编辑 -->
|
|
<!-- 编辑 -->
|
|
<open-dialog v-if="updateVisible" ref="task_createdUpdata" />
|
|
<open-dialog v-if="updateVisible" ref="task_createdUpdata" />
|
|
@@ -180,6 +222,12 @@ import image_url from '@/assets/home_images/home_u.png'
|
|
import createdBug from '@/views/projectManage/bugList/file/createdBug'
|
|
import createdBug from '@/views/projectManage/bugList/file/createdBug'
|
|
import normalDialog from '@/components/dialog/normalDialog'
|
|
import normalDialog from '@/components/dialog/normalDialog'
|
|
import openDialog from '@/views/projectManage/dialog_vue'
|
|
import openDialog from '@/views/projectManage/dialog_vue'
|
|
|
|
+import scheduleList from './components/scheduleList'
|
|
|
|
+import bugsList from './components/bugsList'
|
|
|
|
+import reportList from './components/reportList'
|
|
|
|
+import TestReport from '@/views/Platform/presentation/Templates/TestReport' // 提测
|
|
|
|
+import DailyReport from '@/views/Platform/presentation/Templates/DailyReport' // 日报
|
|
|
|
+import ClientReport from '@/views/Platform/presentation/Templates/ClientReport' // 准出
|
|
export default {
|
|
export default {
|
|
components: {
|
|
components: {
|
|
searchPeople,
|
|
searchPeople,
|
|
@@ -187,7 +235,13 @@ export default {
|
|
textArea,
|
|
textArea,
|
|
drawer,
|
|
drawer,
|
|
createdBug,
|
|
createdBug,
|
|
- openDialog
|
|
|
|
|
|
+ openDialog,
|
|
|
|
+ scheduleList,
|
|
|
|
+ bugsList,
|
|
|
|
+ reportList,
|
|
|
|
+ TestReport,
|
|
|
|
+ DailyReport,
|
|
|
|
+ ClientReport
|
|
},
|
|
},
|
|
filters: {
|
|
filters: {
|
|
ellipsis(value, num) {
|
|
ellipsis(value, num) {
|
|
@@ -204,10 +258,13 @@ export default {
|
|
userInformation: localStorage.getItem('username'),
|
|
userInformation: localStorage.getItem('username'),
|
|
userNames: localStorage.getItem('realname'),
|
|
userNames: localStorage.getItem('realname'),
|
|
textarea: '', // 评论
|
|
textarea: '', // 评论
|
|
- taskId: this.$route.query.id, // 任务id
|
|
|
|
|
|
+ taskId: Number(this.$route.query.id), // 任务id
|
|
allStatus: [], // 任务所有状态
|
|
allStatus: [], // 任务所有状态
|
|
belongProjectList: [], // 所属项目列表
|
|
belongProjectList: [], // 所属项目列表
|
|
requireList: [], // 所属需求列表
|
|
requireList: [], // 所属需求列表
|
|
|
|
+ appClient: [], // 跟版客户端列表
|
|
|
|
+ taskScheduleEvent: [], // 排期类型
|
|
|
|
+ dependList: [{ msg: '否', code: 2 }, { msg: '是', code: 1 }], // 是否跟版
|
|
statusDialog: false, // 修改状态弹框
|
|
statusDialog: false, // 修改状态弹框
|
|
changeStatusDate: null, // 状态改变时间
|
|
changeStatusDate: null, // 状态改变时间
|
|
form_query: {},
|
|
form_query: {},
|
|
@@ -217,6 +274,9 @@ export default {
|
|
updateVisible: false, // 编辑任务弹框
|
|
updateVisible: false, // 编辑任务弹框
|
|
deleteVisible: false, // 删除任务弹框
|
|
deleteVisible: false, // 删除任务弹框
|
|
bug_open: false, // 新建缺陷弹框
|
|
bug_open: false, // 新建缺陷弹框
|
|
|
|
+ dialogTest: false, // 新建提测报告
|
|
|
|
+ dialogDaily: false, // 新建日报报告
|
|
|
|
+ dialogClient: false, // 新建准出报告
|
|
iterationList: [], // 所属迭代列表
|
|
iterationList: [], // 所属迭代列表
|
|
commentContent: null, // 评论内容
|
|
commentContent: null, // 评论内容
|
|
comments: [] // 评论列表
|
|
comments: [] // 评论列表
|
|
@@ -242,13 +302,13 @@ export default {
|
|
},
|
|
},
|
|
methods: {
|
|
methods: {
|
|
async changeArea(e) { // area修改
|
|
async changeArea(e) { // area修改
|
|
- const requirementInfo = _.cloneDeep(this.form_query)
|
|
|
|
|
|
+ const taskInfoDO = _.cloneDeep(this.form_query)
|
|
const user = {
|
|
const user = {
|
|
name: localStorage.getItem('username'),
|
|
name: localStorage.getItem('username'),
|
|
ename: localStorage.getItem('realname'),
|
|
ename: localStorage.getItem('realname'),
|
|
id: ''
|
|
id: ''
|
|
}
|
|
}
|
|
- const res = await taskUpdate({ requirementInfo, user })
|
|
|
|
|
|
+ const res = await taskUpdate({ taskInfoDO, user })
|
|
if (res.code === 200) {
|
|
if (res.code === 200) {
|
|
this.$message({ message: '修改', type: 'success', duration: 1000, offset: 150 })
|
|
this.$message({ message: '修改', type: 'success', duration: 1000, offset: 150 })
|
|
}
|
|
}
|
|
@@ -266,11 +326,18 @@ export default {
|
|
this.requireList = res.data
|
|
this.requireList = res.data
|
|
}
|
|
}
|
|
},
|
|
},
|
|
- async getTaskStatus() { // 获取任务状态列表
|
|
|
|
|
|
+ async getTaskStatus() { // 获取任务状态列表,跟版客户端列表
|
|
const res = await configShowTaskEnum()
|
|
const res = await configShowTaskEnum()
|
|
if (res.code === 200) {
|
|
if (res.code === 200) {
|
|
- console.log(res.data.taskStatus)
|
|
|
|
this.allStatus = res.data.taskStatus
|
|
this.allStatus = res.data.taskStatus
|
|
|
|
+ this.taskScheduleEvent = res.data.taskScheduleEvent || []
|
|
|
|
+ this.appClient = res.data.appClient.map(item => {
|
|
|
|
+ return {
|
|
|
|
+ ...item,
|
|
|
|
+ code: `${item.code}`
|
|
|
|
+ }
|
|
|
|
+ })
|
|
|
|
+ console.log(this.appClient)
|
|
}
|
|
}
|
|
},
|
|
},
|
|
async taskGet() { // 获取任务详情
|
|
async taskGet() { // 获取任务详情
|
|
@@ -279,14 +346,14 @@ export default {
|
|
this.form_query = res.data
|
|
this.form_query = res.data
|
|
}
|
|
}
|
|
},
|
|
},
|
|
- async getCommentList() { // 获取需求评论
|
|
|
|
|
|
+ async getCommentList() { // 获取任务评论
|
|
const res = await commentList({ type: 3, joinId: this.taskId })
|
|
const res = await commentList({ type: 3, joinId: this.taskId })
|
|
if (res.code === 200) {
|
|
if (res.code === 200) {
|
|
this.comments = res.data
|
|
this.comments = res.data
|
|
this.commentContent = ''
|
|
this.commentContent = ''
|
|
}
|
|
}
|
|
},
|
|
},
|
|
- async addComment() { // 发表需求评论
|
|
|
|
|
|
+ async addComment() { // 发表任务评论
|
|
if (this.commentContent.replace(/\s+/g, '') === '' || this.commentContent === null) {
|
|
if (this.commentContent.replace(/\s+/g, '') === '' || this.commentContent === null) {
|
|
this.$message.warning('评论不能为空')
|
|
this.$message.warning('评论不能为空')
|
|
return
|
|
return
|
|
@@ -302,7 +369,8 @@ export default {
|
|
const user = { name: this.userNames, ename: this.userInformation, id: '' }
|
|
const user = { name: this.userNames, ename: this.userInformation, id: '' }
|
|
const res = await commentCreate({ commentInfo, user })
|
|
const res = await commentCreate({ commentInfo, user })
|
|
if (res.code === 200) {
|
|
if (res.code === 200) {
|
|
- this.taskGet()
|
|
|
|
|
|
+ this.$message({ message: '评论成功', type: 'success', duration: 1000, offset: 150 })
|
|
|
|
+ this.getCommentList()
|
|
} else {
|
|
} else {
|
|
this.$message.warning(res.msg)
|
|
this.$message.warning(res.msg)
|
|
}
|
|
}
|
|
@@ -344,6 +412,22 @@ export default {
|
|
this.$nextTick(() => {
|
|
this.$nextTick(() => {
|
|
this.$refs.createdBug.init(1)
|
|
this.$refs.createdBug.init(1)
|
|
})
|
|
})
|
|
|
|
+ },
|
|
|
|
+ createReport(e, ele) { // 创建报告
|
|
|
|
+ switch (e) {
|
|
|
|
+ case 1: // 提测
|
|
|
|
+ this.dialogTest = true
|
|
|
|
+ this.$nextTick(() => { this.$refs.TestReport.init(1, ele) })
|
|
|
|
+ break
|
|
|
|
+ case 2: // 日报
|
|
|
|
+ this.dialogDaily = true
|
|
|
|
+ this.$nextTick(() => { this.$refs.DailyReport.init(1) })
|
|
|
|
+ break
|
|
|
|
+ case 3:
|
|
|
|
+ this.dialogClient = true
|
|
|
|
+ this.$nextTick(() => { this.$refs.ClientReport.init(1, ele) })
|
|
|
|
+ break
|
|
|
|
+ }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
@@ -426,6 +510,10 @@ export default {
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
+.module {
|
|
|
|
+ width: 100%;
|
|
|
|
+ overflow: hidden;
|
|
|
|
+}
|
|
.dialog-change-status {
|
|
.dialog-change-status {
|
|
margin: 2% 3%;
|
|
margin: 2% 3%;
|
|
display: flex;
|
|
display: flex;
|
|
@@ -433,4 +521,8 @@ export default {
|
|
align-items: center;
|
|
align-items: center;
|
|
white-space:nowrap;
|
|
white-space:nowrap;
|
|
}
|
|
}
|
|
|
|
+.form-progress {
|
|
|
|
+ width: 200px;
|
|
|
|
+ padding-top: 12px;
|
|
|
|
+}
|
|
</style>
|
|
</style>
|