减免费用

This commit is contained in:
hongchao 2025-02-17 17:55:52 +08:00
parent 460a96e34d
commit be9ee7a8c9
4 changed files with 1146 additions and 53 deletions

View File

@ -0,0 +1,498 @@
<template>
<div class="app-container">
<el-row style="width: 100%">
<el-col :span="18">
<el-button type="primary" size="mini" @click="handleExport1"
>租赁明细导出</el-button>
<el-button type="primary" size="mini" @click="handleExport3"
>维修明细导出</el-button>
<el-button type="primary" size="mini" @click="handleExport4"
>报废明细导出</el-button>
<el-button type="primary" size="mini" @click="handleExport2"
>丢失明细导出</el-button>
<el-button type="warning" size="mini" @click="handleExportAll"
>全部明细导出</el-button>
<el-button type="success" size="mini" @click="handleAdd"
>提交</el-button>
</el-col>
<!-- <el-col :span="4">
<el-button type="danger" size="mini" style="float: right" @click="handleBack"
>返回</el-button>
</el-col> -->
</el-row>
<!-- <div style="color: rgb(217, 0, 27); font-weight: 700; padding: 20px 0">
结算费用合计¥{{ costAll }}租赁费用¥{{ leaseCost }}维修费用¥{{
repairCost
}}报废费用¥{{ scrapCost }}丢失费用{{ loseCost }}
</div> -->
<div style="margin-top:20px">
<div class="tabelAllTop">
<div class="costTop">结算费用</div>
</div>
<div class="tabelAllTopUnit">
<div class="costTopUnit">结算单位</div>
<div class="costRightUnit">
{{ unitName }}
</div>
</div>
<div class="tabelAllTopUnit">
<div class="costTopUnit">结算工程</div>
<div class="costRightUnit">
{{ projectName }}
</div>
</div>
<el-table :data="leaseList">
<el-table-column label="租赁费用明细" align="center">
<el-table-column label="序号" align="center" type="index" width="60"/>
<!-- <el-table-column label="结算单位" align="center" prop="unitName" :show-overflow-tooltip="true"/>
<el-table-column label="结算工程" align="center" prop="projectName" :show-overflow-tooltip="true"/> -->
<el-table-column label="设备名称" align="center" prop="typeName" :show-overflow-tooltip="true"/>
<el-table-column label="规格型号" align="center" prop="modelName" :show-overflow-tooltip="true"/>
<el-table-column label="计量单位" align="center" prop="mtUnitName" :show-overflow-tooltip="true"/>
<el-table-column label="租赁单价" align="center" prop="leasePrice" :show-overflow-tooltip="true">
<template slot-scope="scope" v-if="scope.row.num">
{{ scope.row.leasePrice.toFixed(2) }}
</template>
</el-table-column>
<el-table-column label="租赁数量" align="center" prop="num" :show-overflow-tooltip="true">
<template slot-scope="scope">
{{ scope.row.num.toFixed(2) }}
</template>
</el-table-column>
<el-table-column label="租赁日期" align="center" prop="startTime" :show-overflow-tooltip="true"/>
<!-- <el-table-column label="归还数量" align="center" prop="" :show-overflow-tooltip="true" /> -->
<el-table-column label="归还日期 " align="center" prop="endTime" :show-overflow-tooltip="true"/>
<el-table-column label="租赁天数" align="center" prop="leaseDays" :show-overflow-tooltip="true">
<template slot-scope="scope" v-if="scope.row.num">
{{ Number(scope.row.leaseDays).toFixed(2) }}
</template>
</el-table-column>
<el-table-column label="租赁费用(元)" align="center" prop="costs" :show-overflow-tooltip="true">
<template slot-scope="scope" v-if="scope.row.costs">
{{ scope.row.costs.toFixed(2) }}
</template>
</el-table-column>
</el-table-column>
</el-table>
<div class="tabelAll">
<div class="columnAllNum">费用小计</div>
<div class="columnAll">
{{ leaseCost }}
</div>
</div>
</div>
<div>
<el-table :data="repairList">
<el-table-column label="维修费用明细" align="center">
<el-table-column label="序号" align="center" type="index" width="60"/>
<el-table-column label="设备名称" align="center" prop="typeName" :show-overflow-tooltip="true"/>
<el-table-column label="规格型号" align="center" prop="modelName" :show-overflow-tooltip="true"/>
<el-table-column label="计量单位" align="center" prop="mtUnitName" :show-overflow-tooltip="true"/>
<el-table-column label="维修数量" align="center" prop="num" :show-overflow-tooltip="true">
<template slot-scope="scope" v-if="scope.row.num" >
{{ scope.row.num.toFixed(2) }}
</template>
</el-table-column>
<el-table-column label="是否收费" align="center" prop="partType" :show-overflow-tooltip="true"/>
<el-table-column label="维修费用(元)" align="center" prop="costs" :show-overflow-tooltip="true">
<template slot-scope="scope" v-if="scope.row.costs" >
{{ scope.row.costs.toFixed(2) }}
</template>
</el-table-column>
</el-table-column>
</el-table>
<div class="tabelAll">
<div class="columnAllNum">费用小计</div>
<div class="columnAll">
{{ repairCost }}
</div>
</div>
</div>
<div>
<el-table :data="scrapList">
<el-table-column label="报废费用明细" align="center">
<el-table-column label="序号" align="center" type="index" width="60"/>
<el-table-column label="设备名称" align="center" prop="typeName" :show-overflow-tooltip="true"/>
<el-table-column label="规格型号" align="center" prop="modelName" :show-overflow-tooltip="true"/>
<el-table-column label="计量单位" align="center" prop="mtUnitName" :show-overflow-tooltip="true"/>
<el-table-column label="报废数量" align="center" prop="num" :show-overflow-tooltip="true">
<template slot-scope="scope" v-if="scope.row.num">
{{ scope.row.num.toFixed(2) }}
</template>
</el-table-column>
<el-table-column label="是否收费" align="center" prop="partType" :show-overflow-tooltip="true"/>
<el-table-column label="报废费用(元)" align="center" prop="costs" :show-overflow-tooltip="true">
<template slot-scope="scope" v-if="scope.row.costs">
{{ scope.row.costs.toFixed(2) }}
</template>
</el-table-column>
</el-table-column>
</el-table>
<div class="tabelAll">
<div class="columnAllNum">费用小计</div>
<div class="columnAll">
{{ scrapCost }}
</div>
</div>
</div>
<div>
<el-table :data="loseList">
<el-table-column label="丢失费用明细" align="center">
<el-table-column label="序号" align="center" type="index" width="60"/>
<el-table-column label="设备名称" align="center" prop="typeName" :show-overflow-tooltip="true"/>
<el-table-column label="规格型号" align="center" prop="modelName" :show-overflow-tooltip="true"/>
<el-table-column label="计量单位" align="center" prop="mtUnitName" :show-overflow-tooltip="true"/>
<el-table-column label="丢失数量" align="center" prop="num" :show-overflow-tooltip="true">
<template slot-scope="scope" v-if="scope.row.num">
{{ scope.row.num.toFixed(2) }}
</template>
</el-table-column>
<el-table-column label="丢失费用(元)" align="center" prop="costs" :show-overflow-tooltip="true">
<template slot-scope="scope" v-if="scope.row.costs">
{{ scope.row.costs.toFixed(2) }}
</template>
</el-table-column>
</el-table-column>
</el-table>
<div class="tabelAllBottom">
<div class="columnAllNum">费用小计</div>
<div class="columnAll">
{{ loseCost }}
</div>
</div>
<div class="tabelAllBottom">
<div class="columnAllNum">合计</div>
<div class="columnAll">
{{ costAll.toFixed(2) }}
</div>
</div>
</div>
</div>
</template>
<script>
import { getSltInfo, submitFee,submitCosts } from '@/api/cost/cost'
export default {
name: '',
dicts: [],
props: {
row: {
type: [String],
}
},
data() {
return {
//
unitList: [],
//
projectList: [],
leaseList: [], //
leaseCost: 0,
repairList: [], //
repairCost: 0,
scrapList: [], //
scrapCost: 0,
loseList: [], //
loseCost: 0,
costAll: 0,
deptName: undefined,
applyList: [],
projectName: undefined, //
unitName: undefined, //
}
},
mounted() {
let arr = JSON.parse(this.row)
this.rowData = arr
this.getDataAll()
// this.getUnitList();
// this.getProjectList();
},
methods: {
// ,getUnitList, getProjectList
getUnitList() {
getUnitList().then((response) => {
this.unitList = response.data
})
},
getProjectList() {
getProjectList().then((response) => {
this.projectList = response.data
})
},
/** 查询列表 */
getDataAll() {
getSltInfo(this.rowData).then((response) => {
this.leaseList = response.data.leaseList //
this.projectName = response.data.projectName
this.unitName = response.data.unitName
this.leaseCost = this.countCost(this.leaseList)
this.repairList = response.data.repairList //
this.repairCost = response.data.repairCost.toFixed(2)
// this.repairCost = this.countCost(this.repairList)
this.scrapList = response.data.scrapList //
this.scrapCost = response.data.scrapCost.toFixed(2)
// this.scrapCost = this.countCost(this.scrapList)
this.loseList = response.data.loseList //
this.loseCost = this.countCost(this.loseList)
this.applyList = response.data.relations
this.applyList.forEach((item) => {
item.leaseCost = Number(item.leaseCost)
item.repairCost = Number(item.repairCost)
item.scrapCost = Number(item.scrapCost)
item.loseCost = Number(item.loseCost)
item.cost =
Number(item.leaseCost) +
Number(item.repairCost) +
Number(item.scrapCost) +
Number(item.loseCost) +
Number(item.addCost) -
Number(item.subCost)
})
let costSum =
Number(this.leaseCost) +
Number(this.repairCost) +
Number(this.scrapCost) +
Number(this.loseCost)
this.costAll = costSum
this.subCostFlag = costSum
})
},
//1
countCost(list) {
let arrCost = 0
list.forEach((item) => {
// arrCost += parseInt(item.costs)
console.log(item)
if (item.partType != 0 && item.scrapType != 0) {
arrCost = arrCost + Number(item.costs)
}
})
return arrCost.toFixed(2)
},
//
handleAdd() {
this.$modal
.confirm('是否确认提交?')
.then(() => {
let params = {
'agreementId': this.rowData.agreementId, 'agreementCode': this.rowData.agreementCode,'totalCostAll': this.costAll,
'leaseList': this.leaseList, 'repairList': this.repairList, 'scrapList': this.scrapList,'loseList': this.loseList,
}
console.log('2222222222222',params)
submitCosts(params).then((response) => {
this.$message({
type: 'success',
message: '提交成功',
})
this.$emit('goBackPage')
})
})
.catch(() => {})
},
//el-table-
getSummaries(param) {
const { columns, data } = param
const sums = []
columns.forEach((column, index) => {
if (index === 9) {
sums[index] = '最终费用'
return
}
const values = data.map((item) => Number(item[column.property]))
// amount
if (column.property === 'cost') {
if (!values.every((value) => isNaN(value))) {
sums[index] = values.reduce((prev, curr) => {
const value = Number(curr)
if (!isNaN(value)) {
return prev + curr
} else {
return prev
}
}, 0)
// sums[index] += ' ';
} else {
sums[index] = '---'
}
}
})
return sums
},
countNum(row) {
row.cost =
Number(row.leaseCost) +
Number(row.repairCost) +
Number(row.scrapCost) +
Number(row.loseCost) +
Number(row.addCost || 0) -
Number(row.subCost || 0)
},
//
handleBack() {
this.$emit('goBackPage')
// this.$tab.closeOpenPage({
// path: '/cost/costApplyList',
// query: {
// isEdit: true,
// },
// })
},
/** 导出按钮操作 */
//
handleExport1() {
const params = this.rowData
this.download(
'material/slt_agreement_info/exportLease',
{...params,},
`租赁费用明细_${new Date().getTime()}.xlsx`,
)
},
//
handleExport2() {
const params = this.rowData
this.download(
'material/slt_agreement_info/exportLose',
{...params,},
`丢失费用明细_${new Date().getTime()}.xlsx`,
)
},
//
handleExport3() {
const params = this.rowData
this.download(
'material/slt_agreement_info/exportRepair',
{...params,},
`维修费用明细_${new Date().getTime()}.xlsx`,
)
},
//
handleExport4() {
const params = this.rowData
this.download(
'material/slt_agreement_info/exportScrap',
{...params,},
`报废费用明细_${new Date().getTime()}.xlsx`,
)
// this.downloadJson(
// 'material/slt_agreement_info/exportScrap',
// JSON.stringify(this.rowData),
// `_${new Date().getTime()}.xlsx`,
// )
},
handleExportAll() {
const params = this.rowData
this.download(
'material/slt_agreement_info/exportAll',
{...params,},
`全部费用明细_${new Date().getTime()}.xlsx`,
)
},
},
}
</script>
<style lang="scss" scoped>
::v-deep.el-table .fixed-width .el-button--mini {
width: 80px !important;
margin-bottom: 10px;
}
.tabelAllTop {
display: flex;
border: 1px solid #dfe6ec;
width:100%;
height:50px;
background-color: #f8f8f9;
border-left: none;
border-bottom: none;
.costTop {
display: flex;
padding: 5px;
border-left: 1px solid #dfe6ec;
align-items: center;
text-align: center;
justify-content: center; /* 将内容对齐到中间 */
width:100%;
font-weight: bold; /* 添加字体加粗样式 */
}
}
.tabelAllTopUnit {
display: flex;
border: 1px solid #dfe6ec;
width:100%;
height:50px;
background-color: #f8f8f9;
border-bottom: none;
.costTopUnit {
display: flex;
padding: 5px;
width:21.4%;
border-left: none;
align-items: center;
text-align: center;
justify-content: center; /* 将内容对齐到中间 */
}
.costRightUnit {
display: flex;
padding: 5px;
border-left: 1px solid #dfe6ec;
text-align: center;
align-items: center;
width:100%;
justify-content: center; /* 将内容对齐到中间 */
// padding-left: 20px; /* */
}
}
.tabelAll {
display: flex;
border: 1px solid #dfe6ec;
width:100%;
border-bottom: 1px solid #dfe6ec;
border-top: none;
margin-bottom: 15px;
}
.tabelAllBottom {
display: flex;
border: 1px solid #dfe6ec;
width:100%;
border-bottom: 1px solid #dfe6ec;
border-top: none;
}
.columnAll {
display: flex ;
padding: 5px;
border-left: 1px solid #dfe6ec;
text-align: center;
align-items: center;
width:100%;
justify-content: flex-end; /* 将内容对齐到右侧 */
margin-right: 60px; /* 添加右边距 */
}
.columnAllNum {
padding: 5px;
text-align: center;
width:21.4%;
border-left: none;
}
/* 最后一列无右边框 */
.tabelAll .column:last-child {
border-right: none;
}
</style>

