Browse Source

优化

master
陈裕财 4 years ago
parent
commit
fa305ba9ec
  1. 58
      src/views/xm/core/xmTaskWorkload/XmTaskWorkloadEdit.vue
  2. 1
      src/views/xm/core/xmTaskWorkload/XmTaskWorkloadList.vue
  3. 13
      src/views/xm/core/xmTaskWorkload/XmTaskWorkloadMng.vue
  4. 285
      src/views/xm/core/xmTaskWorkload/XmTaskWorkloadSimpleList.vue

58
src/views/xm/core/xmTaskWorkload/XmTaskWorkloadEdit.vue

@ -32,21 +32,44 @@
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="工作时长" prop="workload">
<el-input type="number" style="width:80%;" :step="8" :min="0" :max="1000" v-model="editForm.workload" placeholder="工作时长"></el-input> 小时
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="计算方式" prop="workloadFillType">
<el-select v-model="workloadFillType" style="display:inline;">
<el-option value="1" label="正常报工(都适用)"></el-option>
<el-option value="2" label="按报价工时减去已登记工时一次性填满(适合众包报价任务)"></el-option>
<el-option value="3" label="按预估工时减去已登记工时一次性填满(适合不严格要求报工,但为了统计进度等)"></el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row v-if="workloadFillType=='2'">
<el-form-item label="报价工时" prop="quoteWorkload">
{{execuser?execuser.quoteWorkload:0}}h
</el-form-item>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="未来工时" prop="rworkload">
<el-input :step="8" :max="1000" type="number" style="width:80%;" v-model="editForm.rworkload" placeholder="预计还要多少工时能够完成工作"></el-input> 小时
</el-form-item>
</el-col>
<font color="blue" style="font-size:12px;padding-left:100px;">注意未来工时指完成工作还需要继续投入的工时一般在原始预估出现比较大的偏差时需要对预估偏差进行重新调整才填写</font>
</el-col> <font color="blue"></font>
</el-row>
<el-form-item label="工作说明" prop="remark">
<el-input type="textarea" :autosize="{ minRows: 6, maxRows: 20}" v-model="editForm.remark" placeholder="工作说明,如果报工大于8小时,请填写说明" ></el-input>
</el-form-item>
@ -64,6 +87,8 @@
import config from "@/common/config"; //import
import { getDicts,initSimpleDicts,initComplexDicts } from '@/api/mdp/meta/item';//
import { addXmTaskWorkload,editXmTaskWorkload } from '@/api/xm/core/xmTaskWorkload';
import { listXmTaskExecuser } from '@/api/xm/core/xmTaskExecuser';
import { mapGetters } from 'vuex'
export default {
@ -88,7 +113,18 @@
if(visible==true){
this.initData()
}
}
},
'workloadFillType':function(val){
if(val==='2'){
this.listXmTaskExecuser();
}
if(va==='3'){
this.editForm.workload=this.xmTask.budgetWorkload-this.xmTask.actWorkload
}
if(val==='1'){
this.editForm.workload=8
}
}
},
data() {
return {
@ -113,7 +149,9 @@
maxTableHeight:300,
dicts:{
taskType:[],
}
},
execuser:null,
workloadFillType:'1',//
}//end return
},//end data
methods: {
@ -171,6 +209,18 @@
this.editForm.workload=8
}
},
listXmTaskExecuser(){
listXmTaskExecuser({userid:this.userInfo.userid,taskId:this.xmTask.id}).then(res=>{
if(res.data.tips.isOk&& res.data.data.length>0){
this.execuser=res.data.data[0]
if(this.workloadFillType=='2'){
this.editForm.workload=this.execuser.quoteWorkload-this.xmTask.actWorkload
}
}else{
this.$notify({position:'bottom-left',showClose:true,message:'没有找到报价信息',type:'error'})
}
});
}
},//end method
mounted() {

1
src/views/xm/core/xmTaskWorkload/XmTaskWorkloadList.vue

@ -56,7 +56,6 @@
},
watch:{
'xmTask.id':function(){
debugger;
this.initData();
this.searchXmTaskWorkloads()
},

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

@ -152,7 +152,11 @@
{{scope.row.taskName}}
</span>
<span class="cell-bar">
{{scope.row.taskId}}-{{scope.row.taskName}}
<el-popover>
<xm-task-workload-simple-list :visible="scope.row.id==editForm.id" :xm-task="{id:scope.row.taskId,name:scope.row.taskName,projectName:scope.row.projectName,projectId:scope.row.projectId,budgetWorkload:scope.row.budgetWorkload,actWorkload:scope.row.actWorkload}" ref="xmTaskWorkloadSimpleList"></xm-task-workload-simple-list>
<el-button slot="reference" icon="el-icon-search" style="display:inline;">工时记录</el-button>
</el-popover>
</span>
</template>
@ -209,6 +213,9 @@
import {editWorkloadToSbill} from "@/api/xm/core/xmTaskWorkload";
import {editXmTaskWorkloadSomeFields} from "../../../../api/xm/core/xmTaskWorkload";
import UsersSelect from "@/views/mdp/sys/user/UsersSelect";
import XmTaskWorkloadSimpleList from './XmTaskWorkloadSimpleList';
import { listXmTaskExecuser } from '@/api/xm/core/xmTaskExecuser';
import { listXmTask } from '@/api/xm/core/xmTask';
export default {
name:'xmTaskWorkloadMng',
@ -216,7 +223,8 @@
XmTaskWorkloadEdit,
XmProjectSelect,
XmTaskSbillSelect,
UsersSelect
UsersSelect,
XmTaskWorkloadSimpleList,
},
props:['visible','wstatuses','sstatuses'],
computed: {
@ -277,6 +285,7 @@
pickerOptions: util.pickerOptions('datarange'),
dateRanger: [],
selectFiltersPmUserVisible:false,
xmTaskWorkloadSimpleListVisible:false,
}
},//end data
methods: {

285
src/views/xm/core/xmTaskWorkload/XmTaskWorkloadSimpleList.vue

@ -0,0 +1,285 @@
<template>
<section>
<el-row class="padding-top">
<!--列表 XmTaskWorkload 工时登记表-->
<el-row>
项目 &nbsp;<font>{{xmTask.projectName}}</font> &nbsp;&nbsp;任务 &nbsp;<font>{{xmTask.name}}</font>
</el-row>
<el-row>
预估工时 &nbsp;<el-tag>{{xmTask.budgetWorkload}} &nbsp;h</el-tag> &nbsp;&nbsp; &nbsp;<el-tag>{{xmTask.actWorkload}}&nbsp;h</el-tag> &nbsp;&nbsp; &nbsp;<el-tag type="warning">{{xmTask.budgetWorkload>0?xmTask.actWorkload/xmTask.budgetWorkload*100:0}}%&nbsp;</el-tag>
</el-row>
<el-table ref="xmTaskWorkloadTable" :data="xmTaskWorkloads" @sort-change="sortChange" highlight-current-row v-loading="load.list" border @selection-change="selsChange" @row-click="rowClick" style="width: 100%;">
<el-table-column type="selection" width="55" 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="bizDate" label="报送日期" min-width="80" show-overflow-tooltip></el-table-column>
<el-table-column prop="workload" label="报送工时" min-width="80" show-overflow-tooltip></el-table-column>
<el-table-column prop="wstatus" label="状态" min-width="80" show-overflow-tooltip>
<template slot-scope="scope">
{{scope.row.wstatus==='1'?'已确认':'待确认'}}
</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="任务类型" min-width="80" show-overflow-tooltip :formatter="formatterOption"></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>
<!--新增 XmTaskWorkload 工时登记表界面-->
<el-dialog :title="'任务【'+xmTask.name+'】新增工时'" :visible.sync="addFormVisible" width="60%" top="20px" append-to-body :close-on-click-modal="false">
<xm-task-workload-edit op-type="add" :xm-task="xmTask" :visible="addFormVisible" @cancel="addFormVisible=false" @submit="afterAddSubmit"></xm-task-workload-edit>
</el-dialog>
</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 XmTaskWorkloadEdit from './XmTaskWorkloadEdit';//
import { mapGetters } from 'vuex'
export default {
name:'xmTaskWorkloadSimpleList',
components: {
XmTaskWorkloadEdit,
},
props:['xmTask','visible'],
computed: {
...mapGetters(['userInfo']),
},
watch:{
'xmTask.id':function(){
this.initData();
this.searchXmTaskWorkloads()
},
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:{
taskType:[],
//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: {
formatterOption: function (row, column, cellValue, index) {
var columnName = column.property;
var key = columnName;
if(columnName==='ttype'){
key="taskType"
}
if (
this.dicts[key] == undefined ||
this.dicts[key] == null ||
this.dicts[key].length == 0
) {
return cellValue;
}
var list = this.dicts[key].filter((i) => i.id == cellValue);
if (list.length > 0) {
return list[0].name;
} else {
return cellValue;
}
},
handleSizeChange(pageSize) {
this.pageInfo.pageSize=pageSize;
this.getXmTaskWorkloads();
},
handleCurrentChange(pageNum) {
this.pageInfo.pageNum = pageNum;
this.getXmTaskWorkloads();
},
// obj.order=ascending/descending, asc/desc ; obj.prop=,
sortChange( obj ){
if(obj.order==null){
this.pageInfo.orderFields=[];
this.pageInfo.orderDirs=[];
}else{
var dir='asc';
if(obj.order=='ascending'){
dir='asc'
}else{
dir='desc';
}
this.pageInfo.orderFields=[util.toLine(obj.prop)];
this.pageInfo.orderDirs=[dir];
}
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
};
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
}
if(!this.xmTask || !this.xmTask.id){
return;
}
params.taskId=this.xmTask.id
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
showEdit: function ( row,index ) {
this.editFormVisible = true;
this.editForm = Object.assign({}, row);
},
// XmTaskWorkload
showAdd: function () {
this.addFormVisible = true;
//this.addForm=Object.assign({}, this.editForm);
},
afterAddSubmit(){
this.addFormVisible=false;
this.pageInfo.count=true;
this.getXmTaskWorkloads();
this.$emit('submit',this.editForm)
},
afterEditSubmit(){
this.editFormVisible=false;
this.$emit('submit',this.editForm)
},
//xmTaskWorkload
selsChange: function (sels) {
this.sels = sels;
},
//xmTaskWorkload
handleDel: function (row,index) {
this.$confirm('确认删除该记录吗?', '提示', {
type: 'warning'
}).then(() => {
this.load.del=true;
let params = { id:row.id };
delXmTaskWorkload(params).then((res) => {
this.load.del=false;
var tips=res.data.tips;
if(tips.isOk){
this.pageInfo.count=true;
this.getXmTaskWorkloads();
this.$emit('submit',this.editForm)
}
this.$notify({position:'bottom-left',showClose:true, message: tips.msg, type: tips.isOk?'success':'error' });
}).catch( err => this.load.del=false );
});
},
//xmTaskWorkload
batchDel: function () {
if(this.sels.length<=0){
return;
}
var params=this.sels.map(i=>{
return { id:i.id}
})
this.$confirm('确认删除选中记录吗?', '提示', {
type: 'warning'
}).then(() => {
this.load.del=true;
batchDelXmTaskWorkload(params).then((res) => {
this.load.del=false;
var tips=res.data.tips;
if( tips.isOk ){
this.pageInfo.count=true;
this.getXmTaskWorkloads();
this.$emit('submit')
}
this.$notify({position:'bottom-left',showClose:true, message: tips.msg, type: tips.isOk?'success':'error'});
}).catch( err => this.load.del=false );
});
},
rowClick: function(row, event, column){
this.editForm=row
this.$emit('row-click',row, event, column);// @row-click="rowClick"
},
initData: function(){
},
},//end methods
mounted() {
this.$nextTick(() => {
initSimpleDicts('all',[ 'taskType' ]).then(res=>{
this.dicts=res.data.data;
})
if(this.visible==true){
this.initData()
this.searchXmTaskWorkloads();
}
this.maxTableHeight = util.calcTableMaxHeight(this.$refs.xmTaskWorkloadTable.$el)
});
}
}
</script>
<style scoped>
</style>
Loading…
Cancel
Save