Browse Source

优化

master
陈裕财 3 years ago
parent
commit
75f4522fa8
  1. 139
      src/views/xm/core/xmProject/XmProjectMng.vue

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

@ -2,7 +2,7 @@
<section class="padding"> <section class="padding">
<el-row > <el-row >
<xm-product-select class="hidden-md-and-down" :auto-select="false" @row-click="onProductSelected" @clear="onProductClose"></xm-product-select> <xm-product-select class="hidden-md-and-down" :auto-select="false" @row-click="onProductSelected" @clear="onProductClose"></xm-product-select>
<el-select v-model="menukey" @change="handleSelect" clearable style="width:100px;">
<el-select v-model="menukey" @change="handleSelect" clearable style="width:10em;">
<el-option value="all" label="全部"></el-option> <el-option value="all" label="全部"></el-option>
<el-option value="compete" label="我参与"></el-option> <el-option value="compete" label="我参与"></el-option>
<el-option value="leader" label="我管理"></el-option> <el-option value="leader" label="我管理"></el-option>
@ -13,57 +13,67 @@
<el-option value="myExecuserStatus1" label="我执行"></el-option> <el-option value="myExecuserStatus1" label="我执行"></el-option>
<el-option value="myExecuserStatus7" label="我放弃"></el-option> <el-option value="myExecuserStatus7" label="我放弃"></el-option>
</el-select> </el-select>
<el-select v-model="filters.status" clearable placeholder="项目状态" style="width:100px;">
<el-option v-for="(item,index) in dicts['projectStatus']" :value="item.id" :label="item.name" :key="index"></el-option>
</el-select>
<mdp-select-dict label="项目状态" placeholder="状态" style="width:10em;" :dict="dicts['projectStatus']" v-model="filters.status"></mdp-select-dict>
<el-input v-model="filters.key" style="width:15%;" placeholder="项目名称模糊查询" clearable >
<el-input v-model="filters.key" style="width:10em;" placeholder="名称查询" clearable >
</el-input> </el-input>
<el-button type="primary" icon="el-icon-search" @click="searchXmProjects">查询</el-button> <el-button type="primary" icon="el-icon-search" @click="searchXmProjects">查询</el-button>
<el-popover <el-popover
placement="top-start" placement="top-start"
title="更多条件、操作" title="更多条件、操作"
width="500"
width="600"
trigger="click" > trigger="click" >
<el-row>
<el-row>
<font class="more-label-font">显示方式:</font>
<el-radio v-model="showType" :label="false">表格</el-radio>
<el-radio v-model="showType" :label="true">卡片</el-radio>
</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="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-row>
<el-divider></el-divider>
<el-row v-if="filters.productId">
<font class="more-label-font">项目:</font>
<el-button type="primary" style="float:right;" @click="searchXmProjects" icon="el-icon-search">查询</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>
<xm-product-select style="display:inline;" :auto-select="false" @row-click="onProductSelected" @clear="onProductClose"></xm-product-select> <xm-product-select style="display:inline;" :auto-select="false" @row-click="onProductSelected" @clear="onProductClose"></xm-product-select>
</el-row>
<el-row>
<font class="more-label-font">项目编号:</font>
<el-input v-model="filters.id" clearable style="width:200px;"></el-input>
</el-row>
<el-row>
<font class="more-label-font">创建时间:</font>
<el-date-picker
v-model="dateRanger"
</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" type="daterange"
align="right"
start-key="createTimeStart"
end-key="createTimeEnd"
unlink-panels unlink-panels
range-separator="至" range-separator="至"
start-placeholder="开始日期" start-placeholder="开始日期"
end-placeholder="完成日期" end-placeholder="完成日期"
value-format="yyyy-MM-dd HH:mm:ss" 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 style="float:right;" type="primary" icon="el-icon-search" @click="searchXmProjects">查询</el-button>
</el-row>
</el-row>
: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>
<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>
<span style="float:right;"> <span style="float:right;">
@ -181,7 +191,8 @@
</el-result> </el-result>
</el-row> </el-row>
</el-row> </el-row>
<el-table ref="table" :height="maxTableHeight" v-cloak v-show="!showType" fit stripe :data="ScreenData" @sort-change="sortChange" highlight-current-row v-loading="load.list" @selection-change="selsChange" @row-click="rowClick" style="width: 100%;">
<el-row class="padding-top">
<el-table ref="table" :height="maxTableHeight" v-cloak v-show="!showType" fit stripe :data="ScreenData" @sort-change="sortChange" highlight-current-row v-loading="load.list" @selection-change="selsChange" @row-click="rowClick" style="width: 100%;" :border="true">
<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">
@ -199,8 +210,6 @@
</template> </template>
</el-result> </el-result>
</el-row> </el-row>
<el-table-column type="index" label="序号" width="60" fixed="left"></el-table-column>
<el-table-column prop="id" label="项目编码" min-width="150" sortable show-overflow-tooltip fixed="left"></el-table-column>
<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>
@ -208,16 +217,29 @@
</el-table-column> </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">
<el-tag v-for="(item,index) in formatDictsWithClass(dicts,'projectStatus',scope.row.status)" :key="index" :type="item.className">{{item.name}}</el-tag>
<mdp-select-dict-tag :dict="dicts['projectStatus']" :disabled="true" v-model="scope.row.status"></mdp-select-dict-tag>
</template>
</el-table-column>
<el-table-column prop="bizFlowState" label="审批状态" min-width="120" >
<template slot-scope="scope">
<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="100" sortable>
<el-table-column prop="finishRate" label="进度" width="200" sortable>
<template slot-scope="scope"> <template slot-scope="scope">
<font ><el-tag :type="scope.row.finishRate>=100?'success':'warning'">{{scope.row.finishRate}}%</el-tag>
<el-button id="guider-four" type="text" icon="el-icon-video-play" title="统计项目的工作量、进度、需求、bugs等数据" @click.stop="loadTasksToXmProjectState( scope.row)"></el-button>
<div style="display:flex;">
<div style="width:40px;">
{{getProgress(scope.row)}} %
</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-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(scope.row)>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="productCnt" label="项目数" sortable min-width="120" > <el-table-column prop="productCnt" label="项目数" sortable min-width="120" >
@ -239,17 +261,12 @@
<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 prop="startTime" label="起止时间" sortable min-width="150" >
<el-table-column prop="startTime" label="起止时间" sortable min-width="150" show-overflow-tooltip>
<template slot-scope="scope"> <template slot-scope="scope">
{{scope.row.startTime? scope.row.startTime.substr(0,10) : ""}}~{{scope.row.endTime? scope.row.endTime.substr(0,10) : ""}} {{scope.row.startTime? scope.row.startTime.substr(0,10) : ""}}~{{scope.row.endTime? scope.row.endTime.substr(0,10) : ""}}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="bizFlowState" label="审批状态" min-width="120" >
<template slot-scope="scope">
<el-tag v-for="(item,index) in formatDictsWithClass(dicts,'bizFlowState',scope.row.bizFlowState)" :key="index" :type="item.className">{{item.name}}</el-tag>
</template>
</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-popover <!-- <el-popover
placement="left" placement="left"
@ -257,7 +274,6 @@
<el-button v-if="menukey=='myFocus'" type="text" @click.stop="focusOrUnfocus(scope.row)" >取消关注</el-button> <el-button v-if="menukey=='myFocus'" type="text" @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>
<el-button type="text" @click.stop="intoInfo(scope.row)" >视图</el-button>
<el-button type="text" title="通过复制快速创建新项目" @click.stop="onCopyToBtnClick(scope.row)" v-loading="load.add">复制</el-button> <el-button type="text" title="通过复制快速创建新项目" @click.stop="onCopyToBtnClick(scope.row)" v-loading="load.add">复制</el-button>
<el-button type="text" title="删除项目" @click.stop="handleDel(scope.row)" v-loading="load.del">删除</el-button> <el-button type="text" title="删除项目" @click.stop="handleDel(scope.row)" v-loading="load.del">删除</el-button>
@ -291,6 +307,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>
<el-dialog title="项目新增" :visible.sync="addFormVisible" :with-header="false" width="80%" top="20px" :close-on-click-modal="false" append-to-body> <el-dialog title="项目新增" :visible.sync="addFormVisible" :with-header="false" width="80%" top="20px" :close-on-click-modal="false" append-to-body>
@ -398,16 +415,14 @@
} }
}, },
data() { data() {
const beginDate = new Date();
const endDate = new Date();
beginDate.setTime(beginDate.getTime() - 3600 * 1000 * 24 * 7 * 4 * 12 );
return { return {
filters: { filters: {
key: '', key: '',
productId:'', productId:'',
productName:'', productName:'',
id:'',// id:'',//
createTimeStart:'',
createTimeEnd:'',
}, },
xmProjects: [],// xmProjects: [],//
pageInfo:{// pageInfo:{//
@ -435,15 +450,13 @@
}, },
/**begin 自定义属性请在下面加 请加备注**/ /**begin 自定义属性请在下面加 请加备注**/
menukey: "all", menukey: "all",
showType: true,
showType: false,
showInfo: false, showInfo: false,
selectProject: null, selectProject: null,
finishFlag: false, finishFlag: false,
xmRecordVisible: false, xmRecordVisible: false,
productSelectVisible:false, productSelectVisible:false,
maxTableHeight:300, maxTableHeight:300,
dateRanger: [ ],
pickerOptions: util.getPickerOptions('datarange'),
xmProjectCopy:{ xmProjectCopy:{
id:'',name:'',code:'',isTpl:'',copyPhase:'1',copyTask:'1',copyGroup:'1',copyGroupUser:'0',copyProduct:'1',tplType:'2', id:'',name:'',code:'',isTpl:'',copyPhase:'1',copyTask:'1',copyGroup:'1',copyGroupUser:'0',copyProduct:'1',tplType:'2',
}, },
@ -493,10 +506,6 @@
}else{ }else{
//params.xxx=xxxxx //params.xxx=xxxxx
} }
if(this.dateRanger&&this.dateRanger.length==2){
}
this.load.list = true; this.load.list = true;
if(this.pageInfo.orderFields!=null && this.pageInfo.orderFields.length>0){ if(this.pageInfo.orderFields!=null && this.pageInfo.orderFields.length>0){
let orderBys=[]; let orderBys=[];
@ -516,8 +525,8 @@
if(this.filters.status){ if(this.filters.status){
params.status = this.filters.status params.status = this.filters.status
} }
params.createTimeStart=this.dateRanger[0]
params.createTimeEnd=this.dateRanger[1]
params.createTimeStart=this.filters.createTimeStart
params.createTimeEnd=this.filters.createTimeEnd
listXmProject(params).then((res) => { listXmProject(params).then((res) => {
var tips=res.data.tips; var tips=res.data.tips;
if(tips.isOk){ if(tips.isOk){
@ -822,13 +831,11 @@
onProductSelected:function(product){ onProductSelected:function(product){
this.filters.productId=product.id this.filters.productId=product.id
this.filters.productName=product.productName this.filters.productName=product.productName
this.getXmProjects()
this.productSelectVisible=false; this.productSelectVisible=false;
}, },
onProductClose:function(){ onProductClose:function(){
this.filters.productId='' this.filters.productId=''
this.filters.productName='' this.filters.productName=''
this.getXmProjects()
}, },
onCopyToBtnClick(row){ onCopyToBtnClick(row){

Loading…
Cancel
Save