From a1a73e25593d2914ea58cd84ec2540bc56bd6934 Mon Sep 17 00:00:00 2001
From: zhangwencui <1064582902@qq.com>
Date: 星期一, 26 一月 2026 17:43:25 +0800
Subject: [PATCH] 来票台账接口更改
---
src/pages/sales/invoiceLedger/index.vue | 1161 +++++++++++++++++++++++++++++----------------------------
1 files changed, 587 insertions(+), 574 deletions(-)
diff --git a/src/pages/sales/invoiceLedger/index.vue b/src/pages/sales/invoiceLedger/index.vue
index f4cf5c2..ab7b5c0 100644
--- a/src/pages/sales/invoiceLedger/index.vue
+++ b/src/pages/sales/invoiceLedger/index.vue
@@ -1,616 +1,629 @@
<template>
- <view class="sales-account">
- <!-- 浣跨敤閫氱敤椤甸潰澶撮儴缁勪欢 -->
- <PageHeader title="寮�绁ㄥ彴璐�" @back="goBack" />
-
- <!-- 鎼滅储鍜岀瓫閫夊尯鍩燂紙淇濇寔涓庨攢鍞彴璐﹂鏍间竴鑷达級 -->
- <view class="search-section">
- <view class="search-bar">
- <view class="search-input">
- <up-input
- class="search-text"
- placeholder="璇疯緭鍏ュ鎴峰悕绉�/鍚堝悓鍙锋悳绱�"
- v-model="searchForm.searchText"
- @change="handleQuery"
- clearable
- />
- </view>
- <!-- <view class="filter-button" @click="showFilter = true">-->
- <!-- <up-icon name="list" size="24" color="#999"></up-icon>-->
- <!-- </view>-->
- <view class="filter-button" @click="handleQuery">
- <up-icon name="search" size="24" color="#999"></up-icon>
- </view>
- </view>
- </view>
-
- <!-- 鍒楄〃鍖哄煙 -->
- <view class="ledger-list" v-if="ledgerList.length > 0">
- <view v-for="(item, index) in ledgerList" :key="index">
- <view class="ledger-item">
- <view class="item-header">
- <view class="item-left">
- <view class="document-icon">
- <up-icon name="file-text" size="16" color="#ffffff"></up-icon>
- </view>
- <text class="item-id">{{ item.salesContractNo }}</text>
- </view>
- </view>
- <up-divider></up-divider>
- <view class="item-details">
- <view class="detail-row">
- <text class="detail-label">瀹㈡埛鍚嶇О</text>
- <text class="detail-value">{{ item.customerName }}</text>
- </view>
- <view class="detail-row">
- <text class="detail-label">瀹㈡埛鍚堝悓鍙�</text>
- <text class="detail-value">{{ item.customerContractNo }}</text>
- </view>
- <view class="detail-row">
- <text class="detail-label">椤圭洰</text>
- <text class="detail-value">{{ item.projectName }}</text>
- </view>
- <view class="detail-row">
- <text class="detail-label">浜у搧澶х被</text>
- <text class="detail-value">{{ item.productCategory }}</text>
- </view>
- <view class="detail-row">
- <text class="detail-label">瑙勬牸鍨嬪彿</text>
- <text class="detail-value">{{ item.specificationModel }}</text>
- </view>
- <view class="detail-row">
- <text class="detail-label">鍙戠エ鍙�</text>
- <text class="detail-value">{{ item.invoiceNo || '-' }}</text>
- </view>
- <view class="detail-row">
- <text class="detail-label">鍙戠エ閲戦(鍏�)</text>
- <text class="detail-value highlight">{{ formatAmount(item.invoiceTotal) }}</text>
- </view>
- <view class="detail-row">
- <text class="detail-label">绋庣巼(%)</text>
- <text class="detail-value">{{ item.taxRate }}</text>
- </view>
- <view class="detail-row">
- <text class="detail-label">褰曞叆浜�</text>
- <text class="detail-value">{{ item.invoicePerson }}</text>
- </view>
- <view class="detail-row">
- <text class="detail-label">褰曞叆鏃ユ湡</text>
- <text class="detail-value">{{ formatDateTime(item.createTime) }}</text>
- </view>
- <view class="detail-row">
- <text class="detail-label">寮�绁ㄦ棩鏈�</text>
- <text class="detail-value">{{ item.invoiceDate || '-' }}</text>
- </view>
- </view>
- <view class="action-buttons">
- <up-button
- type="primary"
- size="small"
- class="action-btn"
- :disabled="item.invoicePerson !== userStore.nickName"
- @click="openEdit(item)"
- >
- 缂栬緫
- </up-button>
- <up-button
- type="error"
- size="small"
- plain
- class="action-btn"
- :disabled="item.invoicePerson !== userStore.nickName"
- @click="handleDelete(item)"
- >
- 鍒犻櫎
- </up-button>
-<!-- <up-button-->
-<!-- size="small"-->
-<!-- plain-->
-<!-- class="action-btn"-->
-<!-- v-if="item.invoiceFileName"-->
-<!-- @click="openFileActions(item.commonFiles || [])"-->
-<!-- >-->
-<!-- 鏌ョ湅闄勪欢-->
-<!-- </up-button>-->
-<!-- <up-button-->
-<!-- type="primary"-->
-<!-- size="small"-->
-<!-- class="action-btn"-->
-<!-- v-else-->
-<!-- :disabled="item.invoicePerson !== userStore.nickName"-->
-<!-- @click="openUpload(item)"-->
-<!-- >-->
-<!-- 涓婁紶-->
-<!-- </up-button>-->
- </view>
- </view>
- </view>
- </view>
- <view v-else class="no-data">
- <text>鏆傛棤寮�绁ㄥ彴璐︽暟鎹�</text>
- </view>
-
- <!-- 绛涢�夊脊绐� -->
- <up-popup v-model="showFilter" mode="bottom" round><up-transition>
- <view class="filter-popup">
- <up-cell-group title="绛涢�夋潯浠�" inset>
- <up-input
- label="寮�绁ㄦ棩鏈�"
- readonly
- placeholder="璇烽�夋嫨鏃ユ湡鑼冨洿"
- @click="showInvoiceRange = true"
- v-model="invoiceRangeLabel"
- />
- <up-input
- label="褰曞叆鏃ユ湡"
- readonly
- @click="showCreateDatePicker = true"
- v-model="searchForm.createTimeStart"
- />
- <view class="switch-row">
- <text class="switch-label">涓嶆樉绀烘湁鍙戠エ琛�</text>
- <up-switch v-model="searchForm.status" size="20" />
- </view>
- </up-cell-group>
- <view class="filter-actions">
- <up-button @click="resetFilter">閲嶇疆</up-button>
- <up-button type="primary" @click="confirmFilter">纭畾</up-button>
- </view>
- </view>
- </up-transition></up-popup>
-
- <!-- 鏃ュ巻锛氬紑绁ㄦ棩鏈熻寖鍥� -->
- <up-popup v-model="showInvoiceRange" mode="bottom"><up-transition>
- <up-datetime-picker
- mode="date"
- type="range"
- title="閫夋嫨寮�绁ㄦ棩鏈熻寖鍥�"
- @confirm="onInvoiceRangeConfirm"
- @cancel="showInvoiceRange = false"
- />
- </up-transition></up-popup>
-
- <!-- 鏃ユ湡锛氬綍鍏ユ棩鏈� -->
- <up-popup v-model="showCreateDatePicker" mode="bottom"><up-transition>
- <up-datetime-picker
- mode="date"
- type="selector"
- v-model="currentCreateDate"
- title="閫夋嫨褰曞叆鏃ユ湡"
- @confirm="onCreateDateConfirm"
- @cancel="showCreateDatePicker = false"
- />
- </up-transition></up-popup>
-
-
-
- <!-- 鍗曡涓婁紶寮圭獥锛堟棤琛ㄥ崟锛� -->
- <up-popup v-model="showUpload" mode="bottom" round><up-transition>
- <view class="upload-container">
- <up-cell-group title="涓婁紶闄勪欢锛堜粎鏀寔 pdf锛屾渶澶�10MB锛屾渶澶�10涓級" inset>
- <up-upload
- accept="pdf"
- multiple
- :maxCount="10"
- :afterRead="afterReadRowUpload"
- :beforeRead="beforeReadPdf"
- >
- <up-button type="primary">鐐瑰嚮涓婁紶</up-button>
- </up-upload>
- <view class="uploaded-list" v-if="fileList.length">
- <view class="uploaded-item" v-for="(f, idx) in fileList" :key="idx">
- <text class="file-name">{{ f.name || getFileNameFromUrl(f.url) }}</text>
- <up-button size="mini" type="error" plain @click="removeUploaded(idx)">绉婚櫎</up-button>
- </view>
- </view>
- </up-cell-group>
- <view class="filter-actions">
- <up-button @click="showUpload = false">鍙栨秷</up-button>
- <up-button type="primary" @click="confirmUpload">纭</up-button>
- </view>
- </view>
- </up-transition></up-popup>
-
- <!-- 闄勪欢鍒楄〃閫夋嫨 -->
- <up-action-sheet v-model="showFileSheet" :actions="fileActions" cancel-text="鍙栨秷" close-on-click-action @select="onSelectFile">
- <view class="up-action-sheet__cancel" @click="showFileSheet = false">
- 鍙栨秷
- </view>
- </up-action-sheet>
- </view>
+ <view class="sales-account">
+ <!-- 浣跨敤閫氱敤椤甸潰澶撮儴缁勪欢 -->
+ <PageHeader title="寮�绁ㄥ彴璐�"
+ @back="goBack" />
+ <!-- 鎼滅储鍜岀瓫閫夊尯鍩燂紙淇濇寔涓庨攢鍞彴璐﹂鏍间竴鑷达級 -->
+ <view class="search-section">
+ <view class="search-bar">
+ <view class="search-input">
+ <up-input class="search-text"
+ placeholder="璇疯緭鍏ュ鎴峰悕绉�/鍚堝悓鍙锋悳绱�"
+ v-model="searchForm.searchText"
+ @change="handleQuery"
+ clearable />
+ </view>
+ <!-- <view class="filter-button" @click="showFilter = true">-->
+ <!-- <up-icon name="list" size="24" color="#999"></up-icon>-->
+ <!-- </view>-->
+ <view class="filter-button"
+ @click="handleQuery">
+ <up-icon name="search"
+ size="24"
+ color="#999"></up-icon>
+ </view>
+ </view>
+ </view>
+ <!-- 鍒楄〃鍖哄煙 -->
+ <view class="ledger-list"
+ v-if="ledgerList.length > 0">
+ <view v-for="(item, index) in ledgerList"
+ :key="index">
+ <view class="ledger-item">
+ <view class="item-header">
+ <view class="item-left">
+ <view class="document-icon">
+ <up-icon name="file-text"
+ size="16"
+ color="#ffffff"></up-icon>
+ </view>
+ <text class="item-id">{{ item.salesContractNo }}</text>
+ </view>
+ </view>
+ <up-divider></up-divider>
+ <view class="item-details">
+ <view class="detail-row">
+ <text class="detail-label">瀹㈡埛鍚嶇О</text>
+ <text class="detail-value">{{ item.customerName }}</text>
+ </view>
+ <view class="detail-row">
+ <text class="detail-label">瀹㈡埛鍚堝悓鍙�</text>
+ <text class="detail-value">{{ item.customerContractNo }}</text>
+ </view>
+ <view class="detail-row">
+ <text class="detail-label">椤圭洰</text>
+ <text class="detail-value">{{ item.projectName }}</text>
+ </view>
+ <view class="detail-row">
+ <text class="detail-label">浜у搧澶х被</text>
+ <text class="detail-value">{{ item.productCategory }}</text>
+ </view>
+ <view class="detail-row">
+ <text class="detail-label">瑙勬牸鍨嬪彿</text>
+ <text class="detail-value">{{ item.specificationModel }}</text>
+ </view>
+ <view class="detail-row">
+ <text class="detail-label">鍙戠エ鍙�</text>
+ <text class="detail-value">{{ item.invoiceNo || '-' }}</text>
+ </view>
+ <view class="detail-row">
+ <text class="detail-label">鍙戠エ閲戦(鍏�)</text>
+ <text class="detail-value highlight">{{ formatAmount(item.invoiceTotal) }}</text>
+ </view>
+ <view class="detail-row">
+ <text class="detail-label">绋庣巼(%)</text>
+ <text class="detail-value">{{ item.taxRate }}</text>
+ </view>
+ <view class="detail-row">
+ <text class="detail-label">褰曞叆浜�</text>
+ <text class="detail-value">{{ item.invoicePerson }}</text>
+ </view>
+ <view class="detail-row">
+ <text class="detail-label">褰曞叆鏃ユ湡</text>
+ <text class="detail-value">{{ formatDateTime(item.createTime) }}</text>
+ </view>
+ <view class="detail-row">
+ <text class="detail-label">寮�绁ㄦ棩鏈�</text>
+ <text class="detail-value">{{ item.invoiceDate || '-' }}</text>
+ </view>
+ </view>
+ <view class="action-buttons">
+ <up-button type="primary"
+ size="small"
+ class="action-btn"
+ :disabled="item.invoicePerson !== userStore.nickName"
+ @click="openEdit(item)">
+ 缂栬緫
+ </up-button>
+ <up-button type="error"
+ size="small"
+ plain
+ class="action-btn"
+ :disabled="item.invoicePerson !== userStore.nickName"
+ @click="handleDelete(item)">
+ 鍒犻櫎
+ </up-button>
+ <!-- <up-button-->
+ <!-- size="small"-->
+ <!-- plain-->
+ <!-- class="action-btn"-->
+ <!-- v-if="item.invoiceFileName"-->
+ <!-- @click="openFileActions(item.commonFiles || [])"-->
+ <!-- >-->
+ <!-- 鏌ョ湅闄勪欢-->
+ <!-- </up-button>-->
+ <!-- <up-button-->
+ <!-- type="primary"-->
+ <!-- size="small"-->
+ <!-- class="action-btn"-->
+ <!-- v-else-->
+ <!-- :disabled="item.invoicePerson !== userStore.nickName"-->
+ <!-- @click="openUpload(item)"-->
+ <!-- >-->
+ <!-- 涓婁紶-->
+ <!-- </up-button>-->
+ </view>
+ </view>
+ </view>
+ </view>
+ <view v-else
+ class="no-data">
+ <text>鏆傛棤寮�绁ㄥ彴璐︽暟鎹�</text>
+ </view>
+ <!-- 绛涢�夊脊绐� -->
+ <up-popup v-model="showFilter"
+ mode="bottom"
+ round><up-transition>
+ <view class="filter-popup">
+ <up-cell-group title="绛涢�夋潯浠�"
+ inset>
+ <up-input label="寮�绁ㄦ棩鏈�"
+ readonly
+ placeholder="璇烽�夋嫨鏃ユ湡鑼冨洿"
+ @click="showInvoiceRange = true"
+ v-model="invoiceRangeLabel" />
+ <up-input label="褰曞叆鏃ユ湡"
+ readonly
+ @click="showCreateDatePicker = true"
+ v-model="searchForm.createTimeStart" />
+ <view class="switch-row">
+ <text class="switch-label">涓嶆樉绀烘湁鍙戠エ琛�</text>
+ <up-switch v-model="searchForm.status"
+ size="20" />
+ </view>
+ </up-cell-group>
+ <view class="filter-actions">
+ <up-button @click="resetFilter">閲嶇疆</up-button>
+ <up-button type="primary"
+ @click="confirmFilter">纭畾</up-button>
+ </view>
+ </view>
+ </up-transition></up-popup>
+ <!-- 鏃ュ巻锛氬紑绁ㄦ棩鏈熻寖鍥� -->
+ <up-popup v-model="showInvoiceRange"
+ mode="bottom"><up-transition>
+ <up-datetime-picker mode="date"
+ type="range"
+ title="閫夋嫨寮�绁ㄦ棩鏈熻寖鍥�"
+ @confirm="onInvoiceRangeConfirm"
+ @cancel="showInvoiceRange = false" />
+ </up-transition></up-popup>
+ <!-- 鏃ユ湡锛氬綍鍏ユ棩鏈� -->
+ <up-popup v-model="showCreateDatePicker"
+ mode="bottom"><up-transition>
+ <up-datetime-picker mode="date"
+ type="selector"
+ v-model="currentCreateDate"
+ title="閫夋嫨褰曞叆鏃ユ湡"
+ @confirm="onCreateDateConfirm"
+ @cancel="showCreateDatePicker = false" />
+ </up-transition></up-popup>
+ <!-- 鍗曡涓婁紶寮圭獥锛堟棤琛ㄥ崟锛� -->
+ <up-popup v-model="showUpload"
+ mode="bottom"
+ round><up-transition>
+ <view class="upload-container">
+ <up-cell-group title="涓婁紶闄勪欢锛堜粎鏀寔 pdf锛屾渶澶�10MB锛屾渶澶�10涓級"
+ inset>
+ <up-upload accept="pdf"
+ multiple
+ :maxCount="10"
+ :afterRead="afterReadRowUpload"
+ :beforeRead="beforeReadPdf">
+ <up-button type="primary">鐐瑰嚮涓婁紶</up-button>
+ </up-upload>
+ <view class="uploaded-list"
+ v-if="fileList.length">
+ <view class="uploaded-item"
+ v-for="(f, idx) in fileList"
+ :key="idx">
+ <text class="file-name">{{ f.name || getFileNameFromUrl(f.url) }}</text>
+ <up-button size="mini"
+ type="error"
+ plain
+ @click="removeUploaded(idx)">绉婚櫎</up-button>
+ </view>
+ </view>
+ </up-cell-group>
+ <view class="filter-actions">
+ <up-button @click="showUpload = false">鍙栨秷</up-button>
+ <up-button type="primary"
+ @click="confirmUpload">纭</up-button>
+ </view>
+ </view>
+ </up-transition></up-popup>
+ <!-- 闄勪欢鍒楄〃閫夋嫨 -->
+ <up-action-sheet v-model="showFileSheet"
+ :actions="fileActions"
+ cancel-text="鍙栨秷"
+ close-on-click-action
+ @select="onSelectFile">
+ <view class="up-action-sheet__cancel"
+ @click="showFileSheet = false">
+ 鍙栨秷
+ </view>
+ </up-action-sheet>
+ </view>
</template>
<script setup>
-import {reactive, ref} from 'vue'
-import dayjs from 'dayjs'
-import PageHeader from '@/components/PageHeader.vue'
-import useUserStore from '@/store/modules/user'
-import {getToken} from '@/utils/auth'
-import config from '@/config.js'
-import {
- commitFile,
- delInvoiceLedgerByRegProductId,
- registrationProductPage
-} from '@/api/salesManagement/invoiceLedger.js'
-import {onShow} from "@dcloudio/uni-app";
+ import { reactive, ref } from "vue";
+ import dayjs from "dayjs";
+ import PageHeader from "@/components/PageHeader.vue";
+ import useUserStore from "@/store/modules/user";
+ import { getToken } from "@/utils/auth";
+ import config from "@/config.js";
+ import {
+ commitFile,
+ delInvoiceLedgerByRegProductId,
+ registrationProductPage,
+ } from "@/api/salesManagement/invoiceLedger.js";
+ import { onShow } from "@dcloudio/uni-app";
-const showToast = (message) => {
- uni.showToast({
- title: message,
- icon: 'none'
- })
-}
-const showLoadingToast = (message) => {
- uni.showLoading({
- title: message,
- mask: true
- })
-}
-const closeToast = () => {
- uni.hideLoading()
-}
+ const showToast = message => {
+ uni.showToast({
+ title: message,
+ icon: "none",
+ });
+ };
+ const showLoadingToast = message => {
+ uni.showLoading({
+ title: message,
+ mask: true,
+ });
+ };
+ const closeToast = () => {
+ uni.hideLoading();
+ };
-const userStore = useUserStore()
+ const userStore = useUserStore();
-// 鍒楄〃涓庢煡璇�
-const ledgerList = ref([])
-const page = reactive({ current: -1, size: -1 })
-const searchForm = reactive({
- searchText: '',
- status: false,
- createTimeStart: ''
-})
+ // 鍒楄〃涓庢煡璇�
+ const ledgerList = ref([]);
+ const page = reactive({ current: -1, size: -1 });
+ const searchForm = reactive({
+ searchText: "",
+ status: false,
+ createTimeStart: "",
+ });
-// 椤堕儴浜や簰
-const showFilter = ref(false)
-const showInvoiceRange = ref(false)
-const showCreateDatePicker = ref(false)
-const invoiceRangeLabel = ref('')
-const currentCreateDate = ref([new Date().getFullYear(), new Date().getMonth() + 1, new Date().getDate()])
+ // 椤堕儴浜や簰
+ const showFilter = ref(false);
+ const showInvoiceRange = ref(false);
+ const showCreateDatePicker = ref(false);
+ const invoiceRangeLabel = ref("");
+ const currentCreateDate = ref([
+ new Date().getFullYear(),
+ new Date().getMonth() + 1,
+ new Date().getDate(),
+ ]);
-const currentId = ref('')
-const fileList = ref([]) // 琛屼笂浼犳垨閫氱敤涓婁紶鍒楄〃
+ const currentId = ref("");
+ const fileList = ref([]); // 琛屼笂浼犳垨閫氱敤涓婁紶鍒楄〃
-// 琛屼笂浼犲脊绐�
-const showUpload = ref(false)
+ // 琛屼笂浼犲脊绐�
+ const showUpload = ref(false);
-// 闄勪欢鏌ョ湅
-const showFileSheet = ref(false)
-const fileActions = ref([])
-let currentFilesToOpen = []
+ // 闄勪欢鏌ョ湅
+ const showFileSheet = ref(false);
+ const fileActions = ref([]);
+ let currentFilesToOpen = [];
-const formatAmount = (val) => {
- if (val === undefined || val === null || val === '') return '0.00'
- const num = Number(val)
- if (Number.isNaN(num)) return '0.00'
- return num.toFixed(2)
-}
-const formatDateTime = (val) => {
- if (!val) return ''
- return dayjs(val).format('YYYY-MM-DD HH:mm:ss')
-}
+ const formatAmount = val => {
+ if (val === undefined || val === null || val === "") return "0.00";
+ const num = Number(val);
+ if (Number.isNaN(num)) return "0.00";
+ return num.toFixed(2);
+ };
+ const formatDateTime = val => {
+ if (!val) return "";
+ return dayjs(val).format("YYYY-MM-DD HH:mm:ss");
+ };
-const goBack = () => {
- uni.navigateBack()
-}
+ const goBack = () => {
+ uni.navigateBack();
+ };
-const handleQuery = () => {
- getList()
-}
+ const handleQuery = () => {
+ getList();
+ };
-const getList = async () => {
- try {
- showLoadingToast('鍔犺浇涓�...')
- const { invoiceDate, ...rest } = searchForm
- const res = await registrationProductPage({ ...rest, ...page })
- // 鍏煎涓嶅悓杩斿洖缁撴瀯
- ledgerList.value = res?.data?.records || res?.records || res?.data || []
- closeToast()
- } catch (e) {
- closeToast()
- showToast('鑾峰彇鍒楄〃澶辫触')
- }
-}
+ const getList = async () => {
+ try {
+ showLoadingToast("鍔犺浇涓�...");
+ const { invoiceDate, ...rest } = searchForm;
+ const res = await registrationProductPage({ ...rest, ...page });
+ // 鍏煎涓嶅悓杩斿洖缁撴瀯
+ ledgerList.value = res?.data?.records || res?.records || res?.data || [];
+ closeToast();
+ } catch (e) {
+ closeToast();
+ showToast("鑾峰彇鍒楄〃澶辫触");
+ }
+ };
-// 绛涢�夐�昏緫
-const resetFilter = () => {
- searchForm.searchText = ''
- searchForm.status = false
- const start = dayjs().startOf('month').format('YYYY-MM-DD')
- const end = dayjs().endOf('month').format('YYYY-MM-DD')
- searchForm.invoiceDate = [start, end]
- searchForm.invoiceDateStart = start
- searchForm.invoiceDateEnd = end
- searchForm.createTimeStart = ''
- invoiceRangeLabel.value = ''
-}
-const confirmFilter = () => {
- showFilter.value = false
- getList()
-}
-const onInvoiceRangeConfirm = ({ selectedValues }) => {
- try {
- const start = dayjs(selectedValues[0]).format('YYYY-MM-DD')
- const end = dayjs(selectedValues[1]).format('YYYY-MM-DD')
- searchForm.invoiceDateStart = start
- searchForm.invoiceDateEnd = end
- invoiceRangeLabel.value = `${start} 鑷� ${end}`
- showInvoiceRange.value = false
- } catch (err) {
- showInvoiceRange.value = false
- }
-}
-const onCreateDateConfirm = ({ selectedValues }) => {
- try {
- searchForm.createTimeStart = selectedValues.join('-')
- currentCreateDate.value = selectedValues
- showCreateDatePicker.value = false
- } catch (err) {
- showCreateDatePicker.value = false
- }
-}
+ // 绛涢�夐�昏緫
+ const resetFilter = () => {
+ searchForm.searchText = "";
+ searchForm.status = false;
+ const start = dayjs().startOf("month").format("YYYY-MM-DD");
+ const end = dayjs().endOf("month").format("YYYY-MM-DD");
+ searchForm.invoiceDate = [start, end];
+ searchForm.invoiceDateStart = start;
+ searchForm.invoiceDateEnd = end;
+ searchForm.createTimeStart = "";
+ invoiceRangeLabel.value = "";
+ };
+ const confirmFilter = () => {
+ showFilter.value = false;
+ getList();
+ };
+ const onInvoiceRangeConfirm = ({ selectedValues }) => {
+ try {
+ const start = dayjs(selectedValues[0]).format("YYYY-MM-DD");
+ const end = dayjs(selectedValues[1]).format("YYYY-MM-DD");
+ searchForm.invoiceDateStart = start;
+ searchForm.invoiceDateEnd = end;
+ invoiceRangeLabel.value = `${start} 鑷� ${end}`;
+ showInvoiceRange.value = false;
+ } catch (err) {
+ showInvoiceRange.value = false;
+ }
+ };
+ const onCreateDateConfirm = ({ selectedValues }) => {
+ try {
+ searchForm.createTimeStart = selectedValues.join("-");
+ currentCreateDate.value = selectedValues;
+ showCreateDatePicker.value = false;
+ } catch (err) {
+ showCreateDatePicker.value = false;
+ }
+ };
-// 缂栬緫閫昏緫鏀逛负璺宠浆鏂伴〉闈�
-const openEdit = (row) => {
- try {
- uni.setStorageSync('invoiceLedgerEditRow', JSON.stringify(row))
- uni.navigateTo({ url: '/pages/sales/invoiceLedger/detail' })
- } catch (e) {
- showToast('璺宠浆澶辫触')
- }
-}
+ // 缂栬緫閫昏緫鏀逛负璺宠浆鏂伴〉闈�
+ const openEdit = row => {
+ try {
+ uni.setStorageSync("invoiceLedgerEditRow", JSON.stringify(row));
+ uni.navigateTo({ url: "/pages/sales/invoiceLedger/detail" });
+ } catch (e) {
+ showToast("璺宠浆澶辫触");
+ }
+ };
-// 鍒犻櫎
-const handleDelete = (row) => {
- uni.showModal({
- title: '鍒犻櫎纭',
- content: '璇ュ彂绁ㄥ彴璐﹀皢琚垹闄わ紝鏄惁纭鍒犻櫎锛�',
- success: async (res) => {
- if (res.confirm) {
- try {
- showLoadingToast('澶勭悊涓�...')
- await delInvoiceLedgerByRegProductId(row.id)
- closeToast()
- showToast('鍒犻櫎鎴愬姛')
- getList()
- } catch (e) {
- closeToast()
- showToast('鍒犻櫎澶辫触锛岃閲嶈瘯')
- }
- }
- }
- })
-}
+ // 鍒犻櫎
+ const handleDelete = row => {
+ uni.showModal({
+ title: "鍒犻櫎纭",
+ content: "璇ュ彂绁ㄥ彴璐﹀皢琚垹闄わ紝鏄惁纭鍒犻櫎锛�",
+ success: async res => {
+ if (res.confirm) {
+ try {
+ showLoadingToast("澶勭悊涓�...");
+ await delInvoiceLedgerByRegProductId(row.id);
+ closeToast();
+ showToast("鍒犻櫎鎴愬姛");
+ getList();
+ } catch (e) {
+ closeToast();
+ showToast("鍒犻櫎澶辫触锛岃閲嶈瘯");
+ }
+ }
+ },
+ });
+ };
-// 琛屼笂浼�
-const openUpload = (row) => {
- currentId.value = row.id
- fileList.value = []
- showUpload.value = true
-}
-const confirmUpload = async () => {
- try {
- const payload = { fileList: fileList.value, id: currentId.value }
- showLoadingToast('鎻愪氦涓�...')
- await commitFile(payload)
- closeToast()
- showToast('鎻愪氦鎴愬姛')
- showUpload.value = false
- fileList.value = []
- currentId.value = ''
- getList()
- } catch (e) {
- closeToast()
- showToast('鎻愪氦澶辫触锛岃閲嶈瘯')
- }
-}
+ // 琛屼笂浼�
+ const openUpload = row => {
+ currentId.value = row.id;
+ fileList.value = [];
+ showUpload.value = true;
+ };
+ const confirmUpload = async () => {
+ try {
+ const payload = { fileList: fileList.value, id: currentId.value };
+ showLoadingToast("鎻愪氦涓�...");
+ await commitFile(payload);
+ closeToast();
+ showToast("鎻愪氦鎴愬姛");
+ showUpload.value = false;
+ fileList.value = [];
+ currentId.value = "";
+ getList();
+ } catch (e) {
+ closeToast();
+ showToast("鎻愪氦澶辫触锛岃閲嶈瘯");
+ }
+ };
-// 涓婁紶鐩稿叧
-const beforeReadPdf = (file) => {
- // 鍏煎澶氭枃浠�
- const files = Array.isArray(file) ? file : [file]
- for (const f of files) {
- const sizeOk = f.size <= 10 * 1024 * 1024
- const ext = (f.name || '').split('.').pop()?.toLowerCase()
- if (ext !== 'pdf') {
- showToast('浠呮敮鎸乸df鏂囦欢')
- return false
- }
- if (!sizeOk) {
- showToast('涓婁紶鏂囦欢澶у皬涓嶈兘瓒呰繃10MB')
- return false
- }
- }
- return true
-}
+ // 涓婁紶鐩稿叧
+ const beforeReadPdf = file => {
+ // 鍏煎澶氭枃浠�
+ const files = Array.isArray(file) ? file : [file];
+ for (const f of files) {
+ const sizeOk = f.size <= 10 * 1024 * 1024;
+ const ext = (f.name || "").split(".").pop()?.toLowerCase();
+ if (ext !== "pdf") {
+ showToast("浠呮敮鎸乸df鏂囦欢");
+ return false;
+ }
+ if (!sizeOk) {
+ showToast("涓婁紶鏂囦欢澶у皬涓嶈兘瓒呰繃10MB");
+ return false;
+ }
+ }
+ return true;
+ };
-const uploadSingleFile = async (fileObj) => {
- return new Promise((resolve, reject) => {
- showLoadingToast('姝e湪涓婁紶...')
- uni.uploadFile({
- url: config.baseUrl + '/invoiceLedger/uploadFile',
- filePath: fileObj.url || fileObj.file?.path || fileObj.tempFilePath,
- name: 'file',
- header: { Authorization: 'Bearer ' + getToken() },
- success: (res) => {
- closeToast()
- try {
- const data = JSON.parse(res.data || '{}')
- if (data.code === 200) {
- resolve(data.data)
- } else {
- reject(new Error(data.msg || '涓婁紶澶辫触'))
- }
- } catch (err) {
- reject(err)
- }
- },
- fail: (err) => {
- closeToast()
- reject(err)
- }
- })
- })
-}
+ const uploadSingleFile = async fileObj => {
+ return new Promise((resolve, reject) => {
+ showLoadingToast("姝e湪涓婁紶...");
+ uni.uploadFile({
+ url: config.baseUrl + "/invoiceLedger/uploadFile",
+ filePath: fileObj.url || fileObj.file?.path || fileObj.tempFilePath,
+ name: "file",
+ header: { Authorization: "Bearer " + getToken() },
+ success: res => {
+ closeToast();
+ try {
+ const data = JSON.parse(res.data || "{}");
+ if (data.code === 200) {
+ resolve(data.data);
+ } else {
+ reject(new Error(data.msg || "涓婁紶澶辫触"));
+ }
+ } catch (err) {
+ reject(err);
+ }
+ },
+ fail: err => {
+ closeToast();
+ reject(err);
+ },
+ });
+ });
+ };
-const afterReadEditUpload = async (file) => {
- try {
- const files = Array.isArray(file) ? file : file?.file ? [file] : [file]
- for (const f of files) {
- const uploaded = await uploadSingleFile(f)
- fileList.value.push(uploaded)
- }
- showToast('涓婁紶鎴愬姛')
- } catch (e) {
- showToast('涓婁紶澶辫触')
- }
-}
+ const afterReadEditUpload = async file => {
+ try {
+ const files = Array.isArray(file) ? file : file?.file ? [file] : [file];
+ for (const f of files) {
+ const uploaded = await uploadSingleFile(f);
+ fileList.value.push(uploaded);
+ }
+ showToast("涓婁紶鎴愬姛");
+ } catch (e) {
+ showToast("涓婁紶澶辫触");
+ }
+ };
-const afterReadRowUpload = async (file) => {
- try {
- const files = Array.isArray(file) ? file : file?.file ? [file] : [file]
- for (const f of files) {
- const uploaded = await uploadSingleFile(f)
- fileList.value.push(uploaded)
- }
- showToast('涓婁紶鎴愬姛')
- } catch (e) {
- showToast('涓婁紶澶辫触')
- }
-}
+ const afterReadRowUpload = async file => {
+ try {
+ const files = Array.isArray(file) ? file : file?.file ? [file] : [file];
+ for (const f of files) {
+ const uploaded = await uploadSingleFile(f);
+ fileList.value.push(uploaded);
+ }
+ showToast("涓婁紶鎴愬姛");
+ } catch (e) {
+ showToast("涓婁紶澶辫触");
+ }
+ };
-const removeUploaded = (index) => {
- fileList.value.splice(index, 1)
-}
+ const removeUploaded = index => {
+ fileList.value.splice(index, 1);
+ };
-const getFileNameFromUrl = (url) => {
- try {
- if (!url) return ''
- return decodeURIComponent(url.split('/').pop())
- } catch (e) {
- return url
- }
-}
+ const getFileNameFromUrl = url => {
+ try {
+ if (!url) return "";
+ return decodeURIComponent(url.split("/").pop());
+ } catch (e) {
+ return url;
+ }
+ };
-// 闄勪欢鏌ョ湅
-const openFileActions = (commonFiles) => {
- currentFilesToOpen = commonFiles || []
- fileActions.value = (commonFiles || []).map((f, idx) => ({ name: getFileNameFromUrl(f.url || ''), index: idx }))
- showFileSheet.value = true
-}
-const onSelectFile = async (action) => {
- try {
- const item = currentFilesToOpen[action.index]
- if (!item || !item.url) return
- showLoadingToast('涓嬭浇涓�...')
- uni.downloadFile({
- url: item.url,
- success: (res) => {
- closeToast()
- if (res.statusCode === 200) {
- uni.openDocument({ filePath: res.tempFilePath })
- } else {
- showToast('涓嬭浇澶辫触')
- }
- },
- fail: () => {
- closeToast()
- showToast('涓嬭浇澶辫触')
- }
- })
- } catch (e) {
- closeToast()
- showToast('鎵撳紑澶辫触')
- }
-}
+ // 闄勪欢鏌ョ湅
+ const openFileActions = commonFiles => {
+ currentFilesToOpen = commonFiles || [];
+ fileActions.value = (commonFiles || []).map((f, idx) => ({
+ name: getFileNameFromUrl(f.url || ""),
+ index: idx,
+ }));
+ showFileSheet.value = true;
+ };
+ const onSelectFile = async action => {
+ try {
+ const item = currentFilesToOpen[action.index];
+ if (!item || !item.url) return;
+ showLoadingToast("涓嬭浇涓�...");
+ uni.downloadFile({
+ url: item.url,
+ success: res => {
+ closeToast();
+ if (res.statusCode === 200) {
+ uni.openDocument({ filePath: res.tempFilePath });
+ } else {
+ showToast("涓嬭浇澶辫触");
+ }
+ },
+ fail: () => {
+ closeToast();
+ showToast("涓嬭浇澶辫触");
+ },
+ });
+ } catch (e) {
+ closeToast();
+ showToast("鎵撳紑澶辫触");
+ }
+ };
-onShow(() => {
- getList()
-})
+ onShow(() => {
+ getList();
+ });
</script>
<style scoped lang="scss">
-@import '@/styles/sales-common.scss';
+ @import "@/styles/sales-common.scss";
-// 寮�绁ㄥ彴璐︾壒鏈夋牱寮�
-.filter-popup {
- padding: 12px 12px 20px;
-}
+ // 寮�绁ㄥ彴璐︾壒鏈夋牱寮�
+ .filter-popup {
+ padding: 12px 12px 20px;
+ }
-.switch-row {
- padding: 12px 16px;
-}
+ .switch-row {
+ padding: 12px 16px;
+ }
-.filter-actions {
- display: flex;
- gap: 12px;
- padding: 12px 16px 16px;
- justify-content: space-between;
-}
+ .filter-actions {
+ display: flex;
+ gap: 12px;
+ padding: 12px 16px 16px;
+ justify-content: space-between;
+ }
-.edit-container {
- padding-bottom: 5rem;
-}
+ .edit-container {
+ padding-bottom: 5rem;
+ }
-.uploaded-list {
- padding: 8px 16px 0 16px;
-}
+ .uploaded-list {
+ padding: 8px 16px 0 16px;
+ }
-.uploaded-item {
- display: flex;
- align-items: center;
- justify-content: space-between;
- padding: 8px 0;
- border-bottom: 1px solid #f5f5f5;
-}
+ .uploaded-item {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ padding: 8px 0;
+ border-bottom: 1px solid #f5f5f5;
+ }
-.file-name {
- font-size: 12px;
- color: #333;
- margin-right: 8px;
- flex: 1;
- overflow: hidden;
- text-overflow: ellipsis;
- white-space: nowrap;
-}
+ .file-name {
+ font-size: 12px;
+ color: #333;
+ margin-right: 8px;
+ flex: 1;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ }
-.tip-text {
- padding: 4px 16px 0 16px;
- font-size: 12px;
- color: #888;
-}
+ .tip-text {
+ padding: 4px 16px 0 16px;
+ font-size: 12px;
+ color: #888;
+ }
-.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;
-}
+ .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;
-}
+ .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;
-}
+ .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;
+ }
</style>
\ No newline at end of file
--
Gitblit v1.9.3