View File

@ -0,0 +1,478 @@
<template>
<div class="app-container" id="costApplyList">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" label-width="80px">
<el-form-item prop="unitIds">
<treeselect
v-model="queryParams.unitId"
:options="unitList" :normalizer="normalizer"
:show-count="true" style="width: 240px" :disable-branch-nodes="true"
noChildrenText="没有数据了" noOptionsText="没有数据" noResultsText="没有搜索结果"
placeholder="请选择结算单位" @select="unitChange"
/>
<!-- <el-cascader v-model="unitIds"
:show-all-levels="false"
:options="unitList"
:props="selectTreeProps"
filterable
clearable
collapse-tags
@change="unitChange"
placeholder="请选择单位"
></el-cascader> -->
</el-form-item>
<el-form-item prop="projectIds">
<treeselect
v-model="queryParams.projectId"
:options="proList" :normalizer="normalizer"
:show-count="true" style="width: 240px" :disable-branch-nodes="true"
noChildrenText="没有数据了" noOptionsText="没有数据" noResultsText="没有搜索结果"
placeholder="请选择结算工程" @select="proChange"
/>
<!-- <el-cascader v-model="projectIds"
:show-all-levels="false"
:options="proList"
:props="selectTreeProps"
filterable clearable
collapse-tags
@change="proChange"
placeholder="请选择工程"
></el-cascader> -->
</el-form-item>
<el-form-item prop="agreementCode">
<el-input v-model="queryParams.agreementCode" placeholder="请输入协议号" clearable disabled/>
</el-form-item>
<el-form-item prop="sltStatus">
<el-select
v-model="queryParams.sltStatus"
placeholder="请选择工程结算状态"
clearable
filterable
>
<el-option label="未结算" value="0"></el-option>
<el-option label="已结算" value="1"></el-option>
</el-select>
</el-form-item>
<el-form-item>
<el-button
type="primary"
icon="el-icon-search"
size="mini"
@click="handleQuery"
>查询</el-button
>
<el-button
icon="el-icon-refresh"
size="mini"
@click="resetQuery"
>重置</el-button
>
</el-form-item>
</el-form>
<el-table v-loading="loading" :data="tableList" >
<el-table-column label="序号" align="center" width="80" type="index">
<template slot-scope="scope">
<span>{{
(queryParams.pageNum - 1) * 10 + scope.$index + 1
}}</span>
</template>
</el-table-column>
<el-table-column label="结算时间" align="center" prop="agreementCode" :show-overflow-tooltip="true"/>
<el-table-column label="结算人" align="center" prop="agreementCode" :show-overflow-tooltip="true"/>
<el-table-column label="结算单位" align="center" prop="unitName" :show-overflow-tooltip="true"/>
<el-table-column label="结算工程" align="center" prop="projectName" :show-overflow-tooltip="true"/>
<el-table-column label="协议号" align="center" prop="agreementCode" :show-overflow-tooltip="true"/>
<el-table-column label="合计费用(元)" align="center" prop="costs" :show-overflow-tooltip="true">
<template slot-scope="scope" v-if="scope.row.costs != null && scope.row.costs!=''">
{{ scope.row.costs.toFixed(2) }}
</template>
</el-table-column>
<el-table-column label="结算状态" align="center" prop="sltStatus" :show-overflow-tooltip="true">
<template slot-scope="scope">
<dict-tag :options="dict.type.cost_status" :value="scope.row.sltStatus"/>
</template>
<!-- <template slot-scope="scope">
<span v-if="scope.row.sltStatus == '0'">未结算</span>
<span v-if="scope.row.sltStatus == '1'">已结算</span>
<span v-if="scope.row.sltStatus == '2'">已审核</span>
<span v-if="scope.row.sltStatus == '3'">已驳回</span>
</template> -->
</el-table-column>
<el-table-column label="备注" align="center" prop="remark" :show-overflow-tooltip="true"/>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button size="mini" type="primary" icon="el-icon-search"
@click="handleApply(scope.row)"
>查看</el-button>
</template>
</el-table-column>
</el-table>
<pagination
v-show="total > 0"
:total="total"
:page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>
<!-- 协议单弹窗 -->
<el-dialog :visible.sync="openPrint" width="1100px" append-to-body>
<div style="height: 600px; overflow-y: scroll">
<vue-easy-print tableShow ref="remarksPrintRef" class="print">
<div style="text-align: center; font-weight: 600; font-size: 16px">
机具设备有偿使用费结算协议书
</div>
<div class="info" style="margin-top: 10px; display: flex; flex-wrap: wrap">
<div class="item" style=" width: 65%; flex-shrink: 0; margin-bottom: 5px; font-size: 14px;">
</div>
<div class="item" style=" width: 35%; flex-shrink: 0; margin-bottom: 5px; font-size: 14px;">
<span>协议号</span>
</div>
</div>
<div class="tabelColumn">
<div class="columnLabel" style="width: 20%;">工程名称</div>
<div class="columnContent" style="width: 80%;">金上-湖北线路工程川12标</div>
</div>
<div class="tabelColumn">
<div class="columnLabel" style="width: 20%;">承租单位</div>
<div class="columnContent" style="width: 40%;">金上-湖北线路工程川12标项目部</div>
<div class="columnLabel" style="width: 10%;border-left: 1px solid #9c9c9c;">日期</div>
<div class="columnContent" style="width: 30%;">2024-12-01</div>
</div>
<div class="tabelColumn">
<div class="columnLabel" style="width: 100%;">结算项目及金额()</div>
</div>
<div class="tabelColumn">
<div class="columnLabel" style="width: 60%;">施工机具有偿使用费</div>
<div class="columnContent" style="width: 40%;"> 13144247. 44</div>
</div>
<div class="tabelColumn">
<div class="columnLabel" style="width: 60%;">施工机具维修费</div>
<div class="columnContent" style="width: 40%;"> 13144247. 44</div>
</div>
<div class="tabelColumn">
<div class="columnLabel" style="width: 60%;">施工机具丢失费</div>
<div class="columnContent" style="width: 40%;"> 13144247. 44</div>
</div>
<div class="tabelColumn">
<div class="columnLabel" style="width: 60%;">施工机具损坏赔偿费</div>
<div class="columnContent" style="width: 40%;"> 13144247. 44</div>
</div>
<div class="tabelColumn">
<div class="columnLabel" style="width: 20%;">费用合计金额大写</div>
<div class="columnContent" style="width: 40%;">贰仟肆佰伍拾陆万伍仟肆佰捌拾玖元肆角伍分</div>
<div class="columnContent" style="width: 40%;"> 24565489.45</div>
</div>
<div class="tabelColumn">
<div class="columnLabel" style="width: 20%;">说明</div>
<div class="columnContent" style="width: 80%;">本协议一式三份甲方一份乙方一份经双方签字后生效</div>
</div>
<div class="tabelColumn" style="border: 1px solid #9c9c9c;">
<div class="columnLabel" style="width: 20%;">备注</div>
<div class="columnContent" style="width: 80%;">此费用仅为在机具设备分公司发生费用未计从项目部领用机具费用</div>
</div>
<div class="fillIn" style="margin-top: 20px; display: flex; justify-content: space-between;">
<div class="item" style="width: 33%">
<div>
<span>部门负责人</span>
</div>
</div>
<div class="item" style="width: 33%">
<div>
<span>承租负责人</span>
</div>
</div>
<div class="item" style="width: 33%">
<div>
<span>核算员</span>
</div>
</div>
</div>
</vue-easy-print>
</div>
<div slot="footer" class="dialog-footer" style="text-align: center">
<el-button type="primary" @click="print"> </el-button>
<el-button @click="openPrint = false"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import {
getProjectList,
getUnitList,
getAgreementInfoById,
} from '@/api/back/index.js'
import { getSltAgreementInfo } from '@/api/cost/cost'
import vueEasyPrint from "vue-easy-print";
import Treeselect from "@riophae/vue-treeselect";
import "@riophae/vue-treeselect/dist/vue-treeselect.css";
export default {
name: 'CostApplyList',
dicts: ['cost_status'],
components: { Treeselect },
data() {
return {
//
loading: false,
//
ids: [],
//
single: true,
//
multiple: true,
//
total: 0,
//
unitList: [],
//
proList: [],
unitIds: null,
projectIds: null,
selectTreeProps: {
children: 'children',
label: 'name',
value: 'id',
// multiple: true,//false
},
// statusList: [
// { id: '1', name: '' },
// { id: '2', name: '' },
// { id: '3', name: '' },
// { id: '4', name: '' },
// ],
//
tableList: [],
//
queryParams: {
pageNum: 1,
pageSize: 10,
sltStatus: '',
isCommit:'',
unitId: null,
projectId: null,
agreementId: '',
agreementCode: '',
},
openPrint:false
}
},
created() {
this.GetUnitData()
this.GetProData()
this.getList()
},
methods: {
/** 转换菜单数据结构 */
normalizer(node) {
if (node.children && !node.children.length) {
delete node.children;
}
return {
id: node.id,
label: node.name,
children: node.children,
};
},
//
async GetUnitData() {
const params = {
// projectId: this.queryParams.projectId /* */,
}
const res = await getUnitList(params)
this.unitList = res.data;
this.getAgreementInfo()
},
unitChange(val){
// if(val&&val.length>0){
// this.queryParams.unitId=this.unitIds[this.unitIds.length - 1]
// }else if(val&&val.length==0){
// this.queryParams.unitId=""
// }
// this.GetProData()
setTimeout(()=>{
this.queryParams.projectId=null
this.queryParams.agreementId = null
this.queryParams.agreementCode = null
this.GetProData()
},500)
},
//
async GetProData() {
const params = {
unitId: this.queryParams.unitId,
}
const res = await getProjectList(params)
this.proList = res.data;
this.getAgreementInfo()
},
proChange(val){
// if(val&&val.length>0){
// this.queryParams.projectId=this.projectIds[this.projectIds.length - 1]
// }else if(val&&val.length==0){
// this.queryParams.projectId=""
// }
// this.GetUnitData()
setTimeout(()=>{
this.GetUnitData()
},500)
},
// id
async getAgreementInfo() {
if (this.queryParams.unitId && this.queryParams.projectId) {
const params = {
unitId: this.queryParams.unitId,
projectId: this.queryParams.projectId,
}
const res = await getAgreementInfoById(params)
console.log(res)
if (!(res.data && res.data.agreementId)) {
this.$message.error('当前单位和工程无协议!')
this.queryParams.unitId = null
this.queryParams.projectId = null
this.GetUnitData()
this.GetProData()
} else {
this.queryParams.agreementId = res.data.agreementId
this.queryParams.agreementCode = res.data.agreementCode
}
}
},
/** 查询列表 */
getList() {
this.loading = true
getSltAgreementInfo(this.queryParams).then((response) => {
this.tableList = response.rows
this.total = response.total
this.loading = false
})
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNum = 1
this.getList()
},
/** 重置按钮操作 */
resetQuery() {
this.unitIds=[]
this.projectIds=[]
this.queryParams={
pageNum: 1,
pageSize: 10,
sltStatus: '',
isCommit:'',
unitId: null,
projectId: null,
agreementId: '',
agreementCode: '',
}
this.resetForm('queryForm')
this.handleQuery()
},
//
handleApply(row) {
let arr = row
// console.log(arr)
// console.log(this.ids)
// console.log(JSON.stringify(arr))
// this.$tab.closeOpenPage({
// path: '/cost/costApplyDetail',
// query: {
// rowData: JSON.stringify(arr),
// },
// })
this.$emit("goDetail",JSON.stringify(arr));
},
handleApplyList() {
if (this.ids.length < 1) {
this.$message.error('请候选需要结算的数据!')
return
}
if (this.ids.length > 0) {
let arr = this.ids
this.$tab.closeOpenPage({
path: '/cost/cost/costApplyAdd',
query: {
rowData: JSON.stringify(arr),
},
})
}
},
//
handleSelectionChange(selection) {
this.ids = selection.map((item) => item)
this.single = selection.length != 1
this.multiple = !selection.length
},
openPrintDialog(){
this.openPrint = true
},
//
print() {
this.$refs.remarksPrintRef.print();
},
/** 删除按钮操作 */
handleDelete(row) {
// const agreementId = row.agreementId;
// let param = {
// agreementId:row.agreementId+''
// }
// this.$modal.confirm('').then(function() {
// return removeAgreement(param);
// }).then(() => {
// this.getList();
// this.$modal.msgSuccess("");
// }).catch(() => {});
},
/** 导出按钮操作 */
handleExport() {
// this.download('material/agreementInfo/export', {
// ...this.queryParams
// }, `_${new Date().getTime()}.xlsx`)
},
},
}
</script>
<style lang="scss" scoped>
::v-deep.el-table .fixed-width .el-button--mini {
width: 80px !important;
margin-bottom: 10px;
}
.dialog-footer {
display: flex;
justify-content: flex-end;
align-items: center;
}
.tabelColumn {
width:1000px;
height: 50px;
display: flex;
align-items: center;
border: 1px solid #9c9c9c;
// margin-bottom: 1px;
border-bottom: none;
}
.columnLabel {
height: 50px;
line-height: 50px;
text-align: center;
border-left: none;
}
.columnContent {
height: 50px;
line-height: 50px;
text-align: center;
border-left: 1px solid #9c9c9c;
}
</style>

