jhprjv2/ruoyi-ui/src/views/project/costOutput/costContract.vue

228 lines
8.1 KiB
Vue

<template>
<div class="cost-contract" style="margin-top:4px;">
<el-row>
<el-col :span="8">
<span style="color: #409eff;">
{{ costType == 11 ? '工程进度款支付明细' : '支付明细' }}
</span>
</el-col>
<el-col :span="16" style="text-align: right;">
<el-button type="success" @click="doAdd"></el-button>
</el-col>
</el-row>
<div style="padding: 10px; border:solid 1px #ccc;border-radius: 4px;margin-top:4px;max-height: calc(100vh - 360px);overflow-y: auto;"
class="scroll data-list">
<el-tabs type="border-card" v-model="tabName">
<el-tab-pane :label="dept.deptName" :name="'d' + dept.deptId" v-for="(dept, index) in depts"
:key="dept.deptId">
<el-row v-for="(it, idx) in dept['dataList' + costType]" :key="idx" class="datalist-row"
:class="'row-' + idx % 2 + (it.isErr ? ' is-error' : '')">
<el-col :span="2">
第{{ idx + 1 }}期
</el-col>
<el-col :span="5">
<el-form-item label="申请金额">
<el-input-number style="width: 130px;" :precision="4" @input="chkRowData(it)"
v-model="it.money" :class="it.money > 0 ? '' : 'txt-error'" placeholder="申请金额">
</el-input-number>
<span class="sp-unit">万元</span>
</el-form-item>
</el-col>
<el-col :span="5">
<el-form-item label="申请日期">
<el-date-picker style="width: 140px;" v-model="it.date1" type="date" placeholder="申请日期"
:class="it.date1 ? '' : ' txt-error'" @input="chkRowData(it)">
</el-date-picker>
</el-form-item>
</el-col>
<el-col :span="5">
<el-form-item label="支付金额">
<el-input-number style="width: 130px;" :precision="4" @input="chkRowData(it)"
v-model="it.money2" placeholder="支付金额">
</el-input-number>
<span class="sp-unit">万元</span>
</el-form-item>
</el-col>
<el-col :span="5">
<el-form-item label="挂账金额" :class="it.money3 < 0 ? 'txt-error' : 'is-ok'">
<el-input-number style="width: 130px;" :precision="4" v-model="it.money3" disabled
placeholder="挂账金额">
</el-input-number>
<span class="sp-unit">万元</span>
</el-form-item>
</el-col>
<el-col :span="2">
<el-button style="margin-left: 12px;" size="mini" @click="doDelete(it, idx,dept)">删除</el-button>
</el-col>
</el-row>
<div>&nbsp;</div>
</el-tab-pane>
</el-tabs>
</div>
</div>
</template>
<script>
export default {
data() {
return {
prj: null,
costType: 11,
dataList: [],
depts: [],
tabName: ""
};
},
mounted() {
},
methods: {
doDelete(row, idx,dept) {
this.$confirm('确定删除此行数据??', '提示', { type: 'warning' }).then(() => {
dept['dataList'+this.costType].splice(idx, 1);
});
},
chkRowData(row) {
row.money3 = row.money * 1 - row.money2 * 1;
row.isErr = (row.money * 1 + row.money2 * 1) == 0 || !row.date1;
this.$emit("change", this.depts);
},
doAdd() {
let deptId = this.tabName.substr(1);
let tmps = this.depts.filter(d => d.deptId == deptId);
if (tmps.length > 0) {
tmps[0]['dataList' + this.costType].push({
costType: this.costType,
money: '',
money2: '',
money3: '',
projectId: this.prj.id,
deptId: +deptId,
date1: undefined,
isErr: true
});
}
},
init(d, prj, costType, depts) {
this.costType = costType;
this.prj = prj;
this.depts = depts.map(it => {
let dataList = d.filter(item => item.deptId == it.deptId).map(item => {
let obj = { ...item }
obj.isErr = false;
return obj;
});
it["dataList" + this.costType] = dataList;
return it;
});
if (depts.length > 0) {
setTimeout(() => {
this.tabName = "d" + depts[0].deptId;
}, 400);
}
},
getDataList(){
let tmps=[];
this.depts.forEach(it=>{
let datas=it["dataList"+this.costType];
datas.forEach(item=>{
tmps.push(item);
})
});
return tmps;
},
checkActiveTabData() {
//检查当前激活tab
let deptId = this.tabName.substr(1);
let tmps = this.depts.filter(d => d.deptId == deptId);
if (tmps.length > 0) {
let datas = tmps[0]["dataList" + this.costType];
return this.checkDataList(datas);
}
return true;
},
checkDataList(datas){
let flag1 = datas.filter(d => d.isErr).length == 0;
if (!flag1) {
this.$message.error("请填写数据!");
return false;
}
flag1 = datas.filter(d => d.money * 1 < 0).length == 0;
if (!flag1) {
this.$message.error("金额不能为负数!");
return false;
}
flag1 = datas.filter(d => d.money3 * 1 < 0).length == 0;
if (!flag1) {
this.$message.error("挂账金额不能为负数!");
return false;
}
return true;
},
checkData() {
if (!this.checkActiveTabData()) {
return false;
}
for(let i=0;i<this.depts.length;i++){
let dept=this.depts[i];
if('d'+dept.deptId!=this.tabName){
let datas = dept["dataList" + this.costType];
if(!this.checkDataList(datas)){
this.tabName='d'+dept.deptId;
return false;
}
}
}
return true;
}
},
};
</script>
<style lang="scss">
.cost-contract {
.data-list {
.datalist-row {
* {
font-size: 12px;
}
}
.el-row {
line-height: 36px;
padding: 0px 10px;
&.row-1 {
background-color: #eeeeee;
}
.el-form-item {
margin-bottom: 2px !important;
margin-top: 2px !important;
.el-input__inner {
height: 28px;
line-height: 28px;
}
}
&.is-error {
.txt-error {
.el-input__inner {
border: solid 1px red;
}
}
}
}
}
}
</style>