结算审批+退料返回

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>
import { ref, reactive } from 'vue'
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'
const keyWord = ref('')
@ -134,6 +134,12 @@ const options2 = ref([
const leftClick = () => {
uni.redirectTo({ url: '/pages/back/index' })
}
//
onBackPress(() => {
leftClick()
return true //
})
//
const getTableList = () => {
// let obj = {

View File

@ -1,48 +1,78 @@
<template>
<div>
<div class="card">
<uni-row :gutter="24">
<uni-col :span="16">施工机具有偿使用费</uni-col>
<uni-col :span="8">
<div class="cont"> {{ Number(agreementContent.leaseCost).toFixed(2) }}</div>
</uni-col>
</uni-row>
<uni-row :gutter="24">
<uni-col :span="16">施工机具维修费</uni-col>
<uni-col :span="8">
<div class="cont"> {{ Number(agreementContent.repairCost).toFixed(2) }}</div>
</uni-col>
</uni-row>
<uni-row :gutter="24">
<uni-col :span="16">施工机具丢失费</uni-col>
<uni-col :span="8">
<div class="cont"> {{ Number(agreementContent.loseCost).toFixed(2) }}</div>
</uni-col>
</uni-row>
<uni-row :gutter="24">
<uni-col :span="16">施工机具损坏赔偿费</uni-col>
<uni-col :span="8">
<div class="cont"> {{ Number(agreementContent.scrapCost).toFixed(2) }}</div>
</uni-col>
</uni-row>
<uni-row :gutter="24">
<uni-col :span="16">施工机具租赁减免费</uni-col>
<uni-col :span="8">
<div class="cont"> {{ Number(agreementContent.reductionCost).toFixed(2) }}</div>
</uni-col>
</uni-row>
<!-- 新增的前三行 -->
<table class="info-table">
<!-- 第一行工程名称 -->
<tr>
<td class="label">工程名称</td>
<td colspan="3">{{ agreementContent.projectName || '未获取到工程名称' }}</td>
</tr>
<!-- 第二行承租单位和日期 -->
<tr>
<td class="label">承租单位</td>
<td colspan="1">{{ agreementContent.unitName || '未获取到承租单位' }}</td>
<td class="label">日期</td>
<td colspan="1">{{ agreementContent.date || new Date().toLocaleDateString('zh-CN') }}</td>
</tr>
<!-- 第三行结算项目及金额标题 -->
<tr>
<td colspan="4" class="title">结算项目及金额()</td>
</tr>
</table>
<!-- 原有的费用表格 -->
<table class="cost-table">
<thead>
<tr>
<th style="text-align: center;">项目</th>
<th style="text-align: center;">施工机具</th>
<th style="text-align: center;">安全工器具</th>
</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>
<uni-row :gutter="24">
<uni-col :span="16">费用合计金额大写</uni-col>
</uni-row>
<uni-row :gutter="24">
<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>
</uni-col>
</uni-row>
<div class="total-info">
<div style=" margin-top: 20rpx; font-size: 28rpx;color: #262626;font-weight: 500;">费用合计金额大写</div>
<div>{{ Number(agreementContent.costAll) > 0 ? agreementContent.costAllUpper : '' }}</div>
<div class="cont"> {{ Number(agreementContent.costAll).toFixed(2) }}</div>
</div>
</div>
<!-- 提交 -->
@ -56,7 +86,7 @@
<script setup>
import { onLoad } from '@dcloudio/uni-app'
import { ref } from 'vue'
import { getSltInfoApi, costExamineApi } from '@/services/accounts/index'
import { getSltAgreementBookApi, costExamineApi } from '@/services/accounts/index'
import { toChineseAmount } from '@/utils/bnsBase'
import PopupConfirm from '@/components/PopupConfirm/approve'
@ -65,13 +95,21 @@ const agreementContent = ref({
agreementCode: '',
projectName: '',
unitName: '',
date: '', //
leaseCost: '', //
repairCost: '', //
loseCost: '', //
scrapCost: '', //
reductionCost: '', //
aqLeaseCost: '', //
aqRepairCost: '', //
aqLoseCost: '', //
aqScrapCost: '', //
aqReductionCost: '', //
addMoneySafety: '', //
addMoneyProject: '', //
costAll: '', //
costAllUpper: '', //
costAllUpper: '' //
})
const popupConfirm = ref()
@ -83,15 +121,32 @@ onLoad((opts) => {
const getInfo = async () => {
try {
const res = await getSltInfoApi([row.value])
const res = await getSltAgreementBookApi(row.value)
if (!res.data) return
agreementContent.value = res.data
//
agreementContent.value.addMoneySafety =
Number(res.data.leaseCost) +
Number(res.data.repairCost) +
Number(res.data.scrapCost) +
Number(res.data.loseCost) -
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(res.data.leaseCost) +
Number(res.data.repairCost) +
Number(res.data.scrapCost) +
Number(res.data.loseCost) -
Number(res.data.reductionCost)
Number(agreementContent.value.addMoneySafety) +
Number(agreementContent.value.addMoneyProject)
//
agreementContent.value.costAllUpper = toChineseAmount(agreementContent.value.costAll.toFixed(2))
} catch (error) {
console.log('🚀 ~ getInfo ~ error:', error)
@ -110,6 +165,8 @@ const submit = async () => {
status: res.radioValue,
remark: res.remark,
agreementId: row.value.agreementId,
settlementType: row.value.settlementType,
sltTask: row.value.sltTask
}
console.log('🚀 ~ submit ~ params:', params)
await costExamineApi(params)
@ -135,7 +192,7 @@ page {
.card {
margin: 24rpx 0;
padding: 32rpx;
padding: 10px;
background-color: #fff;
min-height: 300rpx;
border-radius: 20rpx;
@ -147,16 +204,84 @@ page {
background-color: #fafbfc;
}
}
::v-deep .uni-row {
.uni-col-6 {
color: #8c8c8c;
font-size: 28rpx;
font-weight: 500;
/* 新增的信息表格样式 */
.info-table {
width: 100%;
border-collapse: collapse;
margin-bottom: 20rpx;
td {
padding: 12rpx 8rpx;
font-size: 24rpx;
color: #262626;
border: 1px solid #ebebeb;
}
.uni-col-8 {
color: #8c8c8c;
font-size: 28rpx;
font-weight: 500;
.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;
color: #262626;
font-weight: 600;
div {
margin-bottom: 8rpx;
}
}
@ -166,10 +291,6 @@ page {
line-height: 1.8;
color: #262626;
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>
</view>
<view class="btn" style="margin-left: 80rpx" @click="changeTab(2)">
<span>审批通过</span>
<span>审批结束</span>
<div v-if="active == 2" class="bt-line"></div>
</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-y
@ -32,12 +42,18 @@
>
<div class="cont">
<uni-tag
:text="item.sltStatus == 1 ? '待审核' : '审批通过'"
:type="item.sltStatus == 1 ? 'warning' : 'success'"
:text="item.sltStatus == 1 ? (item.sltAuditor || '待审核') : item.sltStatus == 2 ? '审批通过' : item.sltStatus == 3 ? '审批驳回' : ''"
:type="item.sltStatus == 1 ? 'warning' : item.sltStatus == 2 ? 'success' : item.sltStatus == 3 ? 'error' : 'primary'"
/>
</div>
</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-col :span="6">结算单位</uni-col>
<uni-col :span="18">
@ -63,7 +79,8 @@
<div class="cont">
<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 == 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>
</uni-col>
</uni-row>
@ -99,8 +116,10 @@ const tableList = ref([])
const total = ref(0)
const queryParams = ref({
pageNum: 1,
pageSize: 10,
sltStatus: 1, // 1 2
pageSize: 3,
statusList: [1], // 1 23
enableQuerySltData: true,
keyWord:''
})
onShow(() => {
@ -115,16 +134,15 @@ const changeTab = (index) => {
uni.removeStorageSync('scrollTop')
active.value = index
queryParams.value.pageNum = 1
queryParams.value.pageSize = 20
tableList.value = []
if (index == 1) {
queryParams.value.sltStatus = 1
queryParams.value.statusList = [1]
} else {
queryParams.value.sltStatus = 2
queryParams.value.statusList = [2,3]
}
getList()
}
const getList = async () => {
const getList = async (isTap = false,isSearch = false) => {
uni.showLoading({
title: '加载中...',
})
@ -132,6 +150,11 @@ const getList = async () => {
const params = {
...queryParams.value,
}
if (isSearch) {
//
queryParams.value.pageNum = 1;
tableList.value = [];
}
const res = await getSltListApi(params)
console.log('🚀 ~ getList ~ res:', res)
tableList.value = res.rows || []
@ -146,7 +169,7 @@ const getList = async () => {
const onScrollTolower = () => {
console.log('🚀 ~ onScrollTolower ~ onScrollTolower:')
if (total.value > tableList.value.length) {
queryParams.value.pageSize += 10
queryParams.value.pageSize += 5
getList()
}
}
@ -169,6 +192,79 @@ const handleItem = (item) => {
background-color: #f7f8fa;
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 {
display: flex;
justify-content: center;

View File

@ -26,3 +26,12 @@ export const costExamineApi = (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: {
// 在此处编写代理规则
'/api': {
// target: 'http://sgwpdm.ah.sgcc.com.cn/iws/jiju-api',
target: 'http://192.168.0.96:18080',
target: 'http://sgwpdm.ah.sgcc.com.cn/iws/jiju-api',
// target: 'http://192.168.0.96:18080',
// target: 'http://36.33.26.201:19988/prod-api/',
// target: 'http://192.168.0.234:18080',
// target: 'http://localhost:18080',