From e22962bcf244a44dc5d097e09c520f5a40abc0a8 Mon Sep 17 00:00:00 2001
From: zhangwencui <1064582902@qq.com>
Date: 星期三, 04 二月 2026 16:22:09 +0800
Subject: [PATCH] 回款登记字段和接口逻辑修改
---
src/pages/sales/receiptPayment/add.vue | 533 ++++++++++++++++++++++++++++++----------------------------
1 files changed, 273 insertions(+), 260 deletions(-)
diff --git a/src/pages/sales/receiptPayment/add.vue b/src/pages/sales/receiptPayment/add.vue
index 150c570..594ac23 100644
--- a/src/pages/sales/receiptPayment/add.vue
+++ b/src/pages/sales/receiptPayment/add.vue
@@ -1,292 +1,305 @@
<template>
<view class="account-detail">
<!-- 浣跨敤閫氱敤椤甸潰澶撮儴缁勪欢 -->
- <PageHeader title="鏂板鍥炴" @back="onClickLeft" />
-
+ <PageHeader title="鏂板鍥炴"
+ @back="onClickLeft" />
<!-- 琛ㄥ崟鍐呭 -->
- <van-form @submit="onSubmit" ref="formRef" label-width="110px" input-align="right" error-message-align="right" scroll-to-error scroll-to-error-position="center">
+ <u-form @submit="onSubmit"
+ ref="formRef"
+ label-width="110"
+ input-align="right"
+ error-message-align="right">
<!-- 鍩烘湰淇℃伅 -->
- <van-cell-group title="鍩烘湰淇℃伅" inset>
- <van-field
- v-model="form.salesContractNo"
- label="閿�鍞悎鍚屽彿"
- placeholder="鑷姩濉厖"
- readonly
- />
- <van-field
- v-model="form.customerName"
- label="瀹㈡埛鍚嶇О"
- placeholder="鑷姩濉厖"
- readonly
- />
- <van-field
- v-model="form.invoiceNo"
- label="鍙戠エ鍙�"
- placeholder="鑷姩濉厖"
- readonly
- />
- <van-field
- v-model="form.invoiceTotal"
- label="鍙戠エ閲戦(鍏�)"
- placeholder="鑷姩濉厖"
- readonly
- />
- <van-field
- v-model="form.taxRate"
- label="绋庣巼"
- placeholder="鑷姩濉厖"
- readonly
- />
- <view class="tip-text">寰呭洖娆鹃噾棰濓細{{ currentNoReceiptAmount }} 鍏�</view>
- <van-field
- v-model="form.receiptPaymentAmount"
- label="鏈鍥炴閲戦"
- type="number"
- placeholder="璇疯緭鍏�"
- @blur="changeNum"
- :rules="[{ required: true, message: '璇疯緭鍏ュ洖娆鹃噾棰�' }]"
- clearable
- />
- <van-field
- v-model="form.receiptPaymentTypeName"
- label="鍥炴褰㈠紡"
- placeholder="璇烽�夋嫨"
- readonly
- @click="showPaymentTypePicker"
- :rules="[{ required: true, message: '璇烽�夋嫨鍥炴褰㈠紡' }]"
- />
- <van-field
- v-model="form.receiptPaymentDate"
- label="鏉ユ鏃ユ湡"
- placeholder="璇烽�夋嫨"
- readonly
- @click="showDatePicker"
- :rules="[{ required: true, message: '璇烽�夋嫨鏉ユ鏃ユ湡' }]"
- />
- <van-field
- v-model="form.registrant"
- label="鐧昏浜�"
- placeholder="鑷姩濉厖"
- readonly
- />
- </van-cell-group>
-
+ <u-cell-group title="鍩烘湰淇℃伅">
+ <u-form-item label="閿�鍞悎鍚屽彿"
+ border-bottom>
+ <u-input v-model="form.salesContractNo"
+ placeholder="鑷姩濉厖"
+ readonly />
+ </u-form-item>
+ <u-form-item label="瀹㈡埛鍚嶇О"
+ border-bottom>
+ <u-input v-model="form.customerName"
+ placeholder="鑷姩濉厖"
+ readonly />
+ </u-form-item>
+ <!-- <u-form-item label="鍙戠エ鍙�" border-bottom>
+ <u-input
+ v-model="form.invoiceNo"
+ placeholder="鑷姩濉厖"
+ readonly
+ />
+ </u-form-item>
+ <u-form-item label="鍙戠エ閲戦(鍏�)" border-bottom>
+ <u-input
+ v-model="form.invoiceTotal"
+ placeholder="鑷姩濉厖"
+ readonly
+ />
+ </u-form-item> -->
+ <u-form-item label="绋庣巼"
+ border-bottom>
+ <u-input v-model="form.taxRate"
+ placeholder="鑷姩濉厖"
+ readonly />
+ </u-form-item>
+ <view class="tip-text">寰呭洖娆鹃噾棰濓細{{ form.pendingInvoiceTotal }} 鍏�</view>
+ <u-form-item label="鏈鍥炴閲戦"
+ prop="receiptPaymentAmount"
+ required
+ border-bottom>
+ <u-input v-model="form.receiptPaymentAmount"
+ type="number"
+ placeholder="璇疯緭鍏�"
+ @blur="changeNum"
+ clearable />
+ </u-form-item>
+ <u-form-item label="鍥炴褰㈠紡"
+ prop="receiptPaymentTypeName"
+ required
+ border-bottom>
+ <u-input v-model="form.receiptPaymentTypeName"
+ placeholder="璇烽�夋嫨"
+ readonly
+ @click="showPaymentTypePicker" />
+ <template #right>
+ <up-icon name="arrow-right"
+ @click="showPaymentTypePicker"></up-icon>
+ </template>
+ </u-form-item>
+ <u-form-item label="鏉ユ鏃ユ湡"
+ prop="receiptPaymentDate"
+ required
+ border-bottom>
+ <u-input v-model="form.receiptPaymentDate"
+ placeholder="璇烽�夋嫨"
+ readonly
+ @click="showDatePicker" />
+ <template #right>
+ <up-icon name="arrow-right"
+ @click="showDatePicker"></up-icon>
+ </template>
+ </u-form-item>
+ <u-form-item label="鐧昏浜�"
+ border-bottom>
+ <u-input v-model="form.registrant"
+ placeholder="鑷姩濉厖"
+ readonly />
+ </u-form-item>
+ </u-cell-group>
<!-- 鎻愪氦鎸夐挳 -->
- <view class="footer-btns">
- <van-button class="cancel-btn" @click="onClickLeft">鍙栨秷</van-button>
- <van-button class="save-btn" native-type="submit" form-type="submit" :loading="loading">淇濆瓨</van-button>
- </view>
- </van-form>
-
+ <FooterButtons cancelText="鍙栨秷"
+ confirmText="淇濆瓨"
+ :loading="loading"
+ @cancel="onClickLeft"
+ @confirm="onSubmit" />
+ </u-form>
<!-- 鍥炴鏂瑰紡閫夋嫨鍣� -->
- <van-popup v-model:show="showPaymentType" position="bottom">
- <van-picker
- :model-value="pickerValue"
- :columns="receipt_payment_type"
- @confirm="onPaymentTypeConfirm"
- @cancel="showPaymentType = false"
- />
- </van-popup>
-
+ <up-action-sheet :show="showPaymentType"
+ :actions="receiptPaymentType"
+ title="閫夋嫨鍥炴褰㈠紡"
+ @select="onPaymentTypeConfirm"
+ @close="showPaymentType = false" />
<!-- 鏃ユ湡閫夋嫨鍣� -->
- <van-popup v-model:show="showDate" position="bottom">
- <van-date-picker
- v-model="currentDate"
- title="閫夋嫨鏃ユ湡"
- @confirm="onDateConfirm"
- @cancel="showDate = false"
- />
- </van-popup>
+ <up-popup :show="showDate"
+ mode="bottom"
+ @close="showDate = false">
+ <up-datetime-picker :show="true"
+ v-model="currentDate"
+ @confirm="onDateConfirm"
+ @cancel="showDate = false"
+ mode="date" />
+ </up-popup>
</view>
</template>
<script setup>
-import { ref, onMounted, computed } from 'vue'
-import { receiptPaymentSaveOrUpdate, invoiceInfo } from '@/api/salesManagement/receiptPayment'
-import useUserStore from '@/store/modules/user'
-import { showToast, showNotify } from 'vant'
-import { useDict } from '@/utils/dict'
+ import { ref, onMounted, computed } from "vue";
+ import FooterButtons from "@/components/FooterButtons.vue";
+ import {
+ receiptPaymentSaveOrUpdate,
+ invoiceInfo,
+ } from "@/api/salesManagement/receiptPayment";
+ import useUserStore from "@/store/modules/user";
+ import { useDict } from "@/utils/dict";
+ import { formatDateToYMD } from "@/utils/ruoyi";
-const userStore = useUserStore()
+ // 鏄剧ず鎻愮ず淇℃伅
+ const showToast = message => {
+ uni.showToast({
+ title: message,
+ icon: "none",
+ });
+ };
-// 琛ㄥ崟寮曠敤
-const formRef = ref()
+ // 鏄剧ず鍔犺浇鎻愮ず
+ const showLoadingToast = message => {
+ uni.showLoading({
+ title: message,
+ mask: true,
+ });
+ };
-// 鍝嶅簲寮忔暟鎹�
-const loading = ref(false)
-const showPaymentType = ref(false)
-const pickerValue = ref([])
-const showDate = ref(false)
-const currentDate = ref([new Date().getFullYear(), new Date().getMonth() + 1, new Date().getDate()])
+ // 鍏抽棴鍔犺浇鎻愮ず
+ const closeToast = () => {
+ uni.hideLoading();
+ };
-// 琛ㄥ崟鏁版嵁
-const form = ref({
- salesContractNo: '',
- customerName: '',
- invoiceNo: '',
- invoiceTotal: '',
- taxRate: '',
- receiptPaymentAmount: '',
- receiptPaymentType: '',
- receiptPaymentTypeName: '',
- registrant: '',
- receiptPaymentDate: '',
- invoiceLedgerId: ''
-})
-const currentNoReceiptAmount = ref(0)
+ const userStore = useUserStore();
-// 鑾峰彇瀛楀吀鏁版嵁
-const { receipt_payment_type: dictReceiptPaymentType } = useDict('receipt_payment_type')
+ // 琛ㄥ崟寮曠敤
+ const formRef = ref();
-// 杞崲瀛楀吀鏁版嵁鏍煎紡涓洪�夋嫨鍣ㄩ渶瑕佺殑鏍煎紡
-const receipt_payment_type = computed(() => {
- return dictReceiptPaymentType.value.map(item => ({
- text: item.label,
- value: item.value
- }))
-})
+ // 鍝嶅簲寮忔暟鎹�
+ const loading = ref(false);
+ const showPaymentType = ref(false);
+ const pickerValue = ref([]);
+ const showDate = ref(false);
+ const currentDate = ref([
+ new Date().getFullYear(),
+ new Date().getMonth() + 1,
+ new Date().getDate(),
+ ]);
-// 杩斿洖涓婁竴椤�
-const onClickLeft = () => {
- uni.removeStorageSync('invoiceLedgerEditRow');
- uni.navigateBack()
-}
+ // 琛ㄥ崟鏁版嵁
+ const form = ref({
+ salesContractNo: "",
+ customerName: "",
+ invoiceNo: "",
+ invoiceTotal: "",
+ taxRate: "",
+ receiptPaymentAmount: "",
+ receiptPaymentType: "",
+ receiptPaymentTypeName: "",
+ registrant: "",
+ receiptPaymentDate: "",
+ invoiceLedgerId: "",
+ salesLedgerProductId: "",
+ });
+ const currentNoReceiptAmount = ref(0);
-// 鏄剧ず鍥炴鏂瑰紡閫夋嫨鍣�
-const showPaymentTypePicker = () => {
- showPaymentType.value = true
-}
-const changeNum = () => {
- if (form.value.receiptPaymentAmount > currentNoReceiptAmount.value) {
- form.value.receiptPaymentAmount = currentNoReceiptAmount.value
- showToast('涓嶅彲澶т簬寰呭洖娆鹃噾棰�')
- }
-}
+ // 鑾峰彇瀛楀吀鏁版嵁
+ const { receipt_payment_type: dictReceiptPaymentType } = useDict(
+ "receipt_payment_type"
+ );
-// 纭鍥炴鏂瑰紡閫夋嫨
-const onPaymentTypeConfirm = ({ selectedValues, selectedOptions }) => {
- form.value.receiptPaymentType = selectedOptions[0].value
- form.value.receiptPaymentTypeName = selectedOptions[0].text
- pickerValue.value = selectedValues;
- showPaymentType.value = false
-}
+ // 杞崲瀛楀吀鏁版嵁鏍煎紡涓洪�夋嫨鍣ㄩ渶瑕佺殑鏍煎紡
+ const receiptPaymentType = computed(() => {
+ return dictReceiptPaymentType.value.map(item => ({
+ name: item.label,
+ value: item.value,
+ }));
+ });
-// 鏄剧ず鏃ユ湡閫夋嫨鍣�
-const showDatePicker = () => {
- showDate.value = true
-}
+ // 杩斿洖涓婁竴椤�
+ const onClickLeft = () => {
+ uni.removeStorageSync("invoiceLedgerEditRow");
+ uni.navigateBack();
+ };
-// 纭鏃ユ湡閫夋嫨
-const onDateConfirm = ({ selectedValues }) => {
- form.value.receiptPaymentDate = selectedValues.join('-')
- currentDate.value = selectedValues
- showDate.value = false
-}
+ // 鏄剧ず鍥炴鏂瑰紡閫夋嫨鍣�
+ const showPaymentTypePicker = () => {
+ showPaymentType.value = true;
+ };
+ const changeNum = () => {
+ if (form.value.receiptPaymentAmount > form.value.pendingInvoiceTotal) {
+ form.value.receiptPaymentAmount = form.value.pendingInvoiceTotal;
+ showToast("涓嶅彲澶т簬寰呭洖娆鹃噾棰�");
+ }
+ };
-// 鎻愪氦琛ㄥ崟
-const onSubmit = () => {
- // 琛ㄥ崟楠岃瘉
- if (!form.value.receiptPaymentAmount) {
- showNotify({ type: 'warning', message: '璇疯緭鍏ュ洖娆鹃噾棰�' })
- return
- }
-
- if (!form.value.receiptPaymentType) {
- showNotify({ type: 'warning', message: '璇烽�夋嫨鍥炴褰㈠紡' })
- return
- }
-
- if (!form.value.receiptPaymentDate) {
- showNotify({ type: 'warning', message: '璇烽�夋嫨鏉ユ鏃ユ湡' })
- return
- }
+ // 纭鍥炴鏂瑰紡閫夋嫨
+ const onPaymentTypeConfirm = action => {
+ form.value.receiptPaymentType = action.value;
+ form.value.receiptPaymentTypeName = action.name;
+ showPaymentType.value = false;
+ };
- loading.value = true
-
- receiptPaymentSaveOrUpdate(form.value)
- .then(() => {
- showToast('鎻愪氦鎴愬姛')
- // 閫氱煡涓婁竴椤靛埛鏂版暟鎹�
- const pages = getCurrentPages();
- const prevPage = pages[pages.length - 2];
- if (prevPage && prevPage.$vm && prevPage.$vm.getList) {
- prevPage.$vm.getList();
- }
- uni.removeStorageSync('invoiceLedgerEditRow');
- uni.navigateBack()
- })
- .catch((error) => {
- loading.value = false
- })
-}
+ // 鏄剧ず鏃ユ湡閫夋嫨鍣�
+ const showDatePicker = () => {
+ showDate.value = true;
+ };
-// 鍒濆鍖栨暟鎹�
-const initData = () => {
- const rowStr = uni.getStorageSync('invoiceLedgerEditRow')
- const row = JSON.parse(rowStr)
- invoiceInfo({ id: row.id }).then((res) => {
- const data = res.data
- form.value = { ...data}
- form.value.invoiceLedgerId = form.value.id;
- form.value.id = "";
- currentNoReceiptAmount.value = row.noReceiptAmount
- form.value.registrant = userStore.nickName
- }).catch(() => {
- showToast('鑾峰彇鏁版嵁澶辫触')
- })
-}
+ // 纭鏃ユ湡閫夋嫨
+ const onDateConfirm = e => {
+ form.value.receiptPaymentDate = formatDateToYMD(e.value);
+ currentDate.value = formatDateToYMD(e.value);
+ showDate.value = false;
+ };
-onMounted(() => {
- initData()
-})
+ // 鎻愪氦琛ㄥ崟
+ const onSubmit = () => {
+ // 琛ㄥ崟楠岃瘉
+ if (!form.value.receiptPaymentAmount) {
+ showToast("璇疯緭鍏ュ洖娆鹃噾棰�");
+ return;
+ }
+
+ if (!form.value.receiptPaymentType) {
+ showToast("璇烽�夋嫨鍥炴褰㈠紡");
+ return;
+ }
+
+ if (!form.value.receiptPaymentDate) {
+ showToast("璇烽�夋嫨鏉ユ鏃ユ湡");
+ return;
+ }
+
+ loading.value = true;
+ form.value.receiptPaymentAmount = Number(form.value.receiptPaymentAmount);
+ receiptPaymentSaveOrUpdate([form.value])
+ .then(() => {
+ showToast("鎻愪氦鎴愬姛");
+ // 閫氱煡涓婁竴椤靛埛鏂版暟鎹�
+ const pages = getCurrentPages();
+ const prevPage = pages[pages.length - 2];
+ if (prevPage && prevPage.$vm && prevPage.$vm.getList) {
+ prevPage.$vm.getList();
+ }
+ uni.removeStorageSync("invoiceLedgerEditRow");
+ uni.navigateBack();
+ })
+ .catch(error => {
+ loading.value = false;
+ });
+ };
+
+ // 鍒濆鍖栨暟鎹�
+ const initData = () => {
+ const rowStr = uni.getStorageSync("invoiceLedgerEditRow");
+ const row = JSON.parse(rowStr);
+ form.value = { ...row };
+ form.value.invoiceLedgerId = form.value.id;
+ form.value.salesLedgerProductId = form.value.id;
+ form.value.id = "";
+ currentNoReceiptAmount.value = row.noReceiptAmount;
+ form.value.registrant = userStore.nickName;
+
+ // invoiceInfo({ id: row.id })
+ // .then(res => {
+ // const data = res.data;
+ // form.value = { ...data };
+ // form.value.invoiceLedgerId = form.value.id;
+ // form.value.id = "";
+ // currentNoReceiptAmount.value = row.noReceiptAmount;
+ // form.value.registrant = userStore.nickName;
+ // })
+ // .catch(() => {
+ // showToast("鑾峰彇鏁版嵁澶辫触");
+ // });
+ };
+
+ onMounted(() => {
+ initData();
+ });
</script>
<style scoped lang="scss">
-.account-detail {
- min-height: 100vh;
- background: #f8f9fa;
- padding-bottom: 5rem;
-}
-
-.footer-btns {
- position: fixed;
- left: 0;
- right: 0;
- bottom: 0;
- background: #fff;
- display: flex;
- justify-content: space-around;
- align-items: center;
- padding: 0.75rem 0;
- box-shadow: 0 -0.125rem 0.5rem rgba(0,0,0,0.05);
- z-index: 1000;
-}
-
-.cancel-btn {
- font-weight: 400;
- font-size: 1rem;
- color: #FFFFFF;
- width: 6.375rem;
- background: #C7C9CC;
- box-shadow: 0 0.25rem 0.625rem 0 rgba(3,88,185,0.2);
- border-radius: 2.5rem 2.5rem 2.5rem 2.5rem;
-}
-
-.save-btn {
- font-weight: 400;
- font-size: 1rem;
- color: #FFFFFF;
- width: 14rem;
- background: linear-gradient( 140deg, #00BAFF 0%, #006CFB 100%);
- box-shadow: 0 0.25rem 0.625rem 0 rgba(3,88,185,0.2);
- border-radius: 2.5rem 2.5rem 2.5rem 2.5rem;
-}
-
-// 鍝嶅簲寮忚皟鏁�
-@media (max-width: 768px) {
- .submit-section {
- padding: 12px;
+ @import "@/static/scss/form-common.scss";
+ .tip-text {
+ font-size: 14px;
+ color: #999;
+ margin-top: 20rpx;
+ margin-bottom: 20rpx;
}
-}
-.tip-text { padding: 4px 16px 0 16px; font-size: 12px; color: #888; }
</style>
--
Gitblit v1.9.3