From f1e31cf5af3cc9648ba3f33bd99ddd40a3027d08 Mon Sep 17 00:00:00 2001
From: spring <2396852758@qq.com>
Date: 星期四, 21 五月 2026 09:46:11 +0800
Subject: [PATCH] fix: 删除旧财务代码
---
/dev/null | 279 -------------------------------------------------------
1 files changed, 0 insertions(+), 279 deletions(-)
diff --git a/src/api/financialManagement/salesRefund.js b/src/api/financialManagement/salesRefund.js
deleted file mode 100644
index 84b87fb..0000000
--- a/src/api/financialManagement/salesRefund.js
+++ /dev/null
@@ -1,41 +0,0 @@
-import request from "@/utils/request";
-
-// 鏌ヨ鍒楄〃
-// /salesRefundAmountOrder/page
-export const listPage = (params) => {
- return request({
- url: "/salesRefundAmountOrder/page",
- method: "get",
- params,
- });
-};
-
-// 鏂板
-// /salesRefundAmountOrder/add
-export function add(data) {
- return request({
- url: "/salesRefundAmountOrder/add",
- method: "post",
- data: data,
- });
-}
-
-// 淇敼
-// /salesRefundAmountOrder/update
-export function update(data) {
- return request({
- url: "/salesRefundAmountOrder/update",
- method: "put",
- data: data,
- });
-}
-
-// 鍒犻櫎
-// /salesRefundAmountOrder/deleteByIds
-export function del(data) {
- return request({
- url: "/salesRefundAmountOrder/deleteByIds",
- method: "delete",
- data: data,
- });
-}
\ No newline at end of file
diff --git a/src/api/procurementManagement/invoiceEntry.js b/src/api/procurementManagement/invoiceEntry.js
deleted file mode 100644
index 8325aa7..0000000
--- a/src/api/procurementManagement/invoiceEntry.js
+++ /dev/null
@@ -1,69 +0,0 @@
-// 閲囪喘-鏉ョエ鐧昏鎺ュ彛
-import request from "@/utils/request";
-
-// 鏌ヨ閲囪喘鍚堝悓鍙�
-export function getProduct(query) {
- return request({
- url: "/purchase/ledger/getProduct",
- method: "get",
- params: query,
- });
-}
-
-// 鏌ヨid閲囪喘鍚堝悓鍙�
-export function getPurchaseNoById(query) {
- return request({
- url: "/purchase/ledger/getPurchaseNoById",
- method: "get",
- params: query,
- });
-}
-// 鏍规嵁閲囪喘鍚堝悓鍙锋煡璇㈣缁嗕俊鎭�
-export function getInfo(query) {
- return request({
- url: "/purchase/ledger/getInfo",
- method: "get",
- params: query,
- });
-}
-// 涓诲垪琛ㄦ煡璇�
-export function gePurchaseList(query) {
- return request({
- url: "/purchase/ledger/list",
- method: "get",
- params: query,
- });
-}
-// 涓诲垪琛ㄦ煡璇�
-export function getRegistrationById(query) {
- return request({
- url: "/purchase/registration/getRegistrationById",
- method: "get",
- params: query,
- });
-}
-// 鏂板缂栬緫鏉ョエ鐧昏
-export function addOrUpdateRegistration(query) {
- return request({
- url: "/purchase/registration/addOrUpdateRegistration",
- method: "post",
- data: query,
- });
-}
-// 鍒犻櫎鏉ョエ鐧昏
-export function delRegistration(query) {
- return request({
- url: "/purchase/registration/delRegistration",
- method: "delete",
- data: query,
- });
-}
-
-// 涓诲垪琛ㄦ煡璇�
-export function gePurchaseListPage(query) {
- return request({
- url: "/purchase/ledger/listPage",
- method: "get",
- params: query,
- });
-}
diff --git a/src/api/procurementManagement/paymentEntry.js b/src/api/procurementManagement/paymentEntry.js
deleted file mode 100644
index 6ef0eb9..0000000
--- a/src/api/procurementManagement/paymentEntry.js
+++ /dev/null
@@ -1,81 +0,0 @@
-// 閲囪喘浠樻鐧昏椤甸潰鎺ュ彛
-import request from "@/utils/request";
-
-// 鍒嗛〉鏌ヨ
-export function registrationList(query) {
- return request({
- url: "/purchase/paymentRegistration/list",
- method: "get",
- params: query,
- });
-}
-// 鏌ヨ璇︽儏
-export function registrationInfo(query) {
- return request({
- url: "/purchase/paymentRegistration/" + query,
- method: "get",
- });
-}
-// 鏍规嵁閲囪喘鍚堝悓鍙锋煡璇㈣鎯�
-export function byPurchaseId(query) {
- return request({
- url: "/purchase/paymentRegistration/byPurchaseId/" + query,
- method: "get",
- });
-}
-// 鏌ヨ閲囪喘鍚堝悓鍙�
-export function getPurchaseNo() {
- return request({
- url: "/purchase/ledger/getPurchaseNo",
- method: "get",
- });
-}
-// 鏂板
-export function paymentRegistrationAdd(query) {
- return request({
- url: "/purchase/paymentRegistration",
- method: "post",
- data: query,
- });
-}
-// 淇敼
-export function paymentRegistrationEdit(query) {
- return request({
- url: "/purchase/paymentRegistration",
- method: "put",
- data: query,
- });
-}
-// 鍒犻櫎
-export function paymentRegistrationDel(query) {
- return request({
- url: "/purchase/paymentRegistration/delete",
- method: "delete",
- data: query,
- });
-}
-// 鑾峰彇鍙戠エ鍙峰拰鍙戠エ閲戦
-export function getTicketNo(query) {
- return request({
- url: "/purchase/registration/getTicketNo",
- method: "get",
- params: query,
- });
-}
-// 鍒嗛〉鏌ヨ
-export function paymentHistoryList(query) {
- return request({
- url: "/purchase/paymentRegistration/paymentHistoryList",
- method: "get",
- params: query,
- });
-}
-
-// 鍒嗛〉鏌ヨ
-export function paymentHistoryListPage(query) {
- return request({
- url: "/purchase/paymentRegistration/paymentHistoryListPage",
- method: "get",
- params: query,
- });
-}
diff --git a/src/api/procurementManagement/procurementInvoiceLedger.js b/src/api/procurementManagement/procurementInvoiceLedger.js
deleted file mode 100644
index d0716f9..0000000
--- a/src/api/procurementManagement/procurementInvoiceLedger.js
+++ /dev/null
@@ -1,124 +0,0 @@
-// 閲囪喘-鏉ョエ鍙拌处鎺ュ彛
-import request from "@/utils/request";
-
-// 鏌ヨ鍒楄〃
-export function invoiceList(query) {
- return request({
- url: "/purchase/registration/list",
- method: "get",
- params: query,
- });
-}
-// 鏌ヨ璇︽儏
-// export function getInvoiceById(query) {
-// return request({
-// url: "/purchase/registration/getRegistrationById",
-// method: "get",
-// params: query,
-// });
-// }
-// 鏂板銆佺紪杈�
-export function addOrUpdateInvoice(query) {
- return request({
- url: "/purchase/invoice/addOrUpdateInvoice",
- method: "post",
- data: query,
- });
-}
-// 鍒犻櫎
-export function delInvoice(query) {
- return request({
- url: "/purchase/invoice/delInvoice",
- method: "delete",
- data: query,
- });
-}
-// 鍒犻櫎鏉ョエ鍙拌处
-export function delRegistration(query) {
- return request({
- url: "/purchase/registration/delRegistration",
- method: "delete",
- data: query,
- });
-}
-// 鍒犻櫎闄勪欢
-export function delCommonFile(query) {
- return request({
- url: "/commonFile/delCommonFile",
- method: "delete",
- data: query,
- });
-}
-// 瀛愯〃鏍兼煡璇�
-export function productRecordList(query) {
- return request({
- url: "/purchase/registration/productRecordList",
- method: "get",
- params: query,
- });
-}
-
-// 鏌ヨ鍒楄〃
-export function invoiceListPage(query) {
- return request({
- url: "/sales/product/listPagePurchaseLedger",
- method: "get",
- params: query,
- });
-}
-
-export function productRecordPage(query) {
- return request({
- url: "/purchase/registration/productRecordPage",
- method: "get",
- params: query,
- });
-}
-
-// export function getProductRecordById(params) {
-// return request({
-// url: "/purchase/registration/getProductRecordById",
-// method: "get",
-// params: params,
-// });
-// }
-export function getProductRecordById(data) {
- return request({
- url: "/purchase/registration/getProductRecordById",
- method: "post",
- data: data,
- });
-}
-
-export function updateRegistration(data) {
- return request({
- url: "/purchase/registration/updateRegistration",
- method: "post",
- data: data,
- });
-}
-
-// 鏌ヨ浠樻鐧昏瀛愬垪琛�
-export function registrationListPageGetById(query) {
- return request({
- url: "/purchase/registration/getById",
- method: "get",
- params: query,
- });
-}
-// 淇敼浠樻娴佹按
-export function updatePaymentRegistration(query) {
- return request({
- url: "/purchase/registration/updatePaymentRegistration",
- method: "put",
- data: query,
- });
-}
-// 鍒犻櫎浠樻娴佹按
-export function delPaymentRegistration(query) {
- return request({
- url: "/purchase/registration/delPaymentRegistration",
- method: "delete",
- data: query,
- });
-}
diff --git a/src/api/salesManagement/invoiceLedger.js b/src/api/salesManagement/invoiceLedger.js
deleted file mode 100644
index 6a54493..0000000
--- a/src/api/salesManagement/invoiceLedger.js
+++ /dev/null
@@ -1,92 +0,0 @@
-// 寮�绁ㄥ彴璐﹂〉闈㈡帴鍙�
-import request from '@/utils/request'
-
-// 鍒嗛〉鏌ヨ
-export function invoiceLedgerList(query) {
- return request({
- url: '/invoiceLedger/page',
- method: 'get',
- params: query
- })
-}
-
-// 鏂板
-export function invoiceLedgerSaveOrUpdate(query) {
- return request({
- url: '/invoiceLedger/saveOrUpdate',
- method: 'post',
- data: query
- })
-}
-
-// 寮�绁ㄥ彴璐﹀垹闄�
-export function invoiceLedgerDel(query) {
- return request({
- url: '/invoiceLedger/del',
- method: 'delete',
- data: query
- })
-}
-
-// 璇︽儏鏌ヨ
-export function invoiceLedgerDetail(query) {
- return request({
- url: '/invoiceLedger/info',
- method: 'get',
- params: query
- })
-}
-
-// 闄勪欢鎻愪氦
-export function commitFile(query) {
- return request({
- url: '/invoiceLedger/commitFile',
- method: 'post',
- data: query
- })
-}
-
-// 寮�绁ㄥ彴璐﹂儴鍒嗕篃鏌ヨ
-export function invoiceLedgerListNoPage(query) {
- return request({
- url: '/invoiceLedger/list',
- method: 'get',
- data: query
- })
-}
-
-// 鍒嗛〉鏌ヨ
-export function invoiceLedgerSalesAccount(query) {
- return request({
- url: '/invoiceLedger/salesAccount',
- method: 'get',
- params: query
- })
-}
-
-// 浜у搧寮�绁ㄨ褰曞垎椤垫煡璇�
-export function registrationProductPage(query) {
- return request({
- url: '/invoiceLedger/registrationProductPage',
- method: 'get',
- params: query
- })
-}
-
-// 浜у搧寮�绁ㄨ鎯呮煡璇�
-export function invoiceLedgerProductInfo(query) {
- return request({
- url: '/invoiceLedger/invoiceLedgerProductInfo',
- method: 'get',
- params: query
- })
-}
-
-export function delInvoiceLedgerByRegProductId(invoiceRegistrationProductId) {
- return request({
- url: '/invoiceLedger/delInvoiceLedger/'+ invoiceRegistrationProductId,
- method: 'delete'
- })
-}
-
-
diff --git a/src/api/salesManagement/invoiceRegistration.js b/src/api/salesManagement/invoiceRegistration.js
deleted file mode 100644
index 4bc33ce..0000000
--- a/src/api/salesManagement/invoiceRegistration.js
+++ /dev/null
@@ -1,54 +0,0 @@
-// 閿�鍞彴璐﹂〉闈㈡帴鍙�
-import request from '@/utils/request'
-
-// 鍒嗛〉鏌ヨ
-export function invoiceRegistrationList(query) {
- return request({
- url: '/invoiceRegistration/listPage',
- method: 'get',
- params: query
- })
-}
-// 寮�绁ㄧ櫥璁版柊澧�
-export function invoiceRegistrationSave(query) {
- return request({
- url: '/invoiceRegistration/save',
- method: 'post',
- data: query
- })
-}
-// 寮�绁ㄧ櫥璁板垹闄�
-export function invoiceRegistrationDel(query) {
- return request({
- url: '/invoiceRegistration/del',
- method: 'delete',
- data: query
- })
-}
-// 瀛愯〃鏍兼煡璇�
-export function productList(query) {
- return request({
- url: '/invoiceRegistration/productList',
- method: 'get',
- params: query
- })
-}
-
-// 寮�绁ㄧ櫥璁拌鎯�
-export function invoiceRegistrationDetail(query) {
- return request({
- url: '/invoiceRegistration/detail',
- method: 'get',
- params: query
- })
-}
-
-// 瀵煎嚭寮�绁ㄧ櫥璁�
-export function invoiceRegistrationExport(query) {
- return request({
- url: '/invoiceRegistration/export',
- method: 'get',
- params: query,
- responseType: 'blob'
- })
-}
diff --git a/src/api/salesManagement/receiptPayment.js b/src/api/salesManagement/receiptPayment.js
deleted file mode 100644
index 0f0529d..0000000
--- a/src/api/salesManagement/receiptPayment.js
+++ /dev/null
@@ -1,84 +0,0 @@
-// 寮�绁ㄧ櫥璁伴〉闈㈡帴鍙�
-import request from '@/utils/request'
-
-// 鏂板/淇敼
-export function receiptPaymentSaveOrUpdate(query) {
- return request({
- url: '/receiptPayment/saveOrUpdate',
- method: 'post',
- data: query
- })
-}
-
-// 瀹㈡埛寰�鏉ヨ褰曟煡璇�
-export function customerInteractions(query) {
- return request({
- url: '/receiptPayment/customerInteractions',
- method: 'get',
- params: query
- })
-}
-
-// 璇︽儏
-export function receiptPaymentInfo(query) {
- return request({
- url: '/receiptPayment/info',
- method: 'get',
- params: query
- })
-}
-
-// 鍒犻櫎
-export function receiptPaymentDel(query) {
- return request({
- url: '/receiptPayment/del',
- method: 'delete',
- data: query
- })
-}
-
-// 鏌ヨ宸茬粡缁戝畾鍙戠エ鐨勫紑绁ㄥ彴璐�
-export function bindInvoiceNoRegPage(query) {
- return request({
- url: '/sales/product/listPageSalesLedger',
- method: 'get',
- params: query
- })
-}
-
-// 寮�绁ㄥ彴璐﹁鎯�
-export function invoiceInfo(query) {
- return request({
- url: '/receiptPayment/invoiceInfo',
- method: 'get',
- params: query
- })
-}
-
-// 璇㈠洖娆捐褰�
-export function receiptPaymentHistoryList(query) {
- return request({
- url: '/receiptPayment/receiptPaymentHistoryList',
- method: 'get',
- params: query
- })
-}
-
-/**
- * 鏌ヨ鍥炴璁板綍鍒嗛〉鏌ヨ
- */
-export function receiptPaymentHistoryListPage(query) {
- return request({
- url: '/receiptPayment/receiptPaymentHistoryListPage',
- method: 'get',
- params: query
- })
-}
-
-export function receiptPaymentHistoryListNoPage(query) {
- return request({
- url: '/receiptPayment/receiptPaymentHistoryListNoPage',
- method: 'get',
- params: query
- })
-}
diff --git a/src/views/financialManagement/salesRefund/components/ReceiptandRefundPopupWindow.vue b/src/views/financialManagement/salesRefund/components/ReceiptandRefundPopupWindow.vue
deleted file mode 100644
index 35215a5..0000000
--- a/src/views/financialManagement/salesRefund/components/ReceiptandRefundPopupWindow.vue
+++ /dev/null
@@ -1,227 +0,0 @@
-<template>
- <FormDialog v-model="visible" title="鏀舵/閫�娆�" width="90%" @confirm="submit" @cancel="visible=false">
- <div class="section">
- <div class="section-title descriptions">鍩虹璧勬枡</div>
- <el-form :model="form" label-width="100px">
- <el-row :gutter="20">
- <el-col :span="6">
- <el-form-item label="鍗曟嵁缂栧彿">
- <el-input v-model="form.billNo" placeholder="浣跨敤绯荤粺缂栧彿" />
- </el-form-item>
- </el-col>
- <el-col :span="6">
- <el-form-item label="瀹㈡埛">
- <el-select v-model="form.customerId" placeholder="璇烽�夋嫨">
- <el-option v-for="c in customerOptions" :key="c.value" :label="c.label" :value="c.value" />
- </el-select>
- </el-form-item>
- </el-col>
- <el-col :span="6">
- <el-form-item label="鍒跺崟浜�">
- <el-select v-model="form.makerId" placeholder="璇烽�夋嫨">
- <el-option v-for="u in userOptions" :key="u.value" :label="u.label" :value="u.value" />
- </el-select>
- </el-form-item>
- </el-col>
- <el-col :span="6">
- <el-form-item label="鍒跺崟鏃ユ湡">
- <el-date-picker v-model="form.makeDate" type="date" value-format="YYYY-MM-DD" />
- </el-form-item>
- </el-col>
- <el-col :span="6">
- <el-form-item label="鐢宠閮ㄩ棬">
- <el-select v-model="form.applyDeptId" placeholder="璇烽�夋嫨">
- <el-option v-for="d in deptOptions" :key="d.value" :label="d.label" :value="d.value" />
- </el-select>
- </el-form-item>
- </el-col>
- <el-col :span="12">
- <el-form-item label="澶囨敞">
- <el-input v-model="form.remark" maxlength="100" show-word-limit placeholder="璇疯緭鍏�" />
- </el-form-item>
- </el-col>
- <el-col :span="6">
- <el-form-item label="闄勪欢">
- <el-upload :action="uploadUrl" :headers="uploadHeaders" name="files" :on-success="onUploadSuccess">
- <el-button>涓婁紶鏂囦欢</el-button>
- </el-upload>
- </el-form-item>
- </el-col>
- </el-row>
- </el-form>
- </div>
-
- <div class="section">
- <div class="toolbar">
- <div class="section-title descriptions">浠樻鍒楄〃</div>
- <el-input v-model="form.discountAmount" placeholder="浼樻儬閲戦" style="width:240px" />
- </div>
- <el-table :data="form.paymentList" border>
- <el-table-column label="浠樻璐﹀彿" minWidth="160">
- <template #default="scope">
- <el-input v-model="scope.row.accountNo" placeholder="璇疯緭鍏�" />
- </template>
- </el-table-column>
- <el-table-column label="浠樻璐﹀彿鍚嶇О" minWidth="180">
- <template #default="scope">
- <el-select v-model="scope.row.accountName" placeholder="璇烽�夋嫨">
- <el-option v-for="a in accountOptions" :key="a.value" :label="a.label" :value="a.label" />
- </el-select>
- </template>
- </el-table-column>
- <el-table-column label="浠樻鏂瑰紡" minWidth="140">
- <template #default="scope">
- <el-select v-model="scope.row.payMethod" placeholder="璇烽�夋嫨">
- <el-option v-for="m in payMethodOptions" :key="m.value" :label="m.label" :value="m.value" />
- </el-select>
- </template>
- </el-table-column>
- <el-table-column label="瀹為檯浠樻閲戦" minWidth="160">
- <template #default="scope">
- <el-input v-model="scope.row.amount" placeholder="璇疯緭鍏�" />
- </template>
- </el-table-column>
- <el-table-column label="鎵嬬画璐�" minWidth="140">
- <template #default="scope">
- <el-input v-model="scope.row.fee" placeholder="璇疯緭鍏�" />
- </template>
- </el-table-column>
- <el-table-column label="浜ゆ槗鍙�/绁ㄦ嵁鍙�" minWidth="180">
- <template #default="scope">
- <el-input v-model="scope.row.txNo" placeholder="璇疯緭鍏�" />
- </template>
- </el-table-column>
- <el-table-column label="澶囨敞" minWidth="200">
- <template #default="scope">
- <el-input v-model="scope.row.remark" maxlength="30" show-word-limit placeholder="璇疯緭鍏�" />
- </template>
- </el-table-column>
- <el-table-column label="鎿嶄綔" minWidth="120" fixed="right">
- <template #default="scope">
- <el-button link type="primary" @click="addPayment">鏂板涓�琛�</el-button>
- <el-button link type="danger" @click="removePayment(scope.$index)">鍒犻櫎</el-button>
- </template>
- </el-table-column>
- </el-table>
- <div class="summary">鍚堣</div>
- </div>
-
- <div class="section">
- <div class="section-container">
- <div class="section-title descriptions">婧愬崟淇℃伅</div>
- <div class="source-toolbar">
- <el-button @click="clearSource">娓呯┖</el-button>
- <el-button @click="selectSource">閫夋嫨婧愬崟</el-button>
- <el-button type="primary" @click="autoWriteOff">鑷姩鏍搁攢</el-button>
- </div>
- </div>
- <el-table :data="form.sourceList" border>
- <el-table-column label="鍗曟嵁鏃ユ湡" minWidth="160" prop="billDate" />
- <el-table-column label="鍗曟嵁绫诲瀷" minWidth="160" prop="billType" />
- <el-table-column label="鍗曟嵁缂栧彿" minWidth="200" prop="billNo" />
- <el-table-column label="鍗曟嵁閲戦" minWidth="120" prop="billAmount" />
- <el-table-column label="宸叉牳閿�閲戦" minWidth="120" prop="wroteAmount" />
- <el-table-column label="鏈牳閿�閲戦" minWidth="120" prop="unWroteAmount" />
- <el-table-column label="鏈鏍搁攢閲戦" minWidth="160">
- <template #default="scope">
- <el-input v-model="scope.row.thisWriteOffAmount" />
- </template>
- </el-table-column>
- <el-table-column label="鎿嶄綔" width="100" fixed="right">
- <template #default="scope">
- <el-button link type="danger" @click="removeSource(scope.$index)">鍒犻櫎</el-button>
- </template>
- </el-table-column>
- </el-table>
- <div class="summary">鍚堣</div>
- </div>
-
- <template #footer>
- <el-button type="primary" @click="submit">纭</el-button>
- <el-button @click="visible=false">鍙栨秷</el-button>
- </template>
- </FormDialog>
-</template>
-
-<script setup>
-import { ref } from 'vue';
-import { getToken } from '@/utils/auth';
-import FormDialog from "@/components/Dialog/FormDialog.vue";
-
-const visible = ref(false);
-const form = ref({
- billNo: '',
- customerId: undefined,
- makerId: undefined,
- makeDate: '',
- applyDeptId: undefined,
- remark: '',
- discountAmount: '',
- paymentList: [{ accountNo: '', accountName: '', payMethod: '', amount: '', fee: '', txNo: '', remark: '' }],
- sourceList: [{ billDate: '', billType: '', billNo: '', billAmount: 0, wroteAmount: 0, unWroteAmount: 0, thisWriteOffAmount: '' }]
-});
-
-const customerOptions = ref([]);
-const userOptions = ref([]);
-const deptOptions = ref([]);
-const accountOptions = ref([]);
-const payMethodOptions = ref([]);
-
-const uploadUrl = import.meta.env.VITE_APP_BASE_API + '/basic/customer-follow/upload';
-const uploadHeaders = { Authorization: 'Bearer ' + getToken() };
-
-function addPayment() {
- form.value.paymentList.push({ accountNo: '', accountName: '', payMethod: '', amount: '', fee: '', txNo: '', remark: '' });
-}
-function removePayment(i) {
- form.value.paymentList.splice(i, 1);
-}
-function removeSource(i) {
- form.value.sourceList.splice(i, 1);
-}
-function clearSource() {
- form.value.sourceList = [];
-}
-function selectSource() {}
-function autoWriteOff() {}
-function onUploadSuccess() {}
-
-function open(payload) {
- visible.value = true;
-}
-function submit() {
- visible.value = false;
- emit('submitted');
-}
-
-defineExpose({ open });
-</script>
-
-<style scoped>
-.section { background: #fff; border-radius: 8px; box-shadow: 0 2px 12px 0 rgba(0,0,0,0.05); padding: 16px; margin-bottom: 16px; }
-.section-title { font-weight: 600; margin-bottom: 12px; }
-.descriptions {
- margin-bottom: 20px;
- display: inline-block;
- font-size: 1rem;
- font-weight: 600;
- padding-left: 12px;
- position: relative;
-}
-.descriptions::before {
- content: "";
- position: absolute;
- left: 0;
- top: 50%;
- transform: translateY(-50%);
- width: 4px;
- height: 1rem;
- background-color: #002FA7;
- border-radius: 2px;
-}
-.toolbar { margin-bottom: 10px; display: flex; justify-content: space-between;
- align-items: center; }
-.source-toolbar { margin-bottom: 10px; display: flex; gap: 8px; }
-.summary { padding: 8px 12px; background: #fff7e6; color: #ad6800; }
-.section-container{display: flex;align-items: center;justify-content: space-between; }
-</style>
diff --git a/src/views/financialManagement/salesRefund/index.vue b/src/views/financialManagement/salesRefund/index.vue
deleted file mode 100644
index ccb775f..0000000
--- a/src/views/financialManagement/salesRefund/index.vue
+++ /dev/null
@@ -1,134 +0,0 @@
-<template>
- <div class="app-container">
- <!-- 浣跨敤鍏叡鎼滅储缁勪欢 -->
- <SearchPanel
- v-model="queryParams"
- :schema="searchSchema"
- @search="handleQuery"
- @reset="resetQuery"
- />
-
- <!-- 琛ㄦ牸鍖哄煙 -->
- <el-card class="table-card">
- <el-table :data="refundList" v-loading="loading" border>
- <el-table-column label="閫�璐у崟鍙�" prop="returnManagementNo" align="center" />
- <el-table-column label="瀹㈡埛鍚嶇О" prop="customerName" align="center" />
- <el-table-column label="閿�鍞崟鍙�" prop="salesContractNo" align="center" />
- <el-table-column label="搴旈��娆鹃噾棰�" prop="refundAmount" align="center" />
- <el-table-column label="宸查��娆鹃噾棰�" prop="refundedAmount" align="center" />
- <el-table-column label="鏈��娆鹃噾棰�" prop="notRefundedAmount" align="center" />
- <el-table-column label="鐘舵��" prop="status" align="center">
- <template #default="scope">
- <dict-tag :options="dictRef.sales_refund_status.value" :value="scope.row.status" />
- </template>
- </el-table-column>
- <el-table-column label="鍒涘缓浜�" prop="createUserName" align="center" />
- <el-table-column label="鍒涘缓鏃堕棿" prop="createTime" align="center" />
- <el-table-column label="鎿嶄綔" align="center" width="150">
- <template #default="scope">
- <el-button link type="primary" @click="openDetail(scope.row)" style="color: #67C23A">璇︽儏</el-button>
- <el-button link type="primary" @click="openConfirm(scope.row)">纭</el-button>
- </template>
- </el-table-column>
- </el-table>
-
- <pagination
- v-show="total > 0"
- :total="total"
- v-model:page="queryParams.pageNum"
- v-model:limit="queryParams.pageSize"
- @pagination="getList"
- />
- </el-card>
-<ReceiptandRefundPopupWindow ref="popupRef" @submitted="getList" />
- </div>
-</template>
-
-<script setup name="SalesRefund">
-import { ref, reactive, onMounted, computed, getCurrentInstance } from 'vue';
-const { proxy } = getCurrentInstance();
-import { listPage, add, update, del } from '@/api/financialManagement/salesRefund';
-import SearchPanel from '@/components/SearchPanel/index.vue';
-import ReceiptandRefundPopupWindow from './components/ReceiptandRefundPopupWindow.vue';
-
-// 鏌ヨ鍙傛暟
-const queryParams = reactive({
- pageNum: 1,
- pageSize: 10,
- returnManagementNo: undefined,
- customerName: undefined,
- salesContractNo: undefined,
- createUserName: undefined,
- status: undefined
-});
-
-const dictRef = proxy.useDict('sales_refund_status');
-const salesRefundStatusOptions = computed(() => dictRef.sales_refund_status.value || []);
-
-// 鎼滅储鏍忛厤缃�
-const searchSchema = [
- { type: 'input', prop: 'returnManagementNo', placeholder: '閫�璐у崟鍙�' },
- { type: 'input', prop: 'customerName', placeholder: '瀹㈡埛鍚嶇О' },
- { type: 'input', prop: 'salesContractNo', placeholder: '閿�鍞崟鍙�' },
- { type: 'input', prop: 'createUserName', placeholder: '鍒涘缓浜哄悕绉�' },
- { type: 'select', prop: 'status', placeholder: '鐘舵��', options: salesRefundStatusOptions }
-];
-
-const loading = ref(false);
-const total = ref(0);
-const refundList = ref([]);
-const popupRef = ref(null);
-
-/** 鏌ヨ鍒楄〃 */
-function getList() {
- loading.value = true;
- const { pageNum, pageSize, ...filters } = queryParams;
- listPage({
- current: pageNum,
- size: pageSize,
- ...filters
- })
- .then(res => {
- refundList.value = res?.data?.records || res?.rows || [];
- total.value = res?.data?.total || res?.total || 0;
- })
- .finally(() => {
- loading.value = false;
- });
-}
-
-/** 鎼滅储鎸夐挳鎿嶄綔 */
-function handleQuery() {
- queryParams.pageNum = 1;
- getList();
-}
-
-/** 閲嶇疆鎸夐挳鎿嶄綔 */
-function resetQuery() {
- handleQuery();
-}
-
-function openDetail(row) {
- if (popupRef.value) {
- popupRef.value.open({ mode: 'detail', row });
- }
-}
-function openConfirm(row) {
- if (popupRef.value) {
- popupRef.value.open({ mode: 'confirm', row });
- }
-}
-
-onMounted(() => {
- getList();
-});
-</script>
-
-<style scoped lang="scss">
-.table-card {
- border-radius: 8px;
- box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.05);
-}
-</style>
-
-<!-- keep-alive child -->
diff --git a/src/views/procurementManagement/invoiceEntry/components/ExpandTable.vue b/src/views/procurementManagement/invoiceEntry/components/ExpandTable.vue
deleted file mode 100644
index d329768..0000000
--- a/src/views/procurementManagement/invoiceEntry/components/ExpandTable.vue
+++ /dev/null
@@ -1,144 +0,0 @@
-<template>
- <PIMTable
- rowKey="id"
- :column="columns"
- :tableData="dataList"
- :tableLoading="loading"
- :summaryMethod="summarizeChildrenTable"
- :isShowSummary="true"
- :isShowPagination="false"
- height="auto"
- >
- </PIMTable>
-</template>
-
-<script setup>
-import { usePaginationApi } from "@/hooks/usePaginationApi";
-import { productList } from "@/api/procurementManagement/procurementLedger.js";
-import { nextTick } from "vue";
-const { proxy } = getCurrentInstance();
-
-defineOptions({
- name: "鏉ョエ鐧昏鎶樺彔琛�",
-});
-
-const {
- loading,
- filters,
- columns,
- dataList,
- pagination,
- getTableData,
- resetFilters,
-} = usePaginationApi(
- productList,
- {
- salesLedgerId: undefined,
- type: 2,
- },
- [
- {
- label: "浜у搧澶х被",
- prop: "productCategory",
- },
- {
- label: "瑙勬牸鍨嬪彿",
- prop: "specificationModel",
- },
- {
- label: "鍗曚綅",
- prop: "unit",
- },
- {
- label: "鏁伴噺",
- prop: "quantity",
- },
- {
- label: "绋庣巼(%)",
- prop: "taxRate",
- },
- {
- label: "鍚◣鍗曚环(鍏�)",
- prop: "taxInclusiveUnitPrice",
- width:200,
- formatData: (val) => {
- return val ? parseFloat(val).toFixed(2) : "-";
- },
- },
- {
- label: "鍚◣鎬讳环(鍏�)",
- prop: "taxInclusiveTotalPrice",
- width:200,
- formatData: (val) => {
- return val ? parseFloat(val).toFixed(2) : "-";
- },
- },
- {
- label: "涓嶅惈绋庢�讳环(鍏�)",
- prop: "taxExclusiveTotalPrice",
- width:200,
- formatData: (val) => {
- return val ? parseFloat(val).toFixed(2) : "-";
- },
- },
- {
- label: "鏈鏉ョエ閲戦(鍏�)",
- prop: "ticketsAmount",
- width:200,
- formatData: (val) => {
- return val ? parseFloat(val).toFixed(2) : "-";
- },
- },
- {
- label: "鏈潵绁ㄦ暟",
- prop: "futureTickets",
- },
- {
- label: "鏈潵绁ㄩ噾棰�(鍏�)",
- prop: "futureTicketsAmount",
- width:200,
- formatData: (val) => {
- return val ? parseFloat(val).toFixed(2) : "-";
- },
- },
- ],
- {},
- {},
- (data) => {
- dataList.value = data;
- }
-);
-
-const getList = async (id) => {
- await nextTick();
- filters.salesLedgerId = id;
- // 璁剧疆涓�涓緢澶х殑 pageSize 浠ヨ幏鍙栨墍鏈夋暟鎹�
- pagination.pageSize = 10000;
- pagination.currentPage = 1;
- getTableData();
-};
-// 瀛愯〃鍚堣鏂规硶
-const summarizeChildrenTable = (param) => {
- return proxy.summarizeTable(
- param,
- [
- "taxInclusiveUnitPrice",
- "taxInclusiveTotalPrice",
- "taxExclusiveTotalPrice",
- "ticketsNum",
- "ticketsAmount",
- "futureTickets",
- "futureTicketsAmount",
- ],
- {
- ticketsNum: { noDecimal: true }, // 涓嶄繚鐣欏皬鏁�
- futureTickets: { noDecimal: true }, // 涓嶄繚鐣欏皬鏁�
- }
- );
-};
-defineExpose({
- getList,
-});
-</script>
-
-<style lang="scss" scoped></style>
diff --git a/src/views/procurementManagement/invoiceEntry/components/Modal.vue b/src/views/procurementManagement/invoiceEntry/components/Modal.vue
deleted file mode 100644
index 33d5144..0000000
--- a/src/views/procurementManagement/invoiceEntry/components/Modal.vue
+++ /dev/null
@@ -1,718 +0,0 @@
-<template>
- <el-dialog :title="modalOptions.title" v-model="visible" width="70%" draggable>
- <el-form
- ref="formRef"
- :model="form"
- :rules="rules"
- label-width="120px"
- label-position="top"
- >
- <el-row :gutter="30">
- <el-col :span="12">
- <el-form-item label="閲囪喘鍚堝悓鍙凤細" prop="purchaseLedgerNo">
- <el-input v-model="form.purchaseLedgerNo" disabled placeholder="澶氬悎鍚屾壒閲忓鐞嗭紙鍏蜂綋鍚堝悓鍙疯浜у搧鍒楄〃锛�" />
- </el-form-item>
- </el-col>
- <el-col :span="12">
- <el-form-item label="閿�鍞悎鍚屽彿锛�" prop="salesContractNo">
- <el-input
- v-model="form.salesContractNo"
- placeholder="鑷姩濉厖"
- clearable
- disabled
- />
- </el-form-item>
- </el-col>
- <el-col :span="12">
- <el-form-item label="渚涘簲鍟嗗悕绉帮細" prop="supplierName">
- <el-input
- v-model="form.supplierName"
- placeholder="鑷姩濉厖"
- clearable
- disabled
- />
- </el-form-item>
- </el-col>
-<!-- <el-col :span="12">-->
-<!-- <el-form-item label="椤圭洰鍚嶇О锛�" prop="projectName">-->
-<!-- <el-input-->
-<!-- v-model="form.projectName"-->
-<!-- placeholder="鑷姩濉厖"-->
-<!-- clearable-->
-<!-- disabled-->
-<!-- />-->
-<!-- </el-form-item>-->
-<!-- </el-col>-->
- <el-col :span="12">
- <el-form-item label="鍙戠エ鍙凤細" prop="invoiceNumber">
- <el-input
- v-model="form.invoiceNumber"
- placeholder="璇疯緭鍏�"
- clearable
- />
- </el-form-item>
- </el-col>
- <el-col :span="12">
- <el-form-item label="鍙戠エ閲戦(鍏�)锛�" prop="invoiceAmount">
- <el-input-number :step="0.01" :min="0" style="width: 100%"
- v-model="form.invoiceAmount"
- placeholder="璇疯緭鍏ュ彂绁ㄩ噾棰�"
- clearable
- disabled
- />
- </el-form-item>
- </el-col>
- <el-col :span="12">
- <el-form-item label="褰曞叆浜猴細" prop="issUer">
- <el-input
- v-model="form.issUer"
- placeholder="璇疯緭鍏�"
- clearable
- disabled
- />
- </el-form-item>
- </el-col>
- <el-col :span="12">
- <el-form-item label="寮�绁ㄦ棩鏈燂細" prop="entryDate">
- <el-date-picker
- style="width: 100%"
- v-model="form.entryDate"
- type="date"
- value-format="YYYY-MM-DD"
- format="YYYY-MM-DD"
- clearable
- />
- </el-form-item>
- </el-col>
- <el-col :span="12">
- <el-form-item label="褰曞叆鏃ユ湡锛�" prop="enterDate">
- <el-date-picker
- style="width: 100%"
- v-model="form.enterDate"
- type="date"
- value-format="YYYY-MM-DD"
- format="YYYY-MM-DD"
- clearable
- />
- </el-form-item>
- </el-col>
-
- </el-row>
- <el-form-item label="浜у搧淇℃伅锛�"> </el-form-item>
- <el-table
- :data="form.productData"
- border
- show-summary
- :summary-method="summarizeChildrenTable"
- >
- <el-table-column align="center" label="搴忓彿" type="index" width="60" />
- <el-table-column label="鎵�灞炲悎鍚�" prop="purchaseLedgerNo" width="200">
- <template #default="{ row }">
- <el-tag type="primary">{{ row.purchaseLedgerNo }}</el-tag>
- </template>
- </el-table-column>
- <el-table-column label="浜у搧澶х被" prop="productCategory" />
- <el-table-column label="瑙勬牸鍨嬪彿" prop="specificationModel" width="150" />
- <el-table-column label="鍗曚綅" prop="unit" width="70" />
- <el-table-column label="鏁伴噺" prop="quantity" width="70" />
- <el-table-column label="绋庣巼(%)" prop="taxRate" width="80" />
- <el-table-column
- label="鍚◣鍗曚环(鍏�)"
- prop="taxInclusiveUnitPrice"
- :formatter="formattedNumber"
- />
- <el-table-column
- label="鍚◣鎬讳环(鍏�)"
- prop="taxInclusiveTotalPrice"
- :formatter="formattedNumber"
- />
- <el-table-column
- label="涓嶅惈绋庢�讳环(鍏�)"
- prop="taxExclusiveTotalPrice"
- :formatter="formattedNumber"
- />
- <el-table-column label="鏈寮�绁ㄦ暟" prop="ticketsNum" width="180">
- <template #default="scope">
- <el-input-number
- :step="0.1"
- :min="0"
- :max="scope.row.tempFutureTickets || 0"
- style="width: 100%"
- :precision="2"
- v-model="scope.row.ticketsNum"
- :disabled="isProductDisabled(scope.row)"
- @change="invoiceNumBlur(scope.row)"
- />
- </template>
- </el-table-column>
- <el-table-column
- label="鏈寮�绁ㄩ噾棰�(鍏�)"
- prop="ticketsAmount"
- width="180"
- >
- <template #default="scope">
- <el-input-number
- :step="0.01"
- :min="0"
- style="width: 100%"
- :precision="2"
- v-model="scope.row.ticketsAmount"
- :disabled="isProductDisabled(scope.row)"
- @change="invoiceAmountBlur(scope.row)"
- />
- </template>
- </el-table-column>
- <el-table-column
- label="鏈潵绁ㄦ暟"
- prop="futureTickets"
- :formatter="formattedNumber"
- />
- <el-table-column
- label="鏈鏉ョエ閲戦(鍏�)"
- prop="ticketsAmount"
- :formatter="formattedNumber"
- />
- <el-table-column
- label="鏈潵绁ㄦ暟"
- prop="futureTickets"
- :formatter="formattedNumber"
- />
- <el-table-column
- label="鏈潵绁ㄩ噾棰�(鍏�)"
- prop="futureTicketsAmount"
- :formatter="formattedNumber"
- />
- </el-table>
- </el-form>
- <template #footer>
- <el-button type="primary" :loading="modalLoading" @click="submitForm">
- 纭
- </el-button>
- <el-button @click="closeModal">鍙栨秷</el-button>
- </template>
- </el-dialog>
-</template>
-
-<script setup>
-import { ref, getCurrentInstance } from "vue";
-import { defineEmits } from 'vue';
-import { useModal } from "@/hooks/useModal";
-import useFormData from "@/hooks/useFormData";
-import {
- getPurchaseNoById,
- getInfo,
- addOrUpdateRegistration,
-} from "@/api/procurementManagement/invoiceEntry.js";
-import { getPurchaseById } from "@/api/procurementManagement/procurementLedger.js";
-import useUserStore from "@/store/modules/user";
-import dayjs from "dayjs";
-
-defineOptions({
- name: "鏉ョエ鐧昏妯℃�佹",
-});
-
-const userStore = useUserStore();
-const formRef = ref();
-const { proxy } = getCurrentInstance();
-const { form } = useFormData({
- purchaseLedgerNo: undefined, // 閲囪喘鍚堝悓鍙�
- salesContractNo: undefined, // 閿�鍞悎鍚屽彿
- supplierName: undefined, // 渚涘簲鍟嗗悕绉�
- projectName: undefined, // 椤圭洰鍚嶇О
- invoiceNumber: undefined, // 鍙戠エ鍙�
- invoiceAmount: undefined, // 鍙戠エ閲戦(鍏�)
- issUerId: userStore.id, // 褰曞叆浜�
- issUer: userStore.nickName, // 褰曞叆浜�
- entryDate: undefined, // 寮�绁ㄦ棩鏈�
- salesContractNoId: undefined, // 寮�绁ㄦ棩鏈�
- enterDate: dayjs().format("YYYY-MM-DD"),
- productData: [], // 琛ㄦ牸
-});
-
-const selectedContracts = ref([]); // 瀛樺偍閫変腑鐨勫悎鍚屾暟鎹�
-
-const rules = ref({
- invoiceNumber: [
- { required: true, message: "璇疯緭鍏ュ彂绁ㄥ彿", trigger: "blur" },
- { type: "string" },
- ],
- invoiceAmount: [
- { required: true, message: "璇疯緭鍏ュ彂绁ㄩ噾棰�", trigger: "blur" },
- ],
- entryDate: [{ required: true, message: "璇烽�夋嫨寮�绁ㄦ棩鏈�", trigger: "change" }],
- enterDate: [{ required: true, message: "璇烽�夋嫨褰曞叆鏃ユ湡", trigger: "change" }],
-});
-
-const {
- id,
- visible,
- loading: modalLoading,
- openModal,
- modalOptions,
- handleConfirm,
- closeModal,
-} = useModal({
- title: "鏉ョエ鐧昏",
-});
-
-const emit = defineEmits(['refreshList']);
-
-const columns = [
- {
- label: "浜у搧澶х被",
- prop: "productCategory",
- width: 120,
- },
- {
- label: "瑙勬牸鍨嬪彿",
- prop: "specificationModel",
- width: 120,
- },
- {
- label: "鍗曚綅",
- prop: "unit",
- width: 80,
- },
- {
- label: "鏁伴噺",
- prop: "quantity",
- width: 80,
- },
- {
- label: "绋庣巼(%)",
- prop: "taxRate",
- width: 80,
- },
- {
- label: "褰曞叆鏃ユ湡",
- prop: "registerDate",
- width: 120,
- },
- {
- label: "鍚◣鍗曚环(鍏�)",
- prop: "taxInclusiveUnitPrice",
- width: 150,
- formatData: (val) => {
- return val ? parseFloat(val).toFixed(2) : 0;
- },
- },
- {
- label: "鍚◣鎬讳环(鍏�)",
- prop: "taxInclusiveTotalPrice",
- width: 150,
- formatData: (val) => {
- return parseFloat(val).toFixed(2) ?? 0;
- },
- },
- {
- label: "涓嶅惈绋庢�讳环(鍏�)",
- prop: "taxExclusiveTotalPrice",
- width: 150,
- formatData: (val) => {
- return parseFloat(val).toFixed(2) ?? 0;
- },
- },
- {
- label: "鏈鏉ョエ鏁�",
- prop: "ticketsNum",
- dataType: "slot",
- slot: "ticketsNumRef",
- width: 180,
- align: "center",
- },
- {
- label: "鏈鏉ョエ閲戦(鍏�)",
- prop: "ticketsAmount",
- dataType: "slot",
- slot: "ticketsAmountRef",
- width: 180,
- align: "center",
- },
- {
- label: "鏈潵绁ㄦ暟",
- prop: "futureTickets",
- width: 100,
- },
- {
- label: "鏈潵绁ㄩ噾棰�(鍏�)",
- prop: "futureTicketsAmount",
- width: 200,
- },
-];
-const formattedNumber = (row, column, cellValue) => {
- if (cellValue == 0) {
- return parseFloat(cellValue).toFixed(2);
- }
- if (cellValue) {
- return parseFloat(cellValue).toFixed(2);
- } else {
- return cellValue;
- }
-};
-const getTableData = async (type, selectedRows) => {
- if (type == "add") {
- // 妫�鏌ユ墍鏈夐�夋嫨鐨勫悎鍚屾槸鍚﹀叿鏈夌浉鍚岀殑渚涘簲鍟嗗悕绉�
- const firstRow = selectedRows[0];
- const isSameSupplier = selectedRows.every(row =>
- row.supplierName === firstRow.supplierName
- );
-
- if (!isSameSupplier) {
- proxy.$modal.msgError("璇烽�夋嫨鐩稿悓渚涘簲鍟嗗悕绉扮殑鍚堝悓");
- return;
- }
-
- // 鍏佽涓嶅悓鐨勯噰璐悎鍚屽彿鎵归噺澶勭悊锛屾棤闇�妫�鏌ラ噸澶�
-
- // 娓呯┖琛ㄥ崟鏁版嵁
- Object.keys(form).forEach(key => {
- if (key !== 'productData') {
- form[key] = undefined;
- }
- });
- form.productData = [];
-
- // 鍔犺浇鎵�鏈夐�変腑鍚堝悓鐨勪骇鍝佹暟鎹�
- const promises = selectedRows.map(row =>
- getInfo({ id: row.id })
- );
-
- Promise.all(promises).then(results => {
- // 鍚堝苟鎵�鏈夊悎鍚岀殑浜у搧鏁版嵁锛屽苟涓烘瘡涓骇鍝佹坊鍔犲搴旂殑鍚堝悓淇℃伅
- const allProductData = [];
- results.forEach((result, index) => {
- const contract = selectedRows[index];
- const contractId = contract.id;
- if (result.data && result.data.productData) {
- result.data.productData.forEach(item => {
- allProductData.push({
- ...item,
- purchaseLedgerId: contractId, // 娣诲姞鍚堝悓ID鐢ㄤ簬绛涢��
- purchaseLedgerNo: contract.purchaseContractNumber, // 娣诲姞閲囪喘鍚堝悓鍙�
- supplierName: contract.supplierName, // 娣诲姞渚涘簲鍟嗗悕绉�
- projectName: contract.projectName // 娣诲姞椤圭洰鍚嶇О
- // 淇濈暀浜у搧鏈韩鐨刬d锛屼笉瑕嗙洊
- });
- });
- }
- });
-
- // 璁剧疆琛ㄥ崟鏁版嵁锛堜娇鐢ㄧ涓�涓悎鍚岀殑鍩烘湰淇℃伅锛岄噰璐悎鍚屽彿鐣欑┖锛�
- form.purchaseLedgerNo = ""; // 閲囪喘鍚堝悓鍙风暀绌猴紝鍥犱负浼氬湪浜у搧琛ㄦ牸涓垎鍒樉绀�
- form.invoiceNumber = "";
- form.entryDate = dayjs().format("YYYY-MM-DD");
- form.enterDate = dayjs().format("YYYY-MM-DD");
- form.salesContractNo = results[0].data.salesContractNo;
- form.projectName = results[0].data.projectName;
- form.supplierName = results[0].data.supplierName;
- // 淇濈暀褰曞叆浜轰俊鎭�
- form.issUerId = userStore.id;
- form.issUer = userStore.nickName;
-
- // 璁剧疆浜у搧鏁版嵁锛屽苟鍒濆鍖栧紑绁ㄦ暟閲忓拰閲戦
- allProductData.forEach(item => {
- // 淇濆瓨"鍘熷鏈潵绁ㄦ暟/閲戦"锛堢敤浜庢牎楠屼笌璁$畻锛�
- // 浼樺厛浣跨敤鍚庣杩斿洖鐨� futureTickets/futureTicketsAmount锛涙病鏈夊垯鍥為��鍒� quantity/taxInclusiveTotalPrice
- item.tempFutureTickets = Number(
- item.futureTickets !== undefined ? item.futureTickets : (item.quantity || 0)
- );
- item.tempFutureTicketsAmount = Number(
- item.futureTicketsAmount !== undefined ? item.futureTicketsAmount : (item.taxInclusiveTotalPrice || 0)
- );
-
- // 濡傛灉鏈潵绁ㄩ噾棰濅负0锛屽垯鏈寮�绁ㄦ暟鍜岄噾棰濋兘璁剧疆涓�0
- if (item.tempFutureTicketsAmount <= 0) {
- item.ticketsNum = 0;
- item.ticketsAmount = 0;
- item.futureTickets = Number(item.tempFutureTickets || 0);
- item.futureTicketsAmount = 0;
- } else {
- // 鏂板鏃讹細鏈寮�绁ㄦ暟榛樿 = 鏈潵绁ㄦ暟锛堜笖涓嶈兘澶т簬鏈潵绁ㄦ暟锛�
- item.ticketsNum = Number(item.tempFutureTickets || 0);
- // 鑱斿姩璁$畻鏈寮�绁ㄩ噾棰濄�佹湭鏉ョエ鏁般�佹湭鏉ョエ閲戦
- const unitPrice = Number(item.taxInclusiveUnitPrice || 0);
- item.ticketsAmount = Number((item.ticketsNum * unitPrice).toFixed(2));
- item.futureTickets = Number((item.tempFutureTickets - item.ticketsNum).toFixed(2));
- item.futureTicketsAmount = Number(
- (item.tempFutureTicketsAmount - item.ticketsAmount).toFixed(2)
- );
- }
- });
-
- form.productData = allProductData;
-
- // 璁$畻鍙戠エ閲戦锛氭墍鏈変骇鍝佺殑鏈寮�绁ㄩ噾棰濅箣鍜岋紙鏂板榛樿 0锛�
- const totalAmount = allProductData.reduce((sum, item) => {
- return sum + (Number(item.ticketsAmount) || 0);
- }, 0);
- form.invoiceAmount = Number(totalAmount.toFixed(2));
-
- // 瀛樺偍閫変腑鐨勫悎鍚屾暟鎹�
- selectedContracts.value = selectedRows;
- });
- } else if (type == "edit") {
- const id = Array.isArray(selectedRows) ? selectedRows[0].id : selectedRows;
- const response = await getPurchaseById({ id, type: 2 });
- // 鍏煎涓嶅悓鐨勮繑鍥炴牸寮忥細鍙兘鏄� { code, data } 鎴栫洿鎺ヨ繑鍥炴暟鎹�
- const data = response.data || response;
-
- // 鍏煎涓嶅悓鐨勫瓧娈靛悕锛歱urchaseContractNumber 鎴� purchaseLedgerNo
- form.purchaseLedgerNo = data.purchaseContractNumber || data.purchaseLedgerNo || "";
- form.invoiceAmount = data.invoiceAmount;
- form.invoiceNumber = data.invoiceNumber;
- form.salesContractNo = data.salesContractNo;
- form.projectName = data.projectName;
- form.supplierName = data.supplierName;
- form.entryDate = data.entryDate;
- form.enterDate = data.enterDate || dayjs().format("YYYY-MM-DD");
-
- // 缂栬緫鏃朵篃闇�瑕佸垵濮嬪寲浜у搧鏁版嵁鐨� tempFutureTickets 鍜� tempFutureTicketsAmount
- // 鍚屾椂涓烘瘡涓骇鍝佹坊鍔犲悎鍚屽彿绛変俊鎭�
- const contractNumber = data.purchaseContractNumber || data.purchaseLedgerNo || "";
- if (data.productData && Array.isArray(data.productData)) {
- data.productData.forEach(item => {
- // 淇濆瓨"鍘熷鏈潵绁ㄦ暟/閲戦"锛堢敤浜庢牎楠屼笌璁$畻锛�
- // 浼樺厛浣跨敤鍚庣杩斿洖鐨� futureTickets/futureTicketsAmount锛涙病鏈夊垯鍥為��鍒� quantity/taxInclusiveTotalPrice
- item.tempFutureTickets = Number(
- item.futureTickets !== undefined ? item.futureTickets : (item.quantity || 0)
- );
- item.tempFutureTicketsAmount = Number(
- item.futureTicketsAmount !== undefined ? item.futureTicketsAmount : (item.taxInclusiveTotalPrice || 0)
- );
-
- // 纭繚姣忎釜浜у搧閮芥湁鍚堝悓鍙凤紝鐢ㄤ簬鏄剧ず鍦�"鎵�灞炲悎鍚�"鍒�
- if (!item.purchaseLedgerNo) {
- item.purchaseLedgerNo = contractNumber;
- }
- });
- }
-
- form.productData = data.productData || [];
-
- // 缂栬緫妯″紡涓嬶紝鏍规嵁浜у搧鏁版嵁涓殑鏈寮�绁ㄩ噾棰濊嚜鍔ㄨ绠楀彂绁ㄩ噾棰�
- calculateinvoiceAmount();
- }
-};
-// 瀛愯〃鍚堣鏂规硶
-const summarizeChildrenTable = (param) => {
- return proxy.summarizeTable(param, [
- "taxInclusiveUnitPrice",
- "taxInclusiveTotalPrice",
- "taxExclusiveTotalPrice",
- "ticketsNum",
- "ticketsAmount",
- "ticketsAmountRef",
- "futureTickets",
- "futureTicketsAmount",
- ]);
-};
-//鏈鏉ョエ鏁板け鐒︽搷浣�
-const invoiceNumBlur = (row) => {
- if (!row.ticketsNum || row.ticketsNum === "") {
- row.ticketsNum = 0;
- }
- if (Number(row.ticketsNum) > Number(row.tempFutureTickets)) {
- proxy.$modal.msgWarning("鏈寮�绁ㄦ暟涓嶈兘澶т簬鏈潵绁ㄦ暟");
- row.ticketsNum = Number(row.tempFutureTickets || 0);
- }
- // 璁$畻鏈鏉ョエ閲戦
- row.ticketsAmount = Number((Number(row.ticketsNum) * Number(row.taxInclusiveUnitPrice || 0)).toFixed(2));
- // 璁$畻鏈潵绁ㄦ暟
- row.futureTickets = Number((Number(row.tempFutureTickets || 0) - Number(row.ticketsNum || 0)).toFixed(2));
- // 璁$畻鏈潵绁ㄩ噾棰�
- row.futureTicketsAmount = Number((Number(row.tempFutureTicketsAmount || 0) - Number(row.ticketsAmount || 0)).toFixed(2));
- calculateinvoiceAmount();
-};
-
-// 鏈鏉ョエ閲戦澶辩劍鎿嶄綔
-const invoiceAmountBlur = (row) => {
- if (!row.ticketsAmount) {
- row.ticketsAmount = 0;
- }
- // 璁$畻鏄惁瓒呰繃鏉ョエ鎬婚噾棰�
- if (row.ticketsAmount > row.tempFutureTicketsAmount) {
- proxy.$modal.msgWarning("鏈鏉ョエ閲戦涓嶅緱澶т簬鏈潵绁ㄩ噾棰�");
- row.ticketsAmount = Number(row.tempFutureTicketsAmount || 0);
- }
- // 璁$畻鏈鏉ョエ鏁�
- row.ticketsNum = Number(
- (row.ticketsAmount / row.taxInclusiveUnitPrice).toFixed(2)
- );
- // 妫�鏌ユ湰娆″紑绁ㄦ暟鏄惁澶т簬鏈潵绁ㄦ暟
- if (Number(row.ticketsNum) > Number(row.tempFutureTickets)) {
- proxy.$modal.msgWarning("鏈寮�绁ㄦ暟涓嶈兘澶т簬鏈潵绁ㄦ暟");
- row.ticketsNum = Number(row.tempFutureTickets || 0);
- // 閲嶆柊璁$畻鏈鏉ョエ閲戦
- row.ticketsAmount = Number((Number(row.ticketsNum) * Number(row.taxInclusiveUnitPrice || 0)).toFixed(2));
- }
- // 璁$畻鏈潵绁ㄦ暟
- row.futureTickets = Number((Number(row.tempFutureTickets || 0) - Number(row.ticketsNum || 0)).toFixed(2));
- // 璁$畻鏈潵绁ㄩ噾棰�
- row.futureTicketsAmount = Number((Number(row.tempFutureTicketsAmount || 0) - Number(row.ticketsAmount || 0)).toFixed(2));
- calculateinvoiceAmount();
-};
-
-const calculateinvoiceAmount = () => {
- let invoiceAmountTotal = 0;
- form.productData.forEach((item) => {
- if (item.ticketsAmount) {
- invoiceAmountTotal += Number(item.ticketsAmount);
- }
- });
- form.invoiceAmount = Number(invoiceAmountTotal.toFixed(2));
-};
-
-// 鍒ゆ柇浜у搧鏄惁鍙互缁х画鏉ョエ鎿嶄綔锛氬鏋滄湭鏉ョエ鏁板拰鏈潵绁ㄩ噾棰濋兘涓�0鎴栧皬浜庣瓑浜�0锛屽垯绂佺敤
-const isProductDisabled = (row) => {
- // 浼樺厛浣跨敤 tempFutureTickets锛堝師濮嬫湭鏉ョエ鏁帮級锛屽鏋滄病鏈夊垯浣跨敤 futureTickets
- const futureTickets = Number(row.tempFutureTickets !== undefined
- ? row.tempFutureTickets
- : (row.futureTickets !== undefined ? row.futureTickets : 0));
-
- // 浼樺厛浣跨敤 tempFutureTicketsAmount锛堝師濮嬫湭鏉ョエ閲戦锛夛紝濡傛灉娌℃湁鍒欎娇鐢� futureTicketsAmount
- const futureAmount = Number(row.tempFutureTicketsAmount !== undefined
- ? row.tempFutureTicketsAmount
- : (row.futureTicketsAmount !== undefined ? row.futureTicketsAmount : 0));
-
- // 鍙湁褰撴湭鏉ョエ鏁板拰鏈潵绁ㄩ噾棰濋兘涓�0鎴栧皬浜庣瓑浜�0鏃讹紝鎵嶇鐢�
- return futureTickets <= 0 && futureAmount <= 0;
-};
-
-const open = async (type, selectedRows) => {
- // 纭繚 modalOptions.value 鏄璞�
- if (!modalOptions.value || typeof modalOptions.value !== 'object') {
- modalOptions.value = {};
- }
-
- // 鏍规嵁鎿嶄綔绫诲瀷鍜岄�変腑鏁版嵁璁剧疆鏍囬
- if (Array.isArray(selectedRows) && selectedRows.length > 1) {
- // 鎵归噺鎿嶄綔
- modalOptions.value.title = type === "add" ? `鎵归噺鏂板 (${selectedRows.length}鏉�)` : `鎵归噺缂栬緫 (${selectedRows.length}鏉�)`;
- } else {
- // 鍗曚釜鎿嶄綔 - 鏄庣‘鍒ゆ柇 type 鐨勫��
- if (type === "add" || type === "鏂板") {
- modalOptions.value.title = "鏂板";
- } else if (type === "edit" || type === "缂栬緫") {
- modalOptions.value.title = "缂栬緫";
- } else {
- modalOptions.value.title = "鏉ョエ鐧昏"; // 榛樿鏍囬
- }
- }
-
- visible.value = true;
-
- // 濡傛灉鏄崟涓搷浣滐紝鑾峰彇id
- if (!Array.isArray(selectedRows) || selectedRows.length === 1) {
- const idValue = Array.isArray(selectedRows) ? selectedRows[0].id : selectedRows;
- id.value = idValue;
- }
-
- await getTableData(type, selectedRows);
-};
-
-
-const closeAndRefresh = () => {
- closeModal();
- emit('refreshList');
-};
-
-const submitForm = () => {
- proxy.$refs["formRef"].validate((valid) => {
- if (valid) {
- // 濡傛灉鏄壒閲忔搷浣滐紝灏嗘墍鏈夊悎鍚岀殑鏁版嵁鏀惧湪涓�涓暟缁勯噷锛屽彧璋冪敤涓�娆℃帴鍙�
- if (selectedContracts.value.length > 1) {
- // 鍒涘缓鍖呭惈鎵�鏈夊悎鍚屾暟鎹殑鏁扮粍
- const batchData = selectedContracts.value.map(contract => {
- // 绛涢�夊嚭灞炰簬褰撳墠鍚堝悓鐨勪骇鍝佹暟鎹�
- const contractProductData = form.productData.filter(item =>
- item.purchaseLedgerId === contract.id
- );
-
- // 涓烘瘡涓噰璐悎鍚屽垱寤虹嫭绔嬬殑瀵硅薄
- return {
- // 鍩虹琛ㄥ崟鏁版嵁
- invoiceNumber: form.invoiceNumber,
- invoiceAmount: form.invoiceAmount,
- entryDate: form.entryDate,
- enterDate: form.enterDate,
- issUerId: form.issUerId, // 褰曞叆浜篿d
- issUer: form.issUer, // 褰曞叆浜�
-
- // 鍚堝悓瀹為檯淇℃伅
- purchaseLedgerId: contract.id, // 浣跨敤id浣滀负瀛楁鍚嶏紝鍊间负purchaseLedgerId
- purchaseContractNumber: contract.purchaseContractNumber, // 浣跨敤瀹為檯鐨勯噰璐悎鍚屽彿
- salesContractNo: contract.salesContractNo, // 浣跨敤瀹為檯鐨勯攢鍞悎鍚屽彿
- supplierName: contract.supplierName, // 浣跨敤瀹為檯鐨勪緵搴斿晢鍚嶇О
- projectName: contract.projectName, // 浣跨敤瀹為檯鐨勯」鐩悕绉�
-
- // 浜у搧鏁版嵁
- productData: proxy.HaveJson(contractProductData),
-
- // 鎵归噺鏍囪瘑
- isBatch: true,
- type: 4
- };
- });
-
- // 鍙皟鐢ㄤ竴娆℃帴鍙o紝浼犻�掑寘鍚墍鏈夊悎鍚屾暟鎹殑鏁扮粍
- modalLoading.value = true;
- addOrUpdateRegistration(batchData).then((res) => {
- modalLoading.value = false;
- if (res.code === 200) {
- proxy.$modal.msgSuccess("鎵归噺鐧昏鎴愬姛");
- closeAndRefresh();
- }
- }).catch(() => {
- modalLoading.value = false;
- proxy.$modal.msgError("鎵归噺鐧昏澶辫触");
- });
- } else {
- // 鍗曚釜鍚堝悓鎻愪氦閫昏緫 - 浠ユ暟缁勬牸寮忎紶閫�
- const singleContract = selectedContracts.value[0];
- const singleFormArray = [{
- // 鍩虹琛ㄥ崟鏁版嵁
- invoiceNumber: form.invoiceNumber,
- invoiceAmount: form.invoiceAmount,
- entryDate: form.entryDate,
- enterDate: form.enterDate,
- issUerId: form.issUerId, // 褰曞叆浜篿d
- issUer: form.issUer, // 褰曞叆浜�
-
- // 鍚堝悓瀹為檯淇℃伅
- purchaseLedgerId: singleContract.id, // 浣跨敤id浣滀负瀛楁鍚嶏紝鍊间负purchaseLedgerId
- purchaseContractNumber: singleContract.purchaseContractNumber, // 浣跨敤瀹為檯鐨勯噰璐悎鍚屽彿
- salesContractNo: singleContract.salesContractNo, // 浣跨敤瀹為檯鐨勯攢鍞悎鍚屽彿
- supplierName: singleContract.supplierName, // 浣跨敤瀹為檯鐨勪緵搴斿晢鍚嶇О
- projectName: singleContract.projectName, // 浣跨敤瀹為檯鐨勯」鐩悕绉�
-
- // 浜у搧鏁版嵁
- productData: proxy.HaveJson(form.productData),
-
- // 鎵归噺鏍囪瘑
- isBatch: false,
- type: 4
- }];
-
- modalLoading.value = true;
- addOrUpdateRegistration(singleFormArray).then((res) => {
- modalLoading.value = false;
- if (res.code === 200) {
- proxy.$modal.msgSuccess("鐧昏鎴愬姛");
- closeAndRefresh();
- }
- }).catch(() => {
- modalLoading.value = false;
- proxy.$modal.msgError("鐧昏澶辫触");
- });
- }
- }
- });
-};
-
-defineExpose({
- open,
- closeAndRefresh,
-});
-</script>
-
-<style lang="scss" scoped></style>
diff --git a/src/views/procurementManagement/invoiceEntry/index.vue b/src/views/procurementManagement/invoiceEntry/index.vue
deleted file mode 100644
index 8c435e0..0000000
--- a/src/views/procurementManagement/invoiceEntry/index.vue
+++ /dev/null
@@ -1,311 +0,0 @@
-<template>
- <div class="app-container">
- <div class="search_form">
- <el-form :model="filters" :inline="true">
- <el-form-item label="渚涘簲鍟嗗悕绉�">
- <el-input
- v-model="filters.supplierName"
- placeholder="璇疯緭鍏ュ悕绉版悳绱�"
- clearable
- prefix-icon="Search"
- @change="getTableData"
- />
- </el-form-item>
- <el-form-item label="閲囪喘璁㈠崟鍙凤細">
- <el-input
- v-model="filters.purchaseContractNumber"
- placeholder="璇疯緭鍏�"
- clearable
- prefix-icon="Search"
- @change="getTableData"
- />
- </el-form-item>
-
- <el-form-item label="閿�鍞悎鍚屽彿">
- <el-input
- v-model="filters.salesContractNo"
- placeholder="璇疯緭鍏ラ攢鍞悎鍚屽彿"
- clearable
- />
- </el-form-item>
- <el-form-item>
- <el-button type="primary" @click="getTableData"> 鎼滅储 </el-button>
- <el-button @click="resetFilters"> 閲嶇疆 </el-button>
- </el-form-item>
- </el-form>
- </div>
- <div class="table_list">
- <div class="actions">
- <div></div>
- <div>
- <el-button @click="handleExport" style="margin-right: 10px">瀵煎嚭</el-button>
- <el-button type="primary" @click="handleAdd('add')" :disabled="isInvoiceDisabled">
- 鏉ョエ鐧昏
- </el-button>
-<!-- <el-button type="danger" plain @click="handleDelete">鍒犻櫎</el-button>-->
- </div>
- </div>
- <PIMTable
- rowKey="id"
- :column="columns"
- :tableData="dataList"
- :tableLoading="loading"
- :isSelection="true"
- :page="{
- current: pagination.currentPage,
- size: pagination.pageSize,
- total: pagination.total,
- }"
- :expand-row-keys="expandRowKeys"
- :summaryMethod="summarizeMainTable"
- :isShowSummary="true"
- @expand-change="expandChange"
- @selection-change="handleSelectionChange"
- @pagination="changePage"
- >
- <template #expand="{ row }">
- <ExpandTable ref="expandTableRef" />
- </template>
- <template #operation="{ row }">
- <el-button
- link
- type="primary"
- @click="handleEdit('edit', row.id)"
- >
- 缂栬緫
- </el-button>
- </template>
- </PIMTable>
- </div>
- <Modal ref="modalRef" @refreshList="getTableData"></Modal>
- </div>
-</template>
-
-<script setup>
-import { usePaginationApi } from "@/hooks/usePaginationApi";
-import {delRegistration, gePurchaseListPage} from "@/api/procurementManagement/invoiceEntry.js";
-import { nextTick, onMounted, getCurrentInstance, ref, computed } from "vue";
-import ExpandTable from "./components/ExpandTable.vue";
-import Modal from "./components/Modal.vue";
-import {ElMessageBox} from "element-plus";
-
-defineOptions({
- name: "鏉ョエ鐧昏",
-});
-
-const { proxy } = getCurrentInstance();
-const expandRowKeys = ref([]);
-const expandTableRef = ref();
-const modalRef = ref();
-const selectedRows = ref([]);
-
-const {
- loading,
- filters,
- columns,
- dataList,
- pagination,
- getTableData,
- resetFilters,
- onCurrentChange,
-} = usePaginationApi(
- gePurchaseListPage,
- {
- purchaseContractNumber: undefined,
- // 鍙煡璇㈠凡瀹℃壒閫氳繃锛堟垨鎸囧畾鐘舵�佷负 3锛夌殑璁板綍
- approvalStatus: 3,
- },
- [
- {
- type: "expand",
- dataType: "slot",
- slot: "expand",
- },
- {
- label: "閲囪喘璁㈠崟鍙�",
- prop: "purchaseContractNumber",
- width:150
- },
- {
- label: "閿�鍞悎鍚屽彿",
- prop: "salesContractNo",
- width:150
- },
- {
- label: "渚涘簲鍟嗗悕绉�",
- prop: "supplierName",
- width:300
- },
- {
- label: "褰曞叆浜�",
- prop: "recorderName",
- },
- {
- label: "褰曞叆鏃ユ湡",
- prop: "entryDate",
- width:110
- },
- {
- label: "鍚堝悓閲戦(鍏�)",
- prop: "contractAmount",
- width:200,
- formatData: (val) => {
- return val ? parseFloat(val).toFixed(2) : 0;
- },
- },
- {
- label: "宸叉潵绁ㄩ噾棰�(鍏�)",
- prop: "receiptPaymentAmount",
- width:200,
- formatData: (val) => {
- return val ? parseFloat(val).toFixed(2) : 0;
- },
- },
- {
- label: "寰呮潵绁ㄩ噾棰�(鍏�)",
- prop: "unReceiptPaymentAmount",
- width:200,
- formatData: (val) => {
- return val ? parseFloat(val).toFixed(2) : 0;
- },
- },
- {
- fixed: "right",
- label: "鎿嶄綔",
- dataType: "slot",
- slot: "operation",
- align: "center",
- width: 100,
- },
- ]
-);
-
-const handleSelectionChange = (selection) => {
- selectedRows.value = selection.filter(
- (item) => item.purchaseContractNumber !== undefined
- );
-};
-
-// 璁$畻鏄惁鍙互鏉ョエ鐧昏锛氬鏋滄墍鏈夐�変腑琛岀殑寰呮潵绁ㄩ噾棰濋兘涓�0锛屽垯绂佺敤鎸夐挳
-const isInvoiceDisabled = computed(() => {
- if (selectedRows.value.length === 0) {
- return true;
- }
- // 濡傛灉鎵�鏈夐�変腑琛岀殑寰呮潵绁ㄩ噾棰濋兘涓�0鎴栧皬浜庣瓑浜�0锛屽垯绂佺敤
- return selectedRows.value.every(row => {
- const amount = parseFloat(row.unReceiptPaymentAmount || 0);
- return amount <= 0;
- });
-});
-
-const handleAdd = (type) => {
- if (selectedRows.value.length < 1) {
- proxy.$modal.msgWarning("璇疯嚦灏戦�変腑涓�鏉℃暟鎹�");
- return;
- }
- modalRef.value.open(type, selectedRows.value);
-};
-
-const handleEdit = (type, id) => {
- modalRef.value.open(type, id);
-};
-
-// 瀵煎嚭
-const handleOut = () => {
- ElMessageBox.confirm("閫変腑鐨勫唴瀹瑰皢琚鍑猴紝鏄惁纭瀵煎嚭锛�", "瀵煎嚭", {
- confirmButtonText: "纭",
- cancelButtonText: "鍙栨秷",
- type: "warning",
- })
- .then(() => {
- proxy.download("/purchase/registration/export", {}, "鏉ョエ鐧昏.xlsx");
- })
- .catch(() => {
- proxy.$modal.msg("宸插彇娑�");
- });
-};
-
-// 瀵煎嚭閲囪喘鍙拌处
-const handleExport = () => {
- ElMessageBox.confirm("閫変腑鐨勫唴瀹瑰皢琚鍑猴紝鏄惁纭瀵煎嚭锛�", "瀵煎嚭", {
- confirmButtonText: "纭",
- cancelButtonText: "鍙栨秷",
- type: "warning",
- })
- .then(() => {
- proxy.download("/purchase/ledger/exportOne", {}, "鏉ョエ鐧昏.xlsx");
- })
- .catch(() => {
- proxy.$modal.msg("宸插彇娑�");
- });
-};
-
-// 鍒犻櫎
-const handleDelete = () => {
- let ids = [];
- if (selectedRows.value.length > 0) {
- // 鏂板鍒ゆ柇锛氬鏋滄湁閫変腑鐨勬暟鎹病鏈塼icketRegistrationId锛屾彁绀哄苟缁堟
- const noTicket = selectedRows.value.some(item => !item.ticketRegistrationId);
- if (noTicket) {
- proxy.$modal.msgWarning("閲囪喘鍙拌处杩樻湭杩涜鏉ョエ鐧昏,鏃犳硶杩涜鍒犻櫎鎿嶄綔");
- return;
- }
- ids = selectedRows.value.map((item) => item.ticketRegistrationId);
- } else {
- proxy.$modal.msgWarning("璇烽�夋嫨鏁版嵁");
- return;
- }
- ElMessageBox.confirm("閫変腑鐨勫唴瀹瑰皢琚垹闄わ紝鏄惁纭鍒犻櫎锛�", "瀵煎嚭", {
- confirmButtonText: "纭",
- cancelButtonText: "鍙栨秷",
- type: "warning",
- })
- .then(() => {
- delRegistration(ids).then((res) => {
- proxy.$modal.msgSuccess("鍒犻櫎鎴愬姛");
- getList();
- });
- })
- .catch(() => {
- proxy.$modal.msg("宸插彇娑�");
- });
-};
-
-const expandChange = async (row, expandedRows) => {
- if (expandedRows.length > 0) {
- await nextTick();
- expandTableRef.value.getList(row.id);
- }
-};
-
-const changePage = ({ page, limit }) => {
- pagination.currentPage = page;
- pagination.pageSize = limit;
- onCurrentChange(page);
-};
-// 涓昏〃鍚堣鏂规硶
-const summarizeMainTable = (param) => {
- return proxy.summarizeTable(
- param,
- ["contractAmount", "receiptPaymentAmount", "unReceiptPaymentAmount"],
- {
- ticketsNum: { noDecimal: true }, // 涓嶄繚鐣欏皬鏁�
- futureTickets: { noDecimal: true }, // 涓嶄繚鐣欏皬鏁�
- }
- );
-};
-onMounted(() => {
- getTableData();
-});
-</script>
-
-<style lang="scss" scoped>
-.table_list {
- margin-top: unset;
-}
-.actions {
- display: flex;
- justify-content: space-between;
- margin-bottom: 10px;
-}
-</style>
diff --git a/src/views/procurementManagement/paymentEntry/index.vue b/src/views/procurementManagement/paymentEntry/index.vue
deleted file mode 100644
index 9ce59ad..0000000
--- a/src/views/procurementManagement/paymentEntry/index.vue
+++ /dev/null
@@ -1,597 +0,0 @@
-<template>
- <div class="app-container">
- <div class="search_form">
- <el-form :inline="true" :model="searchForm" style="width: 100%">
- <el-row justify="space-between">
- <el-col :span="20">
- <el-form-item label="渚涘簲鍟嗗悕绉�/鍚堝悓鍙�">
- <el-input
- v-model="searchForm.supplierNameOrContractNo"
- style="width: 240px"
- placeholder="杈撳叆渚涘簲鍟嗗悕绉�/鍚堝悓鍙锋悳绱�"
- clearable
- prefix-icon="Search"
- @change="handleQuery"
- />
- </el-form-item>
- <el-form-item>
- <el-checkbox
- v-model="searchForm.status"
- label="涓嶆樉绀哄緟浠樻涓�0"
- @change="handleQuery"
- />
- </el-form-item>
- <el-form-item>
- <el-button type="primary" @click="handleQuery"> 鎼滅储 </el-button>
- </el-form-item>
- </el-col>
- <el-col :span="4">
- <el-form-item style="float: right; margin-right: unset">
- <el-button type="primary" @click="openForm('add')">
- 鏂板浠樻
- </el-button>
- <el-button @click="handleExport" style="margin-right: 10px">瀵煎嚭</el-button>
-<!-- <el-button type="danger" plain @click="handleDelete">-->
-<!-- 鍒犻櫎-->
-<!-- </el-button>-->
- </el-form-item>
- </el-col>
- </el-row>
- </el-form>
- </div>
- <div class="table_list">
- <PIMTable
- rowKey="id"
- :column="tableColumn"
- :tableData="tableData"
- :page="page"
- :expandRowKeys="expandedRowKeys"
- :isSelection="true"
- :isShowSummary="isShowSummarySon"
- :summaryMethod="summarizeMainTable1"
- @selection-change="handleSelectionChange"
- @expand-change="expandChange"
- :tableLoading="tableLoading"
- @pagination="pagination"
- :total="page.total"
- >
- <template #expand="{ row }">
- <el-table
- :data="expandData"
- border
- show-summary
- v-loading="childrenLoading"
- :summary-method="summarizeMainTable2"
- >
- <el-table-column
- align="center"
- label="搴忓彿"
- type="index"
- width="60"
- />
- <el-table-column label="浠樻鏃ユ湡" prop="paymentDate" />
- <el-table-column label="浠樻閲戦" prop="currentPaymentAmount">
- <template #default="scope">
- <el-input-number :step="0.01" :min="0" style="width: 100%"
- v-model="scope.row.currentPaymentAmount"
- :disabled="!scope.row.editType"
- :precision="2"
- placeholder="璇疯緭鍏�"
- clearable
- />
- </template>
- </el-table-column>
- <el-table-column label="浠樻鏂瑰紡" prop="paymentMethod">
- <template #default="scope">
- <el-select
- :disabled="!scope.row.editType"
- v-model="scope.row.paymentMethod"
- placeholder="璇烽�夋嫨"
- clearable
- >
- <el-option
- v-for="item in checkout_payment"
- :key="item.value"
- :label="item.label"
- :value="item.value"
- />
- </el-select>
- </template>
- </el-table-column>
- <el-table-column label="鐧昏浜�" prop="registrant" />
- <el-table-column label="鐧昏鏃ユ湡" prop="registrationtDate" />
- <el-table-column label="鎿嶄綔" width="150">
- <template #default="scope">
- <el-button
- link
- type="primary"
- @click="changeEditType(scope.row)"
- v-if="!scope.row.editType"
- >缂栬緫</el-button
- >
- <el-button
- link
- type="primary"
- @click="saveReceiptPayment(scope.row)"
- v-if="scope.row.editType"
- >淇濆瓨</el-button
- >
- <el-button
- link
- type="primary"
- @click="handleDelete(scope.row)"
- >鍒犻櫎</el-button
- >
- </template>
- </el-table-column>
- </el-table>
- </template>
- </PIMTable>
- </div>
- <FormDialog
- v-model="dialogFormVisible"
- title="鏂板浠樻椤甸潰"
- :width="'90%'"
- @close="closeDia"
- @confirm="submitForm"
- @cancel="closeDia"
- >
- <el-table
- v-if="forms.length"
- :data="forms"
- border
- style="width: 100%"
- size="small"
- >
- <el-table-column type="index" label="搴忓彿" width="50" align="center"/>
- <el-table-column label="閲囪喘鍚堝悓鍙�" prop="purchaseContractNumber" show-overflow-tooltip />
- <el-table-column label="閿�鍞悎鍚屽彿" prop="salesContractNo" show-overflow-tooltip />
- <el-table-column label="渚涘簲鍟嗗悕绉�" prop="supplierName" show-overflow-tooltip />
- <el-table-column
- label="浜у搧澶х被"
- prop="productCategory"
- show-overflow-tooltip
- width="100"
- />
- <el-table-column
- label="瑙勬牸鍨嬪彿"
- prop="specificationModel"
- show-overflow-tooltip
- width="150"
- />
- <el-table-column
- label="寰呬粯娆鹃噾棰�(鍏�)"
- prop="pendingTicketsTotal"
- show-overflow-tooltip
- width="170"
- >
- <template #default="{ row, column }">
- <el-text type="danger">
- {{ formattedNumber(row, column, row.pendingTicketsTotal) }}
- </el-text>
- </template>
- </el-table-column>
- <el-table-column label="鏈浠樻閲戦(鍏�)" width="180">
- <template #default="{ row }">
- <el-input-number
- v-model="row.currentPaymentAmount"
- :step="0.01"
- :min="0"
- :max="Number(row.pendingTicketsTotal || 0)"
- :precision="2"
- style="width: 100%"
- placeholder="璇疯緭鍏�"
- />
- </template>
- </el-table-column>
- <el-table-column label="浠樻鏂瑰紡" width="160">
- <template #default="{ row }">
- <el-select v-model="row.paymentMethod" placeholder="璇烽�夋嫨" clearable>
- <el-option
- v-for="item in checkout_payment"
- :key="item.value"
- :label="item.label"
- :value="item.value"
- />
- </el-select>
- </template>
- </el-table-column>
- <el-table-column label="浠樻鏃ユ湡" width="170">
- <template #default="{ row }">
- <el-date-picker
- v-model="row.paymentDate"
- value-format="YYYY-MM-DD"
- format="YYYY-MM-DD"
- type="date"
- placeholder="璇烽�夋嫨"
- style="width: 100%"
- />
- </template>
- </el-table-column>
- <el-table-column label="鐧昏浜�" width="140">
- <template #default="{ row }">
- <el-input v-model="row.registrant" disabled />
- </template>
- </el-table-column>
- <el-table-column label="鐧昏鏃ユ湡" width="170">
- <template #default="{ row }">
- <el-input v-model="row.registrationtDate" />
- </template>
- </el-table-column>
- </el-table>
- <div v-else class="empty-tip">璇烽�夋嫨闇�瑕佷粯娆剧殑璁板綍</div>
- </FormDialog>
- </div>
-</template>
-
-<script setup>
-import FormDialog from '@/components/Dialog/FormDialog.vue';
-import { ref, reactive, toRefs, getCurrentInstance, nextTick, onMounted } from "vue";
-import { Search } from "@element-plus/icons-vue";
-import { ElMessageBox } from "element-plus";
-import useUserStore from "@/store/modules/user.js";
-import {
- byPurchaseId,
- paymentRegistrationAdd,
- paymentRegistrationDel,
- paymentRegistrationEdit,
- getTicketNo,
-} from "@/api/procurementManagement/paymentEntry.js";
-import {
- delPaymentRegistration,
- invoiceListPage,
- registrationListPageGetById,
- updatePaymentRegistration
-} from "@/api/procurementManagement/procurementInvoiceLedger.js";
-import useFormData from "@/hooks/useFormData";
-import { getCurrentDate } from "@/utils/index.js";
-
-const { proxy } = getCurrentInstance();
-const { checkout_payment } = proxy.useDict("checkout_payment");
-const tableColumn = ref([
- {
- type: "expand",
- dataType: "slot",
- slot: "expand",
- },
- {
- label: "閲囪喘鍚堝悓鍙�",
- prop: "purchaseContractNumber",
- width:160
- },
- {
- label: "閿�鍞悎鍚屽彿",
- prop: "salesContractNo",
- width:160
- },
- {
- label: "渚涘簲鍟嗗悕绉�",
- prop: "supplierName",
- },
- {
- label: "浠樻鐘舵��",
- prop: "statusName",
- width:110,
- dataType: "tag",
- formatType: (params) => {
- if (params == '鏈畬鎴愪粯娆�') {
- return "danger";
- } else if (params == '宸插畬鎴愪粯娆�') {
- return "success";
- } else {
- return null;
- }
- },
- },
- {
- label: "浜у搧澶х被",
- prop: "productCategory",
- showOverflowTooltip: true,
- },
- {
- label: "瑙勬牸鍨嬪彿",
- prop: "specificationModel",
- showOverflowTooltip: true,
- width: 150
- },
- {
- label: "宸蹭粯娆鹃噾棰�(鍏�)",
- prop: "ticketsTotal",
- formatData: (params) => {
- return params ? parseFloat(params).toFixed(2) : 0;
- },
- },
- {
- label: "寰呬粯娆鹃噾棰�(鍏�)",
- prop: "pendingTicketsTotal",
- formatData: (params) => {
- return params ? parseFloat(params).toFixed(2) : 0;
- },
- },
-]);
-const tableData = ref([]);
-const expandData = ref([]);
-const selectedRows = ref([]);
-const tableLoading = ref(false);
-const childrenLoading = ref(false);
-const forms = ref([]);
-const userStore = useUserStore();
-const page = reactive({
- current: 1,
- size: 100,
- total: 0,
-});
-
-// 鐢ㄦ埛淇℃伅琛ㄥ崟寮规鏁版嵁
-const operationType = ref("");
-const dialogFormVisible = ref(false);
-const data = reactive({
- searchForm: {
- supplierNameOrContractNo: "",
- status: false,
- // 鍙煡璇㈠鎵圭姸鎬佷负 3 鐨勮褰�
- approvalStatus: 3,
- },
- form: {
- purchaseContractNumber: "",
- purchaseLedgerId: "",
- salesContractNo: "",
- supplierName: "",
- taxRate: "",
- currentPaymentAmount: "",
- paymentMethod: "",
- registrant: "",
- registrantId: "",
- paymentDate: "",
- registrationtDate: "",
- },
- rules: {
- purchaseLedgerId: [
- { required: true, message: "璇烽�夋嫨", trigger: "change" },
- ],
- currentPaymentAmount: [
- { required: true, message: "璇疯緭鍏�", trigger: "blur" },
- ],
- paymentMethod: [{ required: true, message: "璇烽�夋嫨", trigger: "change" }],
- },
-});
-const { form, rules } = toRefs(data);
-const { form: searchForm, resetForm } = useFormData(data.searchForm);
-const isShowSummarySon = ref(true);
-const expandedRowKeys = ref([]);
-
-const getStatusTagType = (statusName = '') => {
- const normalized = statusName.trim();
- if (!normalized) return 'info';
- return normalized === '鏈畬鎴愪粯娆�' ? 'danger' : 'success';
-};
-
-const formattedNumber = (row, column, cellValue) => {
- const val = Number(cellValue ?? 0);
- return Number.isFinite(val) ? val.toFixed(2) : "0.00";
-};
-// 瀛愯〃鍚堣鏂规硶
-const summarizeMainTable1 = (param) => {
- return proxy.summarizeTable(
- param,
- ["ticketsTotal", "pendingTicketsTotal"],
- {
- ticketsNum: { noDecimal: true }, // 涓嶄繚鐣欏皬鏁�
- futureTickets: { noDecimal: true }, // 涓嶄繚鐣欏皬鏁�
- }
- );
-};
-// 瀛愯〃鍚堣鏂规硶
-const summarizeMainTable2 = (param) => {
- return proxy.summarizeTable(param, ["currentPaymentAmount"], {
- ticketsNum: { noDecimal: true }, // 涓嶄繚鐣欏皬鏁�
- futureTickets: { noDecimal: true }, // 涓嶄繚鐣欏皬鏁�
- });
-};
-// 鏌ヨ鍒楄〃
-/** 鎼滅储鎸夐挳鎿嶄綔 */
-const handleQuery = () => {
- page.current = 1;
- getList();
-};
-const pagination = (obj) => {
- page.current = obj.page;
- page.size = obj.limit;
- getList();
-};
-const getList = () => {
- tableLoading.value = true;
- invoiceListPage({ ...searchForm, ...page }).then((res) => {
- tableLoading.value = false;
- tableData.value = res.data.records;
- page.total = res.data.total;
- if (expandedRowKeys.value.length > 0) {
- const arr = []
- const index = tableData.value.findIndex(item => item.id === expandedRowKeys.value[0]);
- if (index > -1) {
- arr.push(tableData.value[index]);
- expandChange(tableData.value[index], arr)
- }
- }
- });
-};
-// 灞曞紑琛�
-const expandChange = (row, expandedRows) => {
- if (expandedRows.length > 0) {
- nextTick(() => {
- expandedRowKeys.value = [];
- try {
- childrenLoading.value = true;
- registrationListPageGetById({ id: row.id }).then((res) => {
- childrenLoading.value = false;
- const index = tableData.value.findIndex((item) => item.id === row.id);
- if (index > -1) {
- expandData.value = res;
- }
- expandedRowKeys.value.push(row.id);
- });
- } catch (error) {
- childrenLoading.value = false;
- console.log(error);
- }
- })
- } else {
- expandedRowKeys.value = [];
- }
-};
-// 缂栬緫淇敼鐘舵��
-const changeEditType = (row) => {
- row.editType = !row.editType;
-};
-// 淇濆瓨鍥炴璁板綍
-const saveReceiptPayment = (row) => {
- let updateData = {
- id: row.id,
- currentPaymentAmount: row.currentPaymentAmount,
- paymentMethod: row.paymentMethod,
- };
- updatePaymentRegistration(updateData).then((res) => {
- row.editType = !row.editType;
- getList();
- proxy.$modal.msgSuccess("鎻愪氦鎴愬姛");
- });
-};
-// 琛ㄦ牸閫夋嫨鏁版嵁
-const handleSelectionChange = (selection) => {
- selectedRows.value = selection;
-};
-// 鎵撳紑寮规
-const openForm = (type, row) => {
- if (selectedRows.value.length === 0) {
- proxy.$modal.msgError("璇烽�夋嫨鑷冲皯涓�鏉℃暟鎹�");
- return;
- }
- const validRows = selectedRows.value.filter((item) => Number(item.pendingTicketsTotal || 0) !== 0);
- if (validRows.length === 0) {
- proxy.$modal.msgWarning("鎵�閫夎褰曞潎鏃犻渶浠樻");
- return;
- }
- forms.value = validRows.map((row) => ({
- purchaseContractNumber: row.purchaseContractNumber || "",
- salesContractNo: row.salesContractNo || "",
- supplierName: row.supplierName || "",
- supplierId: row.supplierId,
- productCategory: row.productCategory || "",
- specificationModel: row.specificationModel || "",
- pendingTicketsTotal: Number(row.pendingTicketsTotal || 0),
- currentPaymentAmount: "",
- paymentMethod: "",
- paymentDate: "",
- registrant: userStore.nickName,
- registrationtDate: getCurrentDate(),
- ticketRegistrationId: row.id,
- purchaseLedgerId: row.salesLedgerId,
- salesLedgerProductId: row.id,
- }));
- dialogFormVisible.value = true;
-};
-// 鎻愪氦琛ㄥ崟
-const submitForm = () => {
- if (forms.value.length === 0) {
- proxy.$modal.msgError("璇烽�夋嫨浠樻璁板綍");
- return;
- }
- for (let i = 0; i < forms.value.length; i++) {
- const item = forms.value[i];
- const pendingAmount = Number(item.pendingTicketsTotal || 0);
- const currentAmount = Number(item.currentPaymentAmount);
- if (!item.currentPaymentAmount && item.currentPaymentAmount !== 0) {
- proxy.$modal.msgError(`绗� ${i + 1} 鏉★細璇峰~鍐欎粯娆鹃噾棰漙);
- return;
- }
- if (currentAmount > pendingAmount) {
- proxy.$modal.msgError(
- `绗� ${i + 1} 鏉★細浠樻閲戦涓嶈兘瓒呰繃寰呬粯娆鹃噾棰濓紙寰呬粯娆撅細${pendingAmount.toFixed(
- 2
- )}锛塦
- );
- return;
- }
- if (!item.paymentMethod) {
- proxy.$modal.msgError(`绗� ${i + 1} 鏉★細璇烽�夋嫨浠樻鏂瑰紡`);
- return;
- }
- if (!item.paymentDate) {
- proxy.$modal.msgError(`绗� ${i + 1} 鏉★細璇烽�夋嫨浠樻鏃ユ湡`);
- return;
- }
- }
- const normalizePaymentMethodValue = (method) => {
- const hit = checkout_payment.value.find((item) => item.value == method || item.label == method);
- return hit ? hit.value : method;
- };
- const submitRows = forms.value.map((item) => ({
- ...item,
- paymentMethod: normalizePaymentMethodValue(item.paymentMethod),
- }));
- paymentRegistrationAdd(submitRows).then(() => {
- proxy.$modal.msgSuccess("鎻愪氦鎴愬姛");
- closeDia();
- getList();
- });
-};
-// 鍏抽棴寮规
-const closeDia = () => {
- forms.value = [];
- dialogFormVisible.value = false;
-};
-// 鍒犻櫎
-const handleDelete = (row) => {
- ElMessageBox.confirm("閫変腑鐨勫唴瀹瑰皢琚垹闄わ紝鏄惁纭鍒犻櫎锛�", "鍒犻櫎鎻愮ず", {
- confirmButtonText: "纭",
- cancelButtonText: "鍙栨秷",
- type: "warning",
- })
- .then(() => {
- tableLoading.value = true;
- delPaymentRegistration([row.id])
- .then((res) => {
- proxy.$modal.msgSuccess("鍒犻櫎鎴愬姛");
- getList();
- })
- .finally(() => {
- tableLoading.value = false;
- });
- })
- .catch(() => {
- proxy.$modal.msg("宸插彇娑�");
- });
-};
-// 瀵煎嚭
-const handleExport = () => {
- ElMessageBox.confirm("閫変腑鐨勫唴瀹瑰皢琚鍑猴紝鏄惁纭瀵煎嚭锛�", "瀵煎嚭", {
- confirmButtonText: "纭",
- cancelButtonText: "鍙栨秷",
- type: "warning",
- })
- .then(() => {
- proxy.download("/purchase/registration/exportOne", { ...searchForm, ...page }, "浠樻鐧昏.xlsx");
- })
- .catch(() => {
- proxy.$modal.msg("宸插彇娑�");
- });
-};
-
-onMounted(() => {
- getList();
-});
-</script>
-
-<style scoped lang="scss">
-.table_list {
- margin-top: unset;
-}
-:deep(.el-checkbox__label) {
- font-weight: bold;
-}
-.empty-tip {
- text-align: center;
- padding: 20px 0;
- color: #909399;
-}
-</style>
diff --git a/src/views/procurementManagement/paymentHistory/index.vue b/src/views/procurementManagement/paymentHistory/index.vue
deleted file mode 100644
index c9e9836..0000000
--- a/src/views/procurementManagement/paymentHistory/index.vue
+++ /dev/null
@@ -1,270 +0,0 @@
-<template>
- <div class="app-container">
- <el-form :model="searchForm" :inline="true">
- <el-form-item label="閲囪喘鍚堝悓鍙�">
- <el-input
- v-model="searchForm.purchaseContractNumber"
- style="width: 240px"
- placeholder="杈撳叆閲囪喘鍚堝悓鍙锋悳绱�"
- @change="handleQuery"
- clearable
- :prefix-icon="Search"
- />
- </el-form-item>
- <el-form-item label="渚涘簲鍟嗗悕绉�">
- <el-input
- v-model="searchForm.searchText"
- style="width: 240px"
- placeholder="杈撳叆渚涘簲鍟嗗悕绉版悳绱�"
- @change="handleQuery"
- clearable
- :prefix-icon="Search"
- />
- </el-form-item>
- <el-form-item label="浠樻鏃ユ湡">
- <el-date-picker
- v-model="searchForm.paymentDate"
- value-format="YYYY-MM-DD"
- format="YYYY-MM-DD"
- type="daterange"
- start-placeholder="寮�濮嬫椂闂�"
- end-placeholder="缁撴潫鏃堕棿"
- clearable
- @change="changeDateRange"
- @clear="clearRange"
- />
- </el-form-item>
- <el-form-item>
- <el-button
- type="primary"
- @click="handleQuery"
- style="margin-left: 10px"
- >
- 鎼滅储
- </el-button>
- <el-button @click="handleExport">瀵煎嚭</el-button>
- <el-button
- type="danger"
- :disabled="selectedRows.length === 0"
- @click="handleBatchDelete"
- >
- 鎵归噺鍒犻櫎 ({{ selectedRows.length }})
- </el-button>
- </el-form-item>
- </el-form>
- <div class="table_list">
- <PIMTable
- rowKey="id"
- :column="tableColumn"
- :tableData="tableData"
- :page="page"
- :isSelection="true"
- :isShowSummary="isShowSummarySon"
- :summaryMethod="summarizeMainTable1"
- @selection-change="handleSelectionChange"
- :tableLoading="tableLoading"
- @pagination="pagination"
- :total="page.total"
- >
- <template #operation="{ row }">
- <el-button
- type="primary"
- link
- @click="handleDelete(row)"
- >
- 鍒犻櫎
- </el-button>
- </template>
- </PIMTable>
- </div>
- </div>
-</template>
-
-<script setup>
-import { ref, reactive, getCurrentInstance, onMounted } from "vue";
-import { Search } from "@element-plus/icons-vue";
-import { ElMessageBox } from "element-plus";
-import { paymentHistoryListPage} from "@/api/procurementManagement/paymentEntry.js";
-import {delPaymentRegistration } from "@/api/procurementManagement/procurementInvoiceLedger.js";
-import useFormData from "@/hooks/useFormData";
-import dayjs from "dayjs";
-
-const { proxy } = getCurrentInstance();
-const isShowSummarySon = ref(true);
-const tableColumn = ref([
- {
- label: "閲囪喘鍚堝悓鍙�",
- prop: "purchaseContractNumber",
- },
- {
- label: "浠樻鏃ユ湡",
- prop: "paymentDate",
- },
- {
- label: "渚涘簲鍟嗗悕绉�",
- prop: "supplierName",
- width:240
- },
- {
- label: "浠樻閲戦",
- prop: "currentPaymentAmount",
- formatData: (params) => {
- return params ? parseFloat(params).toFixed(2) : 0;
- },
- },
- {
- label: "浠樻鏂瑰紡",
- prop: "paymentMethod",
- },
- {
- label: "鐧昏浜�",
- prop: "registrant",
- },
- {
- label: "鐧昏鏃ユ湡",
- prop: "registrationtDate",
- },
- {
- label: "鎿嶄綔",
- dataType: "slot",
- slot: "operation",
- width: 100,
- align: "center",
- },
-]);
-const tableData = ref([]);
-const selectedRows = ref([]);
-const tableLoading = ref(false);
-const page = reactive({
- current: 1,
- size: 100,
- total: 0,
-});
-const total = ref(0);
-const { form: searchForm } = useFormData({
- searchText: undefined,
- purchaseContractNumber: undefined,
- paymentDate: [],
- paymentDateStart: undefined,
- paymentDateEnd: undefined,
-});
-
-// 鏌ヨ鍒楄〃
-/** 鎼滅储鎸夐挳鎿嶄綔 */
-const handleQuery = () => {
- page.current = 1;
- getList();
-};
-const pagination = (obj) => {
- page.current = obj.page;
- page.size = obj.limit;
- getList();
-};
-const getList = () => {
- tableLoading.value = true;
- const { paymentDate, ...rest } = searchForm;
- paymentHistoryListPage({ ...rest, ...page }).then((res) => {
- tableLoading.value = false;
- tableData.value = res.records;
- page.total = res.total;
- });
-};
-// 瀛愯〃鍚堣鏂规硶
-const summarizeMainTable1 = (param) => {
- return proxy.summarizeTable(param, ["currentPaymentAmount"], {
- ticketsNum: { noDecimal: true }, // 涓嶄繚鐣欏皬鏁�
- futureTickets: { noDecimal: true }, // 涓嶄繚鐣欏皬鏁�
- });
-};
-// 琛ㄦ牸閫夋嫨鏁版嵁
-const handleSelectionChange = (selection) => {
- selectedRows.value = selection;
-};
-
-const changeDateRange = (date) => {
- if (date) {
- searchForm.paymentDateStart = date[0];
- searchForm.paymentDateEnd = date[1];
- getList();
- }
-};
-
-const clearRange = () => {
- searchForm.paymentDate = [];
- searchForm.paymentDateStart = undefined;
- searchForm.paymentDateEnd = undefined;
- getList();
-};
-
-// 鍒犻櫎
-const handleDelete = (row) => {
- ElMessageBox.confirm("閫変腑鐨勫唴瀹瑰皢琚垹闄わ紝鏄惁纭鍒犻櫎锛�", "鍒犻櫎鎻愮ず", {
- confirmButtonText: "纭",
- cancelButtonText: "鍙栨秷",
- type: "warning",
- })
- .then(() => {
- tableLoading.value = true;
- delPaymentRegistration([row.id])
- .then((res) => {
- proxy.$modal.msgSuccess("鍒犻櫎鎴愬姛");
- getList();
- })
- .finally(() => {
- tableLoading.value = false;
- });
- })
- .catch(() => {
- proxy.$modal.msg("宸插彇娑�");
- });
-};
-
-// 鎵归噺鍒犻櫎
-const handleBatchDelete = () => {
- if (selectedRows.value.length === 0) {
- proxy.$modal.msgWarning("璇烽�夋嫨瑕佸垹闄ょ殑鏁版嵁");
- return;
- }
- ElMessageBox.confirm(
- `纭畾瑕佸垹闄ら�変腑鐨� ${selectedRows.value.length} 鏉℃暟鎹悧锛焋,
- "鍒犻櫎鎻愮ず",
- {
- confirmButtonText: "纭",
- cancelButtonText: "鍙栨秷",
- type: "warning",
- }
- )
- .then(() => {
- tableLoading.value = true;
- const ids = selectedRows.value.map((item) => item.id);
- delPaymentRegistration(ids)
- .then((res) => {
- proxy.$modal.msgSuccess("鍒犻櫎鎴愬姛");
- selectedRows.value = [];
- getList();
- })
- .finally(() => {
- tableLoading.value = false;
- });
- })
- .catch(() => {
- proxy.$modal.msg("宸插彇娑�");
- });
-};
-
-// 瀵煎嚭
-const handleExport = () => {
- const { paymentDate, ...rest } = searchForm;
- proxy.download("/purchase/paymentRegistration/export", { ...rest, ...page }, "浠樻娴佹按.xlsx");
-};
-
-onMounted(() => {
- getList();
-});
-</script>
-
-<style scoped lang="scss">
-.table_list {
- margin-top: unset;
-}
-</style>
diff --git a/src/views/procurementManagement/procurementInvoiceLedger/Modal/EditModal.vue b/src/views/procurementManagement/procurementInvoiceLedger/Modal/EditModal.vue
deleted file mode 100644
index 4e461dc..0000000
--- a/src/views/procurementManagement/procurementInvoiceLedger/Modal/EditModal.vue
+++ /dev/null
@@ -1,238 +0,0 @@
-<template>
- <el-dialog :title="modalOptions.title"
- v-model="visible"
- @close="close">
- <el-form :model="form">
- <el-row :gutter="20">
- <el-col :span="12">
- <el-form-item label="閲囪喘鍚堝悓鍙凤細">
- <el-tag size="large">{{ form.purchaseContractNumber }}</el-tag>
- </el-form-item>
- </el-col>
- <el-col :span="12">
- <el-form-item label="閿�鍞悎鍚屽彿锛�">
- <el-text>{{ form.salesContractNo }}</el-text>
- </el-form-item>
- </el-col>
- <el-col :span="12">
- <el-form-item label="鍚◣鍗曚环(鍏�)锛�">
- <el-text type="primary">{{ form.taxInclusiveUnitPrice }}</el-text>
- </el-form-item>
- </el-col>
- <el-col :span="12">
- <el-form-item label="鍒涘缓鏃堕棿锛�">
- <el-text>{{ form.createdAt }}</el-text>
- </el-form-item>
- </el-col>
- <el-col :span="12">
- <el-form-item label="鍙戠エ鍙凤細">
- <el-input disabled
- v-model="form.invoiceNumber" />
- </el-form-item>
- </el-col>
- <el-col :span="12">
- <el-form-item label="鏉ョエ鏁帮細">
- <el-input-number :step="0.1"
- :min="0"
- :max="maxTicketsNum"
- style="width: 100%"
- v-model="form.ticketsNum"
- @change="inputTicketsNum"
- :precision="2" />
- <div style="font-size: 12px; color: #909399; margin-top: 4px;">
- 鍙~鍐欐暟閲忥細{{ maxTicketsNum }}
- </div>
- </el-form-item>
- </el-col>
- <el-col :span="12">
- <el-form-item label="鏈鏉ョエ閲戦(鍏�)锛�">
- <el-input-number :step="0.1"
- :min="0"
- style="width: 100%"
- v-model="form.ticketsAmount"
- @change="inputTicketsAmount"
- :precision="2" />
- </el-form-item>
- </el-col>
- <el-col :span="12">
- <el-form-item label="鏈潵绁ㄦ暟锛�">
- <el-text type="success">{{ form.futureTickets }}</el-text>
- </el-form-item>
- </el-col>
- </el-row>
- </el-form>
- <template #footer>
- <el-button type="primary"
- :loading="loading"
- @click="sendForm">
- {{ modalOptions.confirmText }}
- </el-button>
- <el-button @click="closeModal">{{ modalOptions.cancelText }}</el-button>
- </template>
- </el-dialog>
-</template>
-
-<script setup>
-import { useModal } from "@/hooks/useModal";
-import useFormData from "@/hooks/useFormData";
-import { updateRegistration, getProductRecordById } from "@/api/procurementManagement/procurementInvoiceLedger";
-import { ElMessage } from "element-plus";
-import { getCurrentInstance, ref, nextTick, computed } from "vue";
-
-defineOptions({
- name: "鏉ョエ鍙拌处缂栬緫",
-});
-const emits = defineEmits(["success"]);
-
-const saleLedgerProjectId = ref("");
-const temFutureTickets = ref(0);
-const originalTicketsNum = ref(0); // 鍘熷宸叉潵绁ㄦ暟
-const { proxy } = getCurrentInstance();
-
-// 璁$畻鏈�澶у彲濉啓鏁伴噺 = 鍘熷宸叉潵绁ㄦ暟 + 鏈潵绁ㄦ暟
-const maxTicketsNum = computed(() => {
- return Number(originalTicketsNum.value) + Number(temFutureTickets.value);
-});
-
-const {
- id,
- visible,
- loading,
- openModal,
- modalOptions,
- handleConfirm,
- closeModal,
-} = useModal({ title: "鏉ョエ鍙拌处" });
-
-const { form, resetForm } = useFormData({
- id: undefined,
- purchaseContractNumber: undefined, // 閲囪喘鍚堝悓鍙�
- salesContractNo: undefined, // 閿�鍞悎鍚屽彿
- createdAt: undefined, // 鍒涘缓鏃堕棿
- invoiceNumber: undefined, // 鍙戠エ鍙�
- ticketsNum: undefined, // 鏉ョエ鏁�
- ticketsAmount: undefined, // 鏉ョエ閲戦
- taxInclusiveUnitPrice: undefined, // 鍚◣鍗曚环
- futureTickets: undefined, // 鏈潵绁ㄦ暟
-});
-
-const load = async (id, purchaseLedgerId, productModelId) => {
- const { code, data } = await getProductRecordById({
- id: id,
- purchaseLedgerId: purchaseLedgerId,
- productModelId: productModelId,
- });
- if (code === 200) {
- form.id = data.id;
- form.purchaseContractNumber = data.purchaseContractNumber;
- form.salesContractNo = data.salesContractNo;
- form.createdAt = data.createdAt;
- form.invoiceNumber = data.invoiceNumber;
- form.ticketsNum = data.ticketsNum;
- form.ticketsAmount = data.ticketsAmount.toFixed(2);
- form.taxInclusiveUnitPrice = data.taxInclusiveUnitPrice;
- form.futureTickets = data.futureTickets;
- temFutureTickets.value = data.futureTickets;
- // 淇濆瓨鍘熷宸叉潵绁ㄦ暟
- originalTicketsNum.value = data.ticketsNum || 0;
- }
-};
-
-const inputTicketsNum = val => {
- // 纭繚鍚◣鍗曚环瀛樺湪涓斾笉涓洪浂
- if (!form.taxInclusiveUnitPrice || Number(form.taxInclusiveUnitPrice) === 0) {
- proxy.$modal.msgWarning("鍚◣鍗曚环涓嶈兘涓洪浂鎴栨湭瀹氫箟");
- return;
- }
-
- // 妫�鏌ユ潵绁ㄦ暟涓嶈兘澶т簬锛堝師濮嬪凡鏉ョエ鏁� + 鏈潵绁ㄦ暟锛�
- const maxNum = maxTicketsNum.value;
- if (Number(form.ticketsNum) > maxNum) {
- proxy.$modal.msgWarning(`鏉ョエ鏁颁笉鑳藉ぇ浜�${maxNum}锛堝凡鏉ョエ鏁�${originalTicketsNum.value} + 鏈潵绁ㄦ暟${temFutureTickets.value}锛塦);
- form.ticketsNum = maxNum;
- return;
- }
-
- // 璁$畻鏈鏂板鐨勬潵绁ㄦ暟锛堝綋鍓嶆潵绁ㄦ暟 - 鍘熷宸叉潵绁ㄦ暟锛�
- const newTicketsNum = Number(form.ticketsNum) - Number(originalTicketsNum.value);
-
- // 濡傛灉鏂板鐨勬潵绁ㄦ暟澶т簬鏈潵绁ㄦ暟锛屽垯闄愬埗
- if (newTicketsNum > Number(temFutureTickets.value)) {
- proxy.$modal.msgWarning("鏈鏂板鏉ョエ鏁颁笉寰楀ぇ浜庢湭鏉ョエ鏁�");
- form.ticketsNum = Number(originalTicketsNum.value) + Number(temFutureTickets.value);
- return;
- }
-
- // 纭繚鎵�鏈夋暟鍊奸兘杞崲涓烘暟瀛楃被鍨嬭繘琛岃绠�
- const ticketsAmount =
- Number(form.ticketsNum) * Number(form.taxInclusiveUnitPrice);
- const futureTickets =
- Number(temFutureTickets.value) - newTicketsNum;
- form.futureTickets = Number(futureTickets.toFixed(2));
- form.ticketsAmount = Number(ticketsAmount.toFixed(2));
-};
-
-const inputTicketsAmount = val => {
- // 纭繚鍚◣鍗曚环瀛樺湪涓斾笉涓洪浂
- if (!form.taxInclusiveUnitPrice || Number(form.taxInclusiveUnitPrice) === 0) {
- proxy.$modal.msgWarning("鍚◣鍗曚环涓嶈兘涓洪浂鎴栨湭瀹氫箟");
- return;
- }
-
- // 璁$畻鏈�澶у彲濉啓閲戦 = 锛堝師濮嬪凡鏉ョエ鏁� + 鏈潵绁ㄦ暟锛�* 鍚◣鍗曚环
- const maxAmount = maxTicketsNum.value * Number(form.taxInclusiveUnitPrice);
-
- if (Number(val) > maxAmount) {
- proxy.$modal.msgWarning(`鏈鏉ョエ閲戦涓嶅緱澶т簬${maxAmount.toFixed(2)}鍏僠);
- form.ticketsAmount = maxAmount.toFixed(2);
- form.ticketsNum = maxTicketsNum.value;
- return;
- }
-
- // 纭繚鎵�鏈夋暟鍊奸兘杞崲涓烘暟瀛楃被鍨嬭繘琛岃绠�
- const ticketsNum = Number(val) / Number(form.taxInclusiveUnitPrice);
-
- // 妫�鏌ユ潵绁ㄦ暟涓嶈兘澶т簬鏈�澶у��
- if (ticketsNum > maxTicketsNum.value) {
- proxy.$modal.msgWarning(`鏉ョエ鏁颁笉鑳藉ぇ浜�${maxTicketsNum.value}`);
- form.ticketsNum = maxTicketsNum.value;
- form.ticketsAmount = maxAmount.toFixed(2);
- return;
- }
-
- form.ticketsNum = Number(ticketsNum.toFixed(2));
-
- // 璁$畻鏈潵绁ㄦ暟
- const newTicketsNum = form.ticketsNum - originalTicketsNum.value;
- const futureTickets = Number(temFutureTickets.value) - newTicketsNum;
- form.futureTickets = Number(futureTickets.toFixed(2));
-};
-
-const open = async row => {
- openModal(row.id);
- saleLedgerProjectId.value = row.saleLedgerProjectId;
- await nextTick();
- load(row.id, row.purchaseLedgerId, row.productModelId);
-};
-
-const close = () => {
- resetForm();
- closeModal();
-};
-
-const sendForm = async () => {
- form.saleLedgerProjectId = saleLedgerProjectId.value;
- const { code } = await updateRegistration(form);
- if (code === 200) {
- emits("success");
- ElMessage({ message: "鎿嶄綔鎴愬姛", type: "success" });
- close();
- }
-};
-
-defineExpose({
- open,
-});
-</script>
-
-<style lang="scss" scoped></style>
diff --git a/src/views/procurementManagement/procurementInvoiceLedger/Modal/UploadModal.vue b/src/views/procurementManagement/procurementInvoiceLedger/Modal/UploadModal.vue
deleted file mode 100644
index b82bd10..0000000
--- a/src/views/procurementManagement/procurementInvoiceLedger/Modal/UploadModal.vue
+++ /dev/null
@@ -1,87 +0,0 @@
-<template>
- <el-dialog v-model="upload.open" :title="upload.title" :width="500">
- <FileUpload
- ref="fileUploadRef"
- accept=".xlsx, .xls, .pdf"
- :headers="upload.headers"
- :autoUpload="true"
- :action="upload.url"
- :disabled="upload.isUploading"
- :showTip="false"
- :limit="10"
- @success="handleFileSuccess"
- @remove="removeFile"
- />
- <template #footer>
- <div class="dialog-footer">
- <el-button type="primary" @click="submitFileForm">纭� 瀹�</el-button>
- <el-button @click="upload.open = false">鍙� 娑�</el-button>
- </div>
- </template>
- </el-dialog>
-</template>
-
-<script setup>
-import { reactive } from "vue";
-import { getToken } from "@/utils/auth.js";
-import { FileUpload } from "@/components/Upload";
-import { ElMessage } from "element-plus";
-import { ref } from "vue";
-import useFormData from "@/hooks/useFormData";
-
-defineOptions({
- name: "鏉ョエ鍙拌处闄勪欢琛ュ厖",
-});
-
-const { form, resetForm } = useFormData({
- id: undefined,
- tempFileIds: [],
-});
-const emits = defineEmits(["uploadSuccess"]);
-const fileUploadRef = ref();
-const upload = reactive({
- // 鏄惁鏄剧ず寮瑰嚭灞傦紙渚涘簲鍟嗗鍏ワ級
- open: false,
- // 寮瑰嚭灞傛爣棰橈紙渚涘簲鍟嗗鍏ワ級
- title: "",
- // 鏄惁绂佺敤涓婁紶
- isUploading: false,
- // 璁剧疆涓婁紶鐨勮姹傚ご閮�
- headers: { Authorization: "Bearer " + getToken() },
- // 涓婁紶鐨勫湴鍧�
- url: import.meta.env.VITE_APP_BASE_API + "/file/upload",
-});
-// 鐐瑰嚮瀵煎叆
-const handleImport = (id) => {
- form.id = id;
- upload.open = true;
- upload.title = "鏉ョエ鍙拌处闄勪欢琛ュ厖";
-};
-
-const submitFileForm = () => {
- emits("uploadSuccess", form);
- resetForm();
- upload.open = false;
- // 娓呯┖鏂囦欢鍒楄〃
- fileUploadRef.value.fileList = [];
-};
-
-const handleFileSuccess = (response) => {
- if (response.code == 200) {
- form.tempFileIds.push(response.data.tempId);
- console.log('form',form);
- ElMessage({ message: "瀵煎叆鎴愬姛", type: "success" });
- } else {
- ElMessage({ message: response.msg, type: "error" });
- }
-};
-
-const removeFile = (file) => {
- const { tempId } = file.response.data;
- form.tempFileIds = form.tempFileIds.filter((item) => item !== tempId);
-};
-
-defineExpose({
- handleImport,
-});
-</script>
diff --git a/src/views/procurementManagement/procurementInvoiceLedger/index.vue b/src/views/procurementManagement/procurementInvoiceLedger/index.vue
deleted file mode 100644
index c94d8c2..0000000
--- a/src/views/procurementManagement/procurementInvoiceLedger/index.vue
+++ /dev/null
@@ -1,330 +0,0 @@
-<template>
- <div class="app-container">
- <el-form :model="filters" :inline="true">
- <el-form-item label="閲囪喘鍚堝悓鍙�">
- <el-input
- v-model="filters.purchaseContractNumber"
- style="width: 240px"
- placeholder="璇疯緭鍏�"
- clearable
- :prefix-icon="Search"
- @change="getTableData"
- />
- </el-form-item>
- <el-form-item label="渚涘簲鍟�">
- <el-input
- v-model="filters.supplierName"
- style="width: 240px"
- placeholder="璇疯緭鍏�"
- clearable
- :prefix-icon="Search"
- @change="getTableData"
- />
- </el-form-item>
- <el-form-item label="鏉ョエ鏃ユ湡">
- <el-date-picker
- style="width: 240px"
- v-model="filters.createdAt"
- value-format="YYYY-MM-DD"
- format="YYYY-MM-DD"
- type="daterange"
- start-placeholder="寮�濮嬫椂闂�"
- end-placeholder="缁撴潫鏃堕棿"
- clearable
- @change="getTableData"
- />
- </el-form-item>
- <el-form-item>
- <el-button type="primary" @click="getTableData">鎼滅储</el-button>
- <el-button @click="resetFilters"> 閲嶇疆 </el-button>
- <el-button @click="handleOut">瀵煎嚭</el-button>
- </el-form-item>
- </el-form>
- <div class="table_list">
- <PIMTable
- rowKey="id"
- :column="columns"
- :tableLoading="loading"
- :tableData="dataList"
- :isSelection="true"
- height="calc(100vh - 19.5em)"
- :isShowSummary="true"
- :summaryMethod="summarizeMainTable"
- :page="{
- current: pagination.currentPage,
- size: pagination.pageSize,
- total: pagination.total,
- }"
- @selection-change="handleSelectionChange"
- @pagination="changePage"
- >
- <template #operation="{ row }">
- <el-button
- type="primary"
- link
- @click="openEdit(row)"
- >
- 缂栬緫
- </el-button>
- <el-button
- type="primary"
- link
- @click="openFileDialog(row)"
- >
- 闄勪欢
- </el-button>
- <el-button
- type="primary"
- link
- @click="handleDelete(row)"
- >
- 鍒犻櫎
- </el-button>
- </template>
- </PIMTable>
- </div>
- <FileList v-if="fileDialogVisible" v-model:visible="fileDialogVisible" record-type="ticket_registration" :record-id="recordId" />
- <EditModal ref="editmodalRef" @success="getTableData"></EditModal>
- </div>
-</template>
-
-<script setup>
-import { ref, getCurrentInstance } from "vue";
-import { usePaginationApi } from "@/hooks/usePaginationApi";
-import {
- Search,
-} from "@element-plus/icons-vue";
-import {
- delRegistration,
- productRecordPage,
- delCommonFile,
-} from "@/api/procurementManagement/procurementInvoiceLedger.js";
-import request from "@/utils/request";
-import { getToken } from "@/utils/auth";
-import { onMounted } from "vue";
-import { ElMessageBox } from "element-plus";
-import EditModal from "./Modal/EditModal.vue";
-import useUserStore from "@/store/modules/user.js";
-const userStore = useUserStore();
-const FileList = defineAsyncComponent(() => import("@/components/Dialog/FileList.vue"));
-
-defineOptions({
- name: "鏉ョエ鍙拌处",
-});
-
-const editmodalRef = ref();
-const fileListRef = ref(null);
-const fileListDialogVisible = ref(false);
-const currentRowId = ref(null); // 褰撳墠鏌ョ湅闄勪欢鐨勮ID
-
-const { proxy } = getCurrentInstance();
-const multipleVal = ref([]);
-const {
- loading,
- filters,
- columns,
- dataList,
- pagination,
- getTableData,
- resetFilters,
- onCurrentChange,
-} = usePaginationApi(
- productRecordPage,
- {
- purchaseContractNumber: undefined, // 閲囪喘鍚堝悓鍙�
- supplierName: undefined, // 渚涘簲鍟�
- createdAt: [], // 鏉ョエ鏃ユ湡
- },
- [
- {
- label: "閲囪喘鍚堝悓鍙�",
- prop: "purchaseContractNumber",
- width: 150,
- },
- {
- label: "閿�鍞悎鍚屽彿",
- prop: "salesContractNo",
- width: 150,
- },
- {
- label: "椤圭洰鍚嶇О",
- prop: "projectName",
- width: 240,
- },
- {
- label: "渚涘簲鍟嗗悕绉�",
- prop: "supplierName",
- width: 240,
- },
- {
- label: "浜у搧澶х被",
- prop: "productCategory",
- width: 150,
- },
- {
- label: "瑙勬牸鍨嬪彿",
- prop: "specificationModel",
- width: 150,
- },
- {
- label: "鍙戠エ鍙�",
- prop: "invoiceNumber",
- width: 200,
- },
- {
- label: "鍚堝悓閲戦(鍏�)",
- prop: "taxInclusiveTotalPrice",
- width: 200,
- formatData: (cell) => {
- return cell ? parseFloat(cell).toFixed(2) : 0;
- },
- },
- {
- label: "寮�绁ㄦ棩鏈�",
- prop: "createdAt",
- width: 110,
- },
- {
- label: "寮�绁ㄩ噾棰�",
- prop: "ticketsAmount",
- width: 200,
- formatData: (cell) => {
- return cell ? parseFloat(cell).toFixed(2) : 0;
- },
- },
- {
- label: "涓嶅惈绋庨噾棰�",
- prop: "unTicketsPrice",
- width: 200,
- formatData: (cell) => {
- return cell ? parseFloat(cell).toFixed(2) : 0;
- },
- },
- {
- label: "澧炲�肩◣",
- prop: "invoiceAmount",
- width: 200,
- },
- {
- label: "褰曞叆浜�",
- prop: "issUer",
- width: 200,
- },
- {
- fixed: "right",
- width: 200,
- label: "鎿嶄綔",
- dataType: "slot",
- slot: "operation",
- align: "center",
- },
- ],
- {},
- {
- createdAt: (aim) => ({
- createdAtStart: aim ? aim[0] : undefined,
- createdAtEnd: aim ? aim[1] : undefined,
- }),
- }
-);
-
-const summarizeMainTable = (param) => {
- const sums = proxy.summarizeTable(
- param,
- ["ticketsAmount", "unTicketsPrice", "invoiceAmount"],
- {
- ticketsNum: { noDecimal: true },
- futureTickets: { noDecimal: true },
- }
- );
-
- const keySet = new Set();
- let taxInclusiveSum = 0;
- (param.data || []).forEach((row) => {
- const key = `${row.purchaseContractNumber ?? ""}\n${row.salesContractNo ?? ""}\n${row.productCategory ?? ""}\n${row.specificationModel ?? ""}`;
- if (keySet.has(key)) return;
- keySet.add(key);
- const val = Number(row.taxInclusiveTotalPrice);
- if (!isNaN(val)) taxInclusiveSum += val;
- });
- const taxInclusiveIndex = (param.columns || []).findIndex(
- (c) => c.property === "taxInclusiveTotalPrice"
- );
- if (taxInclusiveIndex !== -1) {
- sums[taxInclusiveIndex] = taxInclusiveSum.toFixed(2);
- }
- return sums;
-};
-
-const handleSelectionChange = (val) => {
- multipleVal.value = val;
-};
-
-// 瀵煎嚭
-const handleOut = () => {
- ElMessageBox.confirm("閫変腑鐨勫唴瀹瑰皢琚鍑猴紝鏄惁纭瀵煎嚭锛�", "瀵煎嚭", {
- confirmButtonText: "纭",
- cancelButtonText: "鍙栨秷",
- type: "warning",
- })
- .then(() => {
- proxy.download("/purchase/registration/export", {}, "鏉ョエ鐧昏.xlsx");
- })
- .catch(() => {
- proxy.$modal.msg("宸插彇娑�");
- });
-};
-
-const changePage = ({ page, limit }) => {
- pagination.currentPage = page;
- pagination.pageSize = limit;
- onCurrentChange(page);
-};
-
-// 鎵撳紑闄勪欢寮圭獥
-const recordId =ref(0)
-const fileDialogVisible = ref(false)
-
-// 鎵撳紑闄勪欢寮规
-const openFileDialog = async (row) => {
- recordId.value = row.id
- fileDialogVisible.value = true
-}
-
-const openEdit = (row) => {
- editmodalRef.value.open(row);
-};
-// 鍒犻櫎
-const handleDelete = (row) => {
- let ids = [];
- ids.push(row.id);
- ElMessageBox.confirm("璇ュ紑绁ㄥ彴璐﹀皢琚垹闄�,鏄惁纭鍒犻櫎", {
- confirmButtonText: "纭",
- cancelButtonText: "鍙栨秷",
- type: "warning",
- })
- .then(() => {
- loading.value = true;
- delRegistration(ids).then((res) => {
- getTableData();
- });
- loading.value = false;
- })
- .catch(() => {
- proxy.$modal.msg("宸插彇娑�");
- });
-};
-
-onMounted(() => {
- getTableData();
-});
-</script>
-
-<style lang="scss" scoped>
-.table_list {
- margin-top: unset;
-}
-.tagBox {
- margin-top: 4px;
-}
-</style>
diff --git a/src/views/salesManagement/invoiceLedger/index.vue b/src/views/salesManagement/invoiceLedger/index.vue
deleted file mode 100644
index e52ea47..0000000
--- a/src/views/salesManagement/invoiceLedger/index.vue
+++ /dev/null
@@ -1,438 +0,0 @@
-<template>
- <div class="app-container">
- <div class="search_form">
- <el-form :inline="true" :model="searchForm">
- <el-form-item label="瀹㈡埛鍚嶇О/鍚堝悓鍙�">
- <el-input v-model="searchForm.searchText" style="width: 240px" placeholder="杈撳叆瀹㈡埛鍚嶇О/閿�鍞悎鍚屽彿鎼滅储"
- @change="handleQuery" clearable :prefix-icon="Search" />
- </el-form-item>
- <el-form-item label="寮�绁ㄦ棩鏈�">
- <el-date-picker style="width: 240px" v-model="searchForm.invoiceDate" value-format="YYYY-MM-DD"
- format="YYYY-MM-DD" type="daterange" start-placeholder="寮�濮嬫椂闂�" end-placeholder="缁撴潫鏃堕棿" clearable
- @change="changeDateRange" @clear="clearRange" />
- </el-form-item>
- <el-form-item label="褰曞叆鏃ユ湡">
- <el-date-picker style="width: 100%" v-model="searchForm.createTimeStart" value-format="YYYY-MM-DD HH:mm:ss"
- format="YYYY-MM-DD" type="date" placeholder="璇烽�夋嫨" clearable @change="handleQuery" />
- </el-form-item>
- <el-form-item label="涓嶆樉绀烘湁鍙戠エ琛�">
- <el-checkbox v-model="searchForm.status" @change="handleQuery" />
- </el-form-item>
- <el-form-item>
- <el-button type="primary" @click="handleQuery"> 鎼滅储 </el-button>
- <el-button @click="resetForm"> 閲嶇疆 </el-button>
- <el-button @click="handleOut" type="primary">瀵煎嚭</el-button>
- </el-form-item>
- </el-form>
- </div>
- <div class="table_list">
- <el-table :data="tableData" border v-loading="tableLoading" @selection-change="handleSelectionChange"
- :row-key="(row) => row.id" show-summary :summary-method="summarizeMainTable" height="calc(100vh - 18.5em)">
- <el-table-column align="center" type="selection" width="55" />
- <el-table-column align="center" label="搴忓彿" type="index" width="60" />
- <el-table-column label="閿�鍞悎鍚屽彿" prop="salesContractNo" show-overflow-tooltip width="180" />
- <el-table-column label="瀹㈡埛鍚嶇О" prop="customerName" show-overflow-tooltip width="240" />
- <el-table-column label="浜у搧澶х被" prop="productCategory" width="200" />
- <el-table-column label="瑙勬牸鍨嬪彿" prop="specificationModel" width="160" show-overflow-tooltip />
- <el-table-column label="鍙戠エ鍙�" prop="invoiceNo" width="200" show-overflow-tooltip />
- <el-table-column label="鍙戠エ閲戦(鍏�)" prop="invoiceTotal" show-overflow-tooltip :formatter="formattedNumber"
- width="200" />
- <el-table-column label="绋庣巼(%)" prop="taxRate" show-overflow-tooltip />
- <el-table-column label="褰曞叆浜�" prop="invoicePerson" show-overflow-tooltip />
- <el-table-column label="褰曞叆鏃ユ湡" prop="createTime" show-overflow-tooltip :formatter="formatDate" width="180" />
- <el-table-column label="寮�绁ㄦ棩鏈�" prop="invoiceDate" show-overflow-tooltip width="120" />
- <el-table-column fixed="right" label="鎿嶄綔" width="150" align="center">
- <template #default="scope">
- <el-button link type="primary" @click="openForm(scope.row)">缂栬緫</el-button>
- <el-button link type="primary" @click="openFileDialog(scope.row)">闄勪欢</el-button>
- <el-button link type="primary" @click="delInvoiceLedger(scope.row)">鍒犻櫎</el-button>
- </template>
- </el-table-column>
- </el-table>
- <pagination v-show="total > 0" :total="total" layout="total, sizes, prev, pager, next, jumper"
- :page="page.current" :limit="page.size" @pagination="paginationChange" />
- </div>
- <FormDialog v-model="dialogFormVisible" title="寮�绁ㄥ彴璐﹂〉闈�" :width="'70%'" @close="closeDia" @confirm="submitForm" @cancel="closeDia">
- <el-form :model="form" label-width="140px" label-position="top" :rules="rules" ref="formRef">
- <el-row :gutter="30">
- <el-col :span="12">
- <el-form-item label="閿�鍞悎鍚屽彿锛�" prop="salesContractNo">
- <el-input v-model="form.salesContractNo" disabled></el-input>
- </el-form-item>
- </el-col>
- <el-col :span="12">
- <el-form-item label="瀹㈡埛鍚嶇О锛�" prop="customerName">
- <el-input v-model="form.customerName" placeholder="鑷姩濉厖" clearable disabled />
- </el-form-item>
- </el-col>
- </el-row>
- <el-row :gutter="30">
- <el-col :span="12">
- <el-form-item label="鍙戠エ鍙凤細" prop="invoiceNo">
- <el-input v-model="form.invoiceNo" placeholder="璇疯緭鍏�" clearable />
- </el-form-item>
- </el-col>
- <el-col :span="12">
- <el-form-item :label="`鍙戠エ閲戦(鍏�)锛� `" prop="invoiceTotal">
- <el-input-number :step="0.01" :min="0" :max="maxInvoiceAmount || form.taxInclusiveTotalPrice" style="width: 100%" v-model="form.invoiceTotal" placeholder="璇疯緭鍏�" clearable :precision="2"/>
- <div v-if="maxInvoiceAmount > 0" style="color: #909399; font-size: 12px; margin-top: 5px;">
- 鍙~鏈�澶ч噾棰濅负锛毬{ maxInvoiceAmount.toFixed(2) }}鍏�
- </div>
- </el-form-item>
- </el-col>
- </el-row>
- <el-row :gutter="30">
- <el-col :span="12">
- <el-form-item label="寮�绁ㄤ汉锛�" prop="invoicePerson">
- <el-input v-model="form.invoicePerson" placeholder="璇疯緭鍏�" clearable disabled />
- </el-form-item>
- </el-col>
- <el-col :span="12">
- <el-form-item label="寮�绁ㄦ棩鏈燂細" prop="invoiceDate">
- <el-date-picker style="width: 100%" v-model="form.invoiceDate" value-format="YYYY-MM-DD"
- format="YYYY-MM-DD" type="date" placeholder="璇烽�夋嫨" clearable />
- </el-form-item>
- </el-col>
- </el-row>
- <el-row :gutter="30">
- <el-col :span="24">
- <el-form-item label="闄勪欢鏉愭枡锛�" prop="remark">
- <el-upload v-model:file-list="fileList" :action="upload.url" multiple ref="fileUpload" auto-upload
- :headers="upload.headers" accept=".pdf" :limit="10" :before-upload="handleBeforeUpload"
- :on-error="handleUploadError" :on-success="handleUploadSuccess">
- <el-button type="primary">涓婁紶</el-button>
- <template #tip>
- <!-- 鏂囦欢鏍煎紡鏀寔 doc锛宒ocx锛寈ls锛寈lsx锛宲pt锛宲ptx锛宲df锛宼xt锛寈ml锛宩pg锛宩peg锛宲ng锛実if锛宐mp锛宺ar锛寊ip锛�7z-->
- <div class="el-upload__tip">鏂囦欢鏍煎紡鏀寔 pdf</div>
- </template>
- </el-upload>
- </el-form-item>
- </el-col>
- </el-row>
- </el-form>
- </FormDialog>
- <el-dialog title="涓婁紶寮圭獥" width="50%" v-model="uploadModal">
- <el-row :gutter="30">
- <el-col :span="24">
- <el-form-item label="闄勪欢鏉愭枡锛�" prop="remark">
- <el-upload v-model:file-list="fileList" :action="upload.url" multiple ref="fileUpload" auto-upload
- :headers="upload.headers" accept=".pdf" :limit="10" style="width: 100%" :on-exceed="handleExceed"
- :before-upload="handleBeforeUpload" :on-error="handleUploadError" :on-success="handleUploadSuccess"
- :on-remove="handleRemove">
- <el-button type="primary">涓婁紶</el-button>
- <template #tip>
- <div class="el-upload__tip">鏂囦欢鏍煎紡浠呮敮鎸� pdf</div>
- </template>
- </el-upload>
- </el-form-item>
- </el-col>
- </el-row>
- <template #footer>
- <div class="dialog-footer">
- <el-button @click="commiInvoicetFile" type="primary">纭</el-button>
- <el-button @click="uploadModal = false">鍙栨秷</el-button>
- </div>
- </template>
- </el-dialog>
- <FileList v-if="fileDialogVisible" v-model:visible="fileDialogVisible" record-type="invoice_registration_product" :record-id="recordId" />
- </div>
-</template>
-
-<script setup>
-import pagination from "@/components/PIMTable/Pagination.vue";
-import FormDialog from '@/components/Dialog/FormDialog.vue';
-import { ref } from "vue";
-import { Search } from "@element-plus/icons-vue";
-import { ElMessageBox } from "element-plus";
-import { getToken } from "@/utils/auth";
-import {
- invoiceLedgerSaveOrUpdate,
- invoiceLedgerProductInfo,
- commitFile,
- registrationProductPage,
- delInvoiceLedgerByRegProductId,
-} from "@/api/salesManagement/invoiceLedger.js";
-import useUserStore from "@/store/modules/user.js";
-import useFormData from "@/hooks/useFormData";
-import dayjs from "dayjs";
-import { getCurrentDate } from "@/utils/index.js";
-const FileList = defineAsyncComponent(() => import("@/components/Dialog/FileList.vue"));
-
-const { proxy } = getCurrentInstance();
-const tableData = ref([]);
-const productData = ref([]);
-const selectedRows = ref([]);
-const tableLoading = ref(false);
-const page = reactive({
- current: 1,
- size: 100,
-});
-const total = ref(0);
-const fileList = ref([]);
-const dialogFormVisible = ref(false);
-const data = reactive({
- searchForm: {
- searchText: "",
- status: false,
- invoiceDate: null,
- invoiceDateStart: undefined,
- invoiceDateEnd: undefined,
- createTimeStart: "", // 褰曞叆鏃ユ湡
- },
- form: {
- salesLedgerId: "",
- customerId: "",
- invoiceNo: "",
- invoiceTotal: "",
- taxRate: "",
- invoicePerson: "",
- invoiceDate: "",
- customerName: "",
- fileList: [],
- createTime: "", // 褰曞叆鏃ユ湡
- },
- rules: {
- salesLedgerId: [{ required: true, message: "璇烽�夋嫨", trigger: "change" }],
- customerId: [{ required: true, message: "璇疯緭鍏�", trigger: "blur" }],
- invoiceNo: [{ required: true, message: "璇烽�夋嫨", trigger: "change" }],
- invoiceAmount: [{ required: true, message: "璇疯緭鍏�", trigger: "blur" }],
- taxRate: [{ required: true, message: "璇烽�夋嫨", trigger: "change" }],
- invoicePerson: [{ required: true, message: "璇烽�夋嫨", trigger: "change" }],
- invoiceDate: [{ required: true, message: "璇烽�夋嫨", trigger: "change" }],
- customerName: [{ required: true, message: "璇烽�夋嫨", trigger: "change" }],
- },
-});
-const { form, rules } = toRefs(data);
-const { form: searchForm, resetForm } = useFormData(data.searchForm);
-const currentId = ref("");
-const userStore = useUserStore();
-const maxInvoiceAmount = ref(0); // 鍙戠エ閲戦鏈�澶у��
-const upload = reactive({
- // 涓婁紶鐨勫湴鍧�
- url: import.meta.env.VITE_APP_BASE_API + "/invoiceLedger/uploadFile",
- // 璁剧疆涓婁紶鐨勮姹傚ご閮�
- headers: { Authorization: "Bearer " + getToken() },
-});
-const matchFileType = ref(["pdf"]);
-const uploadModal = ref(false);
-const formattedNumber = (row, column, cellValue) => {
- return parseFloat(cellValue).toFixed(2);
-};
-const formatDate = (row, column, cellValue) => {
- return dayjs(cellValue).format("YYYY-MM-DD HH:mm:ss");
-};
-// 鏌ヨ鍒楄〃
-/** 鎼滅储鎸夐挳鎿嶄綔 */
-const handleQuery = () => {
- page.current = 1;
- getList();
-};
-const paginationChange = (obj) => {
- page.current = obj.page;
- page.size = obj.limit;
- getList();
-};
-const getList = () => {
- tableLoading.value = true;
- const { invoiceDate, ...rest } = searchForm;
- // 灏嗚寖鍥存棩鏈熷瓧娈典紶閫掔粰鍚庣
- const params = { ...rest, ...page };
- // 绉婚櫎寮�绁ㄦ棩鏈熺殑榛樿鍊艰缃紝鍙繚鐣欒寖鍥存棩鏈熷瓧娈�
- delete params.invoiceDate;
- registrationProductPage(params).then((res) => {
- tableLoading.value = false;
- tableData.value = res.data.records;
- total.value = res.data.total;
- });
-};
-// 琛ㄦ牸閫夋嫨鏁版嵁
-const handleSelectionChange = (selection) => {
- selectedRows.value = selection;
-};
-// 涓昏〃鍚堣鏂规硶
-const summarizeMainTable = (param) => {
- return proxy.summarizeTable(param, ["invoiceTotal"], {
- ticketsNum: { noDecimal: true }, // 涓嶄繚鐣欏皬鏁�
- futureTickets: { noDecimal: true }, // 涓嶄繚鐣欏皬鏁�
- });
-};
-// 鎵撳紑寮规
-const openForm = (row) => {
- form.value = {};
- productData.value = [];
- fileList.value = [];
- currentId.value = row.id;
-
- invoiceLedgerProductInfo({ id: row.id }).then((res) => {
- form.value = { ...res.data };
- fileList.value = res.data.fileList;
- // 淇濆瓨ticketRegistrationId鍒拌〃鍗曟暟鎹腑
- if (row.ticketRegistrationId) {
- form.value.ticketRegistrationId = row.ticketRegistrationId;
- }
- if (!form.value.invoicePerson) {
- form.value.invoicePerson = userStore.nickName;
- }
-
- // 璁$畻鍙戠エ閲戦鏈�澶у�硷細noInvoiceAmount + invoiceAmount
- const noInvoiceAmount = parseFloat(res.data.noInvoiceAmount || 0);
- const invoiceAmount = parseFloat(res.data.invoiceAmount || 0);
- maxInvoiceAmount.value = noInvoiceAmount + invoiceAmount;
- });
- dialogFormVisible.value = true;
-};
-// 涓婁紶澶氫釜鏂囦欢灏辫鐩栧師鏉ョ殑
-const handleExceed = (files) => {
- proxy.$refs["fileUpload"].clearFiles();
- const file = files[0];
- file.uid = genFileId();
- proxy.$refs["fileUpload"].handleStart(file);
-};
-// 涓婁紶鍓嶆牎妫�
-function handleBeforeUpload(file) {
- // 鏍℃鏂囦欢澶у皬
- if (file.size > 1024 * 1024 * 10) {
- proxy.$modal.msgError("涓婁紶鏂囦欢澶у皬涓嶈兘瓒呰繃10MB!");
- return false;
- }
- // 鍒ゆ柇鏂囦欢鏍煎紡鏄惁绗﹀悎
- const fileType = file.name.split(".").pop().toLowerCase();
- if (!matchFileType.value.includes(fileType)) {
- proxy.$modal.msgError("鏂囦欢鏍煎紡涓嶅尮閰�");
- return false;
- }
- proxy.$modal.loading("姝e湪涓婁紶鏂囦欢锛岃绋嶅��...");
- return true;
-}
-// 涓婁紶澶辫触
-function handleUploadError(err) {
- proxy.$modal.msgError("涓婁紶鏂囦欢澶辫触");
- proxy.$modal.closeLoading();
-}
-// 涓婁紶鎴愬姛鍥炶皟
-function handleUploadSuccess(res, file, uploadFiles) {
- proxy.$modal.closeLoading();
- if (res.code === 200) {
- proxy.$modal.msgSuccess("涓婁紶鎴愬姛");
- // 灏嗕笂浼犳垚鍔熺殑鏂囦欢淇℃伅娣诲姞鍒癴ileList涓�
- const fileInfo = {
- name: file.name,
- url: res.data.url || file.response?.data?.url || file.url,
- response: file.response
- };
- // 妫�鏌ユ槸鍚﹀凡瀛樺湪鐩稿悓鏂囦欢锛岄伩鍏嶉噸澶嶆坊鍔�
- const existingFileIndex = fileList.value.findIndex(f => f.name === fileInfo.name);
- if (existingFileIndex === -1) {
- fileList.value.push(fileInfo);
- } else {
- fileList.value[existingFileIndex] = fileInfo;
- }
- // 纭繚琛ㄥ崟鏁版嵁涓殑fileList涔熸洿鏂�
- form.value.fileList = fileList.value;
- } else {
- proxy.$modal.msgError(res.msg);
- proxy.$refs.fileUpload.handleRemove(file);
- }
-}
-// 鎻愪氦琛ㄥ崟
-const submitForm = () => {
- proxy.$refs["formRef"].validate((valid) => {
- if (valid) {
- form.value.fileList = fileList.value;
- invoiceLedgerSaveOrUpdate(form.value).then((res) => {
- proxy.$modal.msgSuccess("鎻愪氦鎴愬姛");
- closeDia();
- getList();
- });
- }
- });
-};
-// 鍏抽棴寮规
-const closeDia = () => {
- proxy.resetForm("formRef");
- dialogFormVisible.value = false;
-};
-// 瀵煎嚭
-const handleOut = () => {
- ElMessageBox.confirm("閫変腑鐨勫唴瀹瑰皢琚鍑猴紝鏄惁纭瀵煎嚭锛�", "瀵煎嚭", {
- confirmButtonText: "纭",
- cancelButtonText: "鍙栨秷",
- type: "warning",
- })
- .then(() => {
- proxy.download("/invoiceLedger/export", {}, "寮�绁ㄥ彴璐�.xlsx");
- })
- .catch(() => {
- proxy.$modal.msg("宸插彇娑�");
- });
-};
-
-// 纭鏂囦欢涓婁紶
-const commiInvoicetFile = () => {
- const object = {
- fileList: fileList.value,
- id: currentId.value,
- };
- commitFile(object).then((res) => {
- if (res.code === 200) {
- proxy.$modal.msgSuccess("鎻愪氦鎴愬姛");
- uploadModal.value = false;
- }
- getList();
- currentId.value = "";
- fileList.value = [];
- });
-};
-// 鍒犻櫎寮�绁ㄥ彴璐�
-const delInvoiceLedger = (row) => {
- ElMessageBox.confirm("璇ュ彂绁ㄥ彴璐﹀皢琚垹闄�,鏄惁纭鍒犻櫎", {
- confirmButtonText: "纭",
- cancelButtonText: "鍙栨秷",
- type: "warning",
- })
- .then(() => {
- delInvoiceLedgerByRegProductId(row.id).then((res) => {
- proxy.$modal.msgSuccess("鍒犻櫎鎴愬姛");
- getList();
- });
- })
- .catch(() => {
- proxy.$modal.msg("宸插彇娑�");
- });
-};
-
-const changeDateRange = (date) => {
- if (date) {
- searchForm.invoiceDateStart = date[0];
- searchForm.invoiceDateEnd = date[1];
- getList();
- }
-};
-
-const clearRange = () => {
- searchForm.invoiceDate = [];
- searchForm.invoiceDateStart = undefined;
- searchForm.invoiceDateEnd = undefined;
- getList();
-};
-
-// 鎵撳紑闄勪欢寮圭獥
-const recordId =ref(0)
-const fileDialogVisible = ref(false)
-
-// 鎵撳紑闄勪欢寮规
-const openFileDialog = async (row) => {
- recordId.value = row.id
- fileDialogVisible.value = true
-}
-
-onMounted(() => {
- getList();
-});
-</script>
-
-<style scoped lang="scss">
-.table_list {
- margin-top: unset;
-}
-</style>
diff --git a/src/views/salesManagement/invoiceRegistration/index.vue b/src/views/salesManagement/invoiceRegistration/index.vue
deleted file mode 100644
index 44e1c4e..0000000
--- a/src/views/salesManagement/invoiceRegistration/index.vue
+++ /dev/null
@@ -1,814 +0,0 @@
-<template>
- <div class="app-container">
- <div class="search_form">
- <el-form :inline="true" :model="searchForm">
- <el-form-item label="瀹㈡埛鍚嶇О">
- <el-input
- v-model="searchForm.customerName"
- style="width: 240px"
- placeholder="璇疯緭鍏ュ悕绉版悳绱�"
- clearable
- :prefix-icon="Search"
- @change="handleQuery"
- />
- </el-form-item>
- <el-form-item>
- <el-checkbox
- v-model="searchForm.status"
- label="涓嶆樉绀烘湭寮�绁ㄩ噾棰濅负0"
- @change="handleQuery"
- />
- </el-form-item>
- <el-form-item>
- <el-button type="primary" @click="handleQuery"> 鎼滅储 </el-button>
- <el-button @click="resetForm"> 閲嶇疆 </el-button>
- <el-button @click="handleExport" style="margin-right: 10px">瀵煎嚭</el-button>
- </el-form-item>
- </el-form>
- </div>
- <div class="table_list">
- <div class="flex justify-between">
- <div></div>
- <div>
- <el-button
- type="primary"
- @click="openForm"
- style="margin-bottom: 8px"
- :disabled="!canInvoice"
- >
- 寮�绁ㄧ櫥璁�
- </el-button>
- </div>
- </div>
- <el-table
- :data="tableData"
- :border="true"
- height="calc(100vh - 21em)"
- v-loading="tableLoading"
- :expand-row-keys="expandedRowKeys"
- :row-key="(row) => row.id"
- show-summary
- :summary-method="summarizeMainTable"
- @expand-change="expandChange"
- @selection-change="handleSelectionChange"
- >
- <el-table-column align="center" type="selection" width="55" />
- <el-table-column type="expand">
- <template #default="props">
- <el-table
- :data="props.row.children"
- border
- show-summary
- :summary-method="summarizeChildrenTable"
- >
- <el-table-column
- align="center"
- label="搴忓彿"
- type="index"
- width="60"
- />
- <el-table-column label="浜у搧澶х被" prop="productCategory" />
- <el-table-column
- label="瑙勬牸鍨嬪彿"
- prop="specificationModel"
- width="150"
- />
- <el-table-column label="鍗曚綅" prop="unit" width="70" />
- <el-table-column label="鏁伴噺" prop="quantity" width="70" />
- <el-table-column label="绋庣巼(%)" prop="taxRate" width="80" />
- <el-table-column
- label="鍚◣鍗曚环(鍏�)"
- prop="taxInclusiveUnitPrice"
- :formatter="formattedNumber"
- />
- <el-table-column
- label="鍚◣鎬讳环(鍏�)"
- prop="taxInclusiveTotalPrice"
- :formatter="formattedNumber"
- />
- <el-table-column
- label="涓嶅惈绋庢�讳环(鍏�)"
- prop="taxExclusiveTotalPrice"
- :formatter="formattedNumber"
- />
- <el-table-column
- label="寮�绁ㄦ暟"
- prop="invoiceNum"
- :formatter="formattedNumber"
- />
- <el-table-column
- label="寮�绁ㄩ噾棰�(鍏�)"
- prop="invoiceAmount"
- :formatter="formattedNumber"
- />
- <el-table-column
- label="鏈紑绁ㄦ暟"
- prop="noInvoiceNum"
- :formatter="formattedNumber"
- />
- <el-table-column
- label="鏈紑绁ㄩ噾棰�(鍏�)"
- prop="noInvoiceAmount"
- :formatter="formattedNumber"
- />
- </el-table>
- </template>
- </el-table-column>
- <el-table-column align="center" label="搴忓彿" type="index" width="60" />
- <el-table-column
- label="閿�鍞悎鍚屽彿"
- prop="salesContractNo"
- show-overflow-tooltip
- />
-<!-- <el-table-column-->
-<!-- label="瀹㈡埛鍚堝悓鍙�"-->
-<!-- prop="customerContractNo"-->
-<!-- width="200"-->
-<!-- show-overflow-tooltip-->
-<!-- />-->
- <el-table-column
- label="瀹㈡埛鍚嶇О"
- prop="customerName"
- show-overflow-tooltip
- />
- <el-table-column label="涓氬姟鍛�" prop="salesman" show-overflow-tooltip/>
- <el-table-column
- label="鍚堝悓閲戦(鍏�)"
- prop="contractAmount"
- show-overflow-tooltip
- :formatter="formattedNumber"
-
- />
- <el-table-column
- label="宸插紑绁ㄩ噾棰�(鍏�)"
- prop="invoiceTotal"
- show-overflow-tooltip
- :formatter="formattedNumber"
- />
- <el-table-column
- label="鏈紑绁ㄩ噾棰�(鍏�)"
- prop="noInvoiceAmountTotal"
- show-overflow-tooltip
- width="120"
- >
- <template #default="{ row, column }">
- <el-text type="danger">
- {{ formattedNumber(row, column, row.noInvoiceAmountTotal) }}
- </el-text>
- </template>
- </el-table-column>
- </el-table>
- <pagination
- v-show="total > 0"
- :total="total"
- layout="total, sizes, prev, pager, next, jumper"
- :page="page.current"
- :limit="page.size"
- @pagination="paginationChange"
- />
- </div>
- <FormDialog
- v-model="dialogFormVisible"
- title="鏂板寮�绁ㄧ櫥璁伴〉闈�"
- :width="'85%'"
- @close="closeDia"
- @confirm="submitForm"
- @cancel="closeDia"
- >
- <el-form
- :model="form"
- label-width="140px"
- label-position="top"
- :rules="rules"
- ref="formRef"
- >
- <el-row :gutter="30">
- <el-col :span="12">
- <el-form-item label="閿�鍞悎鍚屽彿锛�" prop="salesContractNo">
- <el-input v-model="form.salesContractNo" disabled placeholder="澶氬悎鍚屾壒閲忓鐞嗭紙鍏蜂綋鍚堝悓鍙疯浜у搧鍒楄〃锛�"></el-input>
- </el-form-item>
- </el-col>
- <el-col :span="12">
- <el-form-item label="瀹㈡埛鍚嶇О锛�" prop="customerName">
- <el-input
- v-model="form.customerName"
- placeholder="鑷姩濉厖"
- disabled
- ></el-input>
- </el-form-item>
- </el-col>
- </el-row>
- <el-row :gutter="30">
- <el-col :span="12">
- <el-form-item label="涓氬姟鍛橈細" prop="salesman">
- <el-input
- v-model="form.salesman"
- placeholder="鑷姩濉厖"
- disabled
- />
- </el-form-item>
- </el-col>
- <el-col :span="12">
- <el-form-item label="鍙戠エ鍙风爜锛�" prop="invoiceNo">
- <el-input
- v-model="form.invoiceNo"
- placeholder="璇疯緭鍏�"
- clearable
- />
- </el-form-item>
- </el-col>
- </el-row>
- <el-row :gutter="30">
- <el-col :span="12">
- <el-form-item label="寮�绁ㄦ棩鏈�" prop="issueDate">
- <el-date-picker
- style="width: 100%"
- v-model="form.issueDate"
- type="date"
- placeholder="璇烽�夋嫨"
- clearable
- format="YYYY-MM-DD"
- value-format="YYYY-MM-DD"
- />
- </el-form-item>
- </el-col>
- </el-row>
- <el-row :gutter="30">
- <el-col :span="12">
- <el-form-item label="褰曞叆浜�" prop="createUer">
- <el-input v-model="form.createUer" placeholder="璇疯緭鍏ュ綍鍏ヤ汉" />
- </el-form-item>
- </el-col>
- <el-col :span="12">
- <el-form-item label="褰曞叆鏃ユ湡锛�" prop="createTime">
- <el-date-picker
- style="width: 100%"
- v-model="form.createTime"
- type="date"
- placeholder="璇烽�夋嫨"
- clearable
- />
- </el-form-item>
- </el-col>
-
- </el-row>
- <el-row>
- <el-form-item label="浜у搧淇℃伅锛�" prop="entryDate"> </el-form-item>
- </el-row>
- <el-table
- :data="productData"
- border
- show-summary
- :summary-method="summarizeChildrenTable"
- >
- <el-table-column
- align="center"
- label="搴忓彿"
- type="index"
- width="60"
- />
- <el-table-column label="鎵�灞炲悎鍚�" prop="salesContractNo" width="200">
- <template #default="{ row }">
- <el-tag type="primary">{{ row.salesContractNo }}</el-tag>
- </template>
- </el-table-column>
- <el-table-column label="浜у搧澶х被" prop="productCategory" />
- <el-table-column
- label="瑙勬牸鍨嬪彿"
- prop="specificationModel"
- width="150"
- />
- <el-table-column label="鍗曚綅" prop="unit" />
- <el-table-column label="鏁伴噺" prop="quantity" width="70" />
- <el-table-column label="绋庣巼(%)" prop="taxRate" width="80" />
- <el-table-column
- label="鍚◣鍗曚环(鍏�)"
- prop="taxInclusiveUnitPrice"
- :formatter="formattedNumber"
- width="200"
- />
- <el-table-column
- label="鍚◣鎬讳环(鍏�)"
- prop="taxInclusiveTotalPrice"
- :formatter="formattedNumber"
- width="200"
- />
- <el-table-column
- label="涓嶅惈绋庢�讳环(鍏�)"
- prop="taxExclusiveTotalPrice"
- :formatter="formattedNumber"
- width="150"
- />
- <el-table-column label="鏈寮�绁ㄦ暟" prop="currentInvoiceNum" width="180">
- <template #default="scope">
- <el-input-number
- :step="0.1"
- :min="0"
- style="width: 100%"
- :precision="2"
- v-model="scope.row.currentInvoiceNum"
- @change="invoiceNumBlur(scope.row)"
- :disabled="isProductInvoiceDisabled(scope.row)"
- ></el-input-number>
- </template>
- </el-table-column>
- <el-table-column
- label="鏈寮�绁ㄩ噾棰�(鍏�)"
- prop="currentInvoiceAmount"
- width="180"
- >
- <template #default="scope">
- <el-input-number
- :step="0.01"
- :min="0"
- style="width: 100%"
- :precision="2"
- v-model="scope.row.currentInvoiceAmount"
- @change="invoiceAmountBlur(scope.row)"
- :disabled="isProductInvoiceDisabled(scope.row)"
- ></el-input-number>
- </template>
- </el-table-column>
- <el-table-column label="鏈紑绁ㄦ暟" prop="noInvoiceNum" width="120">
- <template #default="scope">
- <el-input
- type="number"
- min="0"
- disabled
- v-model="scope.row.noInvoiceNum"
- ></el-input>
- </template>
- </el-table-column>
- <el-table-column
- label="鏈紑绁ㄩ噾棰�(鍏�)"
- prop="noInvoiceAmount"
- width="200"
- >
- <template #default="scope">
- <el-input
- type="number"
- min="0"
- disabled
- v-model="scope.row.noInvoiceAmount"
- :formatter="formattedInputNumber"
- :precision="2"
- :step="0.01"
- ></el-input>
- </template>
- </el-table-column>
- <el-table-column label="鐧昏浜�" prop="register" width="100">
- <!-- <template #default="{ row }">
- <el-input
- v-model="row.register"
- placeholder="璇疯緭鍏ョ櫥璁颁汉"
- disabled
- />
- </template> -->
- </el-table-column>
- <el-table-column label="鐧昏鏃ユ湡" prop="registerDate" width="150">
- <!-- <template #default="{ row }">
- <el-date-picker
- style="width: 100%"
- v-model="row.registerDate"
- value-format="YYYY-MM-DD"
- format="YYYY-MM-DD"
- type="date"
- placeholder="璇烽�夋嫨"
- clearable
- disabled
- />
- </template> -->
- </el-table-column>
- </el-table>
- </el-form>
- </FormDialog>
- </div>
-</template>
-
-<script setup>
-import pagination from "@/components/PIMTable/Pagination.vue";
-import FormDialog from '@/components/Dialog/FormDialog.vue';
-import { onMounted, ref, computed } from "vue";
-import { Search } from "@element-plus/icons-vue";
-import { ElMessageBox } from "element-plus";
-// import {userListNoPage} from "@/api/system/user.js";
-import {
- getSalesLedgerWithProducts,
- ledgerListPage,
- productList,
-} from "@/api/salesManagement/salesLedger.js";
-import { invoiceRegistrationSave } from "@/api/salesManagement/invoiceRegistration.js";
-import useFormData from "@/hooks/useFormData";
-import useUserStore from "@/store/modules/user";
-import dayjs from "dayjs";
-
-const { proxy } = getCurrentInstance();
-const userStore = useUserStore();
-const tableData = ref([]);
-const productData = ref([]);
-const selectedRows = ref([]);
-const tableLoading = ref(false);
-const page = reactive({
- current: 1,
- size: 100,
-});
-const total = ref(0);
-// 鐢ㄦ埛淇℃伅琛ㄥ崟寮规鏁版嵁
-const operationType = ref("");
-const dialogFormVisible = ref(false);
-const data = reactive({
- searchForm: {
- customerName: "",
- status: false,
- customerContractNo: undefined, // 瀹㈡埛鍚堝悓鍙�
- projectName: undefined, // 椤圭洰鍚嶇О
- createUer: undefined, // 鐧昏浜�
- issueDate: undefined, // 寮�绁ㄦ棩鏈�
- createTime: undefined, // 褰曞叆鏃ユ湡锛�
- productCategory: "",
- isInvoice: 1
- },
- form: {
- salesLedgerId: "",
- customerName: "",
- salesman: "",
- projectName: "",
- productData: [],
- invoiceNo: "",
- createUer: userStore.nickName,
- issueDate: dayjs().format("YYYY-MM-DD"),
- selectedContractIds: [], // 鏂板锛氬瓨鍌ㄦ墍鏈夐�変腑鐨勫悎鍚孖D
- isBatch: false // 鏂板锛氭爣璇嗘槸鍚︿负鎵归噺鎿嶄綔
- },
- rules: {
- createUer: [{ required: true, message: "璇烽�夋嫨", trigger: "blur" }],
- issueDate: [{ required: true, message: "璇烽�夋嫨", trigger: "change" }],
- invoiceNo: [{ required: true, message: "璇疯緭鍏�", trigger: "change" }],
- createTime: [{ required: true, message: "璇烽�夋嫨", trigger: "change" }],
- },
-});
-const { form, rules } = toRefs(data);
-const { form: searchForm, resetForm } = useFormData(data.searchForm);
-
-const formattedNumber = (row, column, cellValue) => {
- if (cellValue == 0) {
- return parseFloat(cellValue).toFixed(2);
- }
- if (cellValue) {
- return parseFloat(cellValue).toFixed(2);
- } else {
- return cellValue;
- }
-};
-
-const formattedInputNumber = (value) => {
- return value ? parseFloat(value).toFixed(2) : 0;
-};
-
-// 鍒ゆ柇鏄惁鍙互寮�绁紙鍩轰簬閫変腑鐨勫彴璐︽暟鎹級
-const canInvoice = computed(() => {
- if (selectedRows.value.length === 0) {
- return false;
- }
- // 妫�鏌ユ墍鏈夐�変腑鐨勫彴璐︼紝鍙鏈変竴涓湭寮�绁ㄩ噾棰濆ぇ浜�0锛屽氨鍙互寮�绁�
- return selectedRows.value.some(row => {
- const noInvoiceAmount = parseFloat(row.noInvoiceAmountTotal || 0);
- return noInvoiceAmount > 0;
- });
-});
-
-// 鍒ゆ柇鍗曚釜浜у搧鏄惁鍙互寮�绁�
-const isProductInvoiceDisabled = (row) => {
- // 妫�鏌ユ湭寮�绁ㄩ噾棰濆拰鏈紑绁ㄦ暟锛屽鏋滈兘涓�0鎴栧皬浜庣瓑浜�0锛屽垯绂佺敤
- // 浼樺厛浣跨敤 tempnoInvoiceAmount 鍜� tempNoInvoiceNum锛堝垵濮嬪�硷級锛屽鏋滄病鏈夊垯浣跨敤 noInvoiceAmount 鍜� originalNoInvoiceNum
- const noInvoiceAmount = parseFloat(row.tempnoInvoiceAmount || row.noInvoiceAmount || 0);
- const noInvoiceNum = parseFloat(row.tempNoInvoiceNum || row.originalNoInvoiceNum || row.noInvoiceNum || 0);
- return noInvoiceAmount <= 0 || noInvoiceNum <= 0;
-};
-
-// 鏌ヨ鍒楄〃
-/** 鎼滅储鎸夐挳鎿嶄綔 */
-const handleQuery = () => {
- page.current = 1;
- getList();
-};
-const paginationChange = (obj) => {
- page.current = obj.page;
- page.size = obj.limit;
- getList();
-};
-const getList = () => {
- tableLoading.value = true;
- ledgerListPage({ ...searchForm, ...page }).then((res) => {
- tableLoading.value = false;
- tableData.value = res.records;
- total.value = res.total;
- expandedRowKeys.value = [];
- });
-};
-// 琛ㄦ牸閫夋嫨鏁版嵁
-const handleSelectionChange = (selection) => {
- console.log("selection", selection);
- selectedRows.value = selection.filter(
- (item) => item.salesContractNo !== undefined
- );
-};
-const expandedRowKeys = ref([]);
-// 灞曞紑琛�
-const expandChange = (row, expandedRows) => {
- if (expandedRows.length > 0) {
- expandedRowKeys.value = [];
- try {
- productList({ salesLedgerId: row.id, type: 1 }).then((res) => {
- const index = tableData.value.findIndex((item) => item.id === row.id);
- if (index > -1) {
- tableData.value[index].children = res.data;
- }
- expandedRowKeys.value.push(row.id);
- });
- } catch (error) {
- console.log(error);
- }
- } else {
- expandedRowKeys.value = [];
- }
-};
-// 涓昏〃鍚堣鏂规硶
-const summarizeMainTable = (param) => {
- return proxy.summarizeTable(param, [
- "contractAmount",
- "invoiceTotal",
- "noInvoiceAmountTotal",
- ]);
-};
-// 瀛愯〃鍚堣鏂规硶
-const summarizeChildrenTable = (param) => {
- return proxy.summarizeTable(param, [
- "taxInclusiveUnitPrice",
- "taxInclusiveTotalPrice",
- "taxExclusiveTotalPrice",
- "invoiceNum",
- "invoiceAmount",
- "currentInvoiceAmount",
- "noInvoiceNum",
- "noInvoiceAmount",
- "currentInvoiceNum",
- ]);
-};
-// 鎵撳紑寮规
-const openForm = () => {
- // 鍒ゆ柇鏄惁閫夋嫨浜嗗悎鍚�
- if (selectedRows.value.length === 0) {
- proxy.$modal.msgError("璇疯嚦灏戦�夋嫨涓�鏉″悎鍚�");
- return;
- }
-
- // 妫�鏌ユ墍鏈夐�夋嫨鐨勫悎鍚屾槸鍚﹀叿鏈夌浉鍚岀殑瀹㈡埛鍚嶇О
- const firstRow = selectedRows.value[0];
- const isSameCustomer = selectedRows.value.every(row =>
- row.customerName === firstRow.customerName
- );
-
- if (!isSameCustomer) {
- proxy.$modal.msgError("璇烽�夋嫨鐩稿悓瀹㈡埛鍚嶇О鐨勫悎鍚�");
- return;
- }
-
- // 鍏佽涓嶅悓鐨勯攢鍞悎鍚屽彿鎵归噺澶勭悊锛屾棤闇�妫�鏌ラ噸澶�
-
- form.value = {};
- productData.value = [];
-
- // 鍔犺浇鎵�鏈夐�変腑鍚堝悓鐨勪骇鍝佹暟鎹�
- const promises = selectedRows.value.map(row =>
- getSalesLedgerWithProducts({ id: row.id })
- );
-
- Promise.all(promises).then(results => {
- // 鍚堝苟鎵�鏈夊悎鍚岀殑浜у搧鏁版嵁锛屽苟涓烘瘡涓骇鍝佹坊鍔犲搴旂殑鍚堝悓淇℃伅
- const allProductData = [];
- results.forEach((result, index) => {
- const contract = selectedRows.value[index];
- // const contractId = contract.id;
- if (result.productData) {
- result.productData.forEach(item => {
- allProductData.push({
- ...item,
- // id: contractId, // 鏄庣‘璁剧疆鍚堝悓ID
- salesContractNo: contract.salesContractNo, // 娣诲姞閿�鍞悎鍚屽彿
- customerName: contract.customerName, // 娣诲姞瀹㈡埛鍚嶇О
- customerContractNo: contract.customerContractNo // 娣诲姞瀹㈡埛鍚堝悓鍙�
- });
- });
- }
- });
-
- // 璁剧疆琛ㄥ崟鏁版嵁锛堜娇鐢ㄧ涓�涓悎鍚岀殑鍩烘湰淇℃伅锛岄攢鍞悎鍚屽彿鐣欑┖锛�
- form.value = { ...results[0] };
- form.value.createTime = dayjs().format("YYYY-MM-DD");
- form.value.issueDate = dayjs().format("YYYY-MM-DD");
- form.value.createUer = userStore.nickName;
- form.value.selectedContractIds = selectedRows.value.map(row => row.id); // 瀛樺偍鎵�鏈夐�変腑鐨勫悎鍚孖D
- form.value.salesContractNo = ""; // 閿�鍞悎鍚屽彿鐣欑┖锛屽洜涓轰細鍦ㄤ骇鍝佽〃鏍间腑鍒嗗埆鏄剧ず
-
- productData.value = allProductData;
-
- // 瀵逛簬涓嶈兘寮�绁ㄧ殑浜у搧锛屽皢寮�绁ㄦ暟鍜屽紑绁ㄩ噾棰濊缃负0
- productData.value.forEach(item => {
- if (isProductInvoiceDisabled(item)) {
- item.currentInvoiceNum = 0;
- item.currentInvoiceAmount = 0;
- }
- });
-
- dialogFormVisible.value = true;
- console.log("productData.value ", productData.value);
- });
-};
-// 鎻愪氦琛ㄥ崟
-const submitForm = () => {
- proxy.$refs["formRef"].validate((valid) => {
- if (valid) {
- // 濡傛灉鏄壒閲忔搷浣滐紝灏嗘墍鏈夊悎鍚岀殑鏁版嵁鏀惧湪涓�涓暟缁勯噷锛屽彧璋冪敤涓�娆℃帴鍙�
- if (selectedRows.value.length > 1) {
- // 鍒涘缓鍖呭惈鎵�鏈夊悎鍚屾暟鎹殑鏁扮粍
- const batchData = selectedRows.value.map(contract => {
- // 绛涢�夊嚭灞炰簬褰撳墠鍚堝悓鐨勪骇鍝佹暟鎹�
- const contractProductData = productData.value.filter(item =>
- item.salesLedgerId === contract.id
- );
-
- // 涓烘瘡涓攢鍞悎鍚屽彿鍒涘缓鐙珛鐨勫璞�
- return {
- // 鍩虹琛ㄥ崟鏁版嵁
- issueDate: form.value.issueDate,
- createTime: form.value.createTime,
- createUer: form.value.createUer,
- invoiceNo: form.value.invoiceNo,
-
- // 鍚堝悓瀹為檯淇℃伅
- id: contract.id, // 浣跨敤id浣滀负瀛楁鍚嶏紝鍊间负salesLedgerId
- salesContractNo: contract.salesContractNo, // 浣跨敤瀹為檯鐨勯攢鍞悎鍚屽彿
- customerName: contract.customerName, // 浣跨敤瀹為檯鐨勫鎴峰悕绉�
- customerId: contract.customerId, // 娣诲姞瀹㈡埛ID
- customerContractNo: contract.customerContractNo, // 浣跨敤瀹為檯鐨勫鎴峰悎鍚屽彿
- projectName: contract.projectName, // 浣跨敤瀹為檯鐨勯」鐩悕绉�
- salesman: contract.salesman, // 浣跨敤瀹為檯鐨勪笟鍔″憳
-
- // 浜у搧鏁版嵁
- productData: proxy.HaveJson(contractProductData),
-
- // 鎵归噺鏍囪瘑
- isBatch: true
- };
- });
-
- // 鍙皟鐢ㄤ竴娆℃帴鍙o紝浼犻�掑寘鍚墍鏈夊悎鍚屾暟鎹殑鏁扮粍
- invoiceRegistrationSave(batchData).then(() => {
- proxy.$modal.msgSuccess("鎵归噺鏂板鎴愬姛");
- closeDia();
- getList();
- });
- } else {
- // 鍗曚釜鍚堝悓鎻愪氦閫昏緫 - 涔熶互鏁扮粍褰㈠紡浼犻��
- const singleContract = selectedRows.value[0];
- const singleFormArray = [
- {
- // 鍩虹琛ㄥ崟鏁版嵁
- issueDate: form.value.issueDate,
- createTime: form.value.createTime,
- createUer: form.value.createUer,
- invoiceNo: form.value.invoiceNo,
-
- // 鍚堝悓瀹為檯淇℃伅
- id: singleContract.id, // 浣跨敤id浣滀负瀛楁鍚嶏紝鍊间负salesLedgerId
- salesContractNo: singleContract.salesContractNo, // 浣跨敤瀹為檯鐨勯攢鍞悎鍚屽彿
- customerName: singleContract.customerName, // 浣跨敤瀹為檯鐨勫鎴峰悕绉�
- customerId: singleContract.customerId, // 娣诲姞瀹㈡埛ID
- customerContractNo: singleContract.customerContractNo, // 浣跨敤瀹為檯鐨勫鎴峰悎鍚屽彿
- projectName: singleContract.projectName, // 浣跨敤瀹為檯鐨勯」鐩悕绉�
- salesman: singleContract.salesman, // 浣跨敤瀹為檯鐨勪笟鍔″憳
-
- // 浜у搧鏁版嵁
- productData: proxy.HaveJson(productData.value),
-
- // 鎵归噺鏍囪瘑
- isBatch: false
- }
- ];
- invoiceRegistrationSave(singleFormArray).then((res) => {
- proxy.$modal.msgSuccess("鎻愪氦鎴愬姛");
- closeDia();
- getList();
- });
- }
- }
- });
-};
-// 鍏抽棴寮规
-const closeDia = () => {
- proxy.resetForm("formRef");
- dialogFormVisible.value = false;
-};
-// 瀵煎嚭
-const handleOut = () => {
- ElMessageBox.confirm("閫変腑鐨勫唴瀹瑰皢琚鍑猴紝鏄惁纭瀵煎嚭锛�", "瀵煎嚭", {
- confirmButtonText: "纭",
- cancelButtonText: "鍙栨秷",
- type: "warning",
- })
- .then(() => {
- proxy.download("/invoiceRegistration/export", {}, "寮�绁ㄧ櫥璁颁俊鎭�.xlsx");
- })
- .catch(() => {
- proxy.$modal.msg("宸插彇娑�");
- });
-};
-
-// 瀵煎嚭閿�鍞彴璐�
-const handleExport = () => {
- ElMessageBox.confirm("閫変腑鐨勫唴瀹瑰皢琚鍑猴紝鏄惁纭瀵煎嚭锛�", "瀵煎嚭", {
- confirmButtonText: "纭",
- cancelButtonText: "鍙栨秷",
- type: "warning",
- })
- .then(() => {
- proxy.download("/sales/ledger/exportOne", { ...searchForm, ...page }, "寮�绁ㄧ櫥璁�.xlsx");
- })
- .catch(() => {
- proxy.$modal.msg("宸插彇娑�");
- });
-};
-
-//鏈寮�绁ㄥけ鐒︽搷浣�
-const invoiceNumBlur = (row) => {
- if (!row.currentInvoiceNum) {
- row.currentInvoiceNum = 0;
- }
- if (row.currentInvoiceNum > row.tempNoInvoiceNum) {
- proxy.$modal.msgWarning("鏈寮�绁ㄦ暟涓嶅緱澶т簬鏈紑绁ㄦ暟");
- row.currentInvoiceNum = 0;
- }
- // 璁$畻鏈寮�绁ㄩ噾棰�
- row.currentInvoiceAmount = (
- row.currentInvoiceNum * row.taxInclusiveUnitPrice
- ).toFixed(2);
- // 璁$畻鏈紑绁ㄦ暟
- row.noInvoiceNum = (row.originalNoInvoiceNum - row.currentInvoiceNum).toFixed(
- 2
- );
- // 璁$畻鏈紑绁ㄩ噾棰�
- row.noInvoiceAmount = (
- row.tempnoInvoiceAmount - row.currentInvoiceAmount
- ).toFixed(2);
-};
-// 鏈寮�绁ㄩ噾棰濆け鐒︽搷浣�
-const invoiceAmountBlur = (row) => {
- if (!row.currentInvoiceAmount) {
- row.currentInvoiceAmount = 0;
- }
- // 璁$畻鏄惁瓒呰繃寮�绁ㄦ�婚噾棰�
- if (row.currentInvoiceAmount > row.tempnoInvoiceAmount) {
- proxy.$modal.msgWarning("鏈寮�绁ㄩ噾棰濅笉寰楀ぇ浜庢湭寮�绁ㄩ噾棰�");
- row.currentInvoiceAmount = 0;
- }
- // 璁$畻鏈寮�绁ㄦ暟
- row.currentInvoiceNum = (
- row.currentInvoiceAmount / row.taxInclusiveUnitPrice
- ).toFixed(2);
- console.log("row.currentInvoiceNum ", row.currentInvoiceNum);
- console.log(" row.originalNoInvoiceNum ", row.originalNoInvoiceNum);
- // 璁$畻鏈紑绁ㄦ暟
- row.noInvoiceNum = (row.originalNoInvoiceNum - row.currentInvoiceNum).toFixed(
- 2
- );
- // 璁$畻鏈紑绁ㄩ噾棰�
- row.noInvoiceAmount = (
- row.tempnoInvoiceAmount - row.currentInvoiceAmount
- ).toFixed(2);
-};
-
-onMounted(() => {
- getList();
-});
-</script>
-
-<style scoped lang="scss">
-.table_list {
- margin-top: unset;
-}
-.flex {
- display: flex;
-}
-.justify-between {
- justify-content: space-between;
-}
-:deep(.el-checkbox__label) {
- font-weight: bold;
-}
-</style>
-
-
-
-
-
diff --git a/src/views/salesManagement/receiptPayment/index.vue b/src/views/salesManagement/receiptPayment/index.vue
deleted file mode 100644
index 25bd280..0000000
--- a/src/views/salesManagement/receiptPayment/index.vue
+++ /dev/null
@@ -1,605 +0,0 @@
-<template>
- <div class="app-container">
- <div class="search_form">
- <el-form :inline="true" :model="searchForm" style="width: 100%">
- <el-row justify="space-between">
- <el-col :span="24">
- <el-form-item label="瀹㈡埛鍚嶇О">
- <el-input
- v-model="searchForm.customerName"
- placeholder="璇疯緭鍏�"
- @change="handleQuery"
- clearable
- prefix-icon="Search"
- />
- </el-form-item>
- <el-form-item>
- <el-checkbox
- v-model="searchForm.status"
- label="涓嶆樉绀哄緟鍥炴涓�0"
- @change="handleQuery"
- />
- </el-form-item>
- <el-form-item>
- <el-button type="primary" @click="handleQuery"> 鎼滅储 </el-button>
- </el-form-item>
- </el-col>
- </el-row>
- </el-form>
- </div>
- <div class="table_list">
- <div class="actions">
- <div></div>
- <div>
- <el-button type="primary" @click="openForm('add')">
- 鏂板鍥炴
- </el-button>
- <el-button icon="Download" @click="handleOut"> 瀵煎嚭 </el-button>
- </div>
- </div>
- <el-table
- :data="tableData"
- border
- ref="tableRef"
- v-loading="tableLoading"
- @selection-change="handleSelectionChange"
- :row-key="(row) => row.id"
- show-summary
- :summary-method="summarizeMainTable"
- :expand-row-keys="expandedRowKeys"
- @expand-change="expandChange"
-
- height="calc(100vh - 21.5em)"
- >
- <el-table-column align="center" type="selection" width="55" />
- <el-table-column type="expand">
- <template #default="props">
- <el-table
- :data="props.row.children"
- border
- show-summary
- :summary-method="summarizeChildrenTable"
- >
- <el-table-column
- align="center"
- label="搴忓彿"
- type="index"
- width="60"
- />
- <el-table-column label="鍥炴鏃ユ湡" prop="receiptPaymentDate" width="130"/>
- <el-table-column label="鍥炴閲戦" prop="receiptPaymentAmount">
- <template #default="scope">
- <el-input-number :step="0.01" :min="0" style="width: 100%"
- v-model="scope.row.receiptPaymentAmount"
- :disabled="!scope.row.editType"
- :precision="2"
- placeholder="璇疯緭鍏�"
- clearable
- />
- </template>
- </el-table-column>
- <el-table-column label="鍥炴鏂瑰紡" prop="receiptPaymentType">
- <template #default="scope">
- <el-select
- v-model="scope.row.receiptPaymentType"
- placeholder="璇烽�夋嫨"
- clearable
- :disabled="!scope.row.editType"
- >
- <el-option
- v-for="item in receipt_payment_type"
- :key="item.value"
- :label="item.label"
- :value="item.value"
- />
- </el-select>
- </template>
- </el-table-column>
- <el-table-column label="鐧昏浜�" prop="registrant" width="90"/>
- <el-table-column label="鐧昏鏃ユ湡" prop="createTime" width="130"/>
- <el-table-column label="鎿嶄綔" width="150" align="center">
- <template #default="scope">
- <el-button
- link
- type="primary"
- @click="changeEditType(scope.row)"
- v-if="!scope.row.editType"
- >缂栬緫</el-button
- >
- <el-button
- link
- type="primary"
- @click="saveReceiptPayment(scope.row)"
- v-if="scope.row.editType"
- >淇濆瓨</el-button
- >
- <el-button
- link
- type="primary"
- @click="delReceiptRecord(scope.row)"
- >鍒犻櫎</el-button
- >
- </template>
- </el-table-column>
- </el-table>
- </template>
- </el-table-column>
- <el-table-column align="center" label="搴忓彿" type="index" width="60" />
- <el-table-column
- label="閿�鍞悎鍚屽彿"
- prop="salesContractNo"
- show-overflow-tooltip
- width="240"
- />
- <el-table-column
- label="瀹㈡埛鍚嶇О"
- prop="customerName"
- show-overflow-tooltip
- width="240"
- />
- <el-table-column
- label="鍥炴鐘舵��"
- prop="statusName"
- width="120"
- >
- <template #default="{ row }">
- <el-tag :type="getStatusTagType(row.statusName)" disable-transitions>
- {{ row.statusName || "--" }}
- </el-tag>
- </template>
- </el-table-column>
- <el-table-column
- label="浜у搧澶х被"
- prop="productCategory"
- show-overflow-tooltip
- width="100"
- />
- <el-table-column
- label="瑙勬牸鍨嬪彿"
- prop="specificationModel"
- show-overflow-tooltip
- width="200"
- />
- <el-table-column label="绋庣巼(%)" prop="taxRate" show-overflow-tooltip />
- <el-table-column
- label="宸插洖娆鹃噾棰�(鍏�)"
- prop="invoiceTotal"
- show-overflow-tooltip
- :formatter="formattedNumber"
- width="200"
- />
- <el-table-column
- label="寰呭洖娆鹃噾棰�(鍏�)"
- prop="pendingInvoiceTotal"
- show-overflow-tooltip
- width="200"
- >
- <template #default="{ row, column }">
- <el-text type="danger">
- {{ formattedNumber(row, column, row.pendingInvoiceTotal) }}
- </el-text>
- </template>
- </el-table-column>
- </el-table>
- <pagination
- v-show="total > 0"
- :total="total"
- layout="total, sizes, prev, pager, next, jumper"
- :page="page.current"
- :limit="page.size"
- @pagination="paginationChange"
- />
- </div>
- <FormDialog
- v-model="dialogFormVisible"
- title="鏂板鍥炴椤甸潰"
- :width="'90%'"
- @close="closeDia"
- @confirm="submitForm"
- @cancel="closeDia"
- >
- <el-table
- v-if="forms.length"
- :data="forms"
- border
- style="width: 100%"
- size="small"
- >
- <el-table-column type="index" label="搴忓彿" width="50" align="center"/>
- <el-table-column label="閿�鍞悎鍚屽彿" prop="salesContractNo" show-overflow-tooltip />
- <el-table-column label="瀹㈡埛鍚嶇О" prop="customerName" show-overflow-tooltip />
- <el-table-column
- label="浜у搧澶х被"
- prop="productCategory"
- show-overflow-tooltip
- width="100"
- />
- <el-table-column
- label="瑙勬牸鍨嬪彿"
- prop="specificationModel"
- show-overflow-tooltip
- width="200"
- />
- <el-table-column label="绋庣巼(%)" width="110">
- <template #default="{ row }">
- <el-input v-model="row.taxRate" disabled />
- </template>
- </el-table-column>
- <el-table-column
- label="寰呭洖娆鹃噾棰�(鍏�)"
- prop="pendingInvoiceTotal"
- show-overflow-tooltip
- width="170"
- >
- <template #default="{ row, column }">
- <el-text type="danger">
- {{ formattedNumber(row, column, row.pendingInvoiceTotal) }}
- </el-text>
- </template>
- </el-table-column>
- <el-table-column label="鏈鍥炴閲戦(鍏�)" width="180">
- <template #default="{ row }">
- <el-input-number
- v-model="row.receiptPaymentAmount"
- :step="0.01"
- :min="0"
- :max="Number(row.pendingInvoiceTotal || 0)"
- :precision="2"
- style="width: 100%"
- placeholder="璇疯緭鍏�"
- />
- </template>
- </el-table-column>
- <el-table-column label="鍥炴褰㈠紡" width="160">
- <template #default="{ row }">
- <el-select v-model="row.receiptPaymentType" placeholder="璇烽�夋嫨" clearable>
- <el-option
- v-for="opt in receipt_payment_type"
- :key="opt.value"
- :label="opt.label"
- :value="opt.value"
- />
- </el-select>
- </template>
- </el-table-column>
- <el-table-column label="鍥炴鏃ユ湡" width="170">
- <template #default="{ row }">
- <el-date-picker
- v-model="row.receiptPaymentDate"
- value-format="YYYY-MM-DD"
- format="YYYY-MM-DD"
- type="date"
- placeholder="璇烽�夋嫨"
- style="width: 100%"
- />
- </template>
- </el-table-column>
- <el-table-column label="鐧昏浜�" width="140">
- <template #default="{ row }">
- <el-input v-model="row.registrant" />
- </template>
- </el-table-column>
- </el-table>
- <div v-else class="empty-tip">璇烽�夋嫨闇�瑕佸洖娆剧殑璁板綍</div>
- </FormDialog>
- </div>
-</template>
-
-<script setup>
-import pagination from "@/components/PIMTable/Pagination.vue";
-import FormDialog from '@/components/Dialog/FormDialog.vue';
-import { onMounted, ref, reactive, getCurrentInstance } from "vue";
-import {
- receiptPaymentSaveOrUpdate,
- bindInvoiceNoRegPage,
- receiptPaymentHistoryListNoPage,
- receiptPaymentDel,
-} from "../../../api/salesManagement/receiptPayment.js";
-import useUserStore from "@/store/modules/user";
-import { ElMessage, ElMessageBox } from "element-plus";
-import useFormData from "@/hooks/useFormData";
-
-const userStore = useUserStore();
-const { proxy } = getCurrentInstance();
-const tableData = ref([]);
-const selectedRows = ref([]);
-const tableLoading = ref(false);
-const forms = ref([]);
-const page = reactive({
- current: 1,
- size: 100,
-});
-const total = ref(0);
-const expandedRowKeys = ref([]);
-const tableRef = ref(null);
-
-// 鐢ㄦ埛淇℃伅琛ㄥ崟寮规鏁版嵁
-const dialogFormVisible = ref(false);
-const data = reactive({
- searchForm: {
- searchText: "",
- status: true,
- customerName: "",
- specificationModel: "",
- },
-});
-const { form: searchForm } = useFormData(data.searchForm);
-const { receipt_payment_type } = proxy.useDict("receipt_payment_type");
-
-const formattedNumber = (row, column, cellValue) => {
- const val = Number(cellValue ?? 0);
- return Number.isFinite(val) ? val.toFixed(2) : "0.00";
-};
-
-const getStatusTagType = (statusName = '') => {
- const normalized = statusName.trim();
- if (!normalized) return 'info';
- return normalized === '鏈畬鎴愪粯娆�' ? 'danger' : 'success';
-};
-// 鏌ヨ鍒楄〃
-/** 鎼滅储鎸夐挳鎿嶄綔 */
-const handleQuery = () => {
- page.current = 1;
- getList();
-};
-const paginationChange = (obj) => {
- page.current = obj.page;
- page.size = obj.limit;
- getList();
-};
-const getList = () => {
- tableLoading.value = true;
- bindInvoiceNoRegPage({ ...searchForm, ...page })
- .then((res) => {
- tableLoading.value = false;
- tableData.value = res.data.records;
- total.value = res.data.total;
- if (expandedRowKeys.value.length > 0) {
- const arr = []
- const index = tableData.value.findIndex(item => item.id === expandedRowKeys.value[0]);
- if (index > -1) {
- arr.push(tableData.value[index]);
- expandChange(tableData.value[index], arr)
- }
- }
- })
- .catch(() => {
- tableLoading.value = false;
- });
-};
-// 灞曞紑琛�
-const expandChange = (row, expandedRows) => {
- if (expandedRows.length > 0) {
- expandedRowKeys.value = [];
- try {
- receiptPaymentHistoryListNoPage({
- invoiceLedgerId: row.id,
- type: 1,
- }).then((res) => {
- const index = tableData.value.findIndex((item) => item.id === row.id);
- if (index > -1) {
- if (res?.length > 0) {
- res.forEach((item) => {
- item.editType = false;
- });
- }
- tableData.value[index].children = res;
- }
- expandedRowKeys.value.push(row.id);
- });
- } catch (error) {
- console.log(error);
- }
- } else {
- expandedRowKeys.value = [];
- }
-};
-// 琛ㄦ牸閫夋嫨鏁版嵁
-const handleSelectionChange = (selection) => {
- console.log("selection", selection);
- selectedRows.value = selection;
-};
-// 涓昏〃鍚堣鏂规硶
-const summarizeMainTable = (param) => {
- return proxy.summarizeTable(
- param,
- ["receiptPaymentAmountTotal", "noReceiptAmount"],
- {
- ticketsNum: { noDecimal: true }, // 涓嶄繚鐣欏皬鏁�
- futureTickets: { noDecimal: true }, // 涓嶄繚鐣欏皬鏁�
- }
- );
-};
-// 瀛愯〃鍚堣鏂规硶
-const summarizeChildrenTable = (param) => {
- return proxy.summarizeTable(param, ["receiptPaymentAmount"]);
-};
-// 鎵撳紑寮规
-const openForm = () => {
- if (selectedRows.value.length === 0) {
- proxy.$modal.msgError("璇烽�夋嫨鑷冲皯涓�鏉℃暟鎹�");
- return;
- }
- // 浠呭厑璁糕�滃緟鍥炴閲戦 > 0鈥濈殑璁板綍杩涘叆鏂板鍥炴寮圭獥锛屽苟杩囨护鎺夊彲鑳芥贩鍏ョ殑绌哄璞�
- const validRows = selectedRows.value.filter((item) => {
- if (!item || !item.id) return false;
- return Number(item.pendingInvoiceTotal ?? 0) > 0;
- });
- if (validRows.length === 0) {
- proxy.$modal.msgWarning("鎵�閫夎褰曞潎鏃犻渶鍥炴");
- return;
- }
- forms.value = validRows.map((row) => ({
- salesContractNo: row.salesContractNo || "",
- customerName: row.customerName || "",
- productCategory: row.productCategory || "",
- specificationModel: row.specificationModel || "",
- pendingInvoiceTotal: Number(row.pendingInvoiceTotal || 0),
- taxRate: row.taxRate ?? "",
- // 榛樿鏈鍥炴閲戦 = 寰呭洖娆鹃噾棰�
- receiptPaymentAmount: Number(row.pendingInvoiceTotal || 0),
- receiptPaymentType: "",
- registrant: userStore.nickName,
- receiptPaymentDate: "",
- invoiceLedgerId: row.id,
- salesLedgerId: row.salesLedgerId,
- salesLedgerProductId: row.id,
- }));
- dialogFormVisible.value = true;
-};
-// 鎻愪氦琛ㄥ崟
-const submitForm = () => {
- if (forms.value.length === 0) {
- proxy.$modal.msgError("璇烽�夋嫨鍥炴璁板綍");
- return;
- }
- for (let i = 0; i < forms.value.length; i++) {
- const item = forms.value[i];
- const pendingAmount = Number(item.pendingInvoiceTotal || 0);
- const currentAmount = Number(item.receiptPaymentAmount);
- if (!item.receiptPaymentAmount && item.receiptPaymentAmount !== 0) {
- proxy.$modal.msgError(`绗� ${i + 1} 鏉★細璇峰~鍐欏洖娆鹃噾棰漙);
- return;
- }
- if (currentAmount > pendingAmount) {
- proxy.$modal.msgError(
- `绗� ${i + 1} 鏉★細鍥炴閲戦涓嶈兘瓒呰繃寰呭洖娆鹃噾棰濓紙寰呭洖娆撅細${pendingAmount.toFixed(
- 2
- )}锛塦
- );
- return;
- }
- if (!item.receiptPaymentType) {
- proxy.$modal.msgError(`绗� ${i + 1} 鏉★細璇烽�夋嫨鍥炴褰㈠紡`);
- return;
- }
- if (!item.receiptPaymentDate) {
- proxy.$modal.msgError(`绗� ${i + 1} 鏉★細璇烽�夋嫨鍥炴鏃ユ湡`);
- return;
- }
- }
- receiptPaymentSaveOrUpdate(forms.value).then(() => {
- proxy.$modal.msgSuccess("鎻愪氦鎴愬姛");
- closeDia();
- getList();
- });
-};
-// 鍏抽棴寮规
-const closeDia = () => {
- forms.value = [];
- dialogFormVisible.value = false;
- // 閬垮厤浜屾鎵撳紑寮圭獥鏃朵粛鎼哄甫涓婁竴娆$殑閫夋嫨瀵艰嚧鈥滃鍑轰竴琛�/鑴忔暟鎹��
- selectedRows.value = [];
- tableRef.value?.clearSelection();
-};
-
-// 鍒犻櫎鍥炴璁板綍
-const delReceiptRecord = (row) => {
- console.log("row", row);
- ElMessageBox.confirm("纭鍒犻櫎璇ヨ褰曞悧锛�", "鎻愮ず", {
- confirmButtonText: "纭畾",
- cancelButtonText: "鍙栨秷",
- type: "warning",
- })
- .then(async () => {
- try {
- let ids = [];
- ids.push(row.id);
- await receiptPaymentDel(ids);
- ElMessage.success("鍒犻櫎鎴愬姛");
- getList();
- } catch (error) {
- console.error("鍒犻櫎澶辫触:", error);
- ElMessage.error("鍒犻櫎澶辫触");
- }
- })
- .catch(() => {
- ElMessage.info("宸插彇娑堝垹闄�");
- });
-};
-
-// 缂栬緫淇敼鐘舵��
-const changeEditType = (row) => {
- row.editType = !row.editType;
-};
-
-// 淇濆瓨鍥炴璁板綍
-const saveReceiptPayment = (row) => {
- // 瀛愯〃鍥炴閲戦鍚堣鏍¢獙锛氭墍鏈夊洖娆捐褰曢噾棰濅箣鍜屼笉鑳藉ぇ浜庣埗鏁版嵁鍚堝悓閲戦
- // 杩欓噷鐖舵暟鎹�滃悎鍚岄噾棰濃�濇寜锛氬凡鍥炴閲戦( invoiceTotal ) + 寰呭洖娆鹃噾棰�( pendingInvoiceTotal ) 璁$畻
- const findParentRowByChildId = (childId) => {
- return tableData.value.find((p) =>
- Array.isArray(p.children) && p.children.some((c) => c.id === childId)
- );
- };
- const parentRow = findParentRowByChildId(row.id);
- if (parentRow) {
- const contractAmount =
- Number(parentRow.invoiceTotal || 0) + Number(parentRow.pendingInvoiceTotal || 0);
- const sumReceipt = (parentRow.children || []).reduce((sum, item) => {
- const val = Number(item?.receiptPaymentAmount ?? 0);
- return sum + (Number.isFinite(val) ? val : 0);
- }, 0);
- if (sumReceipt > contractAmount) {
- proxy.$modal.msgError(
- `鍥炴閲戦鍚堣(${sumReceipt.toFixed(2)})涓嶈兘澶т簬鍚堝悓閲戦(${contractAmount.toFixed(2)})`
- );
- return;
- }
- }
-
- let updateData = {
- id: row.id,
- receiptPaymentType: row.receiptPaymentType,
- receiptPaymentAmount: row.receiptPaymentAmount,
- };
- receiptPaymentSaveOrUpdate([updateData]).then((res) => {
- row.editType = !row.editType;
- getList();
- proxy.$modal.msgSuccess("鎻愪氦鎴愬姛");
- });
-};
-
-// 瀵煎嚭
-const handleOut = () => {
- ElMessageBox.confirm("閫変腑鐨勫唴瀹瑰皢琚鍑猴紝鏄惁纭瀵煎嚭锛�", "瀵煎嚭", {
- confirmButtonText: "纭",
- cancelButtonText: "鍙栨秷",
- type: "warning",
- })
- .then(() => {
- const ids = selectedRows.value.map((item) => item.id);
- proxy.download(
- `/receiptPayment/export`,
- { ids: `${ids}` },
- "鍥炴鐧昏妗f.xlsx"
- );
- })
- .catch(() => {
- proxy.$modal.msg("宸插彇娑�");
- });
-};
-
-onMounted(() => {
- getList();
-});
-</script>
-
-<style scoped lang="scss">
-.table_list {
- margin-top: unset;
-}
-:deep(.el-checkbox__label) {
- font-weight: bold;
-}
-.actions {
- display: flex;
- justify-content: space-between;
- margin-bottom: 10px;
-}
-.empty-tip {
- text-align: center;
- padding: 20px 0;
- color: #909399;
-}
-</style>
diff --git a/src/views/salesManagement/receiptPaymentHistory/index.vue b/src/views/salesManagement/receiptPaymentHistory/index.vue
deleted file mode 100644
index 11a59a6..0000000
--- a/src/views/salesManagement/receiptPaymentHistory/index.vue
+++ /dev/null
@@ -1,279 +0,0 @@
-<template>
- <div class="app-container">
- <el-form :model="searchForm" :inline="true">
- <el-form-item label="瀹㈡埛鍚嶇О">
- <el-input
- v-model="searchForm.searchText"
- placeholder="杈撳叆瀹㈡埛鍚嶇О鎼滅储"
- @change="handleQuery"
- clearable
- :prefix-icon="Search"
- />
- </el-form-item>
- <el-form-item label="鍥炴鏃ユ湡">
- <el-date-picker
- v-model="searchForm.receiptPaymentDate"
- value-format="YYYY-MM-DD"
- format="YYYY-MM-DD"
- type="daterange"
- start-placeholder="寮�濮嬫椂闂�"
- end-placeholder="缁撴潫鏃堕棿"
- clearable
- style="width: 300px"
- @change="changeDateRange"
- @clear="clearRange"
- />
- </el-form-item>
- <el-form-item>
- <el-button type="primary" @click="handleQuery"> 鎼滅储 </el-button>
- <el-button @click="handleExport">瀵煎嚭</el-button>
- <el-button
- type="danger"
- :disabled="selectedRows.length === 0"
- @click="handleBatchDelete"
- >
- 鎵归噺鍒犻櫎 ({{ selectedRows.length }})
- </el-button>
- </el-form-item>
- </el-form>
- <div class="table_list">
- <PIMTable
- rowKey="id"
- :column="tableColumn"
- :tableData="tableData"
- :page="page"
- :isSelection="true"
- :isShowSummary="isShowSummarySon"
- :summaryMethod="summarizeMainTable1"
- :tableLoading="tableLoading"
- :total="page.total"
- @pagination="pagination"
- @selection-change="handleSelectionChange"
- >
- <template #operation="{ row }">
- <el-button
- type="primary"
- link
- @click="handleDelete(row)"
- >
- 鍒犻櫎
- </el-button>
- </template>
- </PIMTable>
- </div>
- </div>
-</template>
-
-<script setup>
-import { ref, reactive, getCurrentInstance, onMounted } from "vue";
-import { Search } from "@element-plus/icons-vue";
-import { ElMessageBox } from "element-plus";
-import { receiptPaymentHistoryListPage, receiptPaymentDel } from "@/api/salesManagement/receiptPayment.js";
-import useFormData from "@/hooks/useFormData";
-import dayjs from "dayjs";
-
-const { proxy } = getCurrentInstance();
-const tableColumn = ref([
- {
- label: "閿�鍞悎鍚屽彿",
- prop: "salesContractNo",
- width:240
- },
- {
- label: "鍥炴鏃ユ湡",
- prop: "receiptPaymentDate",
- width:100
- },
- {
- label: "瀹㈡埛鍚嶇О",
- prop: "customerName",
- width:240
- },
- {
- label: "鍥炴閲戦锛堝厓锛�",
- prop: "receiptPaymentAmount",
- width:200,
- formatData: (params) => {
- return params ? parseFloat(params).toFixed(2) : 0;
- },
- },
- {
- label: "鍥炴鏂瑰紡",
- prop: "receiptPaymentType",
- dataType: "tag",
- formatData: (params) => {
- if (params == 0) {
- return "鐢垫眹";
- } else if (params == 1) {
- return "鎵垮厬";
- } else {
- return null;
- }
- },
- formatType: (params) => {
- return "info";
- },
- },
- {
- label: "鐧昏浜�",
- prop: "registrant",
- },
- {
- label: "鐧昏鏃ユ湡",
- prop: "createTime",
- width:100
- },
- {
- label: "鎿嶄綔",
- dataType: "slot",
- fixed: "right",
- slot: "operation",
- width: 100,
- align: "center",
- },
-]);
-const tableData = ref([]);
-const selectedRows = ref([]);
-const tableLoading = ref(false);
-const page = reactive({
- current: 1,
- size: 100,
- total: 0,
-});
-const total = ref(0);
-
-const { form: searchForm } = useFormData({
- searchText: undefined,
- receiptPaymentDate: [],
- receiptPaymentDateStart: undefined,
- receiptPaymentDateEnd: undefined,
-});
-const { receipt_payment_type } = proxy.useDict("receipt_payment_type");
-const isShowSummarySon = ref(true);
-// 鏌ヨ鍒楄〃
-/** 鎼滅储鎸夐挳鎿嶄綔 */
-const handleQuery = () => {
- page.current = 1;
- getList();
-};
-const pagination = (obj) => {
- page.current = obj.page;
- page.size = obj.limit;
- getList();
-};
-const getList = () => {
- tableLoading.value = true;
- const { receiptPaymentDate, ...rest } = searchForm;
- receiptPaymentHistoryListPage({ ...rest, ...page }).then((res) => {
- tableLoading.value = false;
- tableData.value = res.records;
- page.total = res.total;
- });
-};
-// 瀛愯〃鍚堣鏂规硶
-const summarizeMainTable1 = (param) => {
- return proxy.summarizeTable(param, ["receiptPaymentAmount"], {
- ticketsNum: { noDecimal: true }, // 涓嶄繚鐣欏皬鏁�
- futureTickets: { noDecimal: true }, // 涓嶄繚鐣欏皬鏁�
- });
-};
-// 琛ㄦ牸閫夋嫨鏁版嵁
-const handleSelectionChange = (selection) => {
- selectedRows.value = selection;
-};
-
-const changeDateRange = (date) => {
- if (date) {
- searchForm.receiptPaymentDateStart = dayjs(date[0]).format(
- "YYYY-MM-DD 00:00:00"
- );
- searchForm.receiptPaymentDateEnd = dayjs(date[1]).format(
- "YYYY-MM-DD 23:59:59"
- );
- getList();
- }
-};
-
-const clearRange = () => {
- searchForm.receiptPaymentDate = [];
- searchForm.receiptPaymentDateStart = undefined;
- searchForm.receiptPaymentDateEnd = undefined;
- getList();
-};
-
-// 鍒犻櫎
-const handleDelete = (row) => {
- ElMessageBox.confirm("纭鍒犻櫎璇ヨ褰曞悧锛�", "鎻愮ず", {
- confirmButtonText: "纭畾",
- cancelButtonText: "鍙栨秷",
- type: "warning",
- })
- .then(async () => {
- try {
- tableLoading.value = true;
- await receiptPaymentDel([row.id]);
- proxy.$modal.msgSuccess("鍒犻櫎鎴愬姛");
- getList();
- } catch (error) {
- console.error("鍒犻櫎澶辫触:", error);
- proxy.$modal.msgError("鍒犻櫎澶辫触");
- } finally {
- tableLoading.value = false;
- }
- })
- .catch(() => {
- proxy.$modal.msg("宸插彇娑堝垹闄�");
- });
-};
-
-// 鎵归噺鍒犻櫎
-const handleBatchDelete = () => {
- if (selectedRows.value.length === 0) {
- proxy.$modal.msgWarning("璇烽�夋嫨瑕佸垹闄ょ殑鏁版嵁");
- return;
- }
- ElMessageBox.confirm(
- `纭畾瑕佸垹闄ら�変腑鐨� ${selectedRows.value.length} 鏉℃暟鎹悧锛焋,
- "鍒犻櫎鎻愮ず",
- {
- confirmButtonText: "纭",
- cancelButtonText: "鍙栨秷",
- type: "warning",
- }
- )
- .then(async () => {
- try {
- tableLoading.value = true;
- const ids = selectedRows.value.map((item) => item.id);
- await receiptPaymentDel(ids);
- proxy.$modal.msgSuccess("鍒犻櫎鎴愬姛");
- selectedRows.value = [];
- getList();
- } catch (error) {
- console.error("鍒犻櫎澶辫触:", error);
- proxy.$modal.msgError("鍒犻櫎澶辫触");
- } finally {
- tableLoading.value = false;
- }
- })
- .catch(() => {
- proxy.$modal.msg("宸插彇娑�");
- });
-};
-
-// 瀵煎嚭
-const handleExport = () => {
- const { receiptPaymentDate, ...rest } = searchForm;
- proxy.download("/receiptPayment/exportOne", { ...rest, ...page }, "鍥炴娴佹按.xlsx");
-};
-
-onMounted(() => {
- getList();
-});
-</script>
-
-<style scoped lang="scss">
-.table_list {
- margin-top: unset;
-}
-</style>
--
Gitblit v1.9.3