Browse Source

优化

master
陈裕财 3 years ago
parent
commit
5cf372a76d
  1. 219
      src/views/xm/core/xmProduct/XmProductMng.vue
  2. 13
      src/views/xm/core/xmProject/XmProjectMng.vue

219
src/views/xm/core/xmProduct/XmProductMng.vue

@ -6,10 +6,7 @@
<el-option label="我相关的产品" value="compete"></el-option> <el-option label="我相关的产品" value="compete"></el-option>
<el-option label="按产品编号精确查找" value="productId"></el-option> <el-option label="按产品编号精确查找" value="productId"></el-option>
</el-select> </el-select>
<el-select v-model="filters.pstatus" clearable placeholder="状态" style="width:100px;">
<el-option v-for="(item,index) in dicts['xmProductPstatus']" :value="item.id" :label="item.name" :key="index"></el-option>
</el-select>
<mdp-select-dict placeholder="状态" :dict="dicts['xmProductPstatus']" v-model="filters.pstatus"></mdp-select-dict>
<el-input v-if="filters.queryScope=='productId'" style="width:20%;" v-model="filters.id" placeholder="输入产品编号" @keyup.enter.native="searchXmProducts" clearable> <el-input v-if="filters.queryScope=='productId'" style="width:20%;" v-model="filters.id" placeholder="输入产品编号" @keyup.enter.native="searchXmProducts" clearable>
</el-input> </el-input>
<el-input v-if="filters.queryScope!='productId'" v-model="filters.key" style="width: 20%;" placeholder="名称查询" clearable> <el-input v-if="filters.queryScope!='productId'" v-model="filters.key" style="width: 20%;" placeholder="名称查询" clearable>
@ -19,78 +16,95 @@
<el-popover <el-popover
placement="top-start" placement="top-start"
title="更多查询条件、操作" title="更多查询条件、操作"
width="500"
width="600"
trigger="click" > trigger="click" >
<el-row>
<el-button @click="templateVisible=!templateVisible" >{{templateVisible?"隐藏模板":"显示模板"}}</el-button>
<el-button @click="guiderStart(true)" icon="el-icon-help">新手导航</el-button>
</el-row>
<el-divider></el-divider>
<el-row>
<el-row>
<font class="more-label-font">
产品查询范围
</font>
<el-select v-model="filters.queryScope" style="width:200px;" placeholder="产品查询范围">
<el-option :label="userInfo.branchName+'机构下的产品'" value="branchId"></el-option>
<el-option label="我相关的产品" value="compete"></el-option>
<el-option label="按产品编号精确查找" value="productId"></el-option>
</el-select>
</el-row>
<el-row v-if="filters.queryScope=='productId'">
<font class="more-label-font">
产品编号
</font>
<el-input v-model="filters.id" style="width:200px;" placeholder="输入产品编号" @keyup.enter.native="searchXmProducts">
</el-input>
</el-row>
<el-row>
<font class="more-label-font">
产品名称:
</font>
<el-input v-model="filters.key" style="width:200px;" placeholder="输入产品名字关键字">
</el-input>
</el-row>
<el-row>
<font class="more-label-font">
产品经理:
</font>
<el-tag v-if="filters.pmUser" closable @click="selectFiltersPmUser" @close="clearFiltersPmUser()">{{filters.pmUser.username}}</el-tag>
<el-button v-else @click="selectFiltersPmUser()">选责任人</el-button>
<el-button @click="setFiltersPmUserAsMySelf()">我的</el-button>
</el-row>
<el-row v-if="selProject">
<font class="more-label-font">
项目 <el-tag v-if="selProject">{{selProject?selProject.name:''}}</el-tag>
</font>
</el-row>
<el-row v-if="xmIteration">
<font class="more-label-font">
迭代 <el-tag v-if="xmIteration">{{xmIteration.iterationName}}</el-tag>
</font>
</el-row>
<el-row v-show="!selProject&&filters.queryScope!='productId'">
<font class="more-label-font">创建时间:</font>
<el-date-picker
v-model="dateRanger"
type="daterange"
align="right"
unlink-panels
range-separator="至"
start-placeholder="开始日期"
end-placeholder="完成日期"
value-format="yyyy-MM-dd HH:mm:ss"
:default-time="['00:00:00','23:59:59']"
:picker-options="pickerOptions"
></el-date-picker>
</el-row>
<el-row>
<el-button type="primary" @click="searchXmProducts" style="float:right;" icon="el-icon-search">查询</el-button>
</el-row>
</el-row>
<el-descriptions class="margin-top" size="mini" :column="1" border>
<template slot="extra">
<el-button type="text" @click="templateVisible=!templateVisible">{{templateVisible?'隐藏模板':'显示模板'}}</el-button>
<el-button type="text" @click="guiderStart(true)" icon="el-icon-help">新手导航</el-button>
</template>
<el-descriptions-item>
<template slot="label">
<i class="el-icon-time"></i>
显示方式
</template>
<el-radio v-model="showType" :label="false">表格</el-radio>
<el-radio v-model="showType" :label="true">卡片</el-radio>
</el-descriptions-item>
<el-descriptions-item>
<template slot="label">
<i class="el-icon-document"></i>
查询范围
</template>
<el-select v-model="filters.queryScope" style="width:200px;" placeholder="产品查询范围">
<el-option :label="userInfo.branchName+'机构下的产品'" value="branchId"></el-option>
<el-option label="我相关的产品" value="compete"></el-option>
<el-option label="按产品编号精确查找" value="productId"></el-option>
</el-select>
</el-descriptions-item>
<el-descriptions-item v-if="selProject">
<template slot="label">
<i class="el-icon-document"></i>
当前项目
</template>
<el-tag v-if="selProject">{{selProject?selProject.name:''}}</el-tag>
</el-descriptions-item>
<el-descriptions-item v-if="xmIteration">
<template slot="label">
<i class="el-icon-document"></i>
当前迭代
</template>
<el-tag v-if="xmIteration">{{xmIteration.iterationName}}</el-tag>
</el-descriptions-item>
<el-descriptions-item>
<template slot="label">
<i class="el-icon-document"></i>
产品经理
</template>
<el-tag v-if="filters.pmUser" closable @click="selectFiltersPmUser" @close="clearFiltersPmUser()">{{filters.pmUser.username}}</el-tag>
<el-button v-else @click="selectFiltersPmUser()">选责任人</el-button>
<el-button @click="setFiltersPmUserAsMySelf()">我的</el-button>
</el-descriptions-item>
<el-descriptions-item :span="2">
<template slot="label">
<i class="el-icon-watch-1"></i>
创建时间
</template>
<mdp-date-range
v-model="filters"
type="daterange"
start-key="ctimeStart"
end-key="ctimeEnd"
unlink-panels
range-separator="至"
start-placeholder="开始日期"
end-placeholder="完成日期"
value-format="yyyy-MM-dd HH:mm:ss"
:default-time="['00:00:00', '23:59:59']"
:auto-default="false"
key="planEndTime"
></mdp-date-range>
</el-descriptions-item>
<el-descriptions-item>
<template slot="label">
<i class="el-icon-document"></i>
产品编号
</template>
<el-input v-model="filters.id" clearable style="width:100%;"></el-input>
</el-descriptions-item>
<el-descriptions-item>
<template slot="label">
<i class="el-icon-document"></i>
产品名称
</template>
<el-input v-model="filters.key" clearable style="width:100%;"></el-input>
</el-descriptions-item>
<el-descriptions-item>
<el-button type="primary" style="float:right;" @click="searchXmProducts" icon="el-icon-search">查询</el-button>
</el-descriptions-item>
</el-descriptions>
<el-button slot="reference" icon="el-icon-more" id="guider-two"></el-button> <el-button slot="reference" icon="el-icon-more" id="guider-two"></el-button>
</el-popover> </el-popover>
<span style="float:right;"> <span style="float:right;">
@ -119,7 +133,8 @@
</el-popover> </el-popover>
</span> </span>
</el-row> </el-row>
<el-row v-show="showType" v-loading="load.list" ref="table1" :style="{overflowX:'hidden',height:maxTableHeight+'px'}">
<el-row ref="table1">
<el-row v-show="showType" v-loading="load.list" :style="{overflowX:'hidden',height:maxTableHeight+'px'}">
<!--列表 XmProject xm_project--> <!--列表 XmProject xm_project-->
<el-row v-if="xmProducts.length>0"> <el-row v-if="xmProducts.length>0">
<el-col v-cloak v-for="(p,i) in xmProducts" :key="i" :xl="6" :lg="8" :md="8" :sm="12"> <el-col v-cloak v-for="(p,i) in xmProducts" :key="i" :xl="6" :lg="8" :md="8" :sm="12">
@ -205,9 +220,9 @@
</el-result> </el-result>
</el-row> </el-row>
</el-row> </el-row>
<el-row v-show="!showType">
<el-row v-show="!showType" class="padding-top">
<!--列表 XmProduct 产品表--> <!--列表 XmProduct 产品表-->
<el-table ref="table" :height="maxTableHeight" :data="xmProducts" @sort-change="sortChange" highlight-current-row v-loading="load.list" @selection-change="selsChange" @row-click="rowClick" style="width: 100%;">
<el-table ref="table" :height="maxTableHeight" :data="xmProducts" @sort-change="sortChange" highlight-current-row v-loading="load.list" @selection-change="selsChange" @row-click="rowClick" style="width: 100%;" border>
<el-row slot="empty"> <el-row slot="empty">
<el-result icon="info" title="信息提示" subTitle="没有查到相关产品,有可能是您暂时还没有产品,有可能是您无权限查询产品。"> <el-result icon="info" title="信息提示" subTitle="没有查到相关产品,有可能是您暂时还没有产品,有可能是您无权限查询产品。">
<template slot="extra"> <template slot="extra">
@ -225,33 +240,31 @@
</template> </template>
</el-result> </el-result>
</el-row> </el-row>
<el-table-column type="index" width="60" fixed="left">
</el-table-column>
<el-table-column prop="id" label="产品编码" min-width="150" sortable fixed="left">
</el-table-column>
<el-table-column prop="productName" label="产品名称" min-width="250" sortable fixed="left"> <el-table-column prop="productName" label="产品名称" min-width="250" sortable fixed="left">
<template slot-scope="scope" > <template slot-scope="scope" >
<el-link id="guider-three" type="primary" @click="intoInfo(scope.row)">{{scope.row.productName}}</el-link> <el-link id="guider-three" type="primary" @click="intoInfo(scope.row)">{{scope.row.productName}}</el-link>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="id" label="产品编码" min-width="150" sortable fixed="left" show-overflow-tooltip>
</el-table-column>
<el-table-column prop="pstatus" label="状态" width="100" sortable :formatter="formatPstatus" fixed="left"> <el-table-column prop="pstatus" label="状态" width="100" sortable :formatter="formatPstatus" fixed="left">
<template slot-scope="scope"> <template slot-scope="scope">
<el-tag v-if="scope.row.pstatus=='0'" type="info" effect="plain">{{formatPstatus(null,null,scope.row.pstatus)}}</el-tag>
<el-tag v-else-if="scope.row.pstatus=='1' " type="primary" effect="plain">{{formatPstatus(null,null,scope.row.pstatus)}}</el-tag>
<el-tag v-else-if="scope.row.pstatus=='2' " type="success" effect="plain">{{formatPstatus(null,null,scope.row.pstatus)}}</el-tag>
<el-tag v-else-if="scope.row.pstatus=='3'" type="warning" effect="plain">{{formatPstatus(null,null,scope.row.pstatus)}}</el-tag>
<el-tag v-else type="danger" effect="plain">{{formatPstatus(null,null,scope.row.pstatus)}}</el-tag>
<mdp-select-dict-tag placeholder="状态" :dict="dicts['xmProductPstatus']" v-model="scope.row.pstatus" effect="dark"></mdp-select-dict-tag>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="finishRate" label="进度" width="100" sortable>
<el-table-column prop="finishRate" label="进度" width="180" sortable>
<template slot-scope="scope"> <template slot-scope="scope">
<font ><el-tag :type="scope.row.finishRate>=100?'success':'warning'">{{scope.row.finishRate}}%</el-tag>
<div style="display:flex;">
<div style="width:3em;">{{ getProgress(scope.row) }}%</div>
<el-button plain circle id="guider-four" type="text" icon="el-icon-video-play" @click.stop="loadTasksToXmProductState( scope.row)"></el-button>
<el-tooltip content="点击统计进度,由任务汇总"><el-button id="guider-four" type="text" icon="el-icon-video-play" @click.stop="loadTasksToXmProductState( scope.row)"></el-button></el-tooltip>
<el-tag v-if="getPlanRealProgress(scope.row)>0" type="warning" effect="dark">超前{{ getPlanRealProgress(scope.row) }}%</el-tag>
<el-tag v-else-if="getPlanRealProgress(scope.row)<0" type="danger" effect="dark">落后{{ 0-getPlanRealProgress(scope.row) }}%</el-tag>
<el-tag v-else-if="getProgress(p)>0" effect="dark" type="success" class="el-icon-check"> </el-tag>
<el-tag v-else-if="getProgress(scope.row)==0" effect="dark" type="info">未开始 </el-tag>
</div>
</font>
</template>
</template>
</el-table-column> </el-table-column>
<el-table-column prop="pmUsername" label="产品经理" width="150" sortable show-overflow-tooltip> <el-table-column prop="pmUsername" label="产品经理" width="150" sortable show-overflow-tooltip>
<template slot-scope="scope"> <template slot-scope="scope">
@ -286,12 +299,10 @@
<span title=" 已关闭 / 总缺陷数 ">{{scope.row.bugCnt>0?scope.row.closedBugs+'&nbsp;/&nbsp;'+scope.row.bugCnt:''}}</span> <span title=" 已关闭 / 总缺陷数 ">{{scope.row.bugCnt>0?scope.row.closedBugs+'&nbsp;/&nbsp;'+scope.row.bugCnt:''}}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="工作量(人时)" width="200">
<el-table-column prop="budgetWorkload" label="预计" width="100" show-overflow-tooltip sortable></el-table-column>
<el-table-column prop="actWorkload" label="实际" width="100" show-overflow-tooltip sortable></el-table-column>
</el-table-column>
<el-table-column prop="budgetWorkload" label="预计工时" width="100" show-overflow-tooltip sortable></el-table-column>
<el-table-column prop="actWorkload" label="实际工时" width="100" show-overflow-tooltip sortable></el-table-column>
<el-table-column label="操作" width="200" fixed="right">
<el-table-column label="操作" width="150" fixed="right">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button v-if="menukey=='myFocus'" type="primary" @click.stop="focusOrUnfocus(scope.row)" >取消关注</el-button> <el-button v-if="menukey=='myFocus'" type="primary" @click.stop="focusOrUnfocus(scope.row)" >取消关注</el-button>
<el-button v-else type="text" @click.stop="focusOrUnfocus(scope.row)" >关注</el-button> <el-button v-else type="text" @click.stop="focusOrUnfocus(scope.row)" >关注</el-button>
@ -301,6 +312,7 @@
</el-table-column> </el-table-column>
</el-table> </el-table>
</el-row>
</el-row> </el-row>
<el-pagination layout="total, sizes, prev, pager, next" @current-change="handleCurrentChange" @size-change="handleSizeChange" :page-sizes="[12,20, 50, 100, 500]" :current-page="pageInfo.pageNum" :page-size="pageInfo.pageSize" :total="pageInfo.total" style="float:right;"></el-pagination> <el-pagination layout="total, sizes, prev, pager, next" @current-change="handleCurrentChange" @size-change="handleSizeChange" :page-sizes="[12,20, 50, 100, 500]" :current-page="pageInfo.pageNum" :page-size="pageInfo.pageSize" :total="pageInfo.total" style="float:right;"></el-pagination>
@ -453,12 +465,9 @@
productStateVisible:false, productStateVisible:false,
selectFiltersPmUserVisible:false, selectFiltersPmUserVisible:false,
maxTableHeight:300, maxTableHeight:300,
dateRanger: [
],
pickerOptions: util.getPickerOptions('datarange'),
projectVisible:false, projectVisible:false,
productSelectVisible:false, productSelectVisible:false,
showType:true,
showType:false,
xmProductCopy:{ xmProductCopy:{
id:'',productName:'',code:'',isTpl:'',copyMenu:'1',copyPhase:'1',copyGroup:'1',copyGroupUser:'0' id:'',productName:'',code:'',isTpl:'',copyMenu:'1',copyPhase:'1',copyGroup:'1',copyGroupUser:'0'
}, },
@ -541,11 +550,9 @@
if(this.filters.queryScope=="branchId"){ if(this.filters.queryScope=="branchId"){
params.branchId=this.userInfo.branchId params.branchId=this.userInfo.branchId
} }
if(this.dateRanger && this.dateRanger.length==2){
params.ctimeStart=this.dateRanger[0]
params.ctimeEnd=this.dateRanger[1]
}
params.ctimeStart=this.filters.ctimeStart
params.ctimeEnd=this.filters.ctimeEnd
if(this.xmIteration){ if(this.xmIteration){
params.iterationId=this.xmIteration.id params.iterationId=this.xmIteration.id
} }