View File

@ -0,0 +1,48 @@
<template>
<!-- 结算申请-->
<div class="app-container">
<PageHeader
v-if="isShowComponent !== 'ApplyHome'"
:pageContent="pageContent"
@goBack="goBack"
/>
<component
:is="isShowComponent"
:row="rowData"
@goDetail="goDetail"
@goBackPage="goBack"
/>
</div>
</template>
<script>
import PageHeader from '@/components/pageHeader'
import ApplyHome from './component/applyHome.vue'
import ApplyDetail from './component/applyDetail.vue'
export default {
components: {
PageHeader,
ApplyHome,
ApplyDetail
},
data() {
return {
isShowComponent: 'ApplyHome',
pageContent: '',
rowData: null,
isView: false,
}
},
methods: {
// 退
goDetail(rowData) {
this.rowData = rowData;
this.pageContent = '结算详情';
this.isShowComponent = 'ApplyDetail';
},
goBack() {
this.isShowComponent = 'ApplyHome'
},
},
}
</script>

View File

@ -824,45 +824,84 @@ export default {
//
updateTableStartTime() {
this.applyList = this.applyListTemp;
const pickStartTime = new Date(this.dialogAppy.reduceStartTime);
this.applyList.slice(0,-1).forEach(item => {
let validEndTime = item.endTime ? new Date(item.endTime) : new Date();
if(pickStartTime < new Date(item.startTime) || pickStartTime > validEndTime){
console.log('日期无效',validEndTime)
this.$set(item, 'reduceStartTime', null);
}else{
console.log('日期有效',validEndTime,this.dialogAppy.reduceStartTime)
this.$set(item, 'reduceStartTime', this.dialogAppy.reduceStartTime);
}
// item.reduceStartTime = this.dialogAppy.reduceStartTime;
});
if (this.dialogAppy.reduceEndTime) {
const pickStartTime = new Date(this.dialogAppy.reduceStartTime);
const pickEndTime = new Date(this.dialogAppy.reduceEndTime);
if(pickStartTime > pickEndTime){
this.$modal.msgError('开始日期不能大于结束日期')
return;
}
this.applyList.slice(0,-1).forEach(item => {
const startTime = new Date(item.reduceStartTime);
const endTime = new Date(item.reduceEndTime);
const startTimeTemp = item.reduceStartTime;
const endTimeTemp = item.reduceEndTime;
console.log('日期无效sdadasdsada',startTimeTemp,endTimeTemp,startTime,endTime)
if (startTimeTemp!=null && endTimeTemp!=null && startTime.getTime()!=0 && endTime.getTime()!=0 && endTime.getTime() >= startTime.getTime()) {
const oneDay = 24 * 60 * 60 * 1000; //
const diffDays = Math.ceil(Math.abs((endTime - startTime) / oneDay)) + (endTime - startTime === 0 ? 1 : 1);
const endTimeTemp = item.reduceEndTime;
const oneDay = 24 * 60 * 60 * 1000; //
if(pickStartTime<=new Date(item.startTime) && pickEndTime>=new Date(item.endTime)){
this.$set(item, 'reduceStartTime', item.startTime);
this.$set(item,'reduceEndTime', item.endTime);
const diffDays = Math.ceil(Math.abs((item.reduceEndTime - item.reduceStartTime) / oneDay)) + (item.reduceEndTime - item.reduceStartTime === 0 ? 1 : 1);
this.$set(item, 'reduceDays', diffDays);
if(item.reduceNum && item.reduceDays && item.leasePrice){
this.$set(item, 'reduceLeaseMoney', item.reduceDays*item.leasePrice*item.reduceNum);
}
// row.leaseDays = diffDays;
}else if(startTimeTemp!=null && item.reduceEndTime==null && startTimeTemp>=item.startTime && startTimeTemp<=item.endTime){
this.$set(item, 'reduceEndTime', startTime);
}else if(pickStartTime>=new Date(item.startTime) && pickEndTime<=new Date(item.endTime)){
this.$set(item,'reduceStartTime', pickStartTime);
this.$set(item,'reduceEndTime', pickEndTime);
const diffDays = Math.ceil(Math.abs((item.reduceEndTime - item.reduceStartTime) / oneDay)) + (item.reduceEndTime - item.reduceStartTime === 0 ? 1 : 1);
this.$set(item, 'reduceDays', diffDays);
if(item.reduceNum && item.reduceDays && item.leasePrice){
this.$set(item, 'reduceLeaseMoney', item.reduceDays*item.leasePrice*item.reduceNum);
}
}else if(pickStartTime>=new Date(item.startTime) && pickEndTime>=new Date(item.endTime) && pickStartTime<=new Date(item.endTime)){
this.$set(item,'reduceStartTime', pickStartTime);
this.$set(item,'reduceEndTime', item.endTime);
const diffDays = Math.ceil(Math.abs((item.reduceEndTime - item.reduceStartTime) / oneDay)) + (item.reduceEndTime - item.reduceStartTime === 0 ? 1 : 1);
this.$set(item, 'reduceDays', diffDays);
if(item.reduceNum && item.reduceDays && item.leasePrice){
this.$set(item, 'reduceLeaseMoney', item.reduceDays*item.leasePrice*item.reduceNum);
}
}else if(pickStartTime<=new Date(item.startTime) && pickEndTime<=new Date(item.endTime) && pickEndTime>=new Date(item.startTime)){
this.$set(item,'reduceStartTime', item.startTime);
this.$set(item,'reduceEndTime', pickEndTime);
const diffDays = Math.ceil(Math.abs((item.reduceEndTime - item.reduceStartTime) / oneDay)) + (item.reduceEndTime - item.reduceStartTime === 0 ? 1 : 1);
this.$set(item, 'reduceDays', diffDays);
if(item.reduceNum && item.reduceDays && item.leasePrice){
this.$set(item, 'reduceLeaseMoney', item.reduceDays*item.leasePrice*item.reduceNum);
}
}else if(pickStartTime>=new Date(item.startTime) && pickStartTime>=new Date(item.endTime) ){
this.$set(item,'reduceStartTime', null);
this.$set(item,'reduceEndTime', null);
this.$set(item, 'reduceDays', 0);
this.$set(item, 'reduceLeaseMoney', 0);
}else if(pickEndTime<=new Date(item.startTime) && pickEndTime<=new Date(item.endTime)){
this.$set(item,'reduceStartTime', null);
this.$set(item,'reduceEndTime', null);
this.$set(item, 'reduceDays', 0);
this.$set(item, 'reduceLeaseMoney', 0);
}
else {
this.$set(item, 'reduceStartTime', null);
// 0
this.$set(item, 'reduceDays', 0);
this.$set(item, 'reduceLeaseMoney', 0);
}
// if (startTimeTemp!=null && endTimeTemp!=null && startTime.getTime()!=0 && endTime.getTime()!=0 && endTime.getTime() >= startTime.getTime()) {
// const oneDay = 24 * 60 * 60 * 1000; //
// const diffDays = Math.ceil(Math.abs((endTime - startTime) / oneDay)) + (endTime - startTime === 0 ? 1 : 1);
// this.$set(item, 'reduceDays', diffDays);
// if(item.reduceNum && item.reduceDays && item.leasePrice){
// this.$set(item, 'reduceLeaseMoney', item.reduceDays*item.leasePrice*item.reduceNum);
// }
// // row.leaseDays = diffDays;
// }else if(startTimeTemp!=null && item.reduceEndTime==null && startTimeTemp>=item.startTime && startTimeTemp<=item.endTime){
// this.$set(item, 'reduceEndTime', startTime);
// this.$set(item, 'reduceDays', 0);
// this.$set(item, 'reduceLeaseMoney', 0);
// }
// else {
// this.$set(item, 'reduceStartTime', null);
// // 0
// this.$set(item, 'reduceDays', 0);
// this.$set(item, 'reduceLeaseMoney', 0);
// }
this.applyList[this.applyList.length-1].reduceLeaseMoney = this.applyList.slice(0,-1).reduce((total, item) => {
return total + Number(item.reduceLeaseMoney);
}, 0);
@ -873,45 +912,75 @@ export default {
//
updateTableEndTime() {
this.applyList = this.applyListTemp;
const pickEndTime = new Date(this.dialogAppy.reduceEndTime);
this.applyList.slice(0,-1).forEach(item => {
let validEndTime = item.endTime ? new Date(item.endTime) : new Date();
console.log('666666666666',item.startTime,pickEndTime)
if(pickEndTime < new Date(item.startTime) || pickEndTime > validEndTime){
// const pickEndTime = new Date(this.dialogAppy.reduceEndTime);
// this.applyList.slice(0,-1).forEach(item => {
// let validEndTime = item.endTime ? new Date(item.endTime) : new Date();
// console.log('666666666666',item.startTime,pickEndTime)
// if(pickEndTime < new Date(item.startTime) || pickEndTime > validEndTime){
this.$set(item, 'reduceEndTime', null);
}else{
this.$set(item, 'reduceEndTime', this.dialogAppy.reduceEndTime);
}
// item.reduceStartTime = this.dialogAppy.reduceStartTime;
});
// this.$set(item, 'reduceEndTime', null);
// }else{
// this.$set(item, 'reduceEndTime', this.dialogAppy.reduceEndTime);
// }
// // item.reduceStartTime = this.dialogAppy.reduceStartTime;
// });
if (this.dialogAppy.reduceStartTime) {
const pickStartTime = new Date(this.dialogAppy.reduceStartTime);
const pickEndTime = new Date(this.dialogAppy.reduceEndTime);
console.log('dadad',pickStartTime,pickEndTime)
if(pickStartTime > pickEndTime){
this.$modal.msgError('结束日期不能小于开始日期')
return;
}
this.applyList.slice(0,-1).forEach(item => {
const startTime = new Date(item.reduceStartTime);
const endTime = new Date(item.reduceEndTime);
const startTimeTemp = item.reduceStartTime;
const endTimeTemp = item.reduceEndTime;
console.log('xxxxxxxxxxxxx',endTimeTemp,item.startTime,item.endTime,item.reduceEndTime)
if (startTimeTemp!=null && endTimeTemp!=null && startTime.getTime()!=0 && endTime.getTime()!=0 && endTime.getTime() >= startTime.getTime()) {
console.log('zzzzzzzzzzzzzz')
const oneDay = 24 * 60 * 60 * 1000; //
const diffDays = Math.ceil(Math.abs((endTime - startTime) / oneDay)) + (endTime - startTime === 0 ? 1 : 1);
const oneDay = 24 * 60 * 60 * 1000; //
if(pickStartTime<=new Date(item.startTime) && pickEndTime>=new Date(item.endTime)){
this.$set(item, 'reduceStartTime', item.startTime);
this.$set(item,'reduceEndTime', item.endTime);
const diffDays = Math.ceil(Math.abs((item.reduceEndTime - item.reduceStartTime) / oneDay)) + (item.reduceEndTime - item.reduceStartTime === 0 ? 1 : 1);
this.$set(item, 'reduceDays', diffDays);
if(item.reduceNum && item.reduceDays && item.leasePrice){
this.$set(item, 'reduceLeaseMoney', item.reduceDays*item.leasePrice*item.reduceNum);
}
// row.leaseDays = diffDays;
}else if(endTimeTemp!=null && item.reduceStartTime==null && endTimeTemp>=item.startTime && endTimeTemp<=item.endTime){
console.log('yyyyyyyyyyy',item.reduceEndTime)
this.$set(item, 'reduceEndTime', endTime);
}else if(pickStartTime>=new Date(item.startTime) && pickEndTime<=new Date(item.endTime)){
this.$set(item,'reduceStartTime', pickStartTime);
this.$set(item,'reduceEndTime', pickEndTime);
const diffDays = Math.ceil(Math.abs((item.reduceEndTime - item.reduceStartTime) / oneDay)) + (item.reduceEndTime - item.reduceStartTime === 0 ? 1 : 1);
this.$set(item, 'reduceDays', diffDays);
if(item.reduceNum && item.reduceDays && item.leasePrice){
this.$set(item, 'reduceLeaseMoney', item.reduceDays*item.leasePrice*item.reduceNum);
}
}else if(pickStartTime>=new Date(item.startTime) && pickEndTime>=new Date(item.endTime) && pickStartTime<=new Date(item.endTime)){
this.$set(item,'reduceStartTime', pickStartTime);
this.$set(item,'reduceEndTime', item.endTime);
const diffDays = Math.ceil(Math.abs((item.reduceEndTime - item.reduceStartTime) / oneDay)) + (item.reduceEndTime - item.reduceStartTime === 0 ? 1 : 1);
this.$set(item, 'reduceDays', diffDays);
if(item.reduceNum && item.reduceDays && item.leasePrice){
this.$set(item, 'reduceLeaseMoney', item.reduceDays*item.leasePrice*item.reduceNum);
}
}else if(pickStartTime<=new Date(item.startTime) && pickEndTime<=new Date(item.endTime) && pickEndTime>=new Date(item.startTime)){
this.$set(item,'reduceStartTime', item.startTime);
this.$set(item,'reduceEndTime', pickEndTime);
const diffDays = Math.ceil(Math.abs((item.reduceEndTime - item.reduceStartTime) / oneDay)) + (item.reduceEndTime - item.reduceStartTime === 0 ? 1 : 1);
this.$set(item, 'reduceDays', diffDays);
if(item.reduceNum && item.reduceDays && item.leasePrice){
this.$set(item, 'reduceLeaseMoney', item.reduceDays*item.leasePrice*item.reduceNum);
}
}else if(pickStartTime>=new Date(item.startTime) && pickStartTime>=new Date(item.endTime) ){
this.$set(item,'reduceStartTime', null);
this.$set(item,'reduceEndTime', null);
this.$set(item, 'reduceDays', 0);
this.$set(item, 'reduceLeaseMoney', 0);
}else if(pickEndTime<=new Date(item.startTime) && pickEndTime<=new Date(item.endTime)){
this.$set(item,'reduceStartTime', null);
this.$set(item,'reduceEndTime', null);
this.$set(item, 'reduceDays', 0);
this.$set(item, 'reduceLeaseMoney', 0);
}else {
this.$set(item, 'reduceEndTime', null);
// 0
this.$set(item, 'reduceDays', 0);
this.$set(item, 'reduceLeaseMoney', 0);
}
this.applyList[this.applyList.length-1].reduceLeaseMoney = this.applyList.slice(0,-1).reduce((total, item) => {
return total + Number(item.reduceLeaseMoney);