gaoluyang
10 小时以前 35b0b44824aaeb6be31595f1d0a17380c90c1b89
1.回款流水开发联调
已修改4个文件
已添加1个文件
332 ■■■■■ 文件已修改
src/pages.json 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/pages/procurementManagement/paymentEntry/edit.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/pages/procurementManagement/receiptPaymentHistory/index.vue 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/pages/sales/receiptPayment/edit.vue 285 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/pages/sales/receiptPaymentHistory/index.vue 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/pages.json
@@ -121,6 +121,13 @@
      }
    },
    {
      "path": "pages/sales/receiptPayment/edit",
      "style": {
        "navigationBarTitleText": "修改回款登记",
        "navigationStyle": "custom"
      }
    },
    {
      "path": "pages/sales/receiptPaymentHistory/index",
      "style": {
        "navigationBarTitleText": "回款流水",
src/pages/procurementManagement/paymentEntry/edit.vue
@@ -186,10 +186,6 @@
    showNotify({ type: 'warning', message: '请选择付款形式' })
    return
  }
  if (!form.value.paymentDate) {
    showNotify({ type: 'warning', message: '请选择付款日期' })
    return
  }
  loading.value = true
    paymentRegistrationEdit(form.value)
        .then(() => {
src/pages/procurementManagement/receiptPaymentHistory/index.vue
@@ -76,6 +76,7 @@
                                type="primary"
                                size="small"
                                class="action-btn"
                                :disabled="item.registrant !== userStore.nickName"
                                @click="openForm(item)"
                            >
                                ç¼–辑付款
@@ -95,6 +96,8 @@
import { ref, computed } from 'vue';
import { onShow } from '@dcloudio/uni-app';
import {paymentHistoryListPage} from "@/api/procurementManagement/paymentEntry";
import useUserStore from "@/store/modules/user";
const userStore = useUserStore()
// æœç´¢è¡¨å•
const searchForm = ref({
src/pages/sales/receiptPayment/edit.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,285 @@
<template>
    <view class="account-detail">
        <!-- ä½¿ç”¨é€šç”¨é¡µé¢å¤´éƒ¨ç»„ä»¶ -->
        <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">
            <!-- åŸºæœ¬ä¿¡æ¯ -->
            <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
                    :rules="[{ required: true, message: '请选择来款日期' }]"
                />
                <van-field
                    v-model="form.registrant"
                    label="登记人"
                    placeholder="自动填充"
                    readonly
                />
            </van-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>
        <!-- å›žæ¬¾æ–¹å¼é€‰æ‹©å™¨ -->
        <van-popup v-model:show="showPaymentType" position="bottom">
            <van-picker
                :model-value="pickerValue"
                :columns="receipt_payment_type"
                @confirm="onPaymentTypeConfirm"
                @cancel="showPaymentType = false"
            />
        </van-popup>
        <!-- æ—¥æœŸé€‰æ‹©å™¨ -->
        <van-popup v-model:show="showDate" position="bottom">
            <van-date-picker
                v-model="currentDate"
                title="选择日期"
                @confirm="onDateConfirm"
                @cancel="showDate = false"
            />
        </van-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'
const userStore = useUserStore()
// è¡¨å•引用
const formRef = ref()
// å“åº”式数据
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 form = ref({
    salesContractNo: '',
    customerName: '',
    invoiceNo: '',
    invoiceTotal: '',
    taxRate: '',
    receiptPaymentAmount: '',
    receiptPaymentType: '',
    receiptPaymentTypeName: '',
    registrant: '',
    receiptPaymentDate: '',
    invoiceLedgerId: ''
})
const currentNoReceiptAmount = ref(0)
// èŽ·å–å­—å…¸æ•°æ®
const { receipt_payment_type: dictReceiptPaymentType } = useDict('receipt_payment_type')
// è½¬æ¢å­—典数据格式为选择器需要的格式
const receipt_payment_type = computed(() => {
    return dictReceiptPaymentType.value.map(item => ({
        text: item.label,
        value: item.value
    }))
})
// è¿”回上一页
const onClickLeft = () => {
    uni.removeStorageSync('invoiceLedgerEditRow');
    uni.navigateBack()
}
// æ˜¾ç¤ºå›žæ¬¾æ–¹å¼é€‰æ‹©å™¨
const showPaymentTypePicker = () => {
    showPaymentType.value = true
}
const changeNum = () => {
    if (form.value.receiptPaymentAmount > currentNoReceiptAmount.value) {
        form.value.receiptPaymentAmount = currentNoReceiptAmount.value
        showToast('不可大于待回款金额')
    }
}
// ç¡®è®¤å›žæ¬¾æ–¹å¼é€‰æ‹©
const onPaymentTypeConfirm = ({ selectedValues, selectedOptions }) => {
    form.value.receiptPaymentType = selectedOptions[0].value
    form.value.receiptPaymentTypeName = selectedOptions[0].text
    pickerValue.value = selectedValues;
    showPaymentType.value = false
}
// æ˜¾ç¤ºæ—¥æœŸé€‰æ‹©å™¨
const showDatePicker = () => {
    showDate.value = true
}
// ç¡®è®¤æ—¥æœŸé€‰æ‹©
const onDateConfirm = ({ selectedValues }) => {
    form.value.receiptPaymentDate = selectedValues.join('-')
    currentDate.value = selectedValues
    showDate.value = false
}
// æäº¤è¡¨å•
const onSubmit = () => {
    // è¡¨å•验证
    if (!form.value.receiptPaymentAmount) {
        showNotify({ type: 'warning', message: '请输入回款金额' })
        return
    }
    if (!form.value.receiptPaymentType) {
        showNotify({ type: 'warning', message: '请选择回款形式' })
        return
    }
    loading.value = true
    let updateData = {
        id: form.value.id,
        receiptPaymentType: form.value.receiptPaymentType,
        receiptPaymentAmount: form.value.receiptPaymentAmount,
    };
    receiptPaymentSaveOrUpdate(updateData)
        .then(() => {
            showToast('提交成功')
            onClickLeft()
        })
        .catch((error) => {
            loading.value = false
        })
}
// åˆå§‹åŒ–数据
const initData = () => {
    const rowStr = uni.getStorageSync('invoiceLedgerEditRow')
    const row = JSON.parse(rowStr)
    form.value = { ...row}
    form.value.receiptPaymentTypeName = formatReceiptType(row.receiptPaymentType);
    form.value.id = "";
    currentNoReceiptAmount.value = row.noReceiptAmount
}
const formatReceiptType = (type) => {
    if (type == 0) {
        return "电汇";
    } else if (type == 1) {
        return "承兑";
    } else {
        return "未知";
    }
};
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;
    }
}
.tip-text { padding: 4px 16px 0 16px; font-size: 12px; color: #888; }
</style>
src/pages/sales/receiptPaymentHistory/index.vue
@@ -78,6 +78,18 @@
                                <text class="detail-value">{{ item.createTime }}</text>
                            </view>
                        </view>
                        <!-- æ“ä½œæŒ‰é’® -->
                        <view class="action-buttons">
                            <van-button
                                type="primary"
                                size="small"
                                class="action-btn"
                                :disabled="item.registrant !== userStore.nickName"
                                @click="openForm(item)"
                            >
                                ç¼–辑回款
                            </van-button>
                        </view>
                    </view>
                </view>
            </view>
@@ -92,6 +104,8 @@
import { ref, computed } from 'vue';
import { onShow } from '@dcloudio/uni-app';
import { receiptPaymentHistoryListPage } from "@/api/salesManagement/receiptPayment.js";
import useUserStore from "@/store/modules/user";
const userStore = useUserStore()
// æœç´¢è¡¨å•
const searchForm = ref({
@@ -160,6 +174,11 @@
const formatAmount = (amount) => {
    return amount ? parseFloat(amount).toFixed(2) : '0.00';
};
// æ‰“开编辑表单
const openForm = (item) => {
    uni.setStorageSync('invoiceLedgerEditRow', JSON.stringify(item))
    uni.navigateTo({ url: '/pages/sales/receiptPayment/edit' })
}
onShow(() => {
    // é¡µé¢æ˜¾ç¤ºæ—¶åˆ·æ–°åˆ—表
    getList();
@@ -247,7 +266,19 @@
    align-items: center;
    gap: 8px;
}
.action-buttons {
    display: flex;
    gap: 12px;
    padding: 12px 0 0 0;
    justify-content: space-between;
}
.action-btn {
    flex: 1;
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 8px;
}
.document-icon {
    width: 24px;
    height: 24px;