13
src/views/xm/core/xmProject/XmProjectMng.vue

@ -27,7 +27,6 @@
<template slot="extra"> <template slot="extra">
<el-button type="text" @click="templateVisible=!templateVisible">{{templateVisible?'隐藏模板':'显示模板'}}</el-button> <el-button type="text" @click="templateVisible=!templateVisible">{{templateVisible?'隐藏模板':'显示模板'}}</el-button>
<el-button type="text" @click="guiderStart(true)" icon="el-icon-help">新手导航</el-button> <el-button type="text" @click="guiderStart(true)" icon="el-icon-help">新手导航</el-button>
<el-button type="primary" style="float:right;" @click="searchXmProjects" icon="el-icon-search">查询</el-button>
</template> </template>
<el-descriptions-item> <el-descriptions-item>
<template slot="label"> <template slot="label">
@ -73,6 +72,10 @@
</template> </template>
<el-input v-model="filters.id" clearable style="width:100%;"></el-input> <el-input v-model="filters.id" clearable style="width:100%;"></el-input>
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item>
<el-button type="primary" style="float:right;" @click="searchXmProjects" icon="el-icon-search">查询</el-button>
</el-descriptions-item>
</el-descriptions> </el-descriptions>
<el-button slot="reference" icon="el-icon-more" id="prj-more-btn"></el-button> <el-button slot="reference" icon="el-icon-more" id="prj-more-btn"></el-button>
</el-popover> </el-popover>
@ -210,11 +213,13 @@
</template> </template>
</el-result> </el-result>
</el-row> </el-row>
<el-table-column prop="name" label="标题" sortable min-width="250" fixed="left">
<el-table-column prop="name" label="项目名称" sortable min-width="250" fixed="left">
<template slot-scope="scope"> <template slot-scope="scope">
<el-link type="primary" @click.stop="intoInfo(scope.row)">{{scope.row.name}}</el-link> <el-link type="primary" @click.stop="intoInfo(scope.row)">{{scope.row.name}}</el-link>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="id" label="项目编码" sortable min-width="180" fixed="left" show-overflow-tooltip>
</el-table-column>
<el-table-column prop="status" label="状态" width="100" sortable fixed="left"> <el-table-column prop="status" label="状态" width="100" sortable fixed="left">
<template slot-scope="scope"> <template slot-scope="scope">
<mdp-select-dict-tag :dict="dicts['projectStatus']" :disabled="true" v-model="scope.row.status"></mdp-select-dict-tag> <mdp-select-dict-tag :dict="dicts['projectStatus']" :disabled="true" v-model="scope.row.status"></mdp-select-dict-tag>
@ -225,11 +230,11 @@
<mdp-select-dict-tag :dict="dicts['bizFlowState']" :disabled="true" v-model="scope.row.bizFlowState"></mdp-select-dict-tag> <mdp-select-dict-tag :dict="dicts['bizFlowState']" :disabled="true" v-model="scope.row.bizFlowState"></mdp-select-dict-tag>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="finishRate" label="进度" width="200" sortable>
<el-table-column prop="finishRate" label="进度" width="180" sortable>
<template slot-scope="scope"> <template slot-scope="scope">
<div style="display:flex;"> <div style="display:flex;">
<div style="width:40px;">
<div style="width:3em;">
{{getProgress(scope.row)}} % {{getProgress(scope.row)}} %
</div> </div>
<el-button id="guider-four" type="text" circle plain icon="el-icon-video-play" title="统计项目的工作量、进度、需求、bugs等数据" @click.stop="loadTasksToXmProjectState( scope.row)"></el-button> <el-button id="guider-four" type="text" circle plain icon="el-icon-video-play" title="统计项目的工作量、进度、需求、bugs等数据" @click.stop="loadTasksToXmProjectState( scope.row)"></el-button>

Loading…
Cancel
Save