代码优化

This commit is contained in:
BianLzhaoMin 2024-08-22 18:02:10 +08:00
parent 6fbe79ad24
commit 01b88dc252
9 changed files with 1384 additions and 2281 deletions

View File

@ -55,33 +55,6 @@ export function settlementReview(query) {
params: query
})
}
/**
* 7.29
*/
/** 完工结算查询 */
export const getComSellQueryApi = (params) => {
return request.post('/material/sltAgreementInfo/getSltInfo', params)
}
/** 编辑后保存接口 */
export const editSaveApi = (params) => {
return request.post('/material/sltAgreementInfo/updateTrimDay', params)
}
/** 确认结算接口 01和03费用承担方单独结算接口*/
export const submitFeeBearApi = (params) => {
return request.post('/material/sltAgreementInfo/submitFeeBear', params)
}
/** 获取月结记录接口*/
export const getMonthRecordApi = (params) => {
return request.post('/material/sltAgreementInfo/getSltInfoMonth', params)
}
/** 确认结算接口所有结算*/
export const submitAllFeeBearApi = (params) => {
return request.post('/material/sltAgreementInfo/submitFee', params)
}

View File

@ -1,92 +0,0 @@
<template>
<!-- 批量导出月结明细弹框 -->
<div>
<el-dialog
title="明细导出"
append-to-body
:visible.sync="exportDialogVisible"
:before-close="handleCloseDialog"
width="30%"
>
<el-form
:model="exportForm"
label-width="120px"
:rules="rules"
ref="formRef"
>
<!-- <el-form-item label="导出月份">
<el-date-picker
v-model="exportParams.dateMonth"
type="month"
placeholder="请选择导出月份"
value-format="yyyy-MM"
/>
</el-form-item> -->
<el-form-item label="费用承担方" prop="costBearingParty">
<el-checkbox-group v-model="exportForm.costBearingParty">
<el-checkbox label="01" name="01" />
<el-checkbox label="03" name="03" />
</el-checkbox-group>
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button size="mini" type="primary" @click="handleSubmit"
> </el-button
>
<el-button size="mini" @click="handleCloseDialog"
> </el-button
>
</span>
</el-dialog>
</div>
</template>
<script>
export default {
props: {
//
exportDialogVisible: {
type: Boolean,
default: () => false,
},
},
data() {
return {
exportForm: {
costBearingParty: ['01', '03'],
},
rules: {
costBearingParty: [
{ required: true, message: '请选择费用承担方' },
],
},
}
},
methods: {
/** 关闭 */
handleCloseDialog() {
this.$emit('handleCloseDialog')
},
/** 确定 */
handleSubmit() {
this.$refs.formRef.validate((valid) => {
if (valid) {
this.$emit('handleSubmit', this.exportForm.costBearingParty)
}
})
},
},
watch: {
exportDialogVisible: {
handler(newVla) {
if (!newVla) {
// this.exportParams.dateMonth = ''
}
},
},
},
}
</script>

View File

