|
@@ -1,248 +1,264 @@
|
|
|
<template>
|
|
|
- <el-container style="background-color: #F2F3F6;">
|
|
|
- <el-header style="margin: 1%;" class="layout_header">
|
|
|
- <div>
|
|
|
- <el-tooltip :disabled="requirement.name && requirement.name.length > 19 ? false : true" effect="dark" :content="requirement.name" placement="bottom">
|
|
|
- <span style="font-size:20px;font-family:MicrosoftYaHei;color:rgba(51,51,51,1);">{{ '需求:' + requirement.name | ellipsis }}</span>
|
|
|
- </el-tooltip>
|
|
|
- <el-dropdown
|
|
|
- placement="bottom"
|
|
|
- @command="updateRequirementStatus"
|
|
|
- >
|
|
|
- <el-button
|
|
|
- size="mini"
|
|
|
- class="el-dropdown-link drop_down"
|
|
|
- style="cursor: pointer;margin-left: 15px;"
|
|
|
+ <div @click="display = false">
|
|
|
+ <el-container style="background-color: #F2F3F6;">
|
|
|
+ <el-header style="margin: 15px 1%;" class="layout_header">
|
|
|
+ <div>
|
|
|
+ <el-tooltip :disabled="requirement.name && requirement.name.length > 19 ? false : true" effect="dark" :content="requirement.name" placement="bottom">
|
|
|
+ <span style="font-size:20px;font-family:MicrosoftYaHei;color:rgba(51,51,51,1);">{{ '需求:' + requirement.name | ellipsis }}</span>
|
|
|
+ </el-tooltip>
|
|
|
+ <el-dropdown
|
|
|
+ placement="bottom"
|
|
|
+ @command="updateRequirementStatus"
|
|
|
>
|
|
|
- <span class="el-dropdown-link">{{ getStatusName() }}</span>
|
|
|
- <i class="el-icon-arrow-down el-icon--right" />
|
|
|
- </el-button>
|
|
|
- <el-dropdown-menu slot="dropdown">
|
|
|
- <el-dropdown-item
|
|
|
- v-for="(item,index) in searchInfo.requirementStatus"
|
|
|
- :key="index"
|
|
|
- :command="item"
|
|
|
- >{{ item.msg }}</el-dropdown-item>
|
|
|
- </el-dropdown-menu>
|
|
|
- </el-dropdown>
|
|
|
- <div style="display: inline-block;float: right">
|
|
|
- <el-button size="mini" style="margin-left: 10px" @click="deleteRequirement">删除需求</el-button>
|
|
|
- <el-button type="primary" size="mini" @click="createTask">新建任务</el-button>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- </el-header>
|
|
|
- <el-container>
|
|
|
- <el-aside width="52%" style="margin: 0% 1% 1% 1%;" class="layout_aside">
|
|
|
- <div style="display:flex;align-items: center;">
|
|
|
- <div style="width:4px;height:17px;background:#409EFF;border-radius:1px;" />
|
|
|
- <div style="width:83px;height:20px;font-size:18px;font-family:MicrosoftYaHei;color:rgba(51,59,74,1);margin-left:6px">数据统计</div>
|
|
|
+ <el-button
|
|
|
+ size="mini"
|
|
|
+ class="el-dropdown-link drop_down"
|
|
|
+ style="cursor: pointer;margin-left: 15px;"
|
|
|
+ >
|
|
|
+ <span class="el-dropdown-link">{{ getStatusName() }}</span>
|
|
|
+ <i class="el-icon-arrow-down el-icon--right" />
|
|
|
+ </el-button>
|
|
|
+ <el-dropdown-menu slot="dropdown">
|
|
|
+ <el-dropdown-item
|
|
|
+ v-for="(item,index) in searchInfo.requirementStatus"
|
|
|
+ :key="index"
|
|
|
+ :command="item"
|
|
|
+ >{{ item.msg }}</el-dropdown-item>
|
|
|
+ </el-dropdown-menu>
|
|
|
+ </el-dropdown>
|
|
|
+ <div style="display: inline-block;float: right">
|
|
|
+ <span style="line-height: 45px;vertical-align: bottom; cursor: pointer; color: #6F7C93;" @click.stop="setChild(), display = true"><img style="width: 24px; display: inline-block;" :src="image_url"> {{ num }} </span>
|
|
|
+ <el-button size="mini" style="margin-left: 10px" @click="deleteRequirement">删除需求</el-button>
|
|
|
+ <el-button type="primary" size="mini" @click="createTask">新建任务</el-button>
|
|
|
+ </div>
|
|
|
</div>
|
|
|
- <div v-loading="loading.task || loading.bug" class="div_statistics" style="margin: 2%">
|
|
|
- <el-container style="border-bottom: 1px solid #D8D8D8">
|
|
|
- <el-aside width="30%" style="border-right: 1px solid #d8d8d8">
|
|
|
- <div style="width:100%;text-align: center;">
|
|
|
- <div style="font-size: 16px;margin-top: 26px">任务数量</div>
|
|
|
- <div style="font-size: 72px">{{ statistics.task.totalCount }}</div>
|
|
|
- <div
|
|
|
- style="font-size: 14px;color: rgba(245,108,108,1);margin-bottom: 16px"
|
|
|
- >{{ '已延期'+statistics.task.delayCount+'个' }}</div>
|
|
|
- </div>
|
|
|
- </el-aside>
|
|
|
- <el-aside width="70%">
|
|
|
- <requirement-chart
|
|
|
- :chart-id="'taskCount'"
|
|
|
- :option="taskOption"
|
|
|
- style="position: relative;bottom: 30px"
|
|
|
- />
|
|
|
- </el-aside>
|
|
|
- </el-container>
|
|
|
- <el-container>
|
|
|
- <el-aside width="30%" style="border-right: 1px solid #d8d8d8">
|
|
|
- <div style="width:100%;text-align: center;">
|
|
|
- <div style="font-size: 16px;margin-top: 26px">bug数量</div>
|
|
|
- <div style="font-size: 72px">{{ statistics.bug.totalCount }}</div>
|
|
|
+ </el-header>
|
|
|
+ <el-container>
|
|
|
+ <el-aside width="52%" style="margin: 0% 1% 1% 1%;" class="layout_aside">
|
|
|
+ <div style="display:flex;align-items: center;">
|
|
|
+ <div style="width:4px;height:17px;background:#409EFF;border-radius:1px;" />
|
|
|
+ <div style="width:83px;height:20px;font-size:18px;font-family:MicrosoftYaHei;color:rgba(51,59,74,1);margin-left:6px">数据统计</div>
|
|
|
+ </div>
|
|
|
+ <div v-loading="loading.task || loading.bug" class="div_statistics" style="margin: 2%">
|
|
|
+ <el-container style="border-bottom: 1px solid #D8D8D8">
|
|
|
+ <el-aside width="30%" style="border-right: 1px solid #d8d8d8">
|
|
|
+ <div style="width:100%;text-align: center;">
|
|
|
+ <div style="font-size: 16px;margin-top: 26px">任务数量</div>
|
|
|
+ <div style="font-size: 72px">{{ statistics.task.totalCount }}</div>
|
|
|
+ <div
|
|
|
+ style="font-size: 14px;color: rgba(245,108,108,1);margin-bottom: 16px"
|
|
|
+ >{{ '已延期'+statistics.task.delayCount+'个' }}</div>
|
|
|
+ </div>
|
|
|
+ </el-aside>
|
|
|
+ <el-aside width="70%">
|
|
|
+ <requirement-chart
|
|
|
+ :chart-id="'taskCount'"
|
|
|
+ :option="taskOption"
|
|
|
+ style="position: relative;bottom: 30px"
|
|
|
+ />
|
|
|
+ </el-aside>
|
|
|
+ </el-container>
|
|
|
+ <el-container>
|
|
|
+ <el-aside width="30%" style="border-right: 1px solid #d8d8d8">
|
|
|
+ <div style="width:100%;text-align: center;">
|
|
|
+ <div style="font-size: 16px;margin-top: 26px">bug数量</div>
|
|
|
+ <div style="font-size: 72px">{{ statistics.bug.totalCount }}</div>
|
|
|
+ <div
|
|
|
+ style="font-size: 14px;color: rgba(245,108,108,1);margin-bottom: 16px"
|
|
|
+ >{{ '以后修复'+statistics.bug.fixInFutureCount+'个' }}</div>
|
|
|
+ </div>
|
|
|
+ </el-aside>
|
|
|
+ <el-aside width="70%">
|
|
|
+ <requirement-chart
|
|
|
+ :chart-id="'bugCount'"
|
|
|
+ :option="bugOption"
|
|
|
+ style="position: relative;bottom: 30px"
|
|
|
+ />
|
|
|
+ </el-aside>
|
|
|
+ </el-container>
|
|
|
+ </div>
|
|
|
+ </el-aside>
|
|
|
+ <el-aside width="45%" style="margin: 0% 1% 1% 0;" class="layout_aside special-button">
|
|
|
+ <div style="display:flex;align-items: center;">
|
|
|
+ <div style="width:4px;height:17px;background:#409EFF;border-radius:1px;" />
|
|
|
+ <div style="width:83px;height:20px;font-size:18px;font-family:MicrosoftYaHei;color:rgba(51,59,74,1);margin-left:6px">基础信息</div>
|
|
|
+ </div>
|
|
|
+ <div style="text-align: right;">
|
|
|
+ <el-button
|
|
|
+ type="info"
|
|
|
+ plain
|
|
|
+ size="mini"
|
|
|
+ @click="updateDialogVisible = true"
|
|
|
+ >修改</el-button>
|
|
|
+ </div>
|
|
|
+ <div
|
|
|
+ style="font-size: 14px;color: #666666"
|
|
|
+ class="div_requirment_info"
|
|
|
+ >
|
|
|
+ <el-row>
|
|
|
+ <el-col :span="6">归属的项目:</el-col>
|
|
|
+ <el-col :span="18">
|
|
|
<div
|
|
|
- style="font-size: 14px;color: rgba(245,108,108,1);margin-bottom: 16px"
|
|
|
- >{{ '以后修复'+statistics.bug.fixInFutureCount+'个' }}</div>
|
|
|
- </div>
|
|
|
- </el-aside>
|
|
|
- <el-aside width="70%">
|
|
|
- <requirement-chart
|
|
|
- :chart-id="'bugCount'"
|
|
|
- :option="bugOption"
|
|
|
- style="position: relative;bottom: 30px"
|
|
|
- />
|
|
|
- </el-aside>
|
|
|
- </el-container>
|
|
|
- </div>
|
|
|
- </el-aside>
|
|
|
- <el-aside width="45%" style="margin: 0% 1% 1% 0;" class="layout_aside special-button">
|
|
|
- <div style="display:flex;align-items: center;">
|
|
|
+ style="display: inline-block;color: #409EFF;cursor: pointer;"
|
|
|
+ @click="jumpTaskDetal(requirement.belongingProject)"
|
|
|
+ >{{ requirement.belongingProjectName }}</div>
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
+ <el-row>
|
|
|
+ <el-col :span="6">业务线:</el-col>
|
|
|
+ <el-col :span="18">{{ requirement.bizName }}</el-col>
|
|
|
+ </el-row>
|
|
|
+ <el-row>
|
|
|
+ <el-col :span="6">优先级:</el-col>
|
|
|
+ <el-col :span="18">{{ requirement.priorityName }}</el-col>
|
|
|
+ </el-row>
|
|
|
+ <el-row>
|
|
|
+ <el-col :span="6">需求来源:</el-col>
|
|
|
+ <el-col :span="18">{{ requirement.sourceTypeName }}</el-col>
|
|
|
+ </el-row>
|
|
|
+ <el-row>
|
|
|
+ <el-col :span="6">PM:</el-col>
|
|
|
+ <el-col :span="18">{{ getPmName() }}</el-col>
|
|
|
+ </el-row>
|
|
|
+ <el-row>
|
|
|
+ <el-col :span="6">PRD链接:</el-col>
|
|
|
+ <el-col :span="18">
|
|
|
+ <el-link type="primary" :href="requirement.mrdUrl">{{ requirement.mrdUrl }}</el-link>
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
+ <el-row>
|
|
|
+ <el-col :span="6">是否跟版:</el-col>
|
|
|
+ <el-col :span="18">{{ requirement.dependOnRelease? '是':'否' }}</el-col>
|
|
|
+ </el-row>
|
|
|
+ <el-row v-if="requirement.dependOnRelease">
|
|
|
+ <el-col :span="6">涉及的客户端:</el-col>
|
|
|
+ <el-col :span="18">{{ getAppClientName() }}</el-col>
|
|
|
+ </el-row>
|
|
|
+ </div>
|
|
|
+ </el-aside>
|
|
|
+ </el-container>
|
|
|
+ <el-main id="requirement_details" style="margin: 0 1%;padding: 0" class="layout_main">
|
|
|
+ <div style="display:flex;align-items: center;margin: 2% 0 0 2%;">
|
|
|
<div style="width:4px;height:17px;background:#409EFF;border-radius:1px;" />
|
|
|
- <div style="width:83px;height:20px;font-size:18px;font-family:MicrosoftYaHei;color:rgba(51,59,74,1);margin-left:6px">基础信息</div>
|
|
|
+ <div style="width:83px;height:20px;font-size:18px;font-family:MicrosoftYaHei;color:rgba(51,59,74,1);margin-left:6px">任务</div>
|
|
|
</div>
|
|
|
- <div style="text-align: right;">
|
|
|
- <el-button
|
|
|
- type="info"
|
|
|
- plain
|
|
|
- size="mini"
|
|
|
- @click="updateDialogVisible = true"
|
|
|
- >修改</el-button>
|
|
|
- </div>
|
|
|
- <div
|
|
|
- style="font-size: 14px;color: #666666"
|
|
|
- class="div_requirment_info"
|
|
|
+ <el-radio-group v-model="radio" size="mini" style="float: right;margin: 0 1% 1% 0">
|
|
|
+ <el-radio-button label="列表" />
|
|
|
+ <el-radio-button label="甘特图" />
|
|
|
+ </el-radio-group>
|
|
|
+ <br>
|
|
|
+ <el-table
|
|
|
+ v-if="radio === '列表'"
|
|
|
+ v-loading="loading.table"
|
|
|
+ :data="tableData"
|
|
|
+ style="width: 100%;"
|
|
|
+ highlight-current-row
|
|
|
+ :header-cell-style="{ background: '#6AB4FF', color: '#FFFFFF',textAlign: 'center'}"
|
|
|
+ :cell-style="{'font-size':'14px','font-family':'MicrosoftYaHei'}"
|
|
|
>
|
|
|
- <el-row>
|
|
|
- <el-col :span="6">归属的项目:</el-col>
|
|
|
- <el-col :span="18">
|
|
|
- <div
|
|
|
- style="display: inline-block;color: #409EFF;cursor: pointer;"
|
|
|
- @click="jumpTaskDetal(requirement.belongingProject)"
|
|
|
- >{{ requirement.belongingProjectName }}</div>
|
|
|
- </el-col>
|
|
|
- </el-row>
|
|
|
- <el-row>
|
|
|
- <el-col :span="6">业务线:</el-col>
|
|
|
- <el-col :span="18">{{ requirement.bizName }}</el-col>
|
|
|
- </el-row>
|
|
|
- <el-row>
|
|
|
- <el-col :span="6">优先级:</el-col>
|
|
|
- <el-col :span="18">{{ requirement.priorityName }}</el-col>
|
|
|
- </el-row>
|
|
|
- <el-row>
|
|
|
- <el-col :span="6">需求来源:</el-col>
|
|
|
- <el-col :span="18">{{ requirement.sourceTypeName }}</el-col>
|
|
|
- </el-row>
|
|
|
- <el-row>
|
|
|
- <el-col :span="6">PM:</el-col>
|
|
|
- <el-col :span="18">{{ getPmName() }}</el-col>
|
|
|
- </el-row>
|
|
|
- <el-row>
|
|
|
- <el-col :span="6">PRD链接:</el-col>
|
|
|
- <el-col :span="18">
|
|
|
- <el-link type="primary" :href="requirement.mrdUrl">{{ requirement.mrdUrl }}</el-link>
|
|
|
- </el-col>
|
|
|
- </el-row>
|
|
|
- <el-row>
|
|
|
- <el-col :span="6">是否跟版:</el-col>
|
|
|
- <el-col :span="18">{{ requirement.dependOnRelease? '是':'否' }}</el-col>
|
|
|
- </el-row>
|
|
|
- <el-row v-if="requirement.dependOnRelease">
|
|
|
- <el-col :span="6">涉及的客户端:</el-col>
|
|
|
- <el-col :span="18">{{ getAppClientName() }}</el-col>
|
|
|
- </el-row>
|
|
|
- </div>
|
|
|
- </el-aside>
|
|
|
- </el-container>
|
|
|
- <el-main id="requirement_details" style="margin: 0 1%;padding: 0" class="layout_main">
|
|
|
- <div style="display:flex;align-items: center;margin: 2% 0 0 2%;">
|
|
|
- <div style="width:4px;height:17px;background:#409EFF;border-radius:1px;" />
|
|
|
- <div style="width:83px;height:20px;font-size:18px;font-family:MicrosoftYaHei;color:rgba(51,59,74,1);margin-left:6px">任务</div>
|
|
|
- </div>
|
|
|
- <el-radio-group v-model="radio" size="mini" style="float: right;margin: 0 1% 1% 0">
|
|
|
- <el-radio-button label="列表" />
|
|
|
- <el-radio-button label="甘特图" />
|
|
|
- </el-radio-group>
|
|
|
- <br>
|
|
|
- <el-table
|
|
|
- v-if="radio === '列表'"
|
|
|
- v-loading="loading.table"
|
|
|
- :data="tableData"
|
|
|
- style="width: 100%;"
|
|
|
- highlight-current-row
|
|
|
- :header-cell-style="{ background: '#6AB4FF', color: '#FFFFFF',textAlign: 'center'}"
|
|
|
- :cell-style="{'font-size':'14px','font-family':'MicrosoftYaHei'}"
|
|
|
- >
|
|
|
- <el-table-column prop="name" label="任务名" min-width="20%" align="center">
|
|
|
- <template v-slot="scope">
|
|
|
- <div style="cursor: pointer;" @click="getToTaskDetails(scope.row.id)">{{ scope.row.name }}</div>
|
|
|
- </template>
|
|
|
- </el-table-column>
|
|
|
- <el-table-column prop="beginTime" label="排期" min-width="15%" align="center">
|
|
|
- <template
|
|
|
- v-slot="scope"
|
|
|
- >{{ getSchedule(scope.row) }}</template>
|
|
|
- </el-table-column>
|
|
|
- <el-table-column prop="statusString" label="状态" min-width="10%" align="center">
|
|
|
- <template v-slot="scope">
|
|
|
- <div style="color: #FF9500">{{ scope.row.statusString }}</div>
|
|
|
- </template>
|
|
|
- </el-table-column>
|
|
|
- <el-table-column prop="stageString" label="任务健康状态" min-width="12%" align="center">
|
|
|
- <template v-slot="scope">
|
|
|
- <div class="double-line">{{ scope.row.stageString }}</div>
|
|
|
- <div class="double-line-tow">{{ scope.row.lateMsg }}</div>
|
|
|
- </template>
|
|
|
- </el-table-column>
|
|
|
- <el-table-column prop="rate" label="任务进展" min-width="15%" align="left">
|
|
|
- <template v-slot="scope">
|
|
|
- <el-progress :percentage="Number(scope.row.rate?scope.row.rate.substring(0,4).replace(/%/g,''):0)" />
|
|
|
- </template>
|
|
|
- </el-table-column>
|
|
|
- <el-table-column prop="rdObject" label="开发负责人" min-width="10%" align="center">
|
|
|
- <template v-slot="scope">{{ scope.row.rdObject?scope.row.rdObject.name:'空' }}</template>
|
|
|
- </el-table-column>
|
|
|
- <el-table-column prop="qaObject" label="测试负责人" min-width="10%" align="center">
|
|
|
- <template v-slot="scope">{{ scope.row.qaObject?scope.row.qaObject.name:'空' }}</template>
|
|
|
- </el-table-column>
|
|
|
- <el-table-column prop="rdList" label="开发" min-width="10%" align="center">
|
|
|
- <template v-slot="scope">{{ getQaOrRdNameList(scope.row.rdList) }}</template>
|
|
|
- </el-table-column>
|
|
|
- <el-table-column prop="qaList" label="测试" min-width="10%" align="center">
|
|
|
- <template v-slot="scope">{{ getQaOrRdNameList(scope.row.qaList) }}</template>
|
|
|
- </el-table-column>
|
|
|
- </el-table>
|
|
|
- <gantt v-if="radio === '甘特图' && ganttTableData" :versions="ganttVersions" :table-data="ganttTableData" :string-type="'任务'" />
|
|
|
- <div style="margin:0 2%;padding: 2% 0;border-bottom: 1px solid #D8D8D8;font-size: 14px;color: #333333">排期汇总:{{ getScheduleCollect() }}</div>
|
|
|
- <el-row style="margin: 2%;font-size: 14px;color: #333333">
|
|
|
- <el-col :span="8">
|
|
|
- <div v-for="(item,index) in task.preOnlineVersion" :key="index" style="margin-bottom:10px"> <span :style="{visibility: index===0?'visible ':'hidden'}">预期上线版本:</span>{{ item }}</div>
|
|
|
- </el-col>
|
|
|
+ <el-table-column prop="name" label="任务名" min-width="20%" align="center">
|
|
|
+ <template v-slot="scope">
|
|
|
+ <div style="cursor: pointer;" @click="getToTaskDetails(scope.row.id)">{{ scope.row.name }}</div>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column prop="beginTime" label="排期" min-width="15%" align="center">
|
|
|
+ <template
|
|
|
+ v-slot="scope"
|
|
|
+ >{{ getSchedule(scope.row) }}</template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column prop="statusString" label="状态" min-width="10%" align="center">
|
|
|
+ <template v-slot="scope">
|
|
|
+ <div style="color: #FF9500">{{ scope.row.statusString }}</div>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column prop="stageString" label="任务健康状态" min-width="12%" align="center">
|
|
|
+ <template v-slot="scope">
|
|
|
+ <div class="double-line">{{ scope.row.stageString }}</div>
|
|
|
+ <div class="double-line-tow">{{ scope.row.lateMsg }}</div>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column prop="rate" label="任务进展" min-width="15%" align="left">
|
|
|
+ <template v-slot="scope">
|
|
|
+ <el-progress :percentage="Number(scope.row.rate?scope.row.rate.substring(0,4).replace(/%/g,''):0)" />
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column prop="rdObject" label="开发负责人" min-width="10%" align="center">
|
|
|
+ <template v-slot="scope">{{ scope.row.rdObject?scope.row.rdObject.name:'空' }}</template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column prop="qaObject" label="测试负责人" min-width="10%" align="center">
|
|
|
+ <template v-slot="scope">{{ scope.row.qaObject?scope.row.qaObject.name:'空' }}</template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column prop="rdList" label="开发" min-width="10%" align="center">
|
|
|
+ <template v-slot="scope">{{ getQaOrRdNameList(scope.row.rdList) }}</template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column prop="qaList" label="测试" min-width="10%" align="center">
|
|
|
+ <template v-slot="scope">{{ getQaOrRdNameList(scope.row.qaList) }}</template>
|
|
|
+ </el-table-column>
|
|
|
+ </el-table>
|
|
|
+ <gantt v-if="radio === '甘特图' && ganttTableData" :versions="ganttVersions" :table-data="ganttTableData" :string-type="'任务'" />
|
|
|
+ <div style="margin:0 2%;padding: 2% 0;border-bottom: 1px solid #D8D8D8;font-size: 14px;color: #333333">排期汇总:{{ getScheduleCollect() }}</div>
|
|
|
+ <el-row style="margin: 2%;font-size: 14px;color: #333333">
|
|
|
+ <el-col :span="8">
|
|
|
+ <div v-for="(item,index) in task.preOnlineVersion" :key="index" style="margin-bottom:10px"> <span :style="{visibility: index===0?'visible ':'hidden'}">预期上线版本:</span>{{ item }}</div>
|
|
|
+ </el-col>
|
|
|
<!-- <el-col :span="16">
|
|
|
<div v-for="(item,index) in task.preOnlineVersion" :key="index" style="margin-bottom:10px"> <span :style="{visibility: index===0?'visible ':'hidden'}">实际上线版本:</span>{{ item }}</div>
|
|
|
</el-col> -->
|
|
|
- </el-row>
|
|
|
- </el-main>
|
|
|
- <el-main style="margin: 1%;padding: 2% !important;" class="layout_main requirement_details_layout_main">
|
|
|
- <div style="display:flex;align-items: center;margin-bottom:20px">
|
|
|
- <div style="width:4px;height:17px;background:#409EFF;border-radius:1px;" />
|
|
|
- <div style="width:83px;height:20px;font-size:18px;font-family:MicrosoftYaHei;color:rgba(51,59,74,1);margin-left:6px">评论</div>
|
|
|
- </div>
|
|
|
- <div>
|
|
|
- <div v-for="(item,index) in comments" :key="index" class="animated bounceInRight">
|
|
|
- <div
|
|
|
- style="font-size:14px;color:#333B4A;display: inline-block;"
|
|
|
- >{{ item.commentInfo.name }}</div>
|
|
|
- <div
|
|
|
- style="margin-left:20px;display: inline-block;color: #9B9B9B;font-size:12px"
|
|
|
- >{{ item.commentInfo.gmtCreater }}</div>
|
|
|
- <p
|
|
|
- style="font-size:14px;color:#333B4A;margin-top: 10px;white-space: pre-line;"
|
|
|
- >{{ item.commentInfo.content }}</p>
|
|
|
- <br>
|
|
|
+ </el-row>
|
|
|
+ </el-main>
|
|
|
+ <el-main style="margin: 1%;padding: 2% !important;" class="layout_main requirement_details_layout_main">
|
|
|
+ <div style="display:flex;align-items: center;margin-bottom:20px">
|
|
|
+ <div style="width:4px;height:17px;background:#409EFF;border-radius:1px;" />
|
|
|
+ <div style="width:83px;height:20px;font-size:18px;font-family:MicrosoftYaHei;color:rgba(51,59,74,1);margin-left:6px">评论</div>
|
|
|
</div>
|
|
|
- <el-input
|
|
|
- v-model="commentContent"
|
|
|
- type="textarea"
|
|
|
- placeholder="请输入评论内容"
|
|
|
- maxlength="300"
|
|
|
- show-word-limit
|
|
|
- :autosize="{ minRows: 3, maxRows: 5}"
|
|
|
- style="margin-bottom: 2%"
|
|
|
- />
|
|
|
- <el-button type="primary" size="small" style="float: right" @click="addComment">发表评论</el-button>
|
|
|
- </div>
|
|
|
- </el-main>
|
|
|
- <requirement-update
|
|
|
- title="编辑需求"
|
|
|
- :data="requirement"
|
|
|
- :visible="updateDialogVisible"
|
|
|
- @cancel="updateDialogVisible=false"
|
|
|
- @confirm="getRequirementById();updateDialogVisible=false"
|
|
|
- />
|
|
|
- <task-create v-if="createTaskDialogVisible" ref="task_createdUpdata" />
|
|
|
- </el-container>
|
|
|
+ <div>
|
|
|
+ <div v-for="(item,index) in comments" :key="index" class="animated bounceInRight">
|
|
|
+ <div
|
|
|
+ style="font-size:14px;color:#333B4A;display: inline-block;"
|
|
|
+ >{{ item.commentInfo.name }}</div>
|
|
|
+ <div
|
|
|
+ style="margin-left:20px;display: inline-block;color: #9B9B9B;font-size:12px"
|
|
|
+ >{{ item.commentInfo.gmtCreater }}</div>
|
|
|
+ <p
|
|
|
+ style="font-size:14px;color:#333B4A;margin-top: 10px;white-space: pre-line;"
|
|
|
+ >{{ item.commentInfo.content }}</p>
|
|
|
+ <br>
|
|
|
+ </div>
|
|
|
+ <el-input
|
|
|
+ v-model="commentContent"
|
|
|
+ type="textarea"
|
|
|
+ placeholder="请输入评论内容"
|
|
|
+ maxlength="300"
|
|
|
+ show-word-limit
|
|
|
+ :autosize="{ minRows: 3, maxRows: 5}"
|
|
|
+ style="margin-bottom: 2%"
|
|
|
+ />
|
|
|
+ <el-button type="primary" size="small" style="float: right" @click="addComment">发表评论</el-button>
|
|
|
+ </div>
|
|
|
+ </el-main>
|
|
|
+ <requirement-update
|
|
|
+ title="编辑需求"
|
|
|
+ :data="requirement"
|
|
|
+ :visible="updateDialogVisible"
|
|
|
+ @cancel="updateDialogVisible=false"
|
|
|
+ @confirm="getRequirementById();updateDialogVisible=false"
|
|
|
+ />
|
|
|
+ <task-create v-if="createTaskDialogVisible" ref="task_createdUpdata" />
|
|
|
+ <drawer
|
|
|
+ ref="drawer"
|
|
|
+ title="需求成员"
|
|
|
+ center
|
|
|
+ :display.sync="display"
|
|
|
+ width="28%"
|
|
|
+ :delete="Number(id)"
|
|
|
+ :types="false"
|
|
|
+ :inner="true"
|
|
|
+ :mask="false"
|
|
|
+ @childValInput="childVal"
|
|
|
+ @click.stop
|
|
|
+ />
|
|
|
+ </el-container>
|
|
|
+ </div>
|
|
|
</template>
|
|
|
|
|
|
<script>
|
|
@@ -264,13 +280,16 @@ import RequirementUpdate from '@/views/projectManage/requirement/list/create.vue
|
|
|
import Gantt from '@/views/gantta/gantta'
|
|
|
import dateUtil from '@/utils/dateUtil.js'
|
|
|
import TaskCreate from '@/views/projectManage/dialog_vue'
|
|
|
+import drawer from '@/views/projectManage/Drawer'
|
|
|
+import image_url from '@/assets/home_images/home_u.png'
|
|
|
|
|
|
export default {
|
|
|
components: {
|
|
|
RequirementChart,
|
|
|
RequirementUpdate,
|
|
|
Gantt,
|
|
|
- TaskCreate
|
|
|
+ TaskCreate,
|
|
|
+ drawer
|
|
|
},
|
|
|
filters: {
|
|
|
ellipsis(value) {
|
|
@@ -289,6 +308,9 @@ export default {
|
|
|
},
|
|
|
data() {
|
|
|
return {
|
|
|
+ num: '',
|
|
|
+ image_url: image_url,
|
|
|
+ display: false,
|
|
|
createTaskDialogVisible: false,
|
|
|
ganttVersions: {},
|
|
|
ganttTableData: null,
|
|
@@ -495,6 +517,9 @@ export default {
|
|
|
this.$store.state.data.bizId = false
|
|
|
},
|
|
|
methods: {
|
|
|
+ childVal(val) {
|
|
|
+ this.num = val
|
|
|
+ },
|
|
|
getScheduleCollect() {
|
|
|
if (this.task && this.task.reqStartTime && this.task.reqEndTime) {
|
|
|
return this.task.reqStartTime.substring(0, 10).replace(/-/, '年').replace(/-/, '月') + '日' + ' ~ ' + this.task.reqEndTime.substring(0, 10).replace(/-/, '年').replace(/-/, '月') + '日'
|
|
@@ -672,6 +697,9 @@ export default {
|
|
|
}
|
|
|
return arr
|
|
|
},
|
|
|
+ setChild() {
|
|
|
+ this.$refs.drawer.getRoleList()
|
|
|
+ },
|
|
|
getPmName() {
|
|
|
const names = []
|
|
|
for (const i in this.requirement.pm) {
|