Browse Source

优化

master
陈裕财 4 years ago
parent
commit
2734bf5544
  1. 2
      src/api/xm/core/xmTaskWorkload.js
  2. 12
      src/views/xm/core/xmTask/XmTaskAdd.vue
  3. 2
      src/views/xm/core/xmTask/XmTaskAgileKanban.vue
  4. 8
      src/views/xm/core/xmTask/XmTaskEdit.vue
  5. 12
      src/views/xm/core/xmTask/XmTaskList.vue
  6. 16
      src/views/xm/core/xmTask/XmTaskListForMenu.vue
  7. 22
      src/views/xm/core/xmTask/XmTaskMng.vue
  8. 32
      src/views/xm/core/xmTask/XmTaskMngBatch.vue
  9. 202
      src/views/xm/core/xmTaskSbill/SelectTaskWorkload.vue
  10. 6
      src/views/xm/core/xmTaskSbill/XmTaskSbillMng.vue
  11. 172
      src/views/xm/core/xmTaskWorkload/XmTaskWorkloadMng.vue

2
src/api/xm/core/xmTaskWorkload.js

@ -34,4 +34,4 @@ export const listByProject = params => { return axios.get(`${base}/xm/core/xmTas
export const editWorkloadToSbill = params => { return axios.post(`${base}/xm/core/xmTaskWorkload/editWorkloadToSbill`, params); };
export const editXmWorkloadWstatus = params => { return axios.post(`${base}/xm/core/xmTaskWorkload/editXmWorkloadWstatus`, params); };
export const editXmTaskWorkloadSomeFields = params => { return axios.post(`${base}/xm/core/xmTaskWorkload/editSomeFields`, params); };

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

@ -213,7 +213,7 @@
</el-row>
</el-tab-pane>
<el-tab-pane label="成本" name="6">
<el-form-item label="预估金额" prop="budgetCost">
<el-form-item label="预估金额" prop="budgetAt">
<el-row v-if="addForm.taskOut!=='1'">
工时单价&nbsp;<el-input type="number" style="width:150px;" v-model="addForm.uniInnerPrice" :precision="2" :step="10" :min="0" placeholder="工时单价"></el-input type="number"> /h
</el-row>
@ -221,7 +221,7 @@
工时单价&nbsp;<el-input type="number" style="width:150px;" v-if="addForm.taskOut==='1'" v-model="addForm.uniOutPrice" :precision="2" :step="10" :min="0" placeholder="外发工时单价"></el-input type="number"> /h
</el-row>
<el-row>
预估金额&nbsp;<el-input type="number" style="width:150px;" v-model="addForm.budgetCost" :precision="2" :step="100" :min="0" placeholder="预算金额"></el-input type="number">
预估金额&nbsp;<el-input type="number" style="width:150px;" v-model="addForm.budgetAt" :precision="2" :step="100" :min="0" placeholder="预算金额"></el-input type="number">
</el-row>
</el-form-item>
@ -363,8 +363,8 @@
addForm: {
id:'',name:'',parentTaskid:'',parentTaskname:'',projectId:'',projectName:'',level:'3',sortLevel:'0',executorUserid:'',executorUsername:'',
preTaskid:'',preTaskname:'',startTime:'',endTime:'',milestone:'',description:'',remarks:'',createUserid:'',createUsername:'',createTime:'',taskOut:'0',
rate:0,budgetCost:'',budgetWorkload:'',actCost:'',actWorkload:'',taskState:'0',taskClass:'0',toTaskCenter:'0',actStartTime:'',actEndTime:'',taskType:'4',planType:'w2',settleSchemel:'1',ntype:'0',childrenCnt:0
rate:0,budgetAt:'',budgetWorkload:'',actAt:'',actWorkload:'',taskState:'0',taskClass:'0',toTaskCenter:'0',actStartTime:'',actEndTime:'',taskType:'4',planType:'w2',settleSchemel:'1',ntype:'0',childrenCnt:0,
uniInnerPrice:80,uniOutPrice:100,
},
/**begin 在下面加自定义属性,记得补上面的一个逗号**/
menuVisible:false,
@ -490,7 +490,7 @@
price=this.projectPhase.budgetIuserPrice
}
}
this.addForm.budgetCost=this.addForm.budgetWorkload * price
this.addForm.budgetAt=this.addForm.budgetWorkload * price
},
onBudgetWorkloadChange(){
@ -498,7 +498,7 @@
if(this.addForm.taskOut=='1'){
price=this.addForm.uniOutPrice? this.addForm.uniOutPrice:80;
}
this.addForm.budgetCost=this.addForm.budgetWorkload * price
this.addForm.budgetAt=this.addForm.budgetWorkload * price
},
onTaskOutChange(){
this.onBudgetWorkloadChange();

2
src/views/xm/core/xmTask/XmTaskAgileKanban.vue

@ -54,7 +54,7 @@
</span>
<el-tooltip content="进度"><el-link style="border-radius:30px;" :type="task.rate>=100?'success':'warning'" @click.stop="showEditForm(task)"> {{ (task.rate!=null?task.rate:0)+'%'}} </el-link></el-tooltip>
<el-tooltip content="预算金额、工时"><el-tag type="info">{{parseFloat(task.budgetCost/10000).toFixed(2)}},{{task.budgetWorkload}}人时</el-tag></el-tooltip>
<el-tooltip content="预算金额、工时"><el-tag type="info">{{parseFloat(task.budgetAt/10000).toFixed(2)}},{{task.budgetWorkload}}人时</el-tag></el-tooltip>
<el-link type="primary" @click.stop="showEditForm(task)">{{task.name}}</el-link>
</span>
</div>

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

@ -171,7 +171,7 @@
<xm-task-workload-record :visible="visible" :xm-task="editForm" ></xm-task-workload-record>
</el-tab-pane>
<el-tab-pane label="成本" name="6">
<el-form-item label="预估金额" prop="budgetCost">
<el-form-item label="预估金额" prop="budgetAt">
<el-row v-if="editForm.taskOut!=='1'">
工时单价&nbsp;<el-input type="number" style="width:150px;" v-model="editForm.uniInnerPrice" :precision="2" :step="10" :min="0" placeholder="工时单价" @change="editXmTaskSomeFields(editForm,'uniInnerPrice',$event)"></el-input > /h
</el-row>
@ -179,7 +179,7 @@
工时单价&nbsp;<el-input type="number" style="width:150px;" v-if="editForm.taskOut==='1'" v-model="editForm.uniOutPrice" :precision="2" :step="10" :min="0" placeholder="外发工时单价" @change="editXmTaskSomeFields(editForm,'uniOutPrice',$event)"></el-input > /h
</el-row>
<el-row>
预估金额&nbsp;<el-input type="number" style="width:150px;" v-model="editForm.budgetCost" :precision="2" :step="100" :min="0" placeholder="预算金额" @change="editXmTaskSomeFields(editForm,'budgetCost',$event)"></el-input >
预估金额&nbsp;<el-input type="number" style="width:150px;" v-model="editForm.budgetAt" :precision="2" :step="100" :min="0" placeholder="预算金额" @change="editXmTaskSomeFields(editForm,'budgetAt',$event)"></el-input >
</el-row>
</el-form-item>
@ -344,8 +344,8 @@ import XmMenuEdit from '../xmMenu/XmMenuEdit.vue';
editForm: {
id:'',name:'',parentTaskid:'',parentTaskname:'',projectId:'',projectName:'',level:'3',sortLevel:'0',executorUserid:'',executorUsername:'',
preTaskid:'',preTaskname:'',startTime:'',endTime:'',milestone:'',description:'',remarks:'',createUserid:'',createUsername:'',createTime:'',taskOut:'0',
rate:0,budgetCost:'',budgetWorkload:'',actCost:'',actWorkload:'',taskState:'0',taskClass:'0',toTaskCenter:'0',actStartTime:'',actEndTime:'',taskType:'4',planType:'w2',settleSchemel:'1',ntype:'0',childrenCnt:0,wtype:'',rworkload:0,
rate:0,budgetAt:'',budgetWorkload:'',actAt:'',actWorkload:'',taskState:'0',taskClass:'0',toTaskCenter:'0',actStartTime:'',actEndTime:'',taskType:'4',planType:'w2',settleSchemel:'1',ntype:'0',childrenCnt:0,wtype:'',rworkload:0,
uniInnerPrice:80,uniOutPrice:100,
},
/**begin 在下面加自定义属性,记得补上面的一个逗号**/
menuVisible:false,

12
src/views/xm/core/xmTask/XmTaskList.vue

@ -158,7 +158,7 @@
addForm: {
id:'',name:'',parentTaskid:'',parentTaskname:'',projectId:'',projectName:'',level:'',sortLevel:'',executorUserid:'',executorUsername:'',
preTaskid:'',preTaskname:'',startTime:'',endTime:'',milestone:'',description:'',remarks:'',createUserid:'',createUsername:'',createTime:'',
rate:'',budgetCost:'',budgetWorkload:'',actCost:'',actWorkload:'',taskState:'',taskType:'',taskClass:'',toTaskCenter:'',actStartTime:'',actEndTime:'',
rate:'',budgetAt:'',budgetWorkload:'',actAt:'',actWorkload:'',taskState:'',taskType:'',taskClass:'',toTaskCenter:'',actStartTime:'',actEndTime:'',
},
editFormVisible: false,//
@ -166,7 +166,7 @@
editForm: {
id:'',name:'',parentTaskid:'',parentTaskname:'',projectId:'',projectName:'',level:'',sortLevel:'',executorUserid:'',executorUsername:'',
preTaskid:'',preTaskname:'',startTime:'',endTime:'',milestone:'',description:'',remarks:'',createUserid:'',createUsername:'',createTime:'',
rate:'',budgetCost:'',budgetWorkload:'',actCost:'',actWorkload:'',taskState:'',taskType:'',taskClass:'',toTaskCenter:'',actStartTime:'',actEndTime:'',
rate:'',budgetAt:'',budgetWorkload:'',actAt:'',actWorkload:'',taskState:'',taskType:'',taskClass:'',toTaskCenter:'',actStartTime:'',actEndTime:'',
},
selkey: "all",
@ -478,17 +478,17 @@
},
getRowSum(row){
var budgetCost=this.getFloatValue(row.budgetCost);
var budgetAt=this.getFloatValue(row.budgetAt);
if(row.taskOut=='1'){
row.taskBudgetOuserAt=budgetCost
row.taskBudgetOuserAt=budgetAt
row.taskBudgetIuserAt=0
row.taskBudgetNouserAt=0;
}else{
row.taskBudgetOuserAt=0
row.taskBudgetIuserAt=budgetCost
row.taskBudgetIuserAt=budgetAt
row.taskBudgetNouserAt=0;
}
return budgetCost;
return budgetAt;
},
getFloatValue(value,digit){

16
src/views/xm/core/xmTask/XmTaskListForMenu.vue

@ -36,9 +36,9 @@
<el-table-column prop="projectName" label="项目名称" min-width="160" show-overflow-tooltip>
</el-table-column>
<el-table-column label="预算" prop="budgetCost" width="120" >
<el-table-column label="预算" prop="budgetAt" width="120" >
<template slot-scope="scope">
<el-tag type= 'info' >{{parseFloat(scope.row.budgetCost/10000).toFixed(2)}},{{scope.row.budgetWorkload}}人时</el-tag>
<el-tag type= 'info' >{{parseFloat(scope.row.budgetAt/10000).toFixed(2)}},{{scope.row.budgetWorkload}}人时</el-tag>
</template>
</el-table-column>
<el-table-column label="执行人" prop="exeUsernames" min-width="120" >
@ -141,7 +141,7 @@
addForm: {
id:'',name:'',parentTaskid:'',parentTaskname:'',projectId:'',projectName:'',level:'',sortLevel:'',executorUserid:'',executorUsername:'',
preTaskid:'',preTaskname:'',startTime:'',endTime:'',milestone:'',description:'',remarks:'',createUserid:'',createUsername:'',createTime:'',
rate:'',budgetCost:'',budgetWorkload:'',actCost:'',actWorkload:'',taskState:'',taskType:'',taskClass:'',toTaskCenter:'',actStartTime:'',actEndTime:'',
rate:'',budgetAt:'',budgetWorkload:'',actAt:'',actWorkload:'',taskState:'',taskType:'',taskClass:'',toTaskCenter:'',actStartTime:'',actEndTime:'',
},
editFormVisible: false,//
@ -149,7 +149,7 @@
editForm: {
id:'',name:'',parentTaskid:'',parentTaskname:'',projectId:'',projectName:'',level:'',sortLevel:'',executorUserid:'',executorUsername:'',
preTaskid:'',preTaskname:'',startTime:'',endTime:'',milestone:'',description:'',remarks:'',createUserid:'',createUsername:'',createTime:'',
rate:'',budgetCost:'',budgetWorkload:'',actCost:'',actWorkload:'',taskState:'',taskType:'',taskClass:'',toTaskCenter:'',actStartTime:'',actEndTime:'',
rate:'',budgetAt:'',budgetWorkload:'',actAt:'',actWorkload:'',taskState:'',taskType:'',taskClass:'',toTaskCenter:'',actStartTime:'',actEndTime:'',
},
selkey: "all",
@ -374,17 +374,17 @@
},
getRowSum(row){
var budgetCost=this.getFloatValue(row.budgetCost);
var budgetAt=this.getFloatValue(row.budgetAt);
if(row.taskOut=='1'){
row.taskBudgetOuserAt=budgetCost
row.taskBudgetOuserAt=budgetAt
row.taskBudgetIuserAt=0
row.taskBudgetNouserAt=0;
}else{
row.taskBudgetOuserAt=0
row.taskBudgetIuserAt=budgetCost
row.taskBudgetIuserAt=budgetAt
row.taskBudgetNouserAt=0;
}
return budgetCost;
return budgetAt;
},
getFloatValue(value,digit){

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

@ -1110,9 +1110,9 @@ export default {
createUsername: "",
createTime: "",
rate: "",
budgetCost: "",
budgetAt: "",
budgetWorkload: "",
actCost: "",
actAt: "",
actWorkload: "",
taskState: "",
taskType: "",
@ -1120,6 +1120,7 @@ export default {
toTaskCenter: "",
actStartTime: "",
actEndTime: "",
uniInnerPrice:80,uniOutPrice:100,
},
editFormVisible: false, //
@ -1146,9 +1147,9 @@ export default {
createUsername: "",
createTime: "",
rate: "",
budgetCost: "",
budgetAt: "",
budgetWorkload: "",
actCost: "",
actAt: "",
actWorkload: "",
taskState: "",
taskType: "",
@ -1156,6 +1157,7 @@ export default {
toTaskCenter: "",
actStartTime: "",
actEndTime: "",
uniInnerPrice:80,uniOutPrice:100,
},
/**begin 自定义属性请在下面加 请加备注**/
taskStateList: ["待领取", "已领取执行中", "已完工", "已结算"],
@ -1767,11 +1769,11 @@ export default {
}
i.projectId=projectId
}
i.budgetCost = 0;
i.budgetAt = 0;
i.budgetWorkload = 80;
i.level = i.level ? i.level : "3";
i.planType = i.planType ? i.planType : "w2";
i.actCost = 0;
i.actAt = 0;
i.actWorkload = 0;
i.taskState = "0";
i.rate = 0;
@ -1974,17 +1976,17 @@ export default {
}
},
getRowSum(row) {
var budgetCost = this.getFloatValue(row.budgetCost);
var budgetAt = this.getFloatValue(row.budgetAt);
if (row.taskOut == "1") {
row.taskBudgetOuserAt = budgetCost;
row.taskBudgetOuserAt = budgetAt;
row.taskBudgetIuserAt = 0;
row.taskBudgetNouserAt = 0;
} else {
row.taskBudgetOuserAt = 0;
row.taskBudgetIuserAt = budgetCost;
row.taskBudgetIuserAt = budgetAt;
row.taskBudgetNouserAt = 0;
}
return budgetCost;
return budgetAt;
},
getFloatValue(value, digit) {
if (isNaN(value)) {

32
src/views/xm/core/xmTask/XmTaskMngBatch.vue

@ -141,13 +141,13 @@
</el-row>
</template>
</el-table-column>
<el-table-column label="金额.元" prop="budgetCost" width="140">
<el-table-column label="金额.元" prop="budgetAt" width="140">
<template slot-scope="scope">
<el-input
v-model="scope.row.budgetCost"
v-model="scope.row.budgetAt"
type="number"
::precision="2"
@change="fieldChange(scope.row, 'budgetCost')"
@change="fieldChange(scope.row, 'budgetAt')"
></el-input>
</template>
</el-table-column>
@ -178,7 +178,7 @@
></el-input>
</template>
</el-table-column>
<el-table-column prop="actCost" label="金额.元" width="100">
<el-table-column prop="actAt" label="金额.元" width="100">
<template slot-scope="scope">
<el-input
:disabled="scope.row.calcType=='1'"
@ -388,9 +388,9 @@ export default {
createUsername: "",
createTime: "",
rate: "",
budgetCost: "",
budgetAt: "",
budgetWorkload: "",
actCost: "",
actAt: "",
actWorkload: "",
taskState: "",
taskType: "",
@ -424,9 +424,9 @@ export default {
createUsername: "",
createTime: "",
rate: "",
budgetCost: "",
budgetAt: "",
budgetWorkload: "",
actCost: "",
actAt: "",
actWorkload: "",
taskState: "",
taskType: "",
@ -716,11 +716,11 @@ export default {
i.taskType = i.taskType ? i.taskType : this.parentTask.taskType;
i.taskClass = i.taskClass ? i.taskClass : this.parentTask.taskClass;
i.budgetCost = 0;
i.budgetAt = 0;
i.budgetWorkload = 80;
i.level = i.level ? i.level : "3";
i.planType = i.planType ? i.planType : "w2";
i.actCost = 0;
i.actAt = 0;
i.actWorkload = 0;
i.taskState = "0";
i.rate = 0;
@ -848,26 +848,26 @@ export default {
!row.budgetWorkload
) {
row.budgetWorkload = parseFloat((days * 8).toFixed(2));
row.budgetCost = row.budgetWorkload * row.uniOutPrice;
row.budgetAt = row.budgetWorkload * row.uniOutPrice;
} else if (
row.taskOut != "1" &&
row.uniInnerPrice &&
!row.budgetWorkload
) {
row.budgetWorkload = parseFloat((days * 8).toFixed(2));
row.budgetCost =
row.budgetAt =
row.budgetWorkload * row.uniInnerPrice;
}
}
}
if (fieldName == "budgetWorkload" || fieldName == "taskOut") {
if (row.taskOut == "1" && row.uniOutPrice) {
row.budgetCost =
row.budgetAt =
row.budgetWorkload * row.uniOutPrice;
} else if (
row.taskOut != "1" && row.uniInnerPrice
) {
row.budgetCost =
row.budgetAt =
row.budgetWorkload * row.uniInnerPrice
}
}
@ -937,11 +937,11 @@ export default {
subRow.taskClass = subRow.taskClass
? subRow.taskClass
: this.parentTask.taskClass;
subRow.budgetCost = 0;
subRow.budgetAt = 0;
subRow.budgetWorkload = 80;
subRow.level = subRow.level ? subRow.level : "3";
subRow.planType = subRow.planType ? subRow.planType : "w2";
subRow.actCost = 0;
subRow.actAt = 0;
subRow.actWorkload = 0;
subRow.taskState = "0";
subRow.rate = 0;

202
src/views/xm/core/xmTaskSbill/SelectTaskWorkload.vue

@ -1,202 +0,0 @@
<template>
<section class="page-container border padding">
<el-row>
<el-input v-model="filters.key" style="width: 30%;" placeholder="模糊查询:/员工ID/员工名称"></el-input>
<el-button v-loading="load.list" :disabled="load.list==true" @click="searchXmTaskWorkloads" icon="el-icon-search">查询</el-button>
</el-row>
<el-row class="padding-top">
<!--列表 XmTaskWorkload 工时登记表-->
<el-table ref="xmTaskWorkloadTable" :data="xmTaskWorkloads" :height="maxTableHeight" highlight-current-row v-loading="load.list" border
@selection-change="selsChange" style="width: 100%;" :header-cell-style="{'text-align':'center'}"
:cell-style="{'text-align':'center'}">
<el-table-column type="selection" width="55" show-overflow-tooltip></el-table-column>
<!-- <el-table-column sortable type="index" width="55" show-overflow-tooltip></el-table-column>-->
<el-table-column prop="id" label="编号" min-width="80" show-overflow-tooltip></el-table-column>
<el-table-column prop="userid" label="员工编号" min-width="80" show-overflow-tooltip></el-table-column>
<el-table-column prop="username" label="姓名" min-width="80" show-overflow-tooltip></el-table-column>
<!-- <el-table-column prop="ctime" label="创建日期" min-width="80" show-overflow-tooltip></el-table-column>-->
<el-table-column prop="taskId" label="任务编号" min-width="80" show-overflow-tooltip></el-table-column>
<!-- <el-table-column prop="cuserid" label="创建人编号" min-width="80" show-overflow-tooltip></el-table-column>
<el-table-column prop="bizDate" label="业务日期yyyy-MM-dd" min-width="80" show-overflow-tooltip></el-table-column>-->
<el-table-column prop="wstatus" label="登记状态" min-width="80" show-overflow-tooltip>
<!-- 0-待确认1-已确认2-无效-->
<template slot-scope="scope">
<span v-if="scope.row.wstatus=='0'">待确认</span>
<span v-else-if="scope.row.wstatus=='1'">已确认</span>
</template>
</el-table-column>
<!-- <el-table-column prop="remark" label="备注" min-width="80" show-overflow-tooltip></el-table-column>
<el-table-column prop="ttype" label="任务类型-关联字典taskType" min-width="80" show-overflow-tooltip></el-table-column>-->
<!-- <el-table-column prop="sbillId" label="结算单据编号" min-width="80" show-overflow-tooltip></el-table-column>
<el-table-column prop="stime" label="结算提交时间" min-width="80" show-overflow-tooltip></el-table-column>-->
<el-table-column prop="sstatus" label="结算状态" min-width="80" show-overflow-tooltip>
<template slot-scope="scope">
<!-- 0-无需结算1-待结算2-已提交3-已通过4-已结算-->
<span v-if="scope.row.sstatus=='0'">无需结算</span>
<span v-else-if="scope.row.sstatus=='1'">待结算</span>
<span v-else-if="scope.row.sstatus=='2'">已提交</span>
<span v-else-if="scope.row.sstatus=='3'">已通过</span>
<span v-else-if="scope.row.sstatus=='4'">已结算</span>
<span v-else>-</span>
</template>
</el-table-column>
<el-table-column prop="amt" label="工时金额" min-width="80" show-overflow-tooltip>
<template slot-scope="scope">
<span v-if="scope.row.amt">{{scope.row.amt}}</span>
<span v-else>0</span>
</template>
</el-table-column>
<el-table-column prop="samt" label="结算金额" min-width="80" show-overflow-tooltip>
<template slot-scope="scope">
<span v-if="scope.row.samt">{{scope.row.samt}}</span>
<span v-else>-</span>
</template>
</el-table-column>
<el-table-column prop="workload" label="工时" min-width="80" show-overflow-tooltip></el-table-column>
<el-table-column label="操作" width="180" fixed="right">
<template scope="scope">
<el-button :disabled="!(scope.row.sstatus=='1'&&scope.row.wstatus=='1')" @click="selectRow( scope.row,scope.$index)">选择</el-button>
</template>
</el-table-column>
</el-table>
<el-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-row>
</el-row>
</section>
</template>
<script>
import util from '@/common/js/util';//
import config from '@/common/config';//
import { getDicts,initSimpleDicts,initComplexDicts } from '@/api/mdp/meta/item';//
import { listXmTaskWorkload, delXmTaskWorkload, batchDelXmTaskWorkload } from '@/api/xm/core/xmTaskWorkload';
import { mapGetters } from 'vuex'
import {listByProject} from "../../../../api/xm/core/xmTaskWorkload";
export default {
name:'xmTaskWorkloadMng',
components: {
},
props:['visible','xmTaskSbill'],
computed: {
...mapGetters(['userInfo']),
},
watch:{
visible(val){
if(val==true){
this.initData();
this.searchXmTaskWorkloads()
}
}
},
data() {
return {
filters: {
key: ''
},
xmTaskWorkloads: [],//
pageInfo:{//
total:0,//0>0
pageSize:10,//
count:false,//
pageNum:1,//1
orderFields:[],// ['sex','student_id']
orderDirs:[]// asc,desc ['asc','desc']
},
load:{ list: false, edit: false, del: false, add: false },//...
sels: [],//
dicts:{
//sex: [{id:'1',name:''},{id:'2',name:''}]
},// params={categoryId:'all',itemCodes:['sex']} {sex: [{id:'1',name:''},{id:'2',name:''}]}
addFormVisible: false,//xmTaskWorkload
addForm: {
userid:'',username:'',ctime:'',taskId:'',cuserid:'',bizDate:'',wstatus:'',remark:'',ttype:'',id:'',sbillId:'',stime:'',sstatus:'',amt:'',samt:'',workload:''
},
editFormVisible: false,//
editForm: {
userid:'',username:'',ctime:'',taskId:'',cuserid:'',bizDate:'',wstatus:'',remark:'',ttype:'',id:'',sbillId:'',stime:'',sstatus:'',amt:'',samt:'',workload:''
},
maxTableHeight:300,
}
},//end data
methods: {
handleSizeChange(pageSize) {
this.pageInfo.pageSize=pageSize;
this.getXmTaskWorkloads();
},
handleCurrentChange(pageNum) {
this.pageInfo.pageNum = pageNum;
this.getXmTaskWorkloads();
},
searchXmTaskWorkloads(){
this.pageInfo.count=true;
this.getXmTaskWorkloads();
},
// XmTaskWorkload
getXmTaskWorkloads() {
let params = {
pageSize: this.pageInfo.pageSize,
pageNum: this.pageInfo.pageNum,
total: this.pageInfo.total,
count:this.pageInfo.count,
projectId:this.xmTaskSbill.projectId,
toSbill:true
};
if(this.pageInfo.orderFields!=null && this.pageInfo.orderFields.length>0){
let orderBys=[];
for(var i=0;i<this.pageInfo.orderFields.length;i++){
orderBys.push(this.pageInfo.orderFields[i]+" "+this.pageInfo.orderDirs[i])
}
params.orderBy= orderBys.join(",")
}
if(this.filters.key){
params.key= "%" + this.filters.key + "%"
}
this.load.list = true;
listXmTaskWorkload(params).then((res) => {
var tips=res.data.tips;
if(tips.isOk){
this.pageInfo.total = res.data.total;
this.pageInfo.count=false;
this.xmTaskWorkloads = res.data.data;
}else{
this.$notify({position:'bottom-left',showClose:true, message: tips.msg, type: 'error' });
}
this.load.list = false;
}).catch( err => this.load.list = false );
},
//xmTaskWorkload
selsChange: function (sels) {
this.sels = sels;
},
selectRow(row,index){
this.$emit("submit",row);
},
initData: function(){
},
},//end methods
mounted() {
this.$nextTick(() => {
//initSimpleDicts('all',['sex','gradeLvl']).then(res=>this.dicts=res.data.data);
this.initData()
this.searchXmTaskWorkloads();
this.maxTableHeight = util.calcTableMaxHeight(this.$refs.xmTaskWorkloadTable.$el)
});
}
}
</script>
<style scoped>
</style>

6
src/views/xm/core/xmTaskSbill/XmTaskSbillMng.vue

@ -142,10 +142,6 @@
<el-drawer title="新增任务结算单" :visible.sync="addFormVisible" size="60%" append-to-body :close-on-click-modal="false">
<xm-task-sbill-edit op-type="add" :visible="addFormVisible" @cancel="addFormVisible=false" @submit="afterAddSubmit"></xm-task-sbill-edit>
</el-drawer>
<!--添加登记工时界面-->
<el-drawer title="添加工时登记单" :visible.sync="taskWorkloadVisible" size="60%" append-to-body :close-on-click-modal="false">
<select-task-workload :xm-task-sbill="thisBillRow" :visible="taskWorkloadVisible" @cancel="taskWorkloadVisible=false" @submit="afterWorkloadSubmit"></select-task-workload>
</el-drawer>
<el-drawer title="选择员工" :visible.sync="selectFiltersPmUserVisible" size="60%" append-to-body>
<users-select @confirm="onFiltersPmUserSelected" ref="usersSelect"></users-select>
</el-drawer>
@ -160,7 +156,6 @@
import { listXmTaskSbill, delXmTaskSbill, batchDelXmTaskSbill } from '@/api/xm/core/xmTaskSbill';
import XmTaskSbillEdit from './XmTaskSbillEdit';//
import { mapGetters } from 'vuex'
import SelectTaskWorkload from "./SelectTaskWorkload";
import {editXmTaskSbill} from "../../../../api/xm/core/xmTaskSbill";
import dateUtil from "../../../../common/js/dateUtil";
import {editXmTaskWorkload} from "../../../../api/xm/core/xmTaskWorkload";
@ -170,7 +165,6 @@
export default {
components: {
XmTaskSbillEdit,
SelectTaskWorkload,
UsersSelect,
XmProjectSelect,
},

172
src/views/xm/core/xmTaskWorkload/XmTaskWorkloadMng.vue

@ -47,58 +47,116 @@
:cell-style="{'text-align':'center'}">
<el-table-column type="selection" width="55" show-overflow-tooltip></el-table-column>
<el-table-column sortable type="index" width="55" show-overflow-tooltip></el-table-column>
<el-table-column prop="userid" label="员工编号" min-width="80" show-overflow-tooltip></el-table-column>
<el-table-column prop="username" label="姓名" min-width="80" show-overflow-tooltip></el-table-column>
<el-table-column v-if="wstatuses && (wstatuses.toString()=='1')" prop="wstatus" label="工时状态" min-width="80" show-overflow-tooltip>
<el-table-column prop="username" label="姓名" min-width="80" show-overflow-tooltip sortable>
<template slot-scope="scope">
<el-tag type="info" v-if="scope.row.wstatus=='0'">待确认</el-tag>
<el-tag type="success" v-else-if="scope.row.wstatus=='1'">已确认</el-tag>
<el-tag type="danger" v-else-if="scope.row.wstatus=='2'">无效</el-tag>
<span class="cell-text">
{{scope.row.username}}
</span>
<span class="cell-bar">
{{scope.row.userid}}-{{scope.row.username}}
</span>
</template>
</el-table-column>
<el-table-column v-if="wstatuses && (wstatuses.toString()=='0,2')" prop="wstatus" label="工时状态" min-width="80" show-overflow-tooltip>
<el-table-column prop="bizDate" label="工时日期" min-width="80" show-overflow-tooltip sortable>
<template slot-scope="scope">
<span>{{scope.row.bizDate}}</span>
</template>
</el-table-column>
<el-table-column prop="wstatus" label="工时状态" min-width="80" show-overflow-tooltip sortable>
<template slot-scope="scope">
<div class="cell-text">
<el-button style="display:block;" :type="item.className" plain round v-for="(item,index) in [formatterStatusDicts(scope.row.wstatus)]" :key="index">{{item.name}}</el-button>
<el-button style="display:block;" :type="item.className" plain round v-for="(item,index) in [formatterWstatusDicts(scope.row.wstatus)]" :key="index">{{item.name}}</el-button>
</div>
<span class="cell-bar">
<el-select v-model="scope.row.wstatus" placeholder="状态" style="display:block;" @change="editXmTaskWorkloadSomeFields(scope.row,'sstatus',$event)">
<el-select v-model="scope.row.wstatus" placeholder="工时状态" style="display:block;" @change="editXmTaskWorkloadSomeFields(scope.row,'wstatus',$event)">
<el-option :value="item.id" :label="item.name" v-for="(item,index) in dicts.wstatus" :key="index"></el-option>
</el-select>
</span>
</template>
</el-table-column>
<el-table-column prop="workload" label="工时" min-width="80" show-overflow-tooltip>
<el-table-column prop="sstatus" label="结算状态" min-width="80" show-overflow-tooltip sortable>
<template slot-scope="scope">
<div class="cell-text">
<el-button style="display:block;" :type="item.className" plain round v-for="(item,index) in [formatterSstatusDicts(scope.row.sstatus)]" :key="index">{{item.name}}</el-button>
</div>
<span class="cell-bar">
<el-select v-model="scope.row.sstatus" placeholder="结算状态" style="display:block;" @change="editXmTaskWorkloadSomeFields(scope.row,'sstatus',$event)">
<el-option :value="item.id" :label="item.name" v-for="(item,index) in dicts.sstatus" :key="index"></el-option>
</el-select>
</span>
</template>
</el-table-column>
<el-table-column prop="workload" label="登记工时" min-width="80" show-overflow-tooltip sortable>
<template slot-scope="scope">
{{scope.row.workload}}h
</template>
</el-table-column>
<el-table-column prop="amt" label="工时金额" min-width="80" show-overflow-tooltip>
<el-table-column prop="sworkload" label="结算工时" min-width="80" show-overflow-tooltip sortable>
<template slot-scope="scope">
<span v-if="scope.row.amt">¥{{scope.row.amt}}</span>
<span v-else>¥0</span>
<span class="cell-text">
{{scope.row.sworkload}}h
</span>
<span class="cell-bar">
<el-input type="number" style="display:inline;" v-model="scope.row.sworkload" placeholder="结算" @change="editXmTaskWorkloadSomeFields(scope.row,'sworkload',$event)"></el-input>
</span>
</template>
</el-table-column>
<el-table-column prop="samt" label="结算金额" min-width="80" show-overflow-tooltip>
<el-table-column prop="amt" label="标准金额" min-width="80" show-overflow-tooltip sortable>
<template slot-scope="scope">
<span class="cell-text">
<span v-if="scope.row.amt">¥{{ scope.row.amt}}</span>
<span v-else>-</span>
</span>
<span class="cell-bar">
<el-input type="number" style="display:inline;" v-model="scope.row.amt" placeholder="标准金额" @change="editXmTaskWorkloadSomeFields(scope.row,'amt',$event)"></el-input>
</span>
</template>
</el-table-column>
<el-table-column prop="samt" label="结算金额" min-width="80" show-overflow-tooltip sortable>
<template slot-scope="scope">
<span class="cell-text">
<span v-if="scope.row.samt">¥{{ scope.row.samt}}</span>
<span v-else>-</span>
</span>
<span class="cell-bar">
<el-input type="number" style="display:inline;" v-model="scope.row.samt" placeholder="结算金额" @change="editXmTaskWorkloadSomeFields(scope.row,'samt',$event)"></el-input>
</span>
</template>
</el-table-column>
<el-table-column v-if="sstatuses && sstatuses=='1'" prop="toSbill" label="结算单" min-width="80" show-overflow-tooltip>
<el-table-column v-if="sstatuses && sstatuses=='1'" prop="sbillId" label="结算单" min-width="80" show-overflow-tooltip sortable>
<template slot-scope="scope">
<span class="cell-text">
{{scope.row.sbillId}}
</span>
<span class="cell-bar">
<xm-task-sbill-select style="display:inline;" :auto-select="false" :project-id="scope.row.projectId" placeholder="结算" @row-click="editXmWorkloadSomeFields(scope.row,$event)"></xm-task-sbill-select>
<xm-task-sbill-select style="display:inline;" :auto-select="false" :project-id="scope.row.projectId" placeholder="结算" @row-click="editXmTaskWorkloadSomeFields(scope.row,'sbillId',$event)"></xm-task-sbill-select>
</span>
</template>
</el-table-column>
<el-table-column prop="projectId" label="归属项目" min-width="80" show-overflow-tooltip></el-table-column>
<el-table-column prop="ctime" label="创建日期" min-width="80" show-overflow-tooltip>
<el-table-column prop="projectId" label="归属项目" min-width="80" show-overflow-tooltip sortable>
<template slot-scope="scope">
<span>{{scope.row.ctime.substring(0,10)}}</span>
<span class="cell-text">
{{scope.row.projectName}}
</span>
<span class="cell-bar">
{{scope.row.projectId}}-{{scope.row.projectName}}
</span>
</template>
</el-table-column>
<el-table-column prop="taskId" label="任务编号" min-width="80" show-overflow-tooltip></el-table-column>
<el-table-column prop="taskId" label="任务编号" min-width="80" show-overflow-tooltip sortable>
<template slot-scope="scope">
<span class="cell-text">
{{scope.row.taskName}}
</span>
<span class="cell-bar">
{{scope.row.taskId}}-{{scope.row.taskName}}
</span>
</template>
</el-table-column>
<!-- <el-table-column prop="cuserid" label="创建人编号" min-width="80" show-overflow-tooltip></el-table-column>
<el-table-column prop="bizDate" label="业务日期yyyy-MM-dd" min-width="80" show-overflow-tooltip></el-table-column>-->
<el-table-column prop="remark" label="备注" min-width="80" show-overflow-tooltip>
@ -149,7 +207,7 @@
import XmProjectSelect from "../components/XmProjectSelect";
import XmTaskSbillSelect from "./XmTaskSbillSelect";
import {editWorkloadToSbill} from "@/api/xm/core/xmTaskWorkload";
import {editXmWorkloadWstatus} from "../../../../api/xm/core/xmTaskWorkload";
import {editXmTaskWorkloadSomeFields} from "../../../../api/xm/core/xmTaskWorkload";
import UsersSelect from "@/views/mdp/sys/user/UsersSelect";
export default {
@ -200,7 +258,9 @@
sels: [],//
dicts:{
//sex: [{id:'1',name:''},{id:'2',name:''}]
wstatus:[{id:'0',name:'待确认'},{id:'1',name: '已确认'},{id:'2',name:'无效'}]
wstatus:[{id:'0',name:'待确认'},{id:'1',name: '已确认'},{id:'2',name:'无效'}],
sstatus:[{id:'0',name:'无需结算'},{id:'1',name: '待结算'},{id:'2',name:'已提交'},{id:'3',name:'已通过'},{id:'4',name:'已结算'}]
/**0-无需结算,1-待结算2-已提交3-已通过4-已结算 */
},// params={categoryId:'all',itemCodes:['sex']} {sex: [{id:'1',name:''},{id:'2',name:''}]}
addFormVisible: false,//xmTaskWorkload
addForm: {
@ -383,45 +443,47 @@
this.selProject = null;
this.getXmTaskWorkloads();
},
editXmWorkloadSomeFields(workload,row,fieldName,$event){
if(row.status!='0'){
this.$notify.error({position:'bottom-left',showClose:true,message:'该结算单已提交,请重新选择',type:'warning'})
return;
}
editXmTaskWorkloadSomeFields(row,fieldName,$event){
let params={
projectId:row.projectId
ids:[row.id],
};
if(this.sels.length>0){
if(!this.sels.some(k=>k.projectId==row.projectId)){
if(this.sels.some(k=>k.projectId!=row.projectId)){
this.$notify({position:'bottom-left',showClose:true,message:'存在不同项目的工时单,请重新选择',type:'warning'})
return;
}
params.ids=this.sels.map(i=>i.id);
}else{
params.ids = [workload.id];
params.ids = [row.id];
params[fieldName]=$event
}
params.sbillId = row.id;
editWorkloadToSbill(params).then(res=>{
var func = editXmTaskWorkloadSomeFields
if(fieldName==='sbillId'){
func = editWorkloadToSbill
params.sbillId=$event.id
}else{
params[fieldName]=$event
}
func(params).then(res=>{
let tips = res.data.tips;
if(tips.isOk){
this.getXmTaskWorkloads();
if(tips.isOk){
}else{
this.$notify({position:'bottom-left',showClose:true,message:tips.msg,type:tips.isOk?'success':'error'})
}
})
},
formatterStatusDicts: function(cellValue){
formatterWstatusDicts: function(cellValue){
let key="wstatus";
if(this.dicts[key]==undefined || this.dicts[key]==null || this.dicts[key].length==0 ){
return {id:cellValue,name:cellValue,className:'primary'};
}
let list=this.dicts[key].filter(i=>i.id==cellValue)
let list=this.dicts[key].filter(i=>i.id===cellValue)
if(list.length>0){
let data= {...list[0],className:'primary'}
if(data.id=='1'){
if(data.id==='1'){
data.className='success'
}else if(data.id=='2'){
}else if(data.id==='2'){
data.className='info'
}else{
data.className='danger'
@ -432,32 +494,26 @@
}
},
editXmTaskWorkloadSomeFields(row,fieldName,$event){
let params={ids:[row.id]};
if(this.sels.length>0){
if(!this.sels.some(k=>k.id==row.id)){
this.$notify({position:'bottom-left',showClose:true,message:'请操作选中的行或者取消选中的行再操作其它行',type:'warning'})
return;
formatterSstatusDicts: function(cellValue){
let key="sstatus";
if(this.dicts[key]==undefined || this.dicts[key]==null || this.dicts[key].length==0 ){
return {id:cellValue,name:cellValue,className:'primary'};
}
params.ids=this.sels.map(i=>i.id)
let list=this.dicts[key].filter(i=>i.id===cellValue)
if(list.length>0){
let data= {...list[0],className:'primary'}
if(data.id==='1'){
data.className='success'
}else if(data.id==='2'){
data.className='info'
}else{
params.ids = [row.id]
data.className='danger'
}
if(fieldName!=='sstatus') {
this.$notify.error("不支持当前选项");
return;
return data;
}else{
params.wstatus = row.wstatus;
return {id:cellValue,name:cellValue,className:'primary'}
}
editXmWorkloadWstatus(params).then(res=>{
let tips = res.data.tips;
if(tips.isOk){
this.getXmTaskWorkloads();
}else{
this.$notify({position:'bottom-left',showClose:true,message:tips.msg,type:tips.isOk?'success':'error'})
}
})
},
clearFiltersPmUser:function(){
this.filters.pmUser=null;

Loading…
Cancel
Save