@ -1,414 +0,0 @@
<template>
<!-- 完工结算和结算明细页面 -->
<div>
<PageHeader :pageContent="pageContent" @goBack="goBack" />
<div class="row-header">
<div>领用单位{{ currRowInfo.unitName }}</div>
<div>工程名称{{ currRowInfo.projectName }}</div>
<div>总合计{{ totalAmount }}</div>
<div>
<el-button size="mini" type="primary" @click="handleExportAll()"
>导出全部明细表</el-button
>
</div>
</div>
<!-- 01承担方 -->
<FinishTable
:tableColumns="settleTableColumns"
:tableTitle="`设备结算清单`"
:isCostBear="true"
:constBear="1"
:totalPrice="settleTotalPrice_01"
:tableData="settleTableData_01"
:isSettle="isSettle_01"
:listType="1"
@submitSell="submitSell"
@handleExport="handleExport"
@handelSaveSuccess="handelSaveSuccess"
v-if="settleTableData_01.length > 0"
/>
<!-- 03承担方 -->
<FinishTable
:tableColumns="settleTableColumns"
:tableTitle="`设备结算清单`"
:isCostBear="true"
:constBear="3"
:totalPrice="settleTotalPrice_03"
:tableData="settleTableData_03"
:isSettle="isSettle_03"
:listType="2"
@submitSell="submitSell"
@handleExport="handleExport"
@handelSaveSuccess="handelSaveSuccess"
v-if="settleTableData_03.length > 0"
/>
<FinishTable
:tableColumns="repairTableColumns"
:tableTitle="`设备维修清单`"
:isRepair="true"
:totalPrice="repairTotalPrice"
:tableData="repairTableData"
:currRowInfo="currRowInfo"
:listType="3"
@handleExport="handleExport"
@onChangeRepairPrice="onChangeRepairPrice"
/>
<FinishTable
:tableColumns="noReturnTableColumns"
:tableTitle="`工机具未还赔偿清单`"
:tableData="noReturnTableData"
:totalPrice="noReturnTotalPrice"
:listType="4"
@handleExport="handleExport"
/>
<FinishTable
:tableColumns="scrapTableColumns"
:tableTitle="`工机具报废赔偿清单`"
:tableData="scrapTableData"
:totalPrice="scrapTotalPrice"
:listType="5"
@handleExport="handleExport"
/>
<FinishTable
:tableColumns="stayScrapTableColumns"
:tableTitle="`工机具待报废清单`"
:tableData="stayScrapTableData"
:listType="6"
@handleExport="handleExport"
/>
<el-row class="submit-btn">
<el-button
size="mini"
type="primary"
@click="submitComSett"
v-if="currRowInfo.isSlt == 0"
>确认完工结算</el-button
>
</el-row>
</div>
</template>
<script>
import PageHeader from '@/components/pageHeader'
import FinishTable from './finishTable.vue'
import {
getComSellQueryApi,
submitFeeBearApi,
submitAllFeeBearApi,
} from '@/api/cost/cost.js'
export default {
components: {
PageHeader,
FinishTable,
},
props: {
//
pageContent: {
type: String,
default: () => '完工结算',
},
//
currRowInfo: {
type: Object,
default: () => null,
},
},
computed: {
totalAmount() {
return (
this.settleTotalPrice_01 * 1 +
this.settleTotalPrice_03 * 1 +
this.repairTotalPrice * 1 +
this.noReturnTotalPrice * 1 +
this.scrapTotalPrice * 1
)
},
},
data() {
return {
//
settleTableColumns: [
{ t_prop: 'typeName', t_label: '设备名称' },
{ t_prop: 'modelName', t_label: '规格型号' },
{ t_prop: 'nuitName', t_label: '计量单位' },
{ t_prop: 'num', t_label: '数量' },
{ t_prop: 'leasePrice', t_label: '台班费单价(元/天)' },
{ t_prop: 'startTime', t_label: '起租日期' },
{ t_prop: 'endTime', t_label: '终止日期', t_slot: 't_date' },
{ t_prop: 'leaseDays', t_label: '应结算天数' },
{ t_prop: 'costs', t_label: '应结算金额(元)' },
{ t_prop: 'trimDay', t_label: '调整天数', t_slot: 't_ipt' },
{ t_prop: 'realDays', t_label: '实际结算天数' },
{ t_prop: 'realCosts', t_label: '实际结算金额(元)' },
// { t_prop: '', t_label: '' },
// { t_prop: '', t_label: '' },
],
//
repairTableColumns: [
{ t_prop: 'typeName', t_label: '设备名称' },
{ t_prop: 'modelName', t_label: '规格型号' },
{ t_prop: 'nuitName', t_label: '计量单位' },
{ t_prop: 'partName', t_label: '维修配件名称' },
{ t_prop: 'partModelName', t_label: '维修配件型号' },
{ t_prop: 'partNum', t_label: '使用数量' },
{ t_prop: 'partPrice', t_label: '配件单价' },
{ t_prop: 'partAllCosts', t_label: '配件总价' },
// { t_prop: '', t_label: '' },
// { t_prop: '', t_label: '' },
],
//
noReturnTableColumns: [
{ t_prop: 'typeName', t_label: '设备名称' },
{ t_prop: 'modelName', t_label: '规格型号' },
{ t_prop: 'nuitName', t_label: '计量单位' },
{ t_prop: 'maCode', t_label: '设备编码' },
{ t_prop: 'num', t_label: '未还数量' },
{ t_prop: 'buyPrice', t_label: '赔偿单价' },
{ t_prop: 'costs', t_label: '赔偿金额' },
],
//
scrapTableColumns: [
{ t_prop: 'typeName', t_label: '设备名称' },
{ t_prop: 'modelName', t_label: '规格型号' },
{ t_prop: 'nuitName', t_label: '计量单位' },
{ t_prop: 'maCode', t_label: '设备编码' },
{ t_prop: 'num', t_label: '报废数量' },
{ t_prop: 'costs', t_label: '赔偿单价' },
{ t_prop: 'buyPrice', t_label: '赔偿金额' },
],
//
stayScrapTableColumns: [
{ t_prop: 'typeName', t_label: '设备名称' },
{ t_prop: 'modelName', t_label: '规格型号' },
{ t_prop: 'nuitName', t_label: '计量单位' },
{ t_prop: 'maCode', t_label: '设备编码' },
{ t_prop: 'num', t_label: '报废数量' },
{ t_prop: '', t_label: '状态', t_slot: 'status' },
],
// 01
settleTableData_01: [],
// 03
settleTableData_03: [],
//
repairTableData: [],
//
noReturnTableData: [],
//
scrapTableData: [],
//
stayScrapTableData: [],
//
settleTotalPrice_01: 0,
settleTotalPrice_03: 0,
repairTotalPrice: 0,
noReturnTotalPrice: 0,
scrapTotalPrice: 0,
//
isSettle_01: 0,
isSettle_03: 0,
//
repairSelectList: [],
}
},
created() {
this.getComSellList()
},
methods: {
/** 获取结算信息 */
async getComSellList() {
const { data: res } = await getComSellQueryApi([
{ agreementId: this.currRowInfo.agreementId },
])
this.settleTableData_01 = res.leaseListOne // 01
this.settleTableData_03 = res.leaseListThree // 03
this.repairTableData = res.repairList //
this.noReturnTableData = res.loseList //
this.scrapTableData = res.scrapList //
this.stayScrapTableData = res.preScrapList //
this.settleTotalPrice_01 = res.relations[0].leaseCostOne
this.settleTotalPrice_03 = res.relations[0].leaseCostThree
this.scrapTotalPrice = res.relations[0].scrapCost
this.noReturnTotalPrice = res.relations[0].loseCost
this.repairTotalPrice = res.relations[0].repairCost
this.isSettle_01 = res.relations[0].isSltOne
this.isSettle_03 = res.relations[0].isSltThree
},
/** 确认结算 01或03 */
async submitSell(type) {
const sellParams = {
agreementId: this.currRowInfo.agreementId,
costBearingParty: type,
}
const res = await submitFeeBearApi(sellParams)
if (res.code == 200) {
this.$message.success('结算成功!')
this.getComSellList()
}
},
/** 确认完工结算 */
submitComSett() {
this.$confirm(
'确定后则会生成财务报表,数据将不可修改,请确认检查无误',
'提示',
{
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
},
).then(async () => {
// 1. 01 03
this.$message.closeAll()
let isFlag = false
try {
// 1.1
if (this.settleTableData_01.length > 0) {
this.settleTableData_01.map((e, v) => {
if (!e.endTime) {
this.$message.error(
'结算清单内终止日期不能有空值!',
)
isFlag = true
throw new Error()
}
})
}
if (this.settleTableData_03.length > 0) {
this.settleTableData_03.map((e, v) => {
if (!e.endTime) {
this.$message.error(
'结算清单内终止日期不能有空值!',
)
isFlag = true
throw new Error()
}
})
}
} catch {}
if (isFlag) return
let repairIds = []
// 2. ids
if (this.repairSelectList.length > 0) {
this.repairSelectList.forEach((e) => {
repairIds.push(e.id)
})
}
// 3.
const params = {
repairIds: repairIds.join(','),
agreementId: this.currRowInfo.agreementId,
relation: {
leaseCostOne: this.settleTotalPrice_01, // 01
leaseCostThree: this.settleTotalPrice_03, // 0.
repairCos: this.repairTotalPrice, //
scrapCost: this.scrapTotalPrice, //
loseCost: this.noReturnTotalPrice, //
cost: this.totalAmount, //
},
}
// 4.
console.log(params, '参数---')
const res = await submitAllFeeBearApi(params)
if (res.code === 200) {
this.$message.success('结算成功!')
this.$emit('closeCurrPage', true)
}
console.log(res, '结果结果')
})
},
//
handelSaveSuccess() {
this.getComSellList()
},
/** 全部导出 */
handleExportAll() {
for (let i = 1; i < 7; i++) {
this.handleExport(i)
}
},
/** 单个导出 */
handleExport(type) {
let exportUrl = 'material/sltAgreementInfo/'
let exportTitle = ''
switch (type) {
case 1:
exportUrl += 'exportLeaseOne'
exportTitle = '设备结算清单(费用承担方01)'
break
case 2:
exportUrl += 'exportLeaseThree'
exportTitle = '设备结算清单(费用承担方03)'
break
case 3:
exportUrl += 'exportRepair'
exportTitle = '设备维修清单'
break
case 4:
exportUrl += 'exportLose'
exportTitle = '工机具未还赔偿清单'
break
case 5:
exportUrl += 'exportScrap'
exportTitle = '工机具报废赔偿清单'
break
case 6:
exportUrl += 'exportPreScrap'
exportTitle = '工机具待报废清单'
break
}
this.downloadJson(
exportUrl,
JSON.stringify([{ agreementId: this.currRowInfo.agreementId }]),
`${exportTitle}-${new Date().getTime()}.xlsx`,
)
},
/** 维修费用选择时 */
onChangeRepairPrice(val, list) {
this.repairTotalPrice = val
this.repairSelectList = list
},
/** 返回按钮 关闭当前页面 */
goBack() {
this.$emit('closeCurrPage')
},
},
}
</script>
<style scoped lang="scss">
.row-header {
margin-top: 20px;
display: flex;
align-items: center;
font-size: 16px;
font-weight: bold;
div {
margin-right: 30px;
}
& div:nth-child(3) {
margin-right: 15px;
color: rgb(255, 0, 0);
}
}
.submit-btn {
margin-top: 20px;
text-align: right;
.el-button {
padding: 10px 14px;
}
}
</style>

View File

@ -1,420 +0,0 @@
<template>
<!-- 完工结算和结算明细页面的表格组件 -->
<div style="margin-top: 60px">
<el-row class="table-title" type="flex">
<div class="batch-system-day" v-if="isCostBear && isEdit">
调整天数批量设置
<el-input
v-model="batchNum"
ref="batchNumRef"
type="number"
clearable
style="width: 120px"
@change="iptChange"
/>
</div>
<span class="repair-tip" v-if="isRepair">
{{
currRowInfo.isSlt == 0
? '勾选需要赔偿的维修项目'
: '已选的维修赔偿项目'
}}</span
>
<el-col :span="5" class="cost-bear">
<span v-if="isCostBear">{{
constBear === 1 ? '费用承担方01' : '费用承担方03'
}}</span>
<span v-else />
<span v-if="totalPrice !== -1">合计{{ totalPrice }}</span>
</el-col>
<el-col :span="14" class="title">{{ tableTitle }}</el-col>
<el-col :span="5" class="btn-item">
<el-button
size="mini"
type="warning"
v-if="!isEdit"
@click="handleExport"
>导出</el-button
>
<el-button
size="mini"
type="primary"
v-if="
isSettle == 0 &&
(isCostBear || (isRepair && currRowInfo.isSlt == 0)) &&
tableData.length > 0
"
@click="handleEdit"
>{{ isEdit ? '取消编辑' : '编辑' }}</el-button
>
<el-button
size="mini"
type="success"
v-if="!isEdit && isCostBear && isSettle == 0"
@click="submitSell"
>确认结算</el-button
>
<el-button
size="mini"
type="success"
v-if="isEdit && isCostBear && isSettle == 0"
@click="handleSave"
>保存</el-button
>
</el-col>
</el-row>
<el-table
border
:data="tableData"
ref="tableRef"
:header-cell-class-name="setClassName"
@selection-change="handleSelectionChange"
>
<el-table-column
type="selection"
v-if="isRepair && currRowInfo.isSlt == 0"
:selectable="() => !this.selDisabled"
/>
<el-table-column
align="center"
width="55"
v-if="isRepair && currRowInfo.isSlt == 1"
>
<template slot-scope="{ row }">
<el-checkbox :checked="row.isSlt == 1" disabled />
</template>
</el-table-column>
<el-table-column
align="center"
v-for="(t, index) in tableColumns"
:key="index"
:label="t.t_label"
:width="t.t_slot === 't_date' ? '180' : ''"
show-overflow-tooltip
>
<template slot-scope="scope">
<template v-if="t.t_slot && isEdit">
<!-- 调整天数时的输入框 -->
<el-input
v-if="t.t_slot === 't_ipt'"
v-model.number="scope.row[t.t_prop]"
style="width: 80px"
type="number"
:ref="`editIpt_${scope.$index}`"
:class="{
active: activeIndex === scope.$index,
}"
/>
<!-- 调整终结日期的日期选择组件 -->
<el-date-picker
v-model="scope.row[t.t_prop]"
type="date"
placeholder="选择日期"
v-if="t.t_slot === 't_date'"
value-format="yyyy-MM-dd"
:ref="`editTime_${scope.$index}`"
:class="{
active: activeIndexTime === scope.$index,
}"
:picker-options="{
disabledDate: (time) => {
const currentDate = new Date(
scope.row.startTime || new Date(),
)
currentDate.setDate(
currentDate.getDate() - 1,
)
return (
time.getTime() < currentDate.getTime()
)
},
}"
style="width: 150px"
/>
</template>
<template v-else-if="t.t_slot && t.t_slot === 'status'">
<el-tag size="mini" type="warning">待报废</el-tag>
</template>
<template v-else>
{{ scope.row[t.t_prop] }}
</template>
</template>
</el-table-column>
</el-table>
</div>
</template>
<script>
import { editSaveApi } from '@/api/cost/cost.js'
export default {
props: {
//
tableColumns: {
type: Array,
default: () => [],
},
//
tableTitle: {
type: String,
default: () => '',
},
//
isCostBear: {
type: Boolean,
default: () => false,
},
//
isRepair: {
type: Boolean,
default: () => false,
},
//
tableData: {
type: Array,
default: () => [],
},
// 01 03
constBear: {
type: Number,
default: () => 1,
},
//
totalPrice: {
type: [Number, String],
default: () => -1,
},
// 0 1
isSettle: {
type: [Number, String],
default: () => 0,
},
// 1 01 2 03 3 4 5 6
listType: {
type: Number,
default: () => 0,
},
//
currRowInfo: {
type: Object,
default: () => null,
},
},
data() {
return {
isEdit: false, //
batchNum: '', //
activeIndex: '', // index class
activeIndexTime: '', // index class
selDisabled: true,
}
},
methods: {
/** 编辑按钮 */
handleEdit() {
this.isEdit = !this.isEdit
if (!this.isEdit) {
this.batchNum = ''
this.$emit('handelSaveSuccess')
}
if (this.isRepair) {
this.$refs.tableRef.clearSelection()
this.selDisabled = !this.selDisabled
}
},
/** 调整天数 */
iptChange(val) {
const regex = /^-?\d+$/
const isNum = regex.test(val)
if (!isNum) {
this.$message.error('请输入正整数或负整数或0')
return
}
this.tableData.map((e) => {
e.trimDay = val
})
},
/** 保存按钮 */
async handleSave() {
const regex = /^-?\d+$/
let isNum = false
try {
// 1.
this.tableData.map((e, v) => {
console.log(e)
this.$message.closeAll()
if (!e.endTime) {
this.$message.error('请选择终结日期!')
this.activeIndexTime = v
this.$refs[`editTime_${v}`][0].focus()
isNum = true
throw new Error()
}
if (!regex.test(e.trimDay)) {
this.$message.error('请输入正整数或负整数或0')
this.activeIndex = v
this.$refs[`editIpt_${v}`][0].focus()
isNum = true
throw new Error()
}
if (e.trimDay < 0 && Math.abs(e.trimDay) > e.leaseDays) {
this.$message.error('减免天数不能大于应结算天数!')
this.activeIndex = v
this.$refs[`editIpt_${v}`][0].focus()
isNum = true
throw new Error()
}
})
if (isNum) return
// 2.
let saveParams = []
this.tableData.map((e) => {
const item = {
agreementId: e.agreementId, // id
id: e.id,
typeId: e.typeId, // id
trimDay: e.trimDay, //
maId: e.maId || '',
endTime: e.endTime, //
}
saveParams.push(item)
})
// 3.
const res = await editSaveApi(saveParams)
if (res.code == 200) {
this.$message.success('保存成功!')
this.activeIndex = ''
this.activeIndexTime = ''
this.batchNum = ''
this.isEdit = false
this.$emit('handelSaveSuccess')
}
} catch {}
},
/** 单个列表确认结算 */
submitSell() {
let isFlag = false
this.$message.closeAll()
try {
// 1.
this.tableData.map((e, v) => {
if (!e.endTime) {
this.$message.error('终止日期不能有空值!')
isFlag = true
throw new Error()
}
})
if (isFlag) return
// 2.
this.$confirm(
'确定后则会生成财务报表,数据将不可修改,请确认检查无误',
'提示',
{
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
},
).then(() => {
this.$emit('submitSell', `0${this.constBear}`)
})
} catch {}
},
/** 导出按钮 */
handleExport() {
this.$emit('handleExport', this.listType)
},
setClassName({ column }) {
// ,
if (column.type == 'selection' && this.selDisabled) {
return 'all-disabled'
}
},
/** 列表复选框选择事件 */
handleSelectionChange(list) {
let repairPriceAmount = 0
console.log(list, 'list')
list.forEach((e) => {
repairPriceAmount += e.partAllCosts * 1
})
this.$emit('onChangeRepairPrice', repairPriceAmount, list)
},
},
}
</script>
<style scoped lang="scss">
.table-title {
position: relative;
min-height: 48px;
border: 1px solid #7e7e7e;
background: linear-gradient(to right, #b4b3b3, #edebeb);
align-items: center !important;
justify-content: space-around;
.cost-bear {
display: flex;
padding-left: 12px;
font-weight: bold;
color: red;
span {
width: 50%;
}
}
.title {
text-align: center;
font-size: 20px;
font-weight: bold;
letter-spacing: 4px;
}
.btn-item {
text-align: right;
padding-right: 12px;
.el-button {
padding: 6px 10px;
}
}
//
.repair-tip {
position: absolute;
left: 2px;
bottom: 2px;
color: red;
font-size: 12px;
}
//
.batch-system-day {
position: absolute;
top: -50px;
right: 30px;
height: 36px;
line-height: 36px;
}
}
::v-deep .active {
.el-input__inner:focus {
border-color: #f56c6c;
}
}
::v-deep .all-disabled .el-checkbox__input .el-checkbox__inner {
background-color: #edf2fc;
border-color: #dcdfe6;
cursor: not-allowed;
}
</style>

View File

@ -1,347 +0,0 @@
<template>
<!-- 月结记录弹框 -->
<div>
<el-dialog
title="月结记录"
append-to-body
:visible.sync="monthRecordDialogVisible"
:before-close="handleCloseMonthRecordDialog"
width="80%"
>
<el-form inline :model="monthRecordParams" ref="monthRecordFormRef">
<el-form-item label="结算月份" prop="dateMonth">
<el-date-picker
v-model="dateMonth"
type="month"
placeholder="请选择月份"
value-format="yyyy-MM"
@change="onChangeTime"
/>
</el-form-item>
<el-form-item label="费用承担方" prop="costBearingParty">
<el-select
v-model="monthRecordParams.costBearingParty"
clearable
>
<el-option
v-for="item in costBearList"
:key="item.id"
:value="item.value"
:label="item.label"
/>
</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-button
type="primary"
plain
size="mini"
@click="handelExport(null)"
>批量导出</el-button
>
</el-form-item>
</el-form>
<el-table
border
:data="monthRecordList"
@selection-change="handleSelectionChange"
>
<el-table-column type="selection" align="center" />
<el-table-column
prop="unitName"
align="center"
label="单位名称"
/>
<el-table-column
prop="projectName"
align="center"
label="工程名称"
/>
<el-table-column prop="month" align="center" label="结算月份" />
<el-table-column
prop="costBearingParty"
align="center"
label="费用承担方"
/>
<el-table-column prop="costs" align="center" label="结算金额" />
<el-table-column align="center" label="操作">
<template slot-scope="{ row }">
<el-button type="text" @click="previewDetails(row)"
>明细</el-button
>
<el-button type="text" @click="handelExport(row)"
>导出明细表</el-button
>
</template>
</el-table-column>
</el-table>
<pagination
:total="monthRecordTotal"
:page.sync="monthRecordParams.pageNum"
:limit.sync="monthRecordParams.pageSize"
@pagination="getMonthRecordList"
/>
<!-- 内层弹框 -->
<el-dialog
width="75%"
title="明细"
:visible.sync="innerVisible"
append-to-body
:before-close="handleCloseMInnerDialog"
>
<el-row :gutter="20" class="title-row">
<el-col :span="12">
领用单位{{ monthDetailsInfo.unitName || '' }}
</el-col>
<el-col :span="12" class="pl-col">
月结月份
{{ monthDetailsInfo.month || '' }}</el-col
>
</el-row>
<el-row :gutter="20" class="title-row">
<el-col :span="12">
工程名称{{ monthDetailsInfo.projectName || '' }}
</el-col>
<el-col :span="12" class="pl-col" style="color: red">
费用承担方{{
monthDetailsInfo.costBearingParty || ''
}}
{{
monthDetailsInfo.costBearingParty == '01'
? '(项目)'
: '(分包)'
}}
</el-col>
</el-row>
<el-table border :data="monthDetails" max-height="600">
<el-table-column
label="序号"
align="center"
type="index"
width="55"
/>
<el-table-column
prop="typeName"
label="设备名称"
align="center"
/>
<el-table-column
prop="modelName"
label="规格型号"
align="center"
/>
<el-table-column
prop="nuitName"
label="计量单位"
align="center"
/>
<el-table-column prop="num" label="数量" align="center" />
<el-table-column
prop="leasePrice"
label="台班费单价 (元/天)"
align="center"
/>
<el-table-column
prop="startTime"
label="开始日期"
align="center"
/>
<el-table-column
prop="endTime"
label="结算日期"
align="center"
/>
<el-table-column
prop="leaseDays"
label="结算天数"
align="center"
/>
<el-table-column
prop="costs"
label="结算金额"
align="center"
/>
<el-table-column
prop="realCosts"
label="本月暂记金额(元)"
align="center"
/>
</el-table>
</el-dialog>
</el-dialog>
</div>
</template>
<script>
import { getMonthRecordApi } from '@/api/cost/cost.js'
export default {
props: {
monthRecordDialogVisible: {
type: Boolean,
default: () => false,
},
agreementId: {
type: [String, Number],
default: () => '',
},
},
data() {
return {
//
costBearList: [
{ id: 1, label: '全部', value: '' },
{ id: 2, label: '01', value: '01' },
{ id: 3, label: '03', value: '03' },
],
//
monthRecordParams: {
startTime: '',
endTime: '',
agreementId: '',
costBearingParty: '',
pageNum: 1,
pageSize: 10,
},
//
monthRecordList: [],
//
selectList: [],
//
innerVisible: false,
//
monthRecordTotal: 1,
//
dateMonth: '',
//
monthDetailsInfo: {},
//
monthDetails: [],
}
},
created() {
this.getMonthRecordList()
},
methods: {
/** 获取月结记录列表数据 */
async getMonthRecordList() {
this.monthRecordParams.agreementId = this.agreementId
// Api
const res = await getMonthRecordApi([this.monthRecordParams])
this.monthRecordList = res.data
},
/** 查询 */
handleQuery() {
this.getMonthRecordList()
},
/** 重置 */
resetQuery() {
this.resetForm('monthRecordFormRef')
this.monthRecordParams.startTime = ''
this.monthRecordParams.endTime = ''
this.dateMonth = ''
this.getMonthRecordList()
},
/** 导出按钮 */
handelExport(row) {
// row null
const { startTime, endTime, agreementId, costBearingParty } =
this.monthRecordParams
let exportList = [
{
codeNum: '',
startTime,
endTime,
agreementId,
costBearingParty,
},
]
if (!row && this.selectList.length < 1) {
this.$message.error('请勾选需要导出的数据!')
return
} else if (!row && this.selectList.length > 0) {
this.selectList.map((e) => {
exportList[0].codeNum += e.codeNum + ','
})
exportList[0].codeNum = exportList[0].codeNum.slice(0, -1)
} else {
exportList[0].codeNum = row.codeNum
}
this.downloadJson(
'material/sltAgreementInfo/exportSltInfoMonth',
JSON.stringify(exportList),
`月结明细${new Date().getTime()}.xlsx`,
)
},
/** 列表勾选 */
handleSelectionChange(list) {
this.selectList = list
},
/** 关闭外侧弹框*/
handleCloseMonthRecordDialog() {
this.$emit('handleCloseMonthRecordDialog')
},
/** 关闭内测弹框 */
handleCloseMInnerDialog() {
this.innerVisible = false
},
/** 明细按钮 */
previewDetails(row) {
const { unitName, month, projectName, costBearingParty } = row
this.monthDetailsInfo = {
unitName,
month,
projectName,
costBearingParty,
}
console.log(row, '明细')
this.monthDetails = row.node
this.innerVisible = true
},
/** 时间变化 */
onChangeTime(val) {
let startTime = ''
if (val.split('-')[1] == 1) {
startTime = `${val.split('-')[0] * 1 - 1}-12-21`
} else {
startTime = `${val.split('-')[0]}-0${
val.split('-')[1] * 1 - 1
}-21`
}
let endTime = val + '-20'
this.monthRecordParams.startTime = startTime
this.monthRecordParams.endTime = endTime
},
},
}
</script>
<style scoped>
.title-row {
min-height: 38px;
line-height: 38px;
font-size: 16px;
}
.pl-col {
padding-left: 180px !important;
}
</style>

View File

@ -34,9 +34,8 @@
<div style="color: rgb(217, 0, 27); font-weight: 700; padding: 20px 0">
结算费用合计¥{{ costAll }}租赁费用¥{{ leaseCost }}维修费用¥{{
repairCost
}}报废费用¥{{ scrapCost }}丢失费用{{ loseCost }}
}}报废费用¥{{ scrapCost }}丢失费用{{ loseCost }}
</div>
<div>
<el-table
:data="leaseList"
@ -112,7 +111,7 @@
:show-overflow-tooltip="true"
/>
<el-table-column
label="外部租赁费用"
label="租赁费用"
align="center"
prop="costs"
:show-overflow-tooltip="true"
@ -173,14 +172,14 @@
prop="repairStatus"
:show-overflow-tooltip="true"
>
<template slot-scope="scope">
<!-- <template slot-scope="scope">
<span v-if="scope.row.repairStatus == 0"
>未审核</span
>
<span v-if="scope.row.repairStatus == 1"
>已审核</span
>
</template>
</template> -->
</el-table-column>
<el-table-column
label="维修数量"
@ -200,10 +199,10 @@
prop="partType"
:show-overflow-tooltip="true"
>
<template slot-scope="scope">
<!-- <template slot-scope="scope">
<span v-if="scope.row.partType == 0">不收费</span>
<span v-if="scope.row.partType == 1">收费</span>
</template>
</template> -->
</el-table-column>
</el-table-column>
</el-table>
@ -352,7 +351,7 @@
title="费用结算提交"
align="center"
:visible.sync="applyVisible"
width="1200px"
width="80%"
>
<div>
<el-table
@ -360,6 +359,7 @@
show-summary
sum-text="合计"
:summary-method="getSummaries"
border
>
<!-- <el-table-column type="selection" width="55" align="center" /> -->
<el-table-column
@ -384,7 +384,6 @@
label="租赁费用"
align="center"
prop="leaseCost"
:show-overflow-tooltip="true"
/>
<el-table-column
label="维修费用"
@ -409,34 +408,62 @@
label="增项费用"
align="center"
prop="addCost"
:show-overflow-tooltip="true"
width="150"
width="180"
>
<template slot-scope="scope">
<el-input-number
<!-- <el-input-number
v-model="scope.row.addCost"
controls-position="right"
style="width: 100%"
:min="0"
:max="100000000"
@input="countNum(scope.row)"
></el-input-number>
></el-input-number> -->
<!-- <el-input-number
controls-position="right"
style="width: 150px"
v-model="scope.row.addCost"
:min="0"
:max="99999999"
@change="onAddChange(scope.row)"
></el-input-number> -->
<el-input
v-model="scope.row.addCost"
clearable
@change="onAddChange(scope.row)"
/>
</template>
</el-table-column>
<el-table-column
label="减免费用"
align="center"
prop="subCost"
:show-overflow-tooltip="true"
width="150"
width="180"
>
<template slot-scope="scope">
<el-input-number
<!-- <el-input-number
v-model="scope.row.subCost"
controls-position="right"
style="width: 100%"
:min="0"
:max="scope.row.cost"
@input="countNum(scope.row)"
></el-input-number>
></el-input-number> -->
<!-- <el-input-number
controls-position="right"
style="width: 150px"
v-model="scope.row.subCost"
:min="0"
:max="subCostFlag"
@change="onSubChange(scope.row)"
></el-input-number> -->
<el-input
v-model="scope.row.subCost"
clearable
@change="onSubChange(scope.row)"
/>
</template>
</el-table-column>
<el-table-column
@ -451,6 +478,8 @@
v-model="scope.row.remark"
style="width: 100%"
maxlength="50"
type="textarea"
:rows="6"
></el-input>
</template>
</el-table-column>
@ -472,322 +501,407 @@
</template>
<script>
import {
getAgreementList,
getUnitList,
getProjectList,
} from '@/api/claimAndRefund/receive'
import { getSltInfo, submitFee, exportLease } from '@/api/cost/cost'
import {
getAgreementList,
getUnitList,
getProjectList,
} from '@/api/claimAndRefund/receive'
import { getSltInfo, submitFee, exportLease } from '@/api/cost/cost'
export default {
name: 'Agreement',
dicts: ['sys_normal_disable'],
data() {
return {
//
loading: false,
//
ids: [],
//
single: true,
//
multiple: true,
//
showSearch: true,
//
total: 0,
//
unitList: [],
//
projectList: [],
statusList: [
{ id: '0', name: '请选择' },
{ id: '1', name: '已结算' },
{ id: '2', name: '未结算' },
{ id: '3', name: '待审核' },
], //
//
agreementList: [],
//
title: '',
//
open: false,
//
dateRange: [],
//
queryParams: {
pageNum: 1,
pageSize: 10,
keyWord: undefined,
},
//
form: {},
//
uploadHeader: process.env.VUE_APP_BASE_API,
imageUrl: '',
imageName: '',
fileList: [],
field101fileList: [],
dialogImageUrl: '',
dialogVisible: false,
//
// uploadUrl:'http://192.168.0.14:21624/system',//线+system
// uploadUrl:'http://112.29.103.165:21626/system',//线+system
uploadUrl: process.env.VUE_APP_BASE_API + '/system', //
//
rules: {
contractCode: [
{
required: true,
message: '合同编号不能为空',
trigger: 'blur',
},
],
signTime: [
{
required: true,
message: '签订日期不能为空',
trigger: 'blur',
},
],
unitName: [
{
required: true,
message: '往来单位不能为空',
trigger: 'blur',
},
],
projectName: [
{
required: true,
message: '工程名称不能为空',
trigger: 'blur',
},
],
},
peopleOpen: false,
noticeOpen: false,
nform: {
notice: '',
},
nrules: {
notice: [
{
required: true,
message: '通知内容不能为空',
trigger: 'blur',
},
],
},
leaseList: [], //
leaseCost: 0,
repairList: [], //
repairCost: 0,
scrapList: [], //
scrapCost: 0,
loseList: [], //
loseCost: 0,
costAll: 0,
deptName: undefined,
applyVisible: false,
applyList: [],
}
},
mounted() {
let arr = JSON.parse(this.$route.query.rowData)
this.rowData = arr
this.getDataAll()
// this.getUnitList();
// this.getProjectList();
},
methods: {
// ,getUnitList, getProjectList
getUnitList() {
getUnitList().then((response) => {
this.unitList = response.data
})
export default {
name: 'Agreement',
dicts: ['sys_normal_disable'],
data() {
return {
//
loading: false,
//
ids: [],
//
single: true,
//
multiple: true,
//
showSearch: true,
//
total: 0,
//
unitList: [],
//
projectList: [],
statusList: [
{ id: '0', name: '请选择' },
{ id: '1', name: '已结算' },
{ id: '2', name: '未结算' },
{ id: '3', name: '待审核' },
], //
//
agreementList: [],
//
title: '',
//
open: false,
//
dateRange: [],
//
queryParams: {
pageNum: 1,
pageSize: 10,
keyWord: undefined,
},
getProjectList() {
getProjectList().then((response) => {
this.projectList = response.data
})
},
/** 查询列表 */
getDataAll() {
getSltInfo(this.rowData).then((response) => {
// this.agreementList = response.rows;
this.leaseList = response.data.leaseList //
this.leaseCost = this.countCost(this.leaseList)
this.repairList = response.data.repairList //
this.repairCost = this.countCost(this.repairList)
this.scrapList = response.data.scrapList //
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.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.toFixed(2)
})
},
//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.applyVisible = true
},
//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) -
Number(row.subCost)
},
//
submitApply() {
let costAll = 0
this.applyList.forEach((item) => {
costAll = costAll + item.cost
})
console.log(costAll)
let param = {
relations: this.applyList,
cost: costAll,
}
console.log(param)
submitFee(param).then((res) => {
console.log(res)
if (res.code == 200) {
this.$tab.closeOpenPage({
path: '/cost/cost/costApplyList',
})
}
})
},
//
handleBack() {
this.$tab.closeOpenPage({
path: '/cost/cost/costApplyList',
query: {
isEdit: true,
//
form: {},
//
uploadHeader: process.env.VUE_APP_BASE_API,
imageUrl: '',
imageName: '',
fileList: [],
field101fileList: [],
dialogImageUrl: '',
dialogVisible: false,
//
// uploadUrl:'http://192.168.0.14:21624/system',//线+system
// uploadUrl:'http://112.29.103.165:21626/system',//线+system
uploadUrl: process.env.VUE_APP_BASE_API + '/system', //
//
rules: {
contractCode: [
{
required: true,
message: '合同编号不能为空',
trigger: 'blur',
},
})
],
signTime: [
{
required: true,
message: '签订日期不能为空',
trigger: 'blur',
},
],
unitName: [
{
required: true,
message: '往来单位不能为空',
trigger: 'blur',
},
],
projectName: [
{
required: true,
message: '工程名称不能为空',
trigger: 'blur',
},
],
},
//
handleSelectionChange(selection) {
this.ids = selection.map((item) => item.agreementId)
this.single = selection.length != 1
this.multiple = !selection.length
peopleOpen: false,
noticeOpen: false,
nform: {
notice: '',
},
/** 导出按钮操作 */
//
handleExport1() {
this.downloadJson(
'material/sltAgreementInfo/exportLease',
JSON.stringify(this.rowData),
`租赁费用明细_${new Date().getTime()}.xlsx`,
)
},
//
handleExport2() {
this.downloadJson(
'material/sltAgreementInfo/exportLose',
JSON.stringify(this.rowData),
`丢失费用明细_${new Date().getTime()}.xlsx`,
)
},
//
handleExport3() {
this.downloadJson(
'material/sltAgreementInfo/exportRepair',
JSON.stringify(this.rowData),
`维修费用明细_${new Date().getTime()}.xlsx`,
)
},
//
handleExport4() {
this.downloadJson(
'material/sltAgreementInfo/exportScrap',
JSON.stringify(this.rowData),
`报废费用明细_${new Date().getTime()}.xlsx`,
)
},
handleExportAll() {
this.handleExport1()
this.handleExport2()
this.handleExport3()
this.handleExport4()
nrules: {
notice: [
{
required: true,
message: '通知内容不能为空',
trigger: 'blur',
},
],
},
leaseList: [], //
leaseCost: 0,
repairList: [], //
repairCost: 0,
scrapList: [], //
scrapCost: 0,
loseList: [], //
loseCost: 0,
costAll: 0,
deptName: undefined,
applyVisible: false,
applyList: [],
}
},
mounted() {
let arr = JSON.parse(this.$route.query.rowData)
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.agreementList = response.rows;
this.leaseList = response.data.leaseList //
this.leaseCost = this.countCost(this.leaseList)
this.repairList = response.data.repairList //
this.repairCost = this.countCost(this.repairList)
this.scrapList = response.data.scrapList //
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.getDataAll()
this.applyVisible = true
},
//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)
},
/** 费用增项时触发的事件 */
onAddChange(row) {
this.$message.closeAll()
const isRegex = this.isNumRegex(row.addCost)
if (!isRegex && row.addCost != '') {
this.$message.error('请输入大于等于0或包含两位小数点的数字')
row.addCost = 0
}
if (row.addCost * 1 >= 100000000) {
this.$message.error('增项费用不能超过1亿')
row.addCost = 99999999
}
// 0
if (
row.leaseCost +
row.repairCost +
row.scrapCost +
row.loseCost +
row.addCost * 1 <
row.subCost * 1
) {
row.subCost = 0
}
row.addCost = row.addCost * 1
this.$nextTick(() => {
row.cost = (
row.leaseCost +
row.repairCost +
row.scrapCost +
row.loseCost +
row.addCost * 1 -
row.subCost * 1
).toFixed(2)
})
},
/** 费用减项时触发事件 */
onSubChange(row) {
this.$message.closeAll()
const isRegex = this.isNumRegex(row.subCost)
if (!isRegex && row.subCost != '') {
this.$message.error('请输入大于等于0或包含两位小数点的数字')
row.subCost = 0
}
row.subCost = row.subCost * 1
if (row.subCost > row.cost && this.costAll <= row.cost) {
this.$message.error('减免费用不能超过小计费用')
row.subCost = row.cost
}
if (row.subCost > row.cost && this.costAll > row.cost) {
this.$message.error('减免费用不能超过小计费用')
row.subCost = this.costAll
}
if (row.cost == 0 && row.subCost != '') {
this.$message.error('小计费用已为0无法再减免')
row.subCost = 0
}
this.$nextTick(() => {
row.cost = (
row.leaseCost +
row.repairCost +
row.scrapCost +
row.loseCost +
row.addCost * 1 -
row.subCost * 1
).toFixed(2)
})
},
isNumRegex(val) {
const regex = /^(0|[1-9]\d*)(\.\d{2})?$/
const isNum = regex.test(val)
return isNum
},
//
submitApply() {
let costAll = 0
this.applyList.forEach((item) => {
costAll = costAll + item.cost
})
console.log(costAll)
let param = {
relations: this.applyList,
cost: costAll,
}
console.log(param)
submitFee(param).then((res) => {
console.log(res)
if (res.code == 200) {
this.$tab.closeOpenPage({
path: '/cost/cost/costApplyList',
})
}
})
},
//
handleBack() {
this.$tab.closeOpenPage({
path: '/cost/cost/costApplyList',
query: {
isEdit: true,
},
})
},
//
handleSelectionChange(selection) {
this.ids = selection.map((item) => item.agreementId)
this.single = selection.length != 1
this.multiple = !selection.length
},
/** 导出按钮操作 */
//
handleExport1() {
this.downloadJson(
'material/sltAgreementInfo/exportLease',
JSON.stringify(this.rowData),
`租赁费用明细_${new Date().getTime()}.xlsx`,
)
},
//
handleExport2() {
this.downloadJson(
'material/sltAgreementInfo/exportLose',
JSON.stringify(this.rowData),
`丢失费用明细_${new Date().getTime()}.xlsx`,
)
},
//
handleExport3() {
this.downloadJson(
'material/sltAgreementInfo/exportRepair',
JSON.stringify(this.rowData),
`维修费用明细_${new Date().getTime()}.xlsx`,
)
},
//
handleExport4() {
this.downloadJson(
'material/sltAgreementInfo/exportScrap',
JSON.stringify(this.rowData),
`报废费用明细_${new Date().getTime()}.xlsx`,
)
},
handleExportAll() {
this.handleExport1()
this.handleExport2()
this.handleExport3()
this.handleExport4()
},
},
}
</script>
<style lang="scss" scoped>
::v-deep.el-table .fixed-width .el-button--mini {
width: 80px !important;
margin-bottom: 10px;
}
::v-deep.el-table .fixed-width .el-button--mini {
width: 80px !important;
margin-bottom: 10px;
}
</style>

View File

@ -1,217 +1,213 @@
<template>
<!-- 费用结算页面 -->
<div class="app-container" id="costApplyList">
<template v-if="isHome">
<el-form
:model="queryParams"
ref="queryForm"
size="small"
:inline="true"
v-show="showSearch"
label-width="80px"
<el-form
:model="queryParams"
ref="queryForm"
size="small"
:inline="true"
v-show="showSearch"
label-width="80px"
>
<el-form-item label="结算单位" prop="unitId">
<el-select
v-model="queryParams.unitId"
placeholder="请选择往来单位"
clearable
filterable
>
<el-option
v-for="item in unitList"
:key="item.unitId"
:label="item.unitName"
:value="item.unitId"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="结算工程" prop="projectId">
<el-select
v-model="queryParams.projectId"
placeholder="请选择工程名称"
clearable
filterable
>
<el-option
v-for="item in projectList"
:key="item.projectId"
:label="item.projectName"
:value="item.projectId"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="结算状态" prop="sltStatus">
<el-select
v-model="queryParams.sltStatus"
placeholder="请选择结算状态"
clearable
filterable
>
<el-option
v-for="item in statusList"
:key="item.id"
:label="item.name"
:value="item.id"
></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-button
type="primary"
plain
size="mini"
@click="handleApplyList"
>批量结算</el-button
>
</el-form-item>
</el-form>
<el-table
v-loading="loading"
:data="agreementList"
@selection-change="handleSelectionChange"
>
<el-table-column
type="selection"
width="55"
align="center"
:selectable="(row) => row.sltStatus == 1"
/>
<el-table-column
label="序号"
align="center"
width="80"
type="index"
:index="
indexContinuation(queryParams.pageNum, queryParams.pageSize)
"
>
<el-form-item label="结算单位" prop="unitId">
<el-select
v-model="queryParams.unitId"
placeholder="请选择往来单位"
clearable
filterable
>
<el-option
v-for="item in unitList"
:key="item.unitId"
:label="item.unitName"
:value="item.unitId"
/>
</el-select>
</el-form-item>
<el-form-item label="结算工程" prop="projectId">
<el-select
v-model="queryParams.projectId"
placeholder="请选择工程名称"
clearable
filterable
>
<el-option
v-for="item in projectList"
:key="item.projectId"
:label="item.projectName"
:value="item.projectId"
/>
</el-select>
</el-form-item>
<el-form-item label="结算状态" prop="sltStatus">
<el-select
v-model="queryParams.sltStatus"
placeholder="请选择结算状态"
clearable
filterable
>
<el-option
v-for="item in statusList"
:key="item.id"
:label="item.name"
:value="item.id"
/>
</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-button
type="primary"
plain
size="mini"
@click="handleBatchExport"
>批量导出月结明细表</el-button
>
</el-form-item>
</el-form>
<el-table
v-loading="loading"
:data="agreementList"
border
@selection-change="handleSelectionChange"
ref="tableRef"
<!-- <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="contractCode" :show-overflow-tooltip="true" />
<el-table-column label="附件图片" align="center" prop="fileName" :show-overflow-tooltip="true" />
<el-table-column label="签订日期" align="center" prop="signTime" :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="cost"
:show-overflow-tooltip="true"
/>
<el-table-column
label="结算状态"
align="center"
prop="sltStatus"
:show-overflow-tooltip="true"
>
<el-table-column type="selection" width="55" align="center" />
<el-table-column
align="center"
label="序号"
type="index"
:index="
indexContinuation(
queryParams.pageNum,
queryParams.pageSize,
)
"
/>
<el-table-column
label="协议编号"
align="center"
prop="agreementCode"
show-overflow-tooltipp
/>
<template slot-scope="scope">
<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" prop="leaseDay" :show-overflow-tooltip="true" />
<el-table-column label="授权人" align="center" prop="authPerson" :show-overflow-tooltip="true" />
<el-table-column label="联系电话 " align="center" prop="phone" :show-overflow-tooltip="true" />
<el-table-column label="备注" align="center" prop="remark" :show-overflow-tooltip="true" /> -->
<el-table-column
label="操作"
align="center"
width="300"
class-name="small-padding fixed-width"
>
<template slot-scope="scope">
<el-button
size="mini"
type="primary"
icon="el-icon-edit"
@click="handleApply(scope.row)"
v-if="scope.row.sltStatus == '1'"
>结算申请</el-button
>
<!-- <el-button
size="mini"
type="danger"
icon="el-icon-delete"
@click="handleDelete(scope.row)"
>撤销申请</el-button> -->
</template>
</el-table-column>
</el-table>
<el-table-column
label="结算单位"
align="center"
prop="unitName"
show-overflow-tooltip
/>
<el-table-column
label="结算工程"
align="center"
prop="projectName"
show-overflow-tooltip
/>
<el-table-column
label="累计结算费用"
align="center"
prop="cost"
show-overflow-tooltip
/>
<el-table-column label="结算状态" align="center">
<template slot-scope="{ row }">
<!-- <span v-if="scope.row.sltStatus == '1'">未结算</span>
<span v-if="scope.row.sltStatus == '2'">已结算</span>
<span v-if="scope.row.sltStatus == '3'">待审核</span> -->
<el-tag type="warning" size="mini" v-if="row.isSlt == 0"
>结算中</el-tag
>
<el-tag type="success" size="mini" v-if="row.isSlt == 1"
>已结算</el-tag
>
</template>
</el-table-column>
<el-table-column label="操作" align="center">
<template slot-scope="{ row }">
<el-button
size="mini"
type="primary"
style="padding: 5px 10px"
@click="handleMonthRecord(row)"
>月结记录</el-button
>
<el-button
size="mini"
:type="row.isSlt == 1 ? 'success' : 'primary'"
style="padding: 5px 10px"
@click="handleFinishCostAndDetails(row)"
>{{
row.isSlt == 1 ? '结算明细' : '完工结算'
}}</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"
/>
<!-- 批量导出月结明细 -->
<ExportDialog
:exportDialogVisible="exportDialogVisible"
:exportParams="exportParams"
@handleCloseDialog="handleCloseDialog"
@handleSubmit="handleSubmit"
/>
<!-- 月结记录弹框 -->
<MonthRecord
v-if="monthRecordDialogVisible"
:monthRecordDialogVisible="monthRecordDialogVisible"
:agreementId="agreementId"
@handleCloseMonthRecordDialog="handleCloseMonthRecordDialog"
/>
</template>
<template v-else>
<FinishAndDetails
:currRowInfo="currRowInfo"
:pageContent="pageContent"
@closeCurrPage="closeCurrPage"
/>
</template>
<pagination
v-show="total > 0"
:total="total"
:page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>
</div>
</template>
<script>
import { getUnitList, getProjectList } from '@/api/claimAndRefund/receive'
import {
getAgreementList,
getUnitList,
getProjectList,
} from '@/api/claimAndRefund/receive'
import { getSltAgreementInfo } from '@/api/cost/cost'
import ExportDialog from './component/exportDialog.vue'
import MonthRecord from './component/monthRecord.vue'
import FinishAndDetails from './component/finishAndDetails.vue'
export default {
name: 'CostApplyList',
components: {
ExportDialog,
MonthRecord,
FinishAndDetails,
},
dicts: ['sys_normal_disable'],
data() {
return {
//
loading: false,
loading: true,
//
ids: [],
//
single: true,
//
multiple: true,
//
showSearch: true,
//
@ -221,16 +217,12 @@ export default {
//
projectList: [],
statusList: [
{ id: '', name: '请选择' },
{ id: '0', name: '结算中' },
{ id: '1', name: '已结算' },
{ id: '1', name: '未结算' },
{ id: '2', name: '已结算' },
{ id: '3', name: '已审核' },
], //
//
agreementList: [
{
agreementCode: '测试',
},
],
agreementList: [],
//
title: '',
//
@ -242,24 +234,70 @@ export default {
pageNum: 1,
pageSize: 10,
keyWord: undefined,
sltStatus: '0',
sltStatus: '',
unitId: '',
projectId: '',
},
//
exportDialogVisible: false,
//
monthRecordDialogVisible: false,
//
isHome: true,
//
currRowInfo: null,
//
pageContent: '',
//
agreementId: '',
//
exportParams: [],
//
form: {},
//
uploadHeader: process.env.VUE_APP_BASE_API,
imageUrl: '',
imageName: '',
fileList: [],
field101fileList: [],
dialogImageUrl: '',
dialogVisible: false,
//
// uploadUrl:'http://192.168.0.14:21624/system',//线+system
// uploadUrl:'http://112.29.103.165:21626/system',//线+system
uploadUrl: process.env.VUE_APP_BASE_API + '/system', //
//
rules: {
contractCode: [
{
required: true,
message: '合同编号不能为空',
trigger: 'blur',
},
],
signTime: [
{
required: true,
message: '签订日期不能为空',
trigger: 'blur',
},
],
unitName: [
{
required: true,
message: '往来单位不能为空',
trigger: 'blur',
},
],
projectName: [
{
required: true,
message: '工程名称不能为空',
trigger: 'blur',
},
],
},
peopleOpen: false,
noticeOpen: false,
nform: {
notice: '',
},
nrules: {
notice: [
{
required: true,
message: '通知内容不能为空',
trigger: 'blur',
},
],
},
deptName: undefined,
}
},
created() {
@ -315,6 +353,10 @@ export default {
})
},
handleApplyList() {
if (this.ids.length < 1) {
this.$message.error('请候选需要结算的数据!')
return
}
if (this.ids.length > 0) {
let arr = this.ids
this.$tab.closeOpenPage({
@ -328,70 +370,35 @@ export default {
//
handleSelectionChange(selection) {
this.ids = selection.map((item) => item)
this.single = selection.length != 1
this.multiple = !selection.length
},
/** 批量导出月结明细表 */
handleBatchExport() {
console.log('批量导出月结明细表')
this.exportParams = []
if (this.ids.length < 1) {
this.$message.error('请勾选需要导出的数据!')
return
}
// id
this.ids.forEach((e) => {
this.exportParams.push({
agreementId: e.agreementId,
costBearingParty: '',
})
})
this.exportDialogVisible = true
/** 删除按钮操作 */
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(() => {});
},
/** 关闭弹框 */
handleCloseDialog() {
this.exportDialogVisible = false
},
/** 确定按钮 */
handleSubmit(form) {
if (form.length === 1) {
this.exportParams.forEach((e) => {
e.costBearingParty = form[0]
})
}
this.downloadJson(
'material/sltAgreementInfo/exportSltInfoMonth',
JSON.stringify(this.exportParams),
`月结明细${new Date().getTime()}.xlsx`,
)
this.exportDialogVisible = false
this.$refs.tableRef.clearSelection()
},
/** 月结记录 */
handleMonthRecord(row) {
this.agreementId = row.agreementId
this.monthRecordDialogVisible = true
},
/** 完工结算 结算明细*/
handleFinishCostAndDetails(row) {
this.currRowInfo = row
this.pageContent = '结算明细'
this.isHome = false
},
/** 关闭月结记录弹框 */
handleCloseMonthRecordDialog() {
this.monthRecordDialogVisible = false
},
/** 关闭完工结算或结算明细页面 */
closeCurrPage(isRefresh) {
this.isHome = true
if (isRefresh) {
this.getList()
}
/** 导出按钮操作 */
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;
}
</style>

File diff suppressed because it is too large Load Diff

View File

@ -82,26 +82,21 @@
@selection-change="handleSelectionChange"
>
<el-table-column type="selection" width="55" align="center" />
<!-- <el-table-column
<el-table-column
label="序号"
align="center"
width="80"
type="index"
>
<template scope="scope">
<span>{{
(queryParams.pageNum - 1) * 10 + scope.$index + 1
}}</span>
</template>
</el-table-column> -->
<el-table-column
align="center"
label="序号"
type="index"
:index="
indexContinuation(queryParams.pageNum, queryParams.pageSize)
"
/>
>
<!-- <template slot-scope="scope">
<span>{{
(queryParams.pageNum - 1) * 10 + scope.$index + 1
}}</span>
</template> -->
</el-table-column>
<el-table-column
label="结算单编号"
align="center"
@ -152,6 +147,7 @@
type="primary"
icon="el-icon-edit"
@click="handleExame(scope.row)"
v-if="scope.row.status == '0'"
>审批</el-button
>
<!-- <el-button
@ -204,7 +200,6 @@ export default {
//
projectList: [],
statusList: [
{ id: '', name: '请选择' },
{ id: '0', name: '待审核' },
{ id: '1', name: '审核通过' },
{ id: '2', name: '审核驳回' },
@ -329,10 +324,12 @@ export default {
},
//
handleExame(row) {
let arr = [row]
this.$tab.closeOpenPage({
path: '/cost/cost/costExame',
query: {
Id: row.id,
rowData: JSON.stringify(arr),
},
})
},