结算审批+退料返回

This commit is contained in:
hongchao 2026-01-29 15:08:03 +08:00
parent 23a60c40e3
commit 69c7bb86e1
5 changed files with 311 additions and 79 deletions

View File

@ -85,7 +85,7 @@
<script setup> <script setup>
import { ref, reactive } from 'vue' import { ref, reactive } from 'vue'
import { getBackInfo,deleteNumType, submitBackApply } from '@/services/back.js'; import { getBackInfo,deleteNumType, submitBackApply } from '@/services/back.js';
import { onLoad,onShow } from '@dcloudio/uni-app' import { onLoad,onShow,onBackPress } from '@dcloudio/uni-app'
import PopupConfirm from '@/components/PopupConfirm' import PopupConfirm from '@/components/PopupConfirm'
const keyWord = ref('') const keyWord = ref('')
@ -134,6 +134,12 @@ const options2 = ref([
const leftClick = () => { const leftClick = () => {
uni.redirectTo({ url: '/pages/back/index' }) uni.redirectTo({ url: '/pages/back/index' })
} }
//
onBackPress(() => {
leftClick()
return true //
})
// //
const getTableList = () => { const getTableList = () => {
// let obj = { // let obj = {

View File

@ -1,48 +1,78 @@
<template> <template>
<div> <div>
<div class="card"> <div class="card">
<uni-row :gutter="24"> <!-- 新增的前三行 -->
<uni-col :span="16">施工机具有偿使用费</uni-col> <table class="info-table">
<uni-col :span="8"> <!-- 第一行工程名称 -->
<div class="cont"> {{ Number(agreementContent.leaseCost).toFixed(2) }}</div> <tr>
</uni-col> <td class="label">工程名称</td>
</uni-row> <td colspan="3">{{ agreementContent.projectName || '未获取到工程名称' }}</td>
<uni-row :gutter="24"> </tr>
<uni-col :span="16">施工机具维修费</uni-col>
<uni-col :span="8"> <!-- 第二行承租单位和日期 -->
<div class="cont"> {{ Number(agreementContent.repairCost).toFixed(2) }}</div> <tr>
</uni-col> <td class="label">承租单位</td>
</uni-row> <td colspan="1">{{ agreementContent.unitName || '未获取到承租单位' }}</td>
<uni-row :gutter="24"> <td class="label">日期</td>
<uni-col :span="16">施工机具丢失费</uni-col> <td colspan="1">{{ agreementContent.date || new Date().toLocaleDateString('zh-CN') }}</td>
<uni-col :span="8"> </tr>
<div class="cont"> {{ Number(agreementContent.loseCost).toFixed(2) }}</div>
</uni-col> <!-- 第三行结算项目及金额标题 -->
</uni-row> <tr>
<uni-row :gutter="24"> <td colspan="4" class="title">结算项目及金额()</td>
<uni-col :span="16">施工机具损坏赔偿费</uni-col> </tr>
<uni-col :span="8"> </table>
<div class="cont"> {{ Number(agreementContent.scrapCost).toFixed(2) }}</div>
</uni-col> <!-- 原有的费用表格 -->
</uni-row> <table class="cost-table">
<uni-row :gutter="24"> <thead>
<uni-col :span="16">施工机具租赁减免费</uni-col> <tr>
<uni-col :span="8"> <th style="text-align: center;">项目</th>
<div class="cont"> {{ Number(agreementContent.reductionCost).toFixed(2) }}</div> <th style="text-align: center;">施工机具</th>
</uni-col> <th style="text-align: center;">安全工器具</th>
</uni-row> </tr>
</thead>
<tbody>
<tr>
<td>施工机具有偿使用费</td>
<td> {{ Number(agreementContent.leaseCost).toFixed(2) }}</td>
<td>{{ Number(agreementContent.aqLeaseCost).toFixed(2) }}</td>
</tr>
<tr>
<td>施工机具维修费</td>
<td> {{ Number(agreementContent.repairCost).toFixed(2) }}</td>
<td> {{ Number(agreementContent.aqRepairCost).toFixed(2) }}</td>
</tr>
<tr>
<td>施工机具丢失费</td>
<td> {{ Number(agreementContent.loseCost).toFixed(2) }}</td>
<td> {{ Number(agreementContent.aqLoseCost).toFixed(2) }}</td>
</tr>
<tr>
<td>施工机具损坏赔偿费</td>
<td> {{ Number(agreementContent.scrapCost).toFixed(2) }}</td>
<td> {{ Number(agreementContent.aqScrapCost).toFixed(2) }}</td>
</tr>
<tr>
<td>施工机具租赁减免费</td>
<td> {{ Number(agreementContent.reductionCost).toFixed(2) }}</td>
<td> {{ Number(agreementContent.aqReductionCost).toFixed(2) }}</td>
</tr>
<tr class="total-row">
<td>小计</td>
<td> {{ Number(agreementContent.addMoneySafety).toFixed(2) }}</td>
<td> {{ Number(agreementContent.addMoneyProject).toFixed(2) }}</td>
</tr>
</tbody>
</table>
<div class="line"></div> <div class="line"></div>
<uni-row :gutter="24">
<uni-col :span="16">费用合计金额大写</uni-col> <div class="total-info">
</uni-row> <div style=" margin-top: 20rpx; font-size: 28rpx;color: #262626;font-weight: 500;">费用合计金额大写</div>
<uni-row :gutter="24"> <div>{{ Number(agreementContent.costAll) > 0 ? agreementContent.costAllUpper : '' }}</div>
<uni-col :span="16">
{{ Number(agreementContent.costAll) > 0 ? agreementContent.costAllUpper : '' }}
</uni-col>
<uni-col :span="8">
<div class="cont"> {{ Number(agreementContent.costAll).toFixed(2) }}</div> <div class="cont"> {{ Number(agreementContent.costAll).toFixed(2) }}</div>
</uni-col> </div>
</uni-row>
</div> </div>
<!-- 提交 --> <!-- 提交 -->
@ -56,7 +86,7 @@
<script setup> <script setup>
import { onLoad } from '@dcloudio/uni-app' import { onLoad } from '@dcloudio/uni-app'
import { ref } from 'vue' import { ref } from 'vue'
import { getSltInfoApi, costExamineApi } from '@/services/accounts/index' import { getSltAgreementBookApi, costExamineApi } from '@/services/accounts/index'
import { toChineseAmount } from '@/utils/bnsBase' import { toChineseAmount } from '@/utils/bnsBase'
import PopupConfirm from '@/components/PopupConfirm/approve' import PopupConfirm from '@/components/PopupConfirm/approve'
@ -65,13 +95,21 @@ const agreementContent = ref({
agreementCode: '', agreementCode: '',
projectName: '', projectName: '',
unitName: '', unitName: '',
date: '', //
leaseCost: '', // leaseCost: '', //
repairCost: '', // repairCost: '', //
loseCost: '', // loseCost: '', //
scrapCost: '', // scrapCost: '', //
reductionCost: '', // reductionCost: '', //
aqLeaseCost: '', //
aqRepairCost: '', //
aqLoseCost: '', //
aqScrapCost: '', //
aqReductionCost: '', //
addMoneySafety: '', //
addMoneyProject: '', //
costAll: '', // costAll: '', //
costAllUpper: '', // costAllUpper: '' //
}) })
const popupConfirm = ref() const popupConfirm = ref()
@ -83,15 +121,32 @@ onLoad((opts) => {
const getInfo = async () => { const getInfo = async () => {
try { try {
const res = await getSltInfoApi([row.value]) const res = await getSltAgreementBookApi(row.value)
if (!res.data) return if (!res.data) return
agreementContent.value = res.data agreementContent.value = res.data
agreementContent.value.costAll =
//
agreementContent.value.addMoneySafety =
Number(res.data.leaseCost) + Number(res.data.leaseCost) +
Number(res.data.repairCost) + Number(res.data.repairCost) +
Number(res.data.scrapCost) + Number(res.data.scrapCost) +
Number(res.data.loseCost) - Number(res.data.loseCost) -
Number(res.data.reductionCost) Number(res.data.reductionCost)
//
agreementContent.value.addMoneyProject =
Number(res.data.aqLeaseCost) +
Number(res.data.aqRepairCost) +
Number(res.data.aqScrapCost) +
Number(res.data.aqLoseCost) -
Number(res.data.aqReductionCost)
//
agreementContent.value.costAll =
Number(agreementContent.value.addMoneySafety) +
Number(agreementContent.value.addMoneyProject)
//
agreementContent.value.costAllUpper = toChineseAmount(agreementContent.value.costAll.toFixed(2)) agreementContent.value.costAllUpper = toChineseAmount(agreementContent.value.costAll.toFixed(2))
} catch (error) { } catch (error) {
console.log('🚀 ~ getInfo ~ error:', error) console.log('🚀 ~ getInfo ~ error:', error)
@ -110,6 +165,8 @@ const submit = async () => {
status: res.radioValue, status: res.radioValue,
remark: res.remark, remark: res.remark,
agreementId: row.value.agreementId, agreementId: row.value.agreementId,
settlementType: row.value.settlementType,
sltTask: row.value.sltTask
} }
console.log('🚀 ~ submit ~ params:', params) console.log('🚀 ~ submit ~ params:', params)
await costExamineApi(params) await costExamineApi(params)
@ -135,7 +192,7 @@ page {
.card { .card {
margin: 24rpx 0; margin: 24rpx 0;
padding: 32rpx; padding: 10px;
background-color: #fff; background-color: #fff;
min-height: 300rpx; min-height: 300rpx;
border-radius: 20rpx; border-radius: 20rpx;
@ -147,16 +204,84 @@ page {
background-color: #fafbfc; background-color: #fafbfc;
} }
} }
::v-deep .uni-row {
.uni-col-6 { /* 新增的信息表格样式 */
color: #8c8c8c; .info-table {
font-size: 28rpx; width: 100%;
font-weight: 500; border-collapse: collapse;
margin-bottom: 20rpx;
td {
padding: 12rpx 8rpx;
font-size: 24rpx;
color: #262626;
border: 1px solid #ebebeb;
} }
.uni-col-8 {
color: #8c8c8c; .label {
// background-color: #f5f7fa;
text-align: center;
font-weight: 600;
color: #666;
width: 120rpx;
}
.title {
text-align: center;
font-size: 26rpx;
font-weight: 700;
background-color: #f5f7fa;
color: #333;
padding: 16rpx 0;
}
}
/* 费用表格样式 */
.cost-table {
width: 100%;
border-collapse: collapse;
margin-bottom: 20rpx;
th, td {
padding: 12rpx 0;
text-align: left;
font-size: 24rpx;
border: 1px solid #ebebeb;
}
th {
color: #666;
font-weight: 600;
background-color: #f5f7fa;
}
td {
color: #262626;
&:nth-child(2), &:nth-child(3) {
text-align: right;
padding-right: 40rpx;
}
}
.total-row {
font-weight: 600;
background-color: #fafafa;
}
}
.line {
margin: 10px 0;
}
.total-info {
margin-top: 20rpx;
font-size: 28rpx; font-size: 28rpx;
font-weight: 500; color: #262626;
font-weight: 600;
div {
margin-bottom: 8rpx;
} }
} }
@ -166,10 +291,6 @@ page {
line-height: 1.8; line-height: 1.8;
color: #262626; color: #262626;
font-size: 28rpx; font-size: 28rpx;
font-weight: 500; font-weight: 600;
}
.line {
border-bottom: 1px solid #ebebeb;
margin: 10px 0;
} }
</style> </style>

View File

@ -6,10 +6,20 @@
<div v-if="active == 1" class="bt-line"></div> <div v-if="active == 1" class="bt-line"></div>
</view> </view>
<view class="btn" style="margin-left: 80rpx" @click="changeTab(2)"> <view class="btn" style="margin-left: 80rpx" @click="changeTab(2)">
<span>审批通过</span> <span>审批结束</span>
<div v-if="active == 2" class="bt-line"></div> <div v-if="active == 2" class="bt-line"></div>
</view> </view>
</view> </view>
<uni-row :gutter="24" class="search-form">
<uni-col :span="18">
<view>
<uni-easyinput placeholder="请输入关键词" v-model="queryParams.keyWord" />
</view>
</uni-col>
<uni-col :span="6">
<view class="search" @click="getList(false,true)">搜索</view>
</uni-col>
</uni-row>
<!-- 滚动列表 --> <!-- 滚动列表 -->
<scroll-view <scroll-view
scroll-y scroll-y
@ -32,12 +42,18 @@
> >
<div class="cont"> <div class="cont">
<uni-tag <uni-tag
:text="item.sltStatus == 1 ? '待审核' : '审批通过'" :text="item.sltStatus == 1 ? (item.sltAuditor || '待审核') : item.sltStatus == 2 ? '审批通过' : item.sltStatus == 3 ? '审批驳回' : ''"
:type="item.sltStatus == 1 ? 'warning' : 'success'" :type="item.sltStatus == 1 ? 'warning' : item.sltStatus == 2 ? 'success' : item.sltStatus == 3 ? 'error' : 'primary'"
/> />
</div> </div>
</div> </div>
<div class="line"></div> <div class="line"></div>
<uni-row :gutter="24">
<uni-col :span="6">分公司</uni-col>
<uni-col :span="18">
<div class="cont">{{ item.impUnitName }}</div>
</uni-col>
</uni-row>
<uni-row :gutter="24"> <uni-row :gutter="24">
<uni-col :span="6">结算单位</uni-col> <uni-col :span="6">结算单位</uni-col>
<uni-col :span="18"> <uni-col :span="18">
@ -63,7 +79,8 @@
<div class="cont"> <div class="cont">
<uni-tag v-if="item.settlementType == 1" text="工器具" type="primary" /> <uni-tag v-if="item.settlementType == 1" text="工器具" type="primary" />
<uni-tag v-else-if="item.settlementType == 2" text="安全工器具" type="warning" /> <uni-tag v-else-if="item.settlementType == 2" text="安全工器具" type="warning" />
<uni-tag v-else-if="item.settlementType == 3" text="总费用" type="success" /> <uni-tag v-else-if="item.settlementType == null || item.settlementType == 0" text="总费用" type="error" />
<uni-tag v-else-if="item.settlementType == 3" text="全部" type="success" />
</div> </div>
</uni-col> </uni-col>
</uni-row> </uni-row>
@ -99,8 +116,10 @@ const tableList = ref([])
const total = ref(0) const total = ref(0)
const queryParams = ref({ const queryParams = ref({
pageNum: 1, pageNum: 1,
pageSize: 10, pageSize: 3,
sltStatus: 1, // 1 2 statusList: [1], // 1 23
enableQuerySltData: true,
keyWord:''
}) })
onShow(() => { onShow(() => {
@ -115,16 +134,15 @@ const changeTab = (index) => {
uni.removeStorageSync('scrollTop') uni.removeStorageSync('scrollTop')
active.value = index active.value = index
queryParams.value.pageNum = 1 queryParams.value.pageNum = 1
queryParams.value.pageSize = 20
tableList.value = [] tableList.value = []
if (index == 1) { if (index == 1) {
queryParams.value.sltStatus = 1 queryParams.value.statusList = [1]
} else { } else {
queryParams.value.sltStatus = 2 queryParams.value.statusList = [2,3]
} }
getList() getList()
} }
const getList = async () => { const getList = async (isTap = false,isSearch = false) => {
uni.showLoading({ uni.showLoading({
title: '加载中...', title: '加载中...',
}) })
@ -132,6 +150,11 @@ const getList = async () => {
const params = { const params = {
...queryParams.value, ...queryParams.value,
} }
if (isSearch) {
//
queryParams.value.pageNum = 1;
tableList.value = [];
}
const res = await getSltListApi(params) const res = await getSltListApi(params)
console.log('🚀 ~ getList ~ res:', res) console.log('🚀 ~ getList ~ res:', res)
tableList.value = res.rows || [] tableList.value = res.rows || []
@ -146,7 +169,7 @@ const getList = async () => {
const onScrollTolower = () => { const onScrollTolower = () => {
console.log('🚀 ~ onScrollTolower ~ onScrollTolower:') console.log('🚀 ~ onScrollTolower ~ onScrollTolower:')
if (total.value > tableList.value.length) { if (total.value > tableList.value.length) {
queryParams.value.pageSize += 10 queryParams.value.pageSize += 5
getList() getList()
} }
} }
@ -169,6 +192,79 @@ const handleItem = (item) => {
background-color: #f7f8fa; background-color: #f7f8fa;
padding: 24rpx; padding: 24rpx;
} }
//
.search-form {
display: flex;
align-items: center;
padding: 10rpx;
/* background: #fff;
border-radius: 20rpx;
margin-bottom: 24rpx;
box-shadow: 0 4rpx 16rpx rgba(0, 0, 0, 0.05); */
:deep(.uni-date) {
width: 100%;
.uni-date-x {
width: 100%;
}
.uni-date-editor--x {
width: 100%;
}
.uni-date-range--x {
width: 100%;
.uni-date-range--x-input {
width: 100%;
display: flex;
align-items: center;
justify-content: space-between;
padding: 0 24rpx;
.uni-date-range--x-text {
font-size: 28rpx;
color: #262626;
}
}
}
.uni-date-x--border {
width: 100%;
border: 2rpx solid #e8e8e8;
border-radius: 12rpx;
background-color: #f7f8fa;
height: 80rpx;
transition: all 0.3s ease;
&:focus-within {
border-color: #3784fb;
box-shadow: 0 0 0 2rpx rgba(55, 132, 251, 0.1);
}
}
}
.search {
width: 100%;
height: 60rpx;
background: linear-gradient(135deg, #4b8eff 0%, #3784fb 100%);
text-align: center;
line-height: 60rpx;
color: #fff;
border-radius: 12rpx;
font-size: 28rpx;
font-weight: 600;
box-shadow: 0 6rpx 20rpx rgba(55, 132, 251, 0.2);
transition: all 0.3s ease;
&:active {
transform: translateY(2rpx);
opacity: 0.9;
}
}
}
.complete-btn { .complete-btn {
display: flex; display: flex;
justify-content: center; justify-content: center;

View File

@ -26,3 +26,12 @@ export const costExamineApi = (data) => {
data, data,
}) })
} }
// 协议书
export const getSltAgreementBookApi = (data) => {
return http({
method: 'POST',
url: '/material/slt_agreement_info/getSltAgreementBook',
data,
})
}

View File

@ -20,8 +20,8 @@ export default defineConfig({
proxy: { proxy: {
// 在此处编写代理规则 // 在此处编写代理规则
'/api': { '/api': {
// target: 'http://sgwpdm.ah.sgcc.com.cn/iws/jiju-api', target: 'http://sgwpdm.ah.sgcc.com.cn/iws/jiju-api',
target: 'http://192.168.0.96:18080', // target: 'http://192.168.0.96:18080',
// target: 'http://36.33.26.201:19988/prod-api/', // target: 'http://36.33.26.201:19988/prod-api/',
// target: 'http://192.168.0.234:18080', // target: 'http://192.168.0.234:18080',
// target: 'http://localhost:18080', // target: 'http://localhost:18080',