Browse Source

优化

master
陈裕财 4 years ago
parent
commit
89c84fdf91
  1. 4
      src/api/xm/core/xmTask.js
  2. 2
      src/views/xm/core/components/XmProductSelect.vue
  3. 2
      src/views/xm/core/xmMenu/XmMenuMng.vue
  4. 7
      src/views/xm/core/xmTask/XmTaskAdd.vue
  5. 10
      src/views/xm/core/xmTask/XmTaskEdit.vue
  6. 429
      src/views/xm/core/xmTask/XmTaskMng.vue

4
src/api/xm/core/xmTask.js

@ -54,6 +54,10 @@ export const editTime = params => { return axios.post(`${base}/xm/core/xmTask/ed
export const batchChangeParentTask = params => { return axios.post(`${base}/xm/core/xmTask/batchChangeParentTask`, params); };
export const editXmTaskSomeFields = params => { return axios.post(`${base}/xm/core/xmTask/editSomeFields`, params); };

2
src/views/xm/core/components/XmProductSelect.vue

@ -273,7 +273,7 @@
},
tableRowClassName({row, rowIndex}) {
if (row.id == this.editForm.id) {
if (row && this.editForm && row.id == this.editForm.id) {
return 'success-row';
}
return '';

2
src/views/xm/core/xmMenu/XmMenuMng.vue

@ -1051,7 +1051,7 @@
this.searchXmMenus();
},
onTagSelected(tags,option){
if(option.action=='editTagIds'){
if(option && option.action=='editTagIds'){
this.editXmMenuSomeFields(option.data,"tagIds",tags)
}else{
if (!tags || tags.length == 0) {

7
src/views/xm/core/xmTask/XmTaskAdd.vue

@ -58,10 +58,7 @@
<el-col :span="8">
<el-form-item :label="addForm.ntype=='0'?'任务状态':'计划状态'">
<el-select v-model="addForm.taskState">
<el-option value="0" label="待领取"></el-option>
<el-option value="1" label="已领取执行中"></el-option>
<el-option value="2" label="已完工"></el-option>
<el-option value="3" label="已结算"></el-option>
<el-option v-for="i in dicts.taskState" :label="i.name" :key="i.id" :value="i.id"></el-option>
</el-select>
</el-form-item>
</el-col>
@ -660,7 +657,7 @@
},
mounted() {
this.initData();
initSimpleDicts('all',['planType','taskType','priority','xmTaskSettleSchemel']).then(res=>{
initSimpleDicts('all',['planType','taskType','priority','xmTaskSettleSchemel','taskState']).then(res=>{
this.dicts=res.data.data;
})
/**在下面写其它函数***/

10
src/views/xm/core/xmTask/XmTaskEdit.vue

@ -57,11 +57,9 @@
<el-row>
<el-col :span="8">
<el-form-item :label="editForm.ntype=='0'?'任务状态':'计划状态'">
<el-select v-model="editForm.taskState">
<el-option value="0" label="待领取"></el-option>
<el-option value="1" label="已领取执行中"></el-option>
<el-option value="2" label="已完工"></el-option>
<el-option value="3" label="已结算"></el-option>
<el-option v-for="i in dicts.taskState" :label="i.name" :key="i.id" :value="i.id"></el-option>
</el-select>
</el-form-item>
</el-col>
@ -275,7 +273,7 @@
</el-drawer>
<el-drawer append-to-body title="需求选择" :visible.sync="menuVisible" size="80%" :close-on-click-modal="false">
<xm-menu-select :is-select-menu="true" @selected="onMenuSelected" :sel-project="xmProject"></xm-menu-select>
<xm-menu-select :is-select-menu="true" checkScope="0" @selected="onMenuSelected" :sel-project="xmProject"></xm-menu-select>
</el-drawer>
<el-drawer title="选中任务" :visible.sync="selectTaskVisible" size="80%" append-to-body :close-on-click-modal="false">
@ -670,7 +668,7 @@
}
this.setSkills();
initSimpleDicts('all',['planType','taskType','priority','xmTaskSettleSchemel']).then(res=>{
initSimpleDicts('all',['planType','taskType','priority','xmTaskSettleSchemel','taskState']).then(res=>{
this.dicts=res.data.data;
})
/**在下面写其它函数***/

429
src/views/xm/core/xmTask/XmTaskMng.vue

@ -1,6 +1,6 @@
<template>
<section class="padding">
<el-row v-show="batchEditVisible == false">
<el-row>
<el-col
:span="24"
class="padding-left"
@ -104,12 +104,12 @@
<el-button
style="margin-top: 10px;"
v-if="!filters.tags || filters.tags.length == 0"
@click.native="tagSelectVisible = true"
@click.native="$refs.tagDialog.open()"
>标签</el-button
>
<el-tag
v-else
@click="tagSelectVisible = true"
@click="$refs.tagDialog.open()"
closable
@close="clearFiltersTag(filters.tags[0])"
>{{ filters.tags[0].tagName.substr(0, 5) }}({{
@ -227,14 +227,6 @@
icon="el-icon-upload2"
v-loading="load.edit"
> </el-button>
<el-button
v-if="isTaskCenter != '1' && isMy != '1'"
@click="showBatchEdit"
v-loading="load.edit"
icon="el-icon-edit"
title="批量修改任务"
></el-button
>
<el-button type="danger"
v-if="isTaskCenter != '1' && isMy != '1'"
@click="batchDel"
@ -253,15 +245,7 @@
<el-row>
<el-col :span="24" style="padding-top: 5px">
<font class="more-label-font">产品:</font
><el-tag
v-if="filters.product"
:closable="!xmProduct"
@close="clearProduct"
>{{ this.filters.product.productName }}</el-tag
>
<el-button v-else @click="showProductVisible" type="plian"
>选产品</el-button
>
> <xm-product-select :auto-select="false" :link-project-id="filters.selProject && filters.selProject.id?filters.selProject.id:null" @row-click="onProductSelected" @clear-select="onProductClearSelect"></xm-product-select>
</el-col>
<el-col :span="24" style="padding-top: 5px">
<font class="more-label-font">需求:</font>
@ -361,15 +345,6 @@
</el-col>
</el-row>
<el-row>
<el-col :span="24" style="padding-top: 5px">
<el-button
v-if="isTaskCenter != '1' && isMy != '1'"
@click="showBatchEdit"
v-loading="load.edit"
icon="el-icon-edit"
>批量修改任务</el-button
>
</el-col>
<el-col :span="24" style="padding-top: 5px">
<el-button type="danger"
v-if="isTaskCenter != '1' && isMy != '1'"
@ -451,18 +426,7 @@
<i :class="scope.row.ntype==='1'?'el-icon-odometer':'el-icon-s-operation'" ></i>
</div>
<span class="vlink" type="primary" @click.stop="showDrawer(scope.row)">
{{ scope.row.sortLevel }}&nbsp;
<el-tag v-if="scope.row.level <= '2'" type="info"
>轻微</el-tag
>
<el-tag v-else-if="scope.row.level == '3'" type="warning"
>一般</el-tag
>
<el-tag v-else-if="scope.row.level == '4'" type="danger"
>紧急</el-tag
>
<el-tag v-else type="danger">特急</el-tag>
{{ scope.row.name }}
{{ scope.row.sortLevel }}&nbsp; {{ scope.row.name }}
</span>
<div class="tool-bar">
@ -488,19 +452,42 @@
width="100"
>
<template slot-scope="scope">
{{formateOption("taskState",scope.row.taskState)}}
<div class="cell-text">
<el-button style="display:block;" :type="item.className" plain round v-for="(item,index) in formatterTaskStateDicts(scope.row.taskState)" :key="index">{{item.name}}</el-button>
</div>
<span class="cell-bar">
<el-select v-model="scope.row.taskState" placeholder="任务状态" style="display:block;" @change="editXmTaskSomeFields(scope.row,'taskState',$event)">
<el-option :value="item.id" :label="item.name" v-for="(item,index) in dicts.taskState" :key="index"></el-option>
</el-select>
</span>
</template>
</el-table-column>
<el-table-column
label="优先级"
type="level"
width="100"
>
<template slot-scope="scope">
<div class="cell-text">
<el-button style="display:block;" :type="item.className" plain round v-for="(item,index) in formatterPriorityDicts(scope.row.level)" :key="index">{{item.name}}</el-button>
</div>
<span class="cell-bar">
<el-select v-model="scope.row.level" placeholder="优先级" style="display:block;" @change="editXmTaskSomeFields(scope.row,'level',$event)">
<el-option :value="item.id" :label="item.name" v-for="(item,index) in dicts.priority" :key="index"></el-option>
</el-select>
</span>
</template>
</el-table-column>
<el-table-column
sortable
prop="name"
label="预算及工时"
prop="budgetWorkload"
label="预工时"
width="150"
>
<template slot-scope="scope">
{{ "¥" + getAmountDesc(scope.row.budgetCost) }},{{
<template slot-scope="scope"> {{
scope.row.budgetWorkload
}}人时
}}&nbsp;h
</template>
</el-table-column>
<el-table-column sortable prop="rate" label="进度" width="100">
@ -521,6 +508,14 @@
</el-table-column>
<el-table-column sortable prop="tagNames" label="标签" width="100">
<template slot-scope="scope">
<div class="cell-text">
{{scope.row.tagNames}}
</div>
<span class="cell-bar">
<el-button @click="$refs.tagDialog.open({data:scope.row,action:'editTagIds'})">选标签</el-button>
</span>
</template>
</el-table-column>
<el-table-column
sortable
@ -529,6 +524,14 @@
width="120"
show-overflow-tooltip
>
<template slot-scope="scope">
<div class="cell-text">
{{scope.row.createUsername}}
</div>
<span class="cell-bar">
<el-button @click="$refs.xmGroupDialog.open({data:scope.row,action:'createUserid'})">选负责人</el-button>
</span>
</template>
</el-table-column>
<el-table-column
sortable
@ -579,53 +582,15 @@
width="120"
show-overflow-tooltip
>
<template slot="header"> <el-button type="text" icon="el-icon-link" title="批量关联需求" @click="showBatchRelTasksWithMenuVisible">关联需求</el-button> </template>
<template slot-scope="scope">
<font>
<el-link @click.stop="toMenu(scope.row)">{{
scope.row.menuName ? scope.row.menuName : ""
}}</el-link>
</font>
</template>
</el-table-column>
<!--
<el-table-column label="操作" width="100">
<template slot-scope="scope">
<el-dropdown
@command="handleCommand"
v-if="isTaskCenter != '1' && isMy != '1' && scope.row.ntype=='1'"
:disabled="scope.row.ntype!='1'"
>
<span class="el-dropdown-link">
<el-button><i class="el-icon-plus"></i></el-button>
</span>
<el-dropdown-menu slot="dropdown">
<el-dropdown-item
:command="{ type: 'showMenu', data: scope.row }"
>
<div class="icon" :style="{backgroundColor: '#E6A23C'}">
<i :class=" 'el-icon-odometer' " ></i>
<div class="cell-text">
<el-link @click.stop="toMenu(scope.row)">{{ scope.row.menuName ? scope.row.menuName : "" }}</el-link>
</div>
</el-dropdown-item
>
<el-dropdown-item
:command="{ type: 'showSubAdd', data: scope.row }"
>+子计划/子任务</el-dropdown-item
>
<el-dropdown-item
:command="{ type: 'showTaskTemplate', data: scope.row }"
>+从模板批量导入子计划/子任务</el-dropdown-item
>
</el-dropdown-menu>
</el-dropdown>
<el-button
type="text"
@click="handleDel(scope.row)"
icon="el-icon-delete"
></el-button>
<span class="cell-bar">
<el-button @click="showBatchRelTasksWithMenuVisible">关联需求</el-button>
</span>
</template>
</el-table-column>
-->
</el-table>
<el-pagination
ref="pagination"
@ -647,26 +612,6 @@
</el-row>
</el-col>
</el-row>
<el-row v-if="batchEditVisible">
<xm-task-mng-batch
:sel-project="selProject"
:visible="batchEditVisible"
:xmTasks="xmTasks"
@back="batchEditBack"
></xm-task-mng-batch>
<el-pagination
ref="pagination"
layout="total, sizes, prev, pager, next"
@current-change="handleCurrentChange"
@size-change="handleSizeChange"
:page-sizes="[10, 20, 50, 100, 500]"
:current-page="pageInfo.pageNum"
:page-size="pageInfo.pageSize"
:total="pageInfo.total"
style="float: right"
></el-pagination>
</el-row>
<el-drawer
v-if="drawerVisible == true"
:size="600"
@ -881,7 +826,8 @@
ref="execuserMng"
></xm-execuser-mng>
</el-drawer>
<tag-dialog ref="tagDialog" @select-confirm="onTagSelected">
</tag-dialog>
<!-- <el-drawer :title="'技能要求——'+currTaskName" :visible.sync="skillVisible" size="80%" append-to-body :close-on-click-modal="false">
<xm-skill-mng :visible="skillVisible" :task-id="currTaskId" :task-name="currTaskName"></xm-skill-mng>
</el-drawer> -->
@ -953,6 +899,7 @@
<xm-menu-select
:visible="batchRelTasksWithMenuVisible"
:is-select-menu="true"
checkScope="0"
@selected="onBatchRelTasksWithMenu"
:xm-product="filters.product"
:sel-project="filters.selProject"
@ -991,36 +938,8 @@
></xm-menu-select>
</el-drawer>
<el-drawer
append-to-body
title="选择负责人"
:visible.sync="menuGroupUser"
:size="650"
:close-on-click-modal="false"
>
<xm-group-select
:visible="menuGroupUser"
:sel-project="selProject"
:isSelectSingleUser="1"
:ptype="ptype"
@user-confirm="seleConfirm"
></xm-group-select>
</el-drawer>
<el-drawer
append-to-body
title="选择执行人"
:visible.sync="menuExecutor"
:size="650"
:close-on-click-modal="false"
>
<xm-group-select
:visible="menuExecutor"
:sel-project="selProject"
:isSelectSingleUser="1"
:ptype="ptype"
@user-confirm="seleExecutor"
></xm-group-select>
</el-drawer>
<xm-group-dialog ref="xmGroupDialog" :isSelectSingleUser="true" :sel-project="selProject" :xm-product="filters.xmProduct" @user-confirm="selectCreateUserConfirm">
</xm-group-dialog>
<el-drawer
append-to-body
title="需求明细"
@ -1033,51 +952,6 @@
:reload="true"
:xm-menu="{ menuId: editForm.menuId, menuName: editForm.menuName }"
></xm-menu-rich-detail>
</el-drawer>
<el-drawer
append-to-body
title="选择负责人"
:visible.sync="groupUserSelectVisible"
size="60%"
:close-on-click-modal="false"
>
<xm-group-select
:visible="groupUserSelectVisible"
:sel-project="selProject"
:isSelectSingleUser="1"
:ptype="ptype"
@user-confirm="groupUserSelectConfirm"
></xm-group-select>
</el-drawer>
<el-drawer
title="选择产品"
:visible.sync="productSelectVisible"
:size="650"
append-to-body
:close-on-click-modal="false"
>
<xm-product-select
:isSelectProduct="true"
:selProject="filters.selProject"
:visible="productSelectVisible"
@cancel="productSelectVisible = false"
@selected="onProductSelected"
></xm-product-select>
</el-drawer>
<el-drawer
:title="'标签条件'"
:visible.sync="tagSelectVisible"
:size="750"
append-to-body
:close-on-click-modal="false"
>
<tag-mng
:tagIds="filters.tags ? filters.tags.map((i) => i.tagId) : []"
:jump="true"
@select-confirm="onTagSelected"
>
</tag-mng>
</el-drawer>
<el-drawer title="选中上级" :visible.sync="selectParentTaskVisible" size="60%" append-to-body :close-on-click-modal="false">
<xm-task-list check-scope="plan" :sel-project="filters.selProject" @task-selected="onSelectedParentTask"></xm-task-list>
@ -1104,6 +978,7 @@ import {
setTaskCreateUser,
batchRelTasksWithMenu,
batchChangeParentTask,
editXmTaskSomeFields,
} from "@/api/xm/core/xmTask";
import XmTaskAdd from "./XmTaskAdd"; //
import XmTaskEdit from "./XmTaskEdit"; //
@ -1132,6 +1007,11 @@ import XmGantt from "../components/xm-gantt";
import XmGroupSelect from "../xmGroup/XmGroupSelect.vue";
import XmTaskList from '../xmTask/XmTaskList';
import XmTableConfig from '@/views/xm/core/components/XmTableConfig';//
import XmGroupDialog from '@/views/xm/core/xmGroup/XmGroupDialog';//
import TagDialog from "@/views/mdp/arc/tag/TagDialog";
export default {
computed: {
...mapGetters(["userInfo", "roles"]),
@ -1337,7 +1217,6 @@ export default {
oldrate: "",
drawerkey: "",
execUserVisible: false,
currTaskId: "",
currTaskName: "",
@ -1347,16 +1226,11 @@ export default {
taskTemplateVisible: false,
parentTask: null,
projectInfoVisible: false,
batchEditVisible: false,
valueChangeRows: [], //
menuVisible: false,
menuDetailVisible: false,
pickerOptions: util.pickerOptions(),
displayType: "table",
menuStory: false, //
menuGroupUser: false, //
menuExecutor: false, //
groupUserSelectVisible: false, //
showSkillSearchVisible: false, //
tableHeight: 300,
productSelectVisible: false,
@ -1365,10 +1239,9 @@ export default {
budgetDateRanger: [],
actDateRanger: [],
tagSelectVisible: false,
batchRelTasksWithMenuVisible:false,
selectParentTaskVisible:false,
projectVisible:false,
execUserVisible:false,
maps:new Map(),
};
}, //end data
@ -1505,16 +1378,24 @@ export default {
.catch((err) => (this.load.list = false));
},
showBatchRelTasksWithMenuVisible(){
if(this.sels.length==0){
this.$notify.warning("请先选中一条或者多条数据")
return;
}
this.batchRelTasksWithMenuVisible=true;
},
onBatchRelTasksWithMenu(menu){
var params={
menuId:menu.menuId,
taskIds:this.sels.map(i=>i.id)
}
if(this.sels.length==0){
if(!this.editForm||!this.editForm.id){
this.$notify({
showClose: true,
message: "请先选中一个或者多个任务",
type: "warning",
});
return;
}
params.taskIds=[this.editForm.id]
}else{
params.taskIds=this.sels.map(i=>i.id)
}
this.load.edit=true;
this.batchRelTasksWithMenuVisible=false;
@ -2140,9 +2021,6 @@ export default {
});
}
},
showBatchEdit: function () {
this.batchEditVisible = true;
},
getRowSum(row) {
var budgetCost = this.getFloatValue(row.budgetCost);
if (row.taskOut == "1") {
@ -2170,9 +2048,6 @@ export default {
this.filters.product = null;
this.searchXmTasks();
},
showProductVisible() {
this.productSelectVisible = true;
},
onProductSelected(product) {
this.filters.product = product;
this.productSelectVisible = false;
@ -2265,14 +2140,21 @@ export default {
});
},
//
seleConfirm(groupUsers) {
selectCreateUserConfirm(groupUsers,option) {
if(option && option.action==='createUserid'){
if (groupUsers && groupUsers.length > 0) {
var user= groupUsers[0];
this.editXmTaskSomeFields(option.data,option.action,user)
}
}else{
if (groupUsers && groupUsers.length > 0) {
this.filters.createUser = groupUsers[0];
} else {
this.filters.createUser = null;
}
this.searchXmTasks();
this.menuGroupUser = false;
}
},
seleExecutor(executors) {
if (executors && executors.length > 0) {
@ -2283,11 +2165,6 @@ export default {
this.searchXmTasks();
this.menuExecutor = false;
},
batchEditBack: function (needReload) {
this.searchXmTasks();
this.batchEditVisible = false;
},
setFiltersCreateUserAsMySelf() {
this.filters.createUser = this.userInfo;
this.searchXmTasks();
@ -2376,15 +2253,18 @@ export default {
this.filters.tags.splice(index,1);
this.searchXmTasks();
},
onTagSelected(tags){
this.tagSelectVisible = false;
onTagSelected(tags,option){
if(option && option.action=='editTagIds'){
this.editXmTaskSomeFields(option.data,"tagIds",tags)
}else{
if (!tags || tags.length == 0) {
this.filters.tags=[]
}else{
this.filters.tags=tags
}
this.searchXmTasks();
}
},
getParams(params) {
@ -2503,6 +2383,59 @@ export default {
this.selectParentTaskVisible=true
},
editXmTaskSomeFields(row,fieldName,$event){
var params={ids:[row.id]};
if(this.sels.length>0){
if(!this.sels.some(k=>k.id==row.id)){
this.$notify({showClose:true,message:'请操作选中的行或者取消选中的行再操作其它行',type:'warning'})
return;
}
params.ids=this.sels.map(i=>i.id)
}
if(fieldName==='menuId'){
if($event){
params[fieldName]=$event.menuId;
params.menuName=$event.menuName
params.productId=$event.productId
}else{
return;
}
}else if(fieldName==='tagIds'){
if($event){
params[fieldName]=$event.map(i=>i.tagId).join(",");
params.tagNames=$event.map(i=>i.tagName).join(",");
}else{
return;
}
}else if(fieldName==='workload'){
params={...params,...$event}
}else if(fieldName==='executorUserid'){
params.executorUserid=$event[0].userid
params.executorUsername=$event[0].username
}else if(fieldName==='createUserid'){
params.createUserid=$event[0].userid
params.createUsername=$event[0].username
}else{
params[fieldName]=$event
}
editXmTaskSomeFields(params).then(res=>{
var tips = res.data.tips;
if(tips.isOk){
if(this.sels.length>0){
this.sels.forEach(i=>{
this.fieldTagVisible=false;
Object.assign(i,params)
})
}else{
Object.assign(row,params)
}
}else{
this.$notify({showClose:true,message:tips.msg,type:tips.isOk?'success':'error'})
}
})
},
onSelectedParentTask(task){
if(this.sels.length==0){
this.$notify({showClose:true,message:"请先选择一个或者多个需要更换上级的计划/任务",type:'warning'})
@ -2540,6 +2473,69 @@ export default {
if (this.xmProduct) {
this.filters.product = this.xmProduct;
}
},
formatterPriorityDicts(cellValue){
if(!cellValue && cellValue!=='0'){
return []
}
var key="priority";
if(this.dicts[key]==undefined || this.dicts[key]==null || this.dicts[key].length==0 ){
return [{id:cellValue,name:cellValue,className:'primary'}];
}
var list=this.dicts[key].filter(i=>i.id==cellValue)
if(list.length>0){
var data= {...list[0],className:'primary'}
if(data.id=='0'){
data.className='danger'
}else if(data.id=='1'){
data.className='warning'
}else if(data.id=='2'){
data.className='success'
}else if(data.id=='3'){
data.className='primary'
}else if(data.id=='4'){
data.className='info'
}else{
data.className='primary'
}
return [data];
}else{
return [{id:cellValue,name:cellValue,className:'primary'}]
}
},
formatterTaskStateDicts: function(cellValue){
if(!cellValue && cellValue!=='0'){
return []
}
var key="taskState";
if(this.dicts[key]==undefined || this.dicts[key]==null || this.dicts[key].length==0 ){
return [{id:cellValue,name:cellValue,className:'primary'}];
}
var list=this.dicts[key].filter(i=>i.id==cellValue)
if(list.length>0){
var data= {...list[0],className:'primary'}
if(data.id=='0'){
data.className='primary'
}else if(data.id=='1'){
data.className='warning'
}else if(data.id=='2'){
data.className='success'
}else if(data.id=='3'){
data.className='info'
} else{
data.className='danger'
}
return [data];
}else{
return [{id:cellValue,name:cellValue,className:'primary'}]
}
},
onProductClearSelect(){
this.filters.xmProduct=null;
this.searchXmTasks();
}
/**end 自定义函数请在上面加**/
}, //end methods
@ -2563,6 +2559,9 @@ export default {
XmTaskAgileKanban,
TagMng,
XmTaskList,
TagDialog,
XmGroupDialog,
XmTableConfig,
//
},
mounted() {

Loading…
Cancel
Save