|
|
@ -1,173 +1,455 @@ |
|
|
<template> |
|
|
<template> |
|
|
<section class="page-container border"> |
|
|
|
|
|
|
|
|
<section> |
|
|
<el-row> |
|
|
<el-row> |
|
|
<el-col :span="24"> |
|
|
|
|
|
<el-tabs type="border-card" :value="showPanel" @tab-click="tabClick"> |
|
|
|
|
|
<el-tab-pane disabled> |
|
|
|
|
|
<div slot="label"> |
|
|
|
|
|
<xm-project-select ref="xmProjectSelect" :auto-select="true" :link-iteration-id="xmIteration?xmIteration.id:null" :link-product-id="xmProduct?xmProduct.id:null" @row-click="onProjectRowClick" @clear="onProjectClearSelect"></xm-project-select> |
|
|
|
|
|
|
|
|
|
|
|
</div> |
|
|
|
|
|
</el-tab-pane> |
|
|
|
|
|
<el-tab-pane disabled> |
|
|
|
|
|
<div slot="label"> |
|
|
|
|
|
|
|
|
<el-col :span="6" class="padding-right padding-left"> |
|
|
|
|
|
<el-row class="padding"> |
|
|
|
|
|
<el-col :span="20"> |
|
|
|
|
|
<xm-project-select |
|
|
|
|
|
ref="xmProjectSelect" |
|
|
|
|
|
:auto-select="true" |
|
|
|
|
|
:link-iteration-id="xmIteration ? xmIteration.id : null" |
|
|
|
|
|
:link-product-id="xmProduct ? xmProduct.id : null" |
|
|
|
|
|
@row-click="onProjectRowClick" |
|
|
|
|
|
@clear="onProjectClearSelect" |
|
|
|
|
|
></xm-project-select> |
|
|
|
|
|
</el-col> |
|
|
|
|
|
<el-col :span="4"> |
|
|
<el-popover |
|
|
<el-popover |
|
|
placement="bottom" |
|
|
placement="bottom" |
|
|
width="800" |
|
|
width="800" |
|
|
v-model="projectAddVisible" |
|
|
v-model="projectAddVisible" |
|
|
trigger="manual"> |
|
|
|
|
|
|
|
|
|
|
|
<xm-project-add :visible="projectAddVisible" op-type="add" :xm-product="xmProduct" @cancel="projectAddVisible=false" @submit="afterProjectAddSubmit"></xm-project-add> |
|
|
|
|
|
<el-link type="warning" slot="reference" @click="projectAddVisible=true" icon="el-icon-plus"><font style="font-size:14px;">项目</font></el-link> |
|
|
|
|
|
|
|
|
trigger="manual" |
|
|
|
|
|
> |
|
|
|
|
|
<xm-project-add |
|
|
|
|
|
:visible="projectAddVisible" |
|
|
|
|
|
op-type="add" |
|
|
|
|
|
:xm-product="xmProduct" |
|
|
|
|
|
@cancel="projectAddVisible = false" |
|
|
|
|
|
@submit="afterProjectAddSubmit" |
|
|
|
|
|
></xm-project-add> |
|
|
|
|
|
<el-link |
|
|
|
|
|
type="warning" |
|
|
|
|
|
slot="reference" |
|
|
|
|
|
@click="projectAddVisible = true" |
|
|
|
|
|
icon="el-icon-plus" |
|
|
|
|
|
><font style="font-size: 14px">项目</font></el-link |
|
|
|
|
|
> |
|
|
</el-popover> |
|
|
</el-popover> |
|
|
|
|
|
</el-col> |
|
|
|
|
|
</el-row> |
|
|
|
|
|
<el-row |
|
|
|
|
|
ref="pageBody" |
|
|
|
|
|
class="padding border" |
|
|
|
|
|
:style="{ maxHeight: maxTableHeight + 'px', overflowY: 'auto' }" |
|
|
|
|
|
> |
|
|
|
|
|
<h4 class="padding-bottom">常用功能快捷导航</h4> |
|
|
|
|
|
<el-steps :active="calcProjectStatusStep" finish-status="success" direction="vertical"> |
|
|
|
|
|
<el-step |
|
|
|
|
|
v-for="(i, index) in dicts['projectStatus']" |
|
|
|
|
|
:title="i.name" |
|
|
|
|
|
:key="index" |
|
|
|
|
|
> |
|
|
|
|
|
<el-row slot="description"> |
|
|
|
|
|
<el-row v-if="i.id=='0'"><!--初始--> |
|
|
|
|
|
<span v-if="selProject.status==i.id"> |
|
|
|
|
|
<el-button class="step-btn" type="warning" size="mini" plain @click="editXmProjectSomeFields(selProject,'status','1')">进入售前</el-button> |
|
|
|
|
|
</span> |
|
|
|
|
|
<span v-if="selProject.status!=i.id"> |
|
|
|
|
|
</span> |
|
|
|
|
|
</el-row> |
|
|
|
|
|
<el-row v-else-if="i.id=='1'"><!--售前--> |
|
|
|
|
|
<span v-if="selProject.status==i.id"> |
|
|
|
|
|
<el-button class="step-btn" type="warning" size="mini" plain @click="showMenusPage">需求管理</el-button> |
|
|
|
|
|
<el-button class="step-btn" type="warning" size="mini" plain @click="editXmProjectSomeFields(selProject,'status','2')">设为立项中</el-button> |
|
|
|
|
|
</span> |
|
|
|
|
|
<span v-if="selProject.status!=i.id"> |
|
|
|
|
|
<el-button class="step-btn" type="warning" size="mini" plain @click="showMenusPage">需求管理</el-button> |
|
|
|
|
|
</span> |
|
|
|
|
|
</el-row> |
|
|
|
|
|
<el-row v-else-if="i.id=='2'"><!--立项中--> |
|
|
|
|
|
<span v-if="selProject.status==i.id"> |
|
|
|
|
|
<el-button class="step-btn" type="warning" size="mini" plain @click="infotype='合同管理'">签订合同</el-button> |
|
|
|
|
|
<el-button class="step-btn" type="warning" size="mini" plain @click="infotype='团队'">创建团队</el-button> |
|
|
|
|
|
<el-button class="step-btn" type="warning" size="mini" plain @click="infotype='计划'">创建计划</el-button> |
|
|
|
|
|
<el-button class="step-btn" type="warning" size="mini" plain @click="infotype='预算'">预算清单</el-button> |
|
|
|
|
|
<el-button class="step-btn" type="warning" size="mini" plain @click="showProjectGaiSuan()">项目估算</el-button> |
|
|
|
|
|
<el-button class="step-btn" type="warning" size="mini" plain @click="showProjectShouYi()">项目收益</el-button> |
|
|
|
|
|
<el-button class="step-btn" type="warning" size="mini" plain @click="editXmProjectSomeFields(selProject,'status','3')">设为立项中</el-button> |
|
|
|
|
|
</span> |
|
|
|
|
|
<span v-if="selProject.status!=i.id"> |
|
|
|
|
|
<el-button class="step-btn" type="warning" size="mini" plain @click="infotype='合同管理'">合同管理</el-button> |
|
|
|
|
|
<el-button class="step-btn" type="warning" size="mini" plain @click="infotype='团队'">团队管理</el-button> |
|
|
|
|
|
<el-button class="step-btn" type="warning" size="mini" plain @click="infotype='计划'">计划管理</el-button> |
|
|
|
|
|
<el-button class="step-btn" type="warning" size="mini" plain @click="infotype='预算'">预算管理</el-button> |
|
|
|
|
|
<el-button class="step-btn" type="warning" size="mini" plain @click="showProjectGaiSuan()">项目估算</el-button> |
|
|
|
|
|
<el-button class="step-btn" type="warning" size="mini" plain @click="showProjectShouYi()">项目收益</el-button> |
|
|
|
|
|
</span> |
|
|
|
|
|
</el-row> |
|
|
|
|
|
<el-row v-else-if="i.id=='3'"><!--实施中--> |
|
|
|
|
|
<span v-if="selProject.status==i.id"> |
|
|
|
|
|
<el-button class="step-btn" type="warning" size="mini" plain @click="infotype='迭代'">迭代管理</el-button> |
|
|
|
|
|
<el-button class="step-btn" type="warning" size="mini" plain @click="infotype='计划'">任务管理</el-button> |
|
|
|
|
|
<el-button class="step-btn" type="warning" size="mini" plain @click="infotype='缺陷'">缺陷管理</el-button> |
|
|
|
|
|
<el-button class="step-btn" type="warning" size="mini" plain @click="infotype='每日工时'">每日工时</el-button> |
|
|
|
|
|
<el-button class="step-btn" type="warning" size="mini" plain @click="infotype='每月工时'">每月工时</el-button> |
|
|
|
|
|
<el-button class="step-btn" type="warning" size="mini" plain @click="infotype='费用'">费用管理</el-button> |
|
|
|
|
|
<el-button class="step-btn" type="warning" size="mini" plain @click="infotype='效能'">效能分析</el-button> |
|
|
|
|
|
<el-button class="step-btn" type="warning" size="mini" plain @click="editXmProjectSomeFields(selProject,'status','4')">暂停项目</el-button> |
|
|
|
|
|
<el-button class="step-btn" type="warning" size="mini" plain @click="projectChangeRequire()">变更申请</el-button> |
|
|
|
|
|
<el-button class="step-btn" type="warning" size="mini" plain @click="editXmProjectSomeFields(selProject,'status','5')">设为结项中</el-button> |
|
|
|
|
|
</span> |
|
|
|
|
|
<span v-if="selProject.status!=i.id"> |
|
|
|
|
|
<el-button class="step-btn" type="warning" size="mini" plain @click="infotype='迭代'">迭代管理</el-button> |
|
|
|
|
|
<el-button class="step-btn" type="warning" size="mini" plain @click="infotype='计划'">任务管理</el-button> |
|
|
|
|
|
<el-button class="step-btn" type="warning" size="mini" plain @click="infotype='缺陷'">缺陷管理</el-button> |
|
|
|
|
|
<el-button class="step-btn" type="warning" size="mini" plain @click="infotype='每日工时'">每日工时</el-button> |
|
|
|
|
|
<el-button class="step-btn" type="warning" size="mini" plain @click="infotype='每月工时'">每月工时</el-button> |
|
|
|
|
|
<el-button class="step-btn" type="warning" size="mini" plain @click="infotype='费用'">费用管理</el-button> |
|
|
|
|
|
<el-button class="step-btn" type="warning" size="mini" plain @click="infotype='效能'">效能分析</el-button> |
|
|
|
|
|
<el-button v-if="selProject.status<i.id" class="step-btn" type="warning" size="mini" plain @click="editXmProjectSomeFields(selProject,'status','5')">结项申请</el-button> |
|
|
|
|
|
<el-button class="step-btn" type="warning" size="mini" plain @click="showDetail()">变更申请</el-button> |
|
|
|
|
|
</span> |
|
|
|
|
|
</el-row> |
|
|
|
|
|
<el-row v-else-if="i.id=='4'"><!--暂停中--> |
|
|
|
|
|
<span v-if="selProject.status==i.id"> |
|
|
|
|
|
<el-button class="step-btn" type="warning" size="mini" plain @click="editXmProjectSomeFields(selProject,'status','3')">重新激活</el-button> |
|
|
|
|
|
</span> |
|
|
|
|
|
</el-row> |
|
|
|
|
|
<el-row v-else-if="i.id=='5'"><!--结项中--> |
|
|
|
|
|
<span v-if="selProject.status==i.id"> |
|
|
|
|
|
<el-button class="step-btn" type="warning" size="mini" plain @click="showDetail()">结项申请</el-button> |
|
|
|
|
|
<el-button class="step-btn" type="warning" size="mini" plain @click="showCurrFlow()">结项审批</el-button> |
|
|
|
|
|
</span> |
|
|
|
|
|
<span v-if="selProject.status!=i.id"> |
|
|
|
|
|
<el-button class="step-btn" type="warning" size="mini" plain @click="showHisFlow()">结项审批</el-button> |
|
|
|
|
|
</span> |
|
|
|
|
|
</el-row> |
|
|
|
|
|
<el-row v-else-if="i.id=='6'"><!--已结项--> |
|
|
|
|
|
<span v-if="selProject.status==i.id"> |
|
|
|
|
|
<el-button class="step-btn" type="warning" size="mini" plain @click="editXmProjectSomeFields(selProject,'status','7')">转入售后</el-button> |
|
|
|
|
|
</span> |
|
|
|
|
|
<span v-if="selProject.status!=i.id"> |
|
|
|
|
|
</span> |
|
|
|
|
|
</el-row> |
|
|
|
|
|
<el-row v-else-if="i.id=='7'"><!--售后--> |
|
|
|
|
|
<span v-if="selProject.status==i.id"> |
|
|
|
|
|
<el-button class="step-btn" type="warning" size="mini" plain @click="editXmProjectSomeFields(selProject,'status','8')">设为已完成</el-button> |
|
|
|
|
|
</span> |
|
|
|
|
|
</el-row> |
|
|
|
|
|
<el-row v-else-if="i.id=='8'"><!--已完成--> |
|
|
|
|
|
<span v-if="selProject.status==i.id"> |
|
|
|
|
|
<el-button class="step-btn" type="warning" size="mini" plain @click="editXmProjectSomeFields(selProject,'status','9')">关闭项目</el-button> |
|
|
|
|
|
</span> |
|
|
|
|
|
|
|
|
</div> |
|
|
|
|
|
</el-tab-pane> |
|
|
|
|
|
<el-tab-pane label="项目概览" name="projectOverview" v-if="selProject&&selProject.id"> |
|
|
|
|
|
<xm-project-overview v-if="selProject && showPanel=='projectOverview'" :xm-product="xmProduct" :xm-iteration="xmIteration" :sel-project="selProject"></xm-project-overview> |
|
|
|
|
|
</el-tab-pane> |
|
|
|
|
|
<el-tab-pane label="执行统计" name="projectCalc" v-if="selProject&&selProject.id"> |
|
|
|
|
|
|
|
|
</el-row> |
|
|
|
|
|
<el-row v-else-if="i.id=='9'"><!--已关闭--> |
|
|
|
|
|
|
|
|
|
|
|
</el-row> |
|
|
|
|
|
</el-row> |
|
|
|
|
|
</el-step> |
|
|
|
|
|
</el-steps> |
|
|
|
|
|
</el-row> |
|
|
|
|
|
</el-col> |
|
|
|
|
|
<el-col :span="18"> |
|
|
|
|
|
<el-tabs :value="showPanel" @tab-click="tabClick"> |
|
|
|
|
|
<el-tab-pane |
|
|
|
|
|
label="项目概览" |
|
|
|
|
|
name="projectOverview" |
|
|
|
|
|
v-if="selProject && selProject.id" |
|
|
|
|
|
> |
|
|
|
|
|
<xm-project-overview |
|
|
|
|
|
v-if="selProject && showPanel == 'projectOverview'" |
|
|
|
|
|
:xm-product="xmProduct" |
|
|
|
|
|
:xm-iteration="xmIteration" |
|
|
|
|
|
:sel-project="selProject" |
|
|
|
|
|
></xm-project-overview> |
|
|
|
|
|
</el-tab-pane> |
|
|
|
|
|
<el-tab-pane |
|
|
|
|
|
label="执行统计" |
|
|
|
|
|
name="projectCalc" |
|
|
|
|
|
v-if="selProject && selProject.id" |
|
|
|
|
|
> |
|
|
<div v-if="showPanel == 'projectCalc'"> |
|
|
<div v-if="showPanel == 'projectCalc'"> |
|
|
<el-row> |
|
|
<el-row> |
|
|
<el-button type="primary" @click="loadTasksToXmProjectState" v-loading="load.calcProject">计算项目预算数据</el-button> |
|
|
|
|
|
<br> |
|
|
|
|
|
<font color="blue" style="font-size:10px;">将从项目任务中汇总进度、预算工作量、实际工作量、预算金额、实际金额、缺陷数、需求数等数据到项目统计表</font> |
|
|
|
|
|
|
|
|
<el-button |
|
|
|
|
|
type="primary" |
|
|
|
|
|
@click="loadTasksToXmProjectState" |
|
|
|
|
|
v-loading="load.calcProject" |
|
|
|
|
|
>计算项目预算数据</el-button |
|
|
|
|
|
> |
|
|
|
|
|
<br /> |
|
|
|
|
|
<font color="blue" style="font-size: 10px" |
|
|
|
|
|
>将从项目任务中汇总进度、预算工作量、实际工作量、预算金额、实际金额、缺陷数、需求数等数据到项目统计表</font |
|
|
|
|
|
> |
|
|
</el-row> |
|
|
</el-row> |
|
|
<el-row> |
|
|
<el-row> |
|
|
<el-button type="primary" @click="loadTasksSettleToXmProjectState" v-loading="load.calcSettle">计算项目结算数据</el-button> |
|
|
|
|
|
<br> |
|
|
|
|
|
<font color="blue" style="font-size:10px;">将从项目任务汇总结算数据项目统计表</font> |
|
|
|
|
|
|
|
|
<el-button |
|
|
|
|
|
type="primary" |
|
|
|
|
|
@click="loadTasksSettleToXmProjectState" |
|
|
|
|
|
v-loading="load.calcSettle" |
|
|
|
|
|
>计算项目结算数据</el-button |
|
|
|
|
|
> |
|
|
|
|
|
<br /> |
|
|
|
|
|
<font color="blue" style="font-size: 10px" |
|
|
|
|
|
>将从项目任务汇总结算数据项目统计表</font |
|
|
|
|
|
> |
|
|
</el-row> |
|
|
</el-row> |
|
|
</div> |
|
|
</div> |
|
|
</el-tab-pane> |
|
|
</el-tab-pane> |
|
|
<el-tab-pane label="项目详情" name="detail" v-if="selProject&&selProject.id"> |
|
|
|
|
|
<xm-project-detail v-if="showPanel=='detail'" :sel-project="selProject" @submit="afterEditSubmit"></xm-project-detail> |
|
|
|
|
|
|
|
|
<el-tab-pane |
|
|
|
|
|
label="项目详情" |
|
|
|
|
|
name="detail" |
|
|
|
|
|
v-if="selProject && selProject.id" |
|
|
|
|
|
> |
|
|
|
|
|
<xm-project-detail |
|
|
|
|
|
v-if="showPanel == 'detail'" |
|
|
|
|
|
:sel-project="selProject" |
|
|
|
|
|
@submit="afterEditSubmit" |
|
|
|
|
|
></xm-project-detail> |
|
|
</el-tab-pane> |
|
|
</el-tab-pane> |
|
|
<el-tab-pane label="配置关联的产品" name="productProjectLink" v-if="selProject&&selProject.id && !xmProduct" > |
|
|
|
|
|
<xm-product-project-link-mng v-if="showPanel=='productProjectLink'" :sel-project="selProject"></xm-product-project-link-mng> |
|
|
|
|
|
|
|
|
<el-tab-pane |
|
|
|
|
|
label="配置关联的产品" |
|
|
|
|
|
name="productProjectLink" |
|
|
|
|
|
v-if="selProject && selProject.id && !xmProduct" |
|
|
|
|
|
> |
|
|
|
|
|
<xm-product-project-link-mng |
|
|
|
|
|
v-if="showPanel == 'productProjectLink'" |
|
|
|
|
|
:sel-project="selProject" |
|
|
|
|
|
></xm-product-project-link-mng> |
|
|
</el-tab-pane> |
|
|
</el-tab-pane> |
|
|
<!-- |
|
|
<!-- |
|
|
<el-tab-pane label="配置关联的迭代" name="iterationProjectLink" v-if="selProject&&selProject.id" > |
|
|
<el-tab-pane label="配置关联的迭代" name="iterationProjectLink" v-if="selProject&&selProject.id" > |
|
|
<xm-iteration-link-for-project v-if="showPanel=='iterationProjectLink'" :sel-project="selProject"></xm-iteration-link-for-project> |
|
|
<xm-iteration-link-for-project v-if="showPanel=='iterationProjectLink'" :sel-project="selProject"></xm-iteration-link-for-project> |
|
|
</el-tab-pane> |
|
|
</el-tab-pane> |
|
|
--> |
|
|
--> |
|
|
<el-tab-pane label="需求" lazy name="menus" v-if="selProject&&selProject.id"> |
|
|
|
|
|
<xm-menu-mng v-if="selProject && showPanel=='menus'" :xm-product="xmProduct" :xm-iteration="xmIteration" :sel-project="selProject" :disabled-mng="false"></xm-menu-mng> |
|
|
|
|
|
|
|
|
<el-tab-pane |
|
|
|
|
|
label="需求" |
|
|
|
|
|
lazy |
|
|
|
|
|
name="menus" |
|
|
|
|
|
v-if="selProject && selProject.id" |
|
|
|
|
|
> |
|
|
|
|
|
<xm-menu-mng |
|
|
|
|
|
v-if="selProject && showPanel == 'menus'" |
|
|
|
|
|
:xm-product="xmProduct" |
|
|
|
|
|
:xm-iteration="xmIteration" |
|
|
|
|
|
:sel-project="selProject" |
|
|
|
|
|
:disabled-mng="false" |
|
|
|
|
|
></xm-menu-mng> |
|
|
</el-tab-pane> |
|
|
</el-tab-pane> |
|
|
|
|
|
|
|
|
<el-tab-pane label="计划" lazy name="plan" v-if="selProject&&selProject.id"> |
|
|
|
|
|
<xm-plan v-if="selProject && showPanel=='plan'" queryScope="plan" ptype="0" :xm-product="xmProduct" :xm-iteration="xmIteration" :sel-project="selProject"></xm-plan> |
|
|
|
|
|
|
|
|
<el-tab-pane |
|
|
|
|
|
label="计划" |
|
|
|
|
|
lazy |
|
|
|
|
|
name="plan" |
|
|
|
|
|
v-if="selProject && selProject.id" |
|
|
|
|
|
> |
|
|
|
|
|
<xm-plan |
|
|
|
|
|
v-if="selProject && showPanel == 'plan'" |
|
|
|
|
|
queryScope="plan" |
|
|
|
|
|
ptype="0" |
|
|
|
|
|
:xm-product="xmProduct" |
|
|
|
|
|
:xm-iteration="xmIteration" |
|
|
|
|
|
:sel-project="selProject" |
|
|
|
|
|
></xm-plan> |
|
|
</el-tab-pane> |
|
|
</el-tab-pane> |
|
|
<el-tab-pane label="任务" lazy name="tasks" v-if="selProject&&selProject.id"> |
|
|
|
|
|
<xm-task-mng v-if="selProject && showPanel=='tasks'" queryScope="task" ptype="0" :xm-product="xmProduct" :xm-iteration="xmIteration" :sel-project="selProject"></xm-task-mng> |
|
|
|
|
|
|
|
|
<el-tab-pane |
|
|
|
|
|
label="任务" |
|
|
|
|
|
lazy |
|
|
|
|
|
name="tasks" |
|
|
|
|
|
v-if="selProject && selProject.id" |
|
|
|
|
|
> |
|
|
|
|
|
<xm-task-mng |
|
|
|
|
|
v-if="selProject && showPanel == 'tasks'" |
|
|
|
|
|
queryScope="task" |
|
|
|
|
|
ptype="0" |
|
|
|
|
|
:xm-product="xmProduct" |
|
|
|
|
|
:xm-iteration="xmIteration" |
|
|
|
|
|
:sel-project="selProject" |
|
|
|
|
|
></xm-task-mng> |
|
|
</el-tab-pane> |
|
|
</el-tab-pane> |
|
|
<el-tab-pane label="缺陷" lazy name="bugs" v-if="selProject&&selProject.id"> |
|
|
|
|
|
<xm-question-mng v-if="selProject && showPanel=='bugs'" :xm-product="xmProduct" :xm-iteration="xmIteration" :sel-project="selProject"></xm-question-mng> |
|
|
|
|
|
|
|
|
<el-tab-pane |
|
|
|
|
|
label="缺陷" |
|
|
|
|
|
lazy |
|
|
|
|
|
name="bugs" |
|
|
|
|
|
v-if="selProject && selProject.id" |
|
|
|
|
|
> |
|
|
|
|
|
<xm-question-mng |
|
|
|
|
|
v-if="selProject && showPanel == 'bugs'" |
|
|
|
|
|
:xm-product="xmProduct" |
|
|
|
|
|
:xm-iteration="xmIteration" |
|
|
|
|
|
:sel-project="selProject" |
|
|
|
|
|
></xm-question-mng> |
|
|
</el-tab-pane> |
|
|
</el-tab-pane> |
|
|
</el-tabs> |
|
|
</el-tabs> |
|
|
<el-row> |
|
|
|
|
|
|
|
|
|
|
|
</el-row> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<el-row> </el-row> |
|
|
</el-col> |
|
|
</el-col> |
|
|
|
|
|
|
|
|
</el-row> |
|
|
</el-row> |
|
|
</section> |
|
|
</section> |
|
|
</template> |
|
|
</template> |
|
|
|
|
|
|
|
|
<script> |
|
|
<script> |
|
|
import util from '@/common/js/util';//全局公共库 |
|
|
|
|
|
import config from '@/common/config';//全局公共库 |
|
|
|
|
|
import { initSimpleDicts } from '@/api/mdp/meta/item';//下拉框数据查询 |
|
|
|
|
|
import XmIterationMng from '../xmIteration/XmIterationMng.vue' |
|
|
|
|
|
import XmMenuMng from '../xmMenu/XmMenuMng.vue' |
|
|
|
|
|
import XmIterationStateShow from '../xmIterationState/XmIterationStateShow.vue' |
|
|
|
|
|
import { mapGetters } from 'vuex' |
|
|
|
|
|
import XmProductMng from '../xmProduct/XmProductMng.vue'; |
|
|
|
|
|
import XmTaskMng from '../xmTask/XmTaskMng.vue'; |
|
|
|
|
|
import XmQuestionMng from '../xmQuestion/XmQuestionMng.vue'; |
|
|
|
|
|
import XmProjectSelect from '@/views/xm/core/components/XmProjectSelect.vue'; |
|
|
|
|
|
import XmProjectForLink from './XmProjectForLink.vue'; |
|
|
|
|
|
|
|
|
import util from "@/common/js/util"; //全局公共库 |
|
|
|
|
|
import config from "@/common/config"; //全局公共库 |
|
|
|
|
|
import XmIterationMng from "../xmIteration/XmIterationMng.vue"; |
|
|
|
|
|
import XmMenuMng from "../xmMenu/XmMenuMng.vue"; |
|
|
|
|
|
import XmIterationStateShow from "../xmIterationState/XmIterationStateShow.vue"; |
|
|
|
|
|
import { mapGetters } from "vuex"; |
|
|
|
|
|
import XmProductMng from "../xmProduct/XmProductMng.vue"; |
|
|
|
|
|
import XmTaskMng from "../xmTask/XmTaskMng.vue"; |
|
|
|
|
|
import XmQuestionMng from "../xmQuestion/XmQuestionMng.vue"; |
|
|
|
|
|
import XmProjectSelect from "@/views/xm/core/components/XmProjectSelect.vue"; |
|
|
|
|
|
import XmProjectForLink from "./XmProjectForLink.vue"; |
|
|
|
|
|
|
|
|
import XmProductSelect from '@/views/xm/core/components/XmProductSelect.vue' |
|
|
|
|
|
import XmProductProjectForLink from '../xmProduct/XmProductProjectForLink.vue'; |
|
|
|
|
|
|
|
|
import XmProductSelect from "@/views/xm/core/components/XmProductSelect.vue"; |
|
|
|
|
|
import XmProductProjectForLink from "../xmProduct/XmProductProjectForLink.vue"; |
|
|
import XmProjectOverview from "./XmProjectOverview"; |
|
|
import XmProjectOverview from "./XmProjectOverview"; |
|
|
|
|
|
|
|
|
import XmProjectAdd from './XmProjectEdit';//新增界面 |
|
|
|
|
|
import XmProjectDetail from './XmProjectDetail';//新增界面 |
|
|
|
|
|
|
|
|
import XmProjectAdd from "./XmProjectEdit"; //新增界面 |
|
|
|
|
|
import XmProjectDetail from "./XmProjectDetail"; //新增界面 |
|
|
|
|
|
|
|
|
import XmProductProjectLinkMng from '../xmProductProjectLink/XmProductProjectLinkMng.vue'; |
|
|
|
|
|
import XmIterationLinkForProject from '../xmIterationLink/XmIterationLinkForProject.vue'; |
|
|
|
|
|
import XmPlan from '../xmTask/XmPlan.vue'; |
|
|
|
|
|
|
|
|
import XmProductProjectLinkMng from "../xmProductProjectLink/XmProductProjectLinkMng.vue"; |
|
|
|
|
|
import XmIterationLinkForProject from "../xmIterationLink/XmIterationLinkForProject.vue"; |
|
|
|
|
|
import XmPlan from "../xmTask/XmPlan.vue"; |
|
|
|
|
|
|
|
|
import { loadTasksToXmProjectState , loadTasksSettleToXmProjectState} from '@/api/xm/core/xmProjectState'; |
|
|
|
|
|
|
|
|
import { |
|
|
|
|
|
initDicts, |
|
|
|
|
|
getDefOptions, |
|
|
|
|
|
editXmProjectSomeFields, |
|
|
|
|
|
} from "@/api/xm/core/xmProject"; |
|
|
|
|
|
import { |
|
|
|
|
|
loadTasksToXmProjectState, |
|
|
|
|
|
loadTasksSettleToXmProjectState, |
|
|
|
|
|
} from "@/api/xm/core/xmProjectState"; |
|
|
export default { |
|
|
export default { |
|
|
computed: { |
|
|
computed: { |
|
|
...mapGetters([ |
|
|
|
|
|
'userInfo','roles' |
|
|
|
|
|
]), |
|
|
|
|
|
|
|
|
...mapGetters(["userInfo", "roles"]), |
|
|
|
|
|
|
|
|
|
|
|
calcProjectStatusStep() { |
|
|
|
|
|
if (this.dicts["projectStatus"] && this.selProject) { |
|
|
|
|
|
var index = this.dicts["projectStatus"].findIndex((i) => { |
|
|
|
|
|
if (i.id == this.selProject.status) { |
|
|
|
|
|
return true; |
|
|
|
|
|
} else { |
|
|
|
|
|
return false; |
|
|
|
|
|
} |
|
|
|
|
|
}); |
|
|
|
|
|
return index + 1; |
|
|
|
|
|
} else { |
|
|
|
|
|
return 0; |
|
|
|
|
|
} |
|
|
}, |
|
|
}, |
|
|
props:['visible','xmIteration','xmProduct'], |
|
|
|
|
|
|
|
|
}, |
|
|
|
|
|
props: ["visible", "xmIteration", "xmProduct"], |
|
|
watch: { |
|
|
watch: { |
|
|
visible: function (visible) { |
|
|
visible: function (visible) { |
|
|
if (visible == true) { |
|
|
if (visible == true) { |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
}, |
|
|
}, |
|
|
}, |
|
|
data() { |
|
|
data() { |
|
|
return { |
|
|
return { |
|
|
load: { |
|
|
load: { |
|
|
calcProject: false, |
|
|
calcProject: false, |
|
|
}, |
|
|
}, |
|
|
|
|
|
dicts:{ |
|
|
|
|
|
"projectType":[], "priority":[], "projectStatus":[] |
|
|
|
|
|
}, |
|
|
selProject: null, |
|
|
selProject: null, |
|
|
showPanel:'projectOverview',//menus,tasks,bugs,iterationStateShow |
|
|
|
|
|
|
|
|
showPanel: "projectOverview", //menus,tasks,bugs,iterationStateShow |
|
|
projectAddVisible: false, |
|
|
projectAddVisible: false, |
|
|
|
|
|
maxTableHeight:300, |
|
|
/**end 自定义属性请在上面加 请加备注**/ |
|
|
/**end 自定义属性请在上面加 请加备注**/ |
|
|
} |
|
|
|
|
|
|
|
|
}; |
|
|
}, //end data |
|
|
}, //end data |
|
|
methods: { |
|
|
methods: { |
|
|
|
|
|
|
|
|
/**end 自定义函数请在上面加**/ |
|
|
/**end 自定义函数请在上面加**/ |
|
|
onProjectRowClick(xmProject) { |
|
|
onProjectRowClick(xmProject) { |
|
|
|
|
|
|
|
|
this.selProject=xmProject |
|
|
|
|
|
|
|
|
this.selProject = xmProject; |
|
|
}, |
|
|
}, |
|
|
|
|
|
|
|
|
onProjectClearSelect() { |
|
|
onProjectClearSelect() { |
|
|
this.selProject = null; |
|
|
this.selProject = null; |
|
|
}, |
|
|
}, |
|
|
tabClick(tab) { |
|
|
tabClick(tab) { |
|
|
this.showPanel=tab.name |
|
|
|
|
|
|
|
|
this.showPanel = tab.name; |
|
|
}, |
|
|
}, |
|
|
afterProjectAddSubmit(project) { |
|
|
afterProjectAddSubmit(project) { |
|
|
this.projectAddVisible = false; |
|
|
this.projectAddVisible = false; |
|
|
if (this.$refs.xmProjectSelect) { |
|
|
if (this.$refs.xmProjectSelect) { |
|
|
this.$refs.xmProjectSelect.xmProjects.push(project) |
|
|
|
|
|
|
|
|
this.$refs.xmProjectSelect.xmProjects.push(project); |
|
|
this.$refs.xmProjectSelect.rowClick(project); |
|
|
this.$refs.xmProjectSelect.rowClick(project); |
|
|
} |
|
|
} |
|
|
}, |
|
|
}, |
|
|
|
|
|
|
|
|
loadTasksToXmProjectState() { |
|
|
loadTasksToXmProjectState() { |
|
|
var row = this.selProject; |
|
|
var row = this.selProject; |
|
|
var params={projectId:row.id} |
|
|
|
|
|
loadTasksToXmProjectState(params).then((res) => { |
|
|
|
|
|
|
|
|
var params = { projectId: row.id }; |
|
|
|
|
|
loadTasksToXmProjectState(params) |
|
|
|
|
|
.then((res) => { |
|
|
this.load.calcProject = false; |
|
|
this.load.calcProject = false; |
|
|
var tips = res.data.tips; |
|
|
var tips = res.data.tips; |
|
|
if(this.$refs['xmProjectSelect']){ |
|
|
|
|
|
this.$refs['xmProjectSelect'].reloadOne(); |
|
|
|
|
|
|
|
|
if (this.$refs["xmProjectSelect"]) { |
|
|
|
|
|
this.$refs["xmProjectSelect"].reloadOne(); |
|
|
} |
|
|
} |
|
|
this.$notify({position:'bottom-left',showClose:true,message: tips.msg, type: tips.isOk?'success':'error'}); |
|
|
|
|
|
}).catch( err => this.load.calcProject=false ); |
|
|
|
|
|
|
|
|
this.$notify({ |
|
|
|
|
|
position: "bottom-left", |
|
|
|
|
|
showClose: true, |
|
|
|
|
|
message: tips.msg, |
|
|
|
|
|
type: tips.isOk ? "success" : "error", |
|
|
|
|
|
}); |
|
|
|
|
|
}) |
|
|
|
|
|
.catch((err) => (this.load.calcProject = false)); |
|
|
}, |
|
|
}, |
|
|
loadTasksSettleToXmProjectState() { |
|
|
loadTasksSettleToXmProjectState() { |
|
|
var row = this.selProject; |
|
|
var row = this.selProject; |
|
|
var params={projectId:row.id} |
|
|
|
|
|
loadTasksSettleToXmProjectState(params).then((res) => { |
|
|
|
|
|
|
|
|
var params = { projectId: row.id }; |
|
|
|
|
|
loadTasksSettleToXmProjectState(params) |
|
|
|
|
|
.then((res) => { |
|
|
this.load.calcProject = false; |
|
|
this.load.calcProject = false; |
|
|
var tips = res.data.tips; |
|
|
var tips = res.data.tips; |
|
|
this.$notify({position:'bottom-left',showClose:true,message: tips.msg, type: tips.isOk?'success':'error'}); |
|
|
|
|
|
}).catch( err => this.load.calcProject=false ); |
|
|
|
|
|
|
|
|
this.$notify({ |
|
|
|
|
|
position: "bottom-left", |
|
|
|
|
|
showClose: true, |
|
|
|
|
|
message: tips.msg, |
|
|
|
|
|
type: tips.isOk ? "success" : "error", |
|
|
|
|
|
}); |
|
|
|
|
|
}) |
|
|
|
|
|
.catch((err) => (this.load.calcProject = false)); |
|
|
|
|
|
}, |
|
|
|
|
|
onEditFields(row) { |
|
|
|
|
|
Object.assign(this.selProject, row); |
|
|
|
|
|
this.$emit("edit-fields", row); |
|
|
|
|
|
}, |
|
|
|
|
|
showCurrFlow() { |
|
|
|
|
|
this.$refs["项目概览"].showPanelName = "currFlow"; |
|
|
|
|
|
}, |
|
|
|
|
|
showHisFlow() { |
|
|
|
|
|
this.$refs["项目概览"].showPanelName = "hisFlow"; |
|
|
|
|
|
}, |
|
|
|
|
|
showDetail() { |
|
|
|
|
|
this.$refs["项目概览"].showPanelName = "detail"; |
|
|
|
|
|
}, |
|
|
|
|
|
showProjectGaiSuan() { |
|
|
|
|
|
this.$refs["项目概览"].showPanelName = "detail"; |
|
|
|
|
|
this.$nextTick(() => { |
|
|
|
|
|
this.$refs["项目概览"].$refs["detail"].$refs[ |
|
|
|
|
|
"projectEdit" |
|
|
|
|
|
].currTabPane = "4"; |
|
|
|
|
|
}); |
|
|
|
|
|
}, |
|
|
|
|
|
showProjectShouYi() { |
|
|
|
|
|
this.$refs["项目概览"].showPanelName = "detail"; |
|
|
|
|
|
this.$nextTick(() => { |
|
|
|
|
|
this.$refs["项目概览"].$refs["detail"].$refs[ |
|
|
|
|
|
"projectEdit" |
|
|
|
|
|
].currTabPane = "5"; |
|
|
|
|
|
}); |
|
|
|
|
|
}, |
|
|
|
|
|
showMenusPage() { |
|
|
|
|
|
this.infotype = "产品"; |
|
|
|
|
|
this.$nextTick(() => { |
|
|
|
|
|
this.$refs["xmProductComplex"].showPanel = "menus"; |
|
|
|
|
|
}); |
|
|
}, |
|
|
}, |
|
|
}, //end methods |
|
|
}, //end methods |
|
|
components: { |
|
|
components: { |
|
|
@ -190,13 +472,15 @@ import { loadTasksToXmProjectState , loadTasksSettleToXmProjectState} from '@/a |
|
|
XmPlan, |
|
|
XmPlan, |
|
|
}, |
|
|
}, |
|
|
mounted() { |
|
|
mounted() { |
|
|
|
|
|
|
|
|
this.$nextTick(() => { |
|
|
this.$nextTick(() => { |
|
|
|
|
|
|
|
|
|
|
|
this.maxTableHeight = util.calcTableMaxHeight(this.$refs.pageBody.$el); |
|
|
}); |
|
|
}); |
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
initDicts(this) |
|
|
|
|
|
}, |
|
|
|
|
|
}; |
|
|
</script> |
|
|
</script> |
|
|
|
|
|
|
|
|
<style scoped> |
|
|
<style scoped> |
|
|
@ -205,4 +489,7 @@ XmPlan, |
|
|
float: left; |
|
|
float: left; |
|
|
padding-top: 5px; |
|
|
padding-top: 5px; |
|
|
} |
|
|
} |
|
|
|
|
|
.step-btn{ |
|
|
|
|
|
margin-left:0px;margin-bottom: 5px; |
|
|
|
|
|
} |
|
|
</style> |
|
|
</style> |