Commit ab2242a1aecf989e6a13ffc45a0df69a6ddf0fa5

Authored by boyang
1 parent d4ba96aa

修改应付应收小数点

src/api/project/invoice.ts
@@ -52,11 +52,24 @@ export const getInvoice = async (params: any) => { @@ -52,11 +52,24 @@ export const getInvoice = async (params: any) => {
52 url: Api.INVOICE, 52 url: Api.INVOICE,
53 params, 53 params,
54 }); 54 });
  55 + const formattedRecords = res.records.map((record: any) => {
  56 + return {
  57 + ...record,
  58 + actualPayedAmount1: record.actualPayedAmount1?.toFixed(2),
  59 + actualPayedAmount2: record.actualPayedAmount2?.toFixed(2),
  60 + actualPayedAmount3: record.actualPayedAmount3?.toFixed(2),
  61 + actualReceivableAmount: record.actualReceivableAmount?.toFixed(2),
  62 + deductAmount: record.deductAmount?.toFixed(2),
  63 + otherAmount: record.otherAmount?.toFixed(2),
  64 + totalCustomerAmount: record.totalCustomerAmount?.toFixed(2),
  65 + totalPayAmount: record.totalPayAmount?.toFixed(2),
  66 + };
  67 + });
55 const orderStore = useOrderStoreWithOut(); 68 const orderStore = useOrderStoreWithOut();
56 orderStore.setTotal(res.total); 69 orderStore.setTotal(res.total);
57 return new Promise((resolve) => { 70 return new Promise((resolve) => {
58 resolve({ 71 resolve({
59 - items: res.records, 72 + items: formattedRecords,
60 total: res.total, 73 total: res.total,
61 }); 74 });
62 }); 75 });
@@ -148,12 +161,25 @@ export const getCheck = async (params: any) => { @@ -148,12 +161,25 @@ export const getCheck = async (params: any) => {
148 url: Api.CHECK_BILL, 161 url: Api.CHECK_BILL,
149 params, 162 params,
150 }); 163 });
  164 + const formattedRecords = res.records.map((record: any) => {
  165 + return {
  166 + ...record,
  167 + actualPayedAmount1: record.actualPayedAmount1?.toFixed(2),
  168 + actualPayedAmount2: record.actualPayedAmount2?.toFixed(2),
  169 + actualPayedAmount3: record.actualPayedAmount3?.toFixed(2),
  170 + actualPayedAmount: record.actualPayedAmount?.toFixed(2),
  171 + deductAmount: record.deductAmount?.toFixed(2),
  172 + unPayedAmount: record.unPayedAmount?.toFixed(2),
  173 + totalActualPayedAmount: record.totalActualPayedAmount?.toFixed(2),
  174 + totalProductionAmount: record.totalProductionAmount?.toFixed(2),
  175 + };
  176 + });
151 const orderStore = useOrderStoreWithOut(); 177 const orderStore = useOrderStoreWithOut();
152 orderStore.setTotal(res.total); 178 orderStore.setTotal(res.total);
153 // return res.records; 179 // return res.records;
154 return new Promise((resolve) => { 180 return new Promise((resolve) => {
155 resolve({ 181 resolve({
156 - items: res.records, 182 + items: formattedRecords,
157 total: res.total, 183 total: res.total,
158 }); 184 });
159 }); 185 });
src/views/project/approve/PayPanel.vue
@@ -323,14 +323,14 @@ @@ -323,14 +323,14 @@
323 itemArray.value = []; 323 itemArray.value = [];
324 mockData.value = data.fieldInfos.checkBillOrderDO; 324 mockData.value = data.fieldInfos.checkBillOrderDO;
325 console.log(mockData, '5656mockdata'); 325 console.log(mockData, '5656mockdata');
326 - actualPayCalculate.value = mockData.value.actualPayCalculate; // 实际付款金额计算 326 + actualPayCalculate.value = mockData.value.actualPayCalculate?.toFixed(2); // 实际付款金额计算
327 checkNo.value = mockData.value.checkNo; // 对账单号 327 checkNo.value = mockData.value.checkNo; // 对账单号
328 - actualPayedAmount.value = mockData.value.actualPayedAmount; // 实际应付金额 328 + actualPayedAmount.value = mockData.value.actualPayedAmount?.toFixed(2); // 实际应付金额
329 payedDate.value = mockData.value.payedDate; // 付款日期 329 payedDate.value = mockData.value.payedDate; // 付款日期
330 actualPayedDate.value = mockData.value.actualPayedDate; // 实际付款日期 330 actualPayedDate.value = mockData.value.actualPayedDate; // 实际付款日期
331 - unPayedAmount.value = mockData.value.unPayedAmount; // 未付金额  
332 - totalActualPayedAmount.value = mockData.value.totalActualPayedAmount; // 实际付款金额汇总  
333 - deductAmount.value = mockData.value.deductAmount; // 扣款金额 331 + unPayedAmount.value = mockData.value.unPayedAmount?.toFixed(2); // 未付金额
  332 + totalActualPayedAmount.value = mockData.value.totalActualPayedAmount?.toFixed(2); // 实际付款金额汇总
  333 + deductAmount.value = mockData.value.deductAmount?.toFixed(2); // 扣款金额
334 const match = mockData.value.invoiceUrl.match(/aliyuncs\.com\/(.*?)\?/); 334 const match = mockData.value.invoiceUrl.match(/aliyuncs\.com\/(.*?)\?/);
335 if (match && match[1]) { 335 if (match && match[1]) {
336 // 对提取的部分进行解码 336 // 对提取的部分进行解码
src/views/project/approve/ReceivePanel.vue
@@ -293,12 +293,12 @@ @@ -293,12 +293,12 @@
293 openModal(true, { data }); 293 openModal(true, { data });
294 mockData.value = data.fieldInfos.invoiceBillOrderDO; 294 mockData.value = data.fieldInfos.invoiceBillOrderDO;
295 id.value = data.id; 295 id.value = data.id;
296 - totalPayAmount.value = mockData.value.totalPayAmount;  
297 - totalCustomerAmount.value = mockData.value.totalCustomerAmount;  
298 - deductAmount.value = mockData.value.deductAmount; 296 + totalPayAmount.value = mockData.value.totalPayAmount?.toFixed(2);
  297 + totalCustomerAmount.value = mockData.value.totalCustomerAmount?.toFixed(2);
  298 + deductAmount.value = mockData.value.deductAmount?.toFixed(2);
299 backRefundDate.value = mockData.value.backRefundDate; 299 backRefundDate.value = mockData.value.backRefundDate;
300 actualRefundDate.value = mockData.value.actualRefundDate; 300 actualRefundDate.value = mockData.value.actualRefundDate;
301 - otherAmount.value = mockData.value.otherAmount; 301 + otherAmount.value = mockData.value.otherAmount?.toFixed(2);
302 invoiceNo.value = mockData.value.invoiceNo; 302 invoiceNo.value = mockData.value.invoiceNo;
303 payee.value = mockData.value.payee; 303 payee.value = mockData.value.payee;
304 } 304 }
src/views/project/finance/pay/CheckDetail.vue
@@ -80,7 +80,7 @@ @@ -80,7 +80,7 @@
80 dataIndex: 'productionDepartmentPrice', 80 dataIndex: 'productionDepartmentPrice',
81 customRender: (column) => { 81 customRender: (column) => {
82 const { record } = column || {}; 82 const { record } = column || {};
83 - return record?.profitAnalysisInfo?.productionDepartmentPrice; 83 + return record?.profitAnalysisInfo?.productionDepartmentPrice?.toFixed(2);
84 // ? `¥ ${record?.profitAnalysisInfo?.productionDepartmentPrice}` 84 // ? `¥ ${record?.profitAnalysisInfo?.productionDepartmentPrice}`
85 // : ''; 85 // : '';
86 }, 86 },
@@ -91,7 +91,7 @@ @@ -91,7 +91,7 @@
91 dataIndex: 'productionDepartmentTotalPrice', 91 dataIndex: 'productionDepartmentTotalPrice',
92 customRender: (column) => { 92 customRender: (column) => {
93 const { record } = column || {}; 93 const { record } = column || {};
94 - return record?.profitAnalysisInfo?.productionDepartmentTotalPrice; 94 + return record?.profitAnalysisInfo?.productionDepartmentTotalPrice?.toFixed(2);
95 // ? `¥ ${record?.profitAnalysisInfo?.productionDepartmentTotalPrice}` 95 // ? `¥ ${record?.profitAnalysisInfo?.productionDepartmentTotalPrice}`
96 // : ''; 96 // : '';
97 }, 97 },
src/views/project/finance/pay/CheckSum.vue
@@ -41,26 +41,46 @@ @@ -41,26 +41,46 @@
41 title: '生产科总价汇总¥', 41 title: '生产科总价汇总¥',
42 dataIndex: 'productionDepartmentTotalPrice', 42 dataIndex: 'productionDepartmentTotalPrice',
43 width: 150, 43 width: 150,
  44 + customRender: (res) => {
  45 + // console.log(res, 56562);
  46 + return res.record.exportVOS[0].productionDepartmentTotalPrice.toFixed(2);
  47 + },
44 }, 48 },
45 { 49 {
46 title: '生产科扣款金额汇总¥', 50 title: '生产科扣款金额汇总¥',
47 dataIndex: 'deductAmount', 51 dataIndex: 'deductAmount',
48 width: 160, 52 width: 160,
  53 + customRender: (res) => {
  54 + // console.log(res, 56562);
  55 + return res.record.exportVOS[0].deductAmount.toFixed(2);
  56 + },
49 }, 57 },
50 { 58 {
51 title: '生产科实际应付金额¥', 59 title: '生产科实际应付金额¥',
52 dataIndex: 'calculateActualPayedAmount', 60 dataIndex: 'calculateActualPayedAmount',
53 width: 160, 61 width: 160,
  62 + customRender: (res) => {
  63 + // console.log(res, 56562);
  64 + return res.record.exportVOS[0].calculateActualPayedAmount.toFixed(2);
  65 + },
54 }, 66 },
55 { 67 {
56 title: '实际付款金额汇总¥', 68 title: '实际付款金额汇总¥',
57 dataIndex: 'actualPayedAmount', 69 dataIndex: 'actualPayedAmount',
58 width: 160, 70 width: 160,
  71 + customRender: (res) => {
  72 + // console.log(res, 56562);
  73 + return res.record.exportVOS[0].actualPayedAmount.toFixed(2);
  74 + },
59 }, 75 },
60 { 76 {
61 title: '未付金额¥', 77 title: '未付金额¥',
62 dataIndex: 'unPayedAmount', 78 dataIndex: 'unPayedAmount',
63 width: 150, 79 width: 150,
  80 + customRender: (res) => {
  81 + // console.log(res, 56562);
  82 + return res.record.exportVOS[0].unPayedAmount.toFixed(2);
  83 + },
64 }, 84 },
65 ]; 85 ];
66 // const ids = ref<number[]>([]); 86 // const ids = ref<number[]>([]);
src/views/project/finance/pay/Commit.vue
@@ -14,11 +14,11 @@ @@ -14,11 +14,11 @@
14 <script lang="ts" setup> 14 <script lang="ts" setup>
15 import { BasicModal, useModalInner } from '@/components/Modal'; 15 import { BasicModal, useModalInner } from '@/components/Modal';
16 import { ref } from 'vue'; 16 import { ref } from 'vue';
17 - import type { Dayjs } from 'dayjs';  
18 import { checkCommit } from '@/api/project/invoice'; 17 import { checkCommit } from '@/api/project/invoice';
19 18
20 const id = ref(); 19 const id = ref();
21 const date = ref(); 20 const date = ref();
  21 + const emit = defineEmits(['success']);
22 22
23 const [register, { closeModal }] = useModalInner(async (data) => { 23 const [register, { closeModal }] = useModalInner(async (data) => {
24 id.value = data.data.id; 24 id.value = data.data.id;
@@ -40,6 +40,7 @@ @@ -40,6 +40,7 @@
40 const formattedDate = formatDate(date.value); 40 const formattedDate = formatDate(date.value);
41 41
42 checkCommit({ id: id.value, actualPayedDate: formattedDate }); 42 checkCommit({ id: id.value, actualPayedDate: formattedDate });
  43 + emit('success');
43 closeModal(); 44 closeModal();
44 } 45 }
45 </script> 46 </script>
src/views/project/finance/pay/DeductShow.vue
@@ -74,17 +74,6 @@ @@ -74,17 +74,6 @@
74 const baseUrl = url.split('?')[0]; 74 const baseUrl = url.split('?')[0];
75 return imageExtensions.some((ext) => baseUrl.toLowerCase().endsWith(ext)); 75 return imageExtensions.some((ext) => baseUrl.toLowerCase().endsWith(ext));
76 } 76 }
77 - // function openPic(url) {  
78 - // window.open('', '', '').document.write(`<!DOCTYPE html>  
79 - // <html>  
80 - // <body  
81 - // style="display: flex;  
82 - // justify-content: center;  
83 - // align-items: center;">  
84 - // <img src='${url}' width="500px" height="500px"/>  
85 - // </body>  
86 - // </html>`);  
87 - // }  
88 // 检查 URL 是否为 PDF 格式 77 // 检查 URL 是否为 PDF 格式
89 function isPdfUrl(url: string): boolean { 78 function isPdfUrl(url: string): boolean {
90 return url.toLowerCase().endsWith('.pdf'); 79 return url.toLowerCase().endsWith('.pdf');
src/views/project/finance/pay/FinanceEdit.vue
@@ -12,9 +12,18 @@ @@ -12,9 +12,18 @@
12 showFooter 12 showFooter
13 :destroyOnClose="true" 13 :destroyOnClose="true"
14 > 14 >
15 - <div> 15 + <!-- <div>
16 <BasicForm @register="registerForm" /> 16 <BasicForm @register="registerForm" />
17 - </div> 17 + </div> -->
  18 + <div style="font-size: 15px">实际应收金额1$</div>
  19 + <a-input v-model:value="input1" placeholder="请输入" :disabled="status === 10" auto-size />
  20 + <div style="margin: 16px 0"></div>
  21 + <div style="font-size: 15px">实际应收金额2$</div>
  22 + <a-input v-model:value="input2" placeholder="请输入" :disabled="status === 10" auto-size />
  23 + <div style="margin: 16px 0"></div>
  24 + <div style="font-size: 15px">实际应收金额3$</div>
  25 + <a-input v-model:value="input3" placeholder="请输入" :disabled="status === 10" auto-size />
  26 + <div style="margin: 16px 0"></div>
18 27
19 <!-- <template #titleToolbar> <a-button type="primary"> 申请编辑权限 </a-button></template> --> 28 <!-- <template #titleToolbar> <a-button type="primary"> 申请编辑权限 </a-button></template> -->
20 <template #appendFooter> 29 <template #appendFooter>
@@ -29,6 +38,7 @@ @@ -29,6 +38,7 @@
29 import { defineComponent, ref, computed, unref, toRaw, reactive } from 'vue'; 38 import { defineComponent, ref, computed, unref, toRaw, reactive } from 'vue';
30 import { getEmailList } from '/@/api/sys/config'; 39 import { getEmailList } from '/@/api/sys/config';
31 import { updateAmountInfo } from '@/api/project/invoice'; 40 import { updateAmountInfo } from '@/api/project/invoice';
  41 + import { useMessage } from '/@/hooks/web/useMessage';
32 42
33 const emit = defineEmits(['success']); 43 const emit = defineEmits(['success']);
34 const schemas: FormSchema[] = [ 44 const schemas: FormSchema[] = [
@@ -87,14 +97,33 @@ @@ -87,14 +97,33 @@
87 span: 24, 97 span: 24,
88 }, 98 },
89 }); 99 });
90 - 100 + const { createMessage } = useMessage();
  101 + const { error } = createMessage;
91 const update = ref(); 102 const update = ref();
92 const status = ref(); 103 const status = ref();
  104 + const input1 = ref();
  105 + const input2 = ref();
  106 + const input3 = ref();
  107 + const id = ref();
93 const [register, { setDrawerProps, closeDrawer }] = useDrawerInner((data) => { 108 const [register, { setDrawerProps, closeDrawer }] = useDrawerInner((data) => {
94 // 方式1 109 // 方式1
95 resetFields(); 110 resetFields();
96 status.value = data.data.status; 111 status.value = data.data.status;
  112 + id.value = data.data.id;
  113 + input1.value = data.data.actualPayedAmount1;
  114 + input2.value = data.data.actualPayedAmount2;
  115 + input3.value = data.data.actualPayedAmount3;
97 setDrawerProps({ confirmLoading: false }); 116 setDrawerProps({ confirmLoading: false });
  117 + // 将金额格式化为两位小数
  118 + // setFieldsValue({
  119 + // actualPayedAmount1:
  120 + // data.data.actualPayedAmount1 !== null ? data.data.actualPayedAmount1.toFixed(2) : undefined,
  121 + // actualPayedAmount2:
  122 + // data.data.actualPayedAmount2 !== null ? data.data.actualPayedAmount2.toFixed(2) : undefined,
  123 + // actualPayedAmount3:
  124 + // data.data.actualPayedAmount3 !== null ? data.data.actualPayedAmount3.toFixed(2) : undefined,
  125 + // ...toRaw(data.data), // 其他字段
  126 + // });
98 setFieldsValue({ 127 setFieldsValue({
99 ...toRaw(data.data), 128 ...toRaw(data.data),
100 }); 129 });
@@ -103,16 +132,22 @@ @@ -103,16 +132,22 @@
103 }); 132 });
104 //完成编辑 133 //完成编辑
105 async function handleSubmit() { 134 async function handleSubmit() {
106 - const values = await validate();  
107 - const updatedValues = {  
108 - ...values,  
109 - id: update.value.data.id,  
110 - };  
111 - console.log(updatedValues, 56565);  
112 - await updateAmountInfo({  
113 - ...updatedValues,  
114 - });  
115 - emit('success');  
116 - closeDrawer(); 135 + // const values = await validate();
  136 + // const updatedValues = {
  137 + // ...values,
  138 + // id: update.value.data.id,
  139 + // };
  140 + if (!input1.value || !input2.value || !input3.value) {
  141 + error('选项不能为空');
  142 + } else {
  143 + await updateAmountInfo({
  144 + id: id.value,
  145 + actualPayedAmount1: input1.value,
  146 + actualPayedAmount2: input2.value,
  147 + actualPayedAmount3: input3.value,
  148 + });
  149 + emit('success');
  150 + closeDrawer();
  151 + }
117 } 152 }
118 </script> 153 </script>
src/views/project/finance/pay/index.vue
@@ -15,7 +15,7 @@ @@ -15,7 +15,7 @@
15 <CheckDetail @register="registerInvoiceDetail" /> 15 <CheckDetail @register="registerInvoiceDetail" />
16 <DeductShow @register="registerDeductShow" /> 16 <DeductShow @register="registerDeductShow" />
17 <InvoiceShow @register="registerInvoiceShow" /> 17 <InvoiceShow @register="registerInvoiceShow" />
18 - <Commit @register="registerCommit" /> 18 + <Commit @register="registerCommit" @success="handleSuccess" />
19 </template> 19 </template>
20 <template #bodyCell="{ column, record }"> 20 <template #bodyCell="{ column, record }">
21 <template v-if="column.key === 'action'"> 21 <template v-if="column.key === 'action'">
src/views/project/finance/pay/pay.data.tsx
@@ -56,6 +56,9 @@ export const columns: BasicColumn[] = [ @@ -56,6 +56,9 @@ export const columns: BasicColumn[] = [
56 title: '生产科扣款金额¥', 56 title: '生产科扣款金额¥',
57 dataIndex: 'deductAmount', 57 dataIndex: 'deductAmount',
58 width: 160, 58 width: 160,
  59 + // customRender: (column) => {
  60 + // return column.record.deductAmount?.toFixed(2);
  61 + // },
59 }, 62 },
60 { 63 {
61 title: '扣款责任部门', 64 title: '扣款责任部门',
@@ -78,6 +81,9 @@ export const columns: BasicColumn[] = [ @@ -78,6 +81,9 @@ export const columns: BasicColumn[] = [
78 title: '生产科实际应付金额¥', 81 title: '生产科实际应付金额¥',
79 dataIndex: 'actualPayedAmount', 82 dataIndex: 'actualPayedAmount',
80 width: 180, 83 width: 180,
  84 + // customRender: (column) => {
  85 + // return column.record.actualPayedAmount?.toFixed(2);
  86 + // },
81 }, 87 },
82 { 88 {
83 title: '生产科发票上传', 89 title: '生产科发票上传',
@@ -95,16 +101,26 @@ export const columns: BasicColumn[] = [ @@ -95,16 +101,26 @@ export const columns: BasicColumn[] = [
95 title: '实际付款金额1¥', 101 title: '实际付款金额1¥',
96 dataIndex: 'actualPayedAmount1', 102 dataIndex: 'actualPayedAmount1',
97 width: 160, 103 width: 160,
  104 + // customRender: (column) => {
  105 + // console.log(column, '5656ccc');
  106 + // return column.record.actualPayedAmount1?.toFixed(2);
  107 + // },
98 }, 108 },
99 { 109 {
100 title: '实际付款金额2¥', 110 title: '实际付款金额2¥',
101 dataIndex: 'actualPayedAmount2', 111 dataIndex: 'actualPayedAmount2',
102 width: 160, 112 width: 160,
  113 + // customRender: (column) => {
  114 + // return column.record.actualPayedAmount2?.toFixed(2);
  115 + // },
103 }, 116 },
104 { 117 {
105 title: '实际付款金额3¥', 118 title: '实际付款金额3¥',
106 dataIndex: 'actualPayedAmount3', 119 dataIndex: 'actualPayedAmount3',
107 width: 160, 120 width: 160,
  121 + // customRender: (column) => {
  122 + // return column.record.actualPayedAmount3?.toFixed(2);
  123 + // },
108 }, 124 },
109 { 125 {
110 title: '生产科发票审核', 126 title: '生产科发票审核',
src/views/project/finance/receive/Commit.vue
@@ -25,6 +25,7 @@ @@ -25,6 +25,7 @@
25 const id = ref(); 25 const id = ref();
26 const payee = ref(); 26 const payee = ref();
27 const date = ref(); 27 const date = ref();
  28 + const emit = defineEmits(['success']);
28 29
29 const [register, { closeModal }] = useModalInner(async (data) => { 30 const [register, { closeModal }] = useModalInner(async (data) => {
30 id.value = data.data.id; 31 id.value = data.data.id;
@@ -45,6 +46,7 @@ @@ -45,6 +46,7 @@
45 async function handleOk() { 46 async function handleOk() {
46 const formattedDate = formatDate(date.value); 47 const formattedDate = formatDate(date.value);
47 commit({ id: id.value, actualRefundDate: formattedDate, payee: payee.value }); 48 commit({ id: id.value, actualRefundDate: formattedDate, payee: payee.value });
  49 + emit('success');
48 closeModal(); 50 closeModal();
49 } 51 }
50 </script> 52 </script>
src/views/project/finance/receive/DeductShow.vue
@@ -13,7 +13,20 @@ @@ -13,7 +13,20 @@
13 <a-list-item-meta> 13 <a-list-item-meta>
14 <template #title> 14 <template #title>
15 <!-- <a :href="item.url" target="_blank" rel="noopener noreferrer">{{ item.name }}</a> --> 15 <!-- <a :href="item.url" target="_blank" rel="noopener noreferrer">{{ item.name }}</a> -->
16 - <a @click="openPic(item.url)">{{ item.name }}</a> 16 + <!-- <a @click="openPic(item.url)">{{ item.name }}</a> -->
  17 + <a
  18 + v-if="isImageUrl(item.url)"
  19 + @click="openPic(item.url)"
  20 + style="display: flex; align-items: center"
  21 + >
  22 + <img
  23 + :src="item.url"
  24 + alt="Image"
  25 + style="max-width: 150px; max-height: 150px; margin-right: 10px"
  26 + />
  27 + {{ item.name }}
  28 + </a>
  29 + <a v-else @click="openPic(item.url)">{{ item.name }}</a>
17 </template> 30 </template>
18 </a-list-item-meta> 31 </a-list-item-meta>
19 </a-list-item> 32 </a-list-item>
@@ -28,6 +41,7 @@ @@ -28,6 +41,7 @@
28 import { InboxOutlined } from '@ant-design/icons-vue'; 41 import { InboxOutlined } from '@ant-design/icons-vue';
29 import { message } from 'ant-design-vue'; 42 import { message } from 'ant-design-vue';
30 import { getInvoiceDeductUrlById } from '@/api/project/invoice'; 43 import { getInvoiceDeductUrlById } from '@/api/project/invoice';
  44 + import { view } from '@/utils/pdfShow';
31 45
32 interface Item { 46 interface Item {
33 name: string; 47 name: string;
@@ -54,15 +68,41 @@ @@ -54,15 +68,41 @@
54 itemArray.value = []; 68 itemArray.value = [];
55 closeModal(); 69 closeModal();
56 } 70 }
57 - function openPic(url) {  
58 - window.open('', '', '').document.write(`<!DOCTYPE html>  
59 - <html>  
60 - <body  
61 - style="display: flex;  
62 - justify-content: center;  
63 - align-items: center;">  
64 - <img src='${url}' width="500px" height="500px"/>  
65 - </body>  
66 - </html>`); 71 + // function openPic(url) {
  72 + // window.open('', '', '').document.write(`<!DOCTYPE html>
  73 + // <html>
  74 + // <body
  75 + // style="display: flex;
  76 + // justify-content: center;
  77 + // align-items: center;">
  78 + // <img src='${url}' width="500px" height="500px"/>
  79 + // </body>
  80 + // </html>`);
  81 + // }
  82 + // 新增的函数:判断 URL 是否为图片格式
  83 + function isImageUrl(url: string): boolean {
  84 + const imageExtensions = ['png', 'jpg', 'jpeg', 'gif', 'bmp', 'svg'];
  85 + const baseUrl = url.split('?')[0];
  86 + return imageExtensions.some((ext) => baseUrl.toLowerCase().endsWith(ext));
  87 + }
  88 + // 检查 URL 是否为 PDF 格式
  89 + function isPdfUrl(url: string): boolean {
  90 + return url.toLowerCase().endsWith('.pdf');
  91 + }
  92 + // 打开图片或 PDF
  93 + function openPic(url: string) {
  94 + const baseUrl = url.split('?')[0]; // 获取问号前的部分
  95 + if (isImageUrl(baseUrl)) {
  96 + window.open('', '', '').document.write(`<!DOCTYPE html>
  97 + <html>
  98 + <body style="display: flex; justify-content: center; align-items: center;">
  99 + <img src='${url}' width="500px" height="500px"/>
  100 + </body>
  101 + </html>`);
  102 + } else if (isPdfUrl(baseUrl)) {
  103 + view(url); // 新标签页打开 PDF
  104 + } else {
  105 + console.log('不支持的文件类型');
  106 + }
67 } 107 }
68 </script> 108 </script>
src/views/project/finance/receive/FinanceEdit.vue
@@ -12,9 +12,21 @@ @@ -12,9 +12,21 @@
12 showFooter 12 showFooter
13 :destroyOnClose="true" 13 :destroyOnClose="true"
14 > 14 >
15 - <div> 15 + <!-- <div>
16 <BasicForm @register="registerForm" /> 16 <BasicForm @register="registerForm" />
17 - </div> 17 + </div> -->
  18 + <div style="font-size: 15px">实际应收金额1$</div>
  19 + <a-input v-model:value="input1" placeholder="请输入" :disabled="status === 10" auto-size />
  20 + <div style="margin: 16px 0"></div>
  21 + <div style="font-size: 15px">实际应收金额2$</div>
  22 + <a-input v-model:value="input2" placeholder="请输入" :disabled="status === 10" auto-size />
  23 + <div style="margin: 16px 0"></div>
  24 + <div style="font-size: 15px">实际应收金额3$</div>
  25 + <a-input v-model:value="input3" placeholder="请输入" :disabled="status === 10" auto-size />
  26 + <div style="margin: 16px 0"></div>
  27 + <div style="font-size: 15px">其他费用金额$</div>
  28 + <a-input v-model:value="input4" placeholder="请输入" :disabled="status === 10" auto-size />
  29 + <div style="margin: 16px 0"></div>
18 30
19 <!-- <template #titleToolbar> <a-button type="primary"> 申请编辑权限 </a-button></template> --> 31 <!-- <template #titleToolbar> <a-button type="primary"> 申请编辑权限 </a-button></template> -->
20 <template #appendFooter> 32 <template #appendFooter>
@@ -29,6 +41,7 @@ @@ -29,6 +41,7 @@
29 import { defineComponent, ref, computed, unref, toRaw, reactive } from 'vue'; 41 import { defineComponent, ref, computed, unref, toRaw, reactive } from 'vue';
30 import { getEmailList } from '/@/api/sys/config'; 42 import { getEmailList } from '/@/api/sys/config';
31 import { updateAmount } from '@/api/project/invoice'; 43 import { updateAmount } from '@/api/project/invoice';
  44 + import { useMessage } from '/@/hooks/web/useMessage';
32 45
33 const emit = defineEmits(['success']); 46 const emit = defineEmits(['success']);
34 const schemas: FormSchema[] = [ 47 const schemas: FormSchema[] = [
@@ -99,15 +112,28 @@ @@ -99,15 +112,28 @@
99 span: 24, 112 span: 24,
100 }, 113 },
101 }); 114 });
  115 + const { createMessage } = useMessage();
  116 + const { error } = createMessage;
102 117
103 const update = ref(); 118 const update = ref();
104 const status = ref(); 119 const status = ref();
  120 +
  121 + const input1 = ref();
  122 + const input2 = ref();
  123 + const input3 = ref();
  124 + const input4 = ref();
  125 + const id = ref();
105 const [register, { setDrawerProps, closeDrawer }] = useDrawerInner((data) => { 126 const [register, { setDrawerProps, closeDrawer }] = useDrawerInner((data) => {
106 // 方式1 127 // 方式1
107 - console.log(data, '56565dataaa');  
108 status.value = data.data.status; 128 status.value = data.data.status;
  129 + id.value = data.data.id;
  130 + input1.value = data.data.actualPayedAmount1;
  131 + input2.value = data.data.actualPayedAmount2;
  132 + input3.value = data.data.actualPayedAmount3;
  133 + input4.value = data.data.otherAmount;
109 resetFields(); 134 resetFields();
110 setDrawerProps({ confirmLoading: false }); 135 setDrawerProps({ confirmLoading: false });
  136 + console.log(data, '5656666dd');
111 setFieldsValue({ 137 setFieldsValue({
112 ...toRaw(data.data), 138 ...toRaw(data.data),
113 }); 139 });
@@ -115,16 +141,24 @@ @@ -115,16 +141,24 @@
115 }); 141 });
116 //完成编辑 142 //完成编辑
117 async function handleSubmit() { 143 async function handleSubmit() {
118 - const values = await validate();  
119 - const updatedValues = {  
120 - ...values,  
121 - id: update.value.data.id,  
122 - bgUrl: update.value.data.bgUrl,  
123 - };  
124 - await updateAmount({  
125 - ...updatedValues,  
126 - });  
127 - emit('success');  
128 - closeDrawer(); 144 + // const values = await validate();
  145 + // const updatedValues = {
  146 + // ...values,
  147 + // id: update.value.data.id,
  148 + // bgUrl: update.value.data.bgUrl,
  149 + // };
  150 + if (!input1.value || !input2.value || !input3.value || !input4.value) {
  151 + error('选项不能为空');
  152 + } else {
  153 + await updateAmount({
  154 + id: id.value,
  155 + actualPayedAmount1: input1.value,
  156 + actualPayedAmount2: input2.value,
  157 + actualPayedAmount3: input3.value,
  158 + otherAmount: input4.value,
  159 + });
  160 + emit('success');
  161 + closeDrawer();
  162 + }
129 } 163 }
130 </script> 164 </script>
src/views/project/finance/receive/InvoiceAnalysis.vue
@@ -41,31 +41,50 @@ @@ -41,31 +41,50 @@
41 title: '客户总金额汇总$', 41 title: '客户总金额汇总$',
42 dataIndex: 'customerTotalPrice', 42 dataIndex: 'customerTotalPrice',
43 width: 50, 43 width: 50,
  44 + customRender: (res) => {
  45 + console.log(res, '5656analres');
  46 + return res.record.exportVOS[0].customerTotalPrice.toFixed(2);
  47 + },
44 }, 48 },
45 { 49 {
46 title: '客户扣款金额汇总$', 50 title: '客户扣款金额汇总$',
47 dataIndex: 'deductAmount', 51 dataIndex: 'deductAmount',
48 width: 50, 52 width: 50,
  53 + customRender: (res) => {
  54 + return res.record.exportVOS[0].deductAmount.toFixed(2);
  55 + },
49 }, 56 },
50 { 57 {
51 title: '实际应收款$', 58 title: '实际应收款$',
52 - dataIndex: 'otherAmount', 59 + dataIndex: 'actualReceivableAmount',
53 width: 50, 60 width: 50,
  61 + customRender: (res) => {
  62 + return res.record.exportVOS[0].actualReceivableAmount.toFixed(2);
  63 + },
54 }, 64 },
55 { 65 {
56 title: '实际收款金额汇总$', 66 title: '实际收款金额汇总$',
57 - dataIndex: 'actualReceivableAmount', 67 + dataIndex: 'actualPayedAmount',
58 width: 50, 68 width: 50,
  69 + customRender: (res) => {
  70 + return res.record.exportVOS[0].actualPayedAmount.toFixed(2);
  71 + },
59 }, 72 },
60 { 73 {
61 title: '其他费用金额汇总$', 74 title: '其他费用金额汇总$',
62 - dataIndex: 'otherTotalAmount', 75 + dataIndex: 'otherAmount',
63 width: 50, 76 width: 50,
  77 + customRender: (res) => {
  78 + return res.record.exportVOS[0].otherAmount.toFixed(2);
  79 + },
64 }, 80 },
65 { 81 {
66 title: '未收金额合计$', 82 title: '未收金额合计$',
67 - dataIndex: 'actualPayedAmount', 83 + dataIndex: 'otherTotalAmount',
68 width: 50, 84 width: 50,
  85 + customRender: (res) => {
  86 + return res.record.exportVOS[0].otherTotalAmount.toFixed(2);
  87 + },
69 }, 88 },
70 ]; 89 ];
71 // const ids = ref<number[]>([]); 90 // const ids = ref<number[]>([]);
src/views/project/finance/receive/TrackEdit.vue
@@ -86,10 +86,10 @@ @@ -86,10 +86,10 @@
86 } 86 }
87 function handleShow() { 87 function handleShow() {
88 // if (!visible) { 88 // if (!visible) {
89 - input1.value = 0;  
90 - deductUrl.value = '';  
91 - updateDeductUrl.value = '';  
92 - fileList.value = []; 89 + // input1.value = 0;
  90 + // deductUrl.value = '';
  91 + // updateDeductUrl.value = '';
  92 + // fileList.value = [];
93 // } 93 // }
94 // input1.value = ''; 94 // input1.value = '';
95 // deductUrl.value = ''; 95 // deductUrl.value = '';
src/views/project/finance/receive/index.vue
@@ -13,7 +13,7 @@ @@ -13,7 +13,7 @@
13 <TrackEdit @register="registerTrackEdit" @success="handleSuccess" /> 13 <TrackEdit @register="registerTrackEdit" @success="handleSuccess" />
14 <InvoiceDetail @register="registerInvoiceDetail" /> 14 <InvoiceDetail @register="registerInvoiceDetail" />
15 <DeductShow @register="registerDeductShow" /> 15 <DeductShow @register="registerDeductShow" />
16 - <Commit @register="registerCommit" /> 16 + <Commit @register="registerCommit" @success="handleSuccess" />
17 <ReUploadBgUrl @register="registerReUploadBgUrl" /> 17 <ReUploadBgUrl @register="registerReUploadBgUrl" />
18 </template> 18 </template>
19 <template #bodyCell="{ column, record }"> 19 <template #bodyCell="{ column, record }">
src/views/project/finance/receive/receive.data.tsx
@@ -62,6 +62,9 @@ export const columns: BasicColumn[] = [ @@ -62,6 +62,9 @@ export const columns: BasicColumn[] = [
62 title: '发生扣款金额$', 62 title: '发生扣款金额$',
63 dataIndex: 'deductAmount', 63 dataIndex: 'deductAmount',
64 width: 120, 64 width: 120,
  65 + // customRender: (column) => {
  66 + // return column.record.deductAmount?.toFixed(2);
  67 + // },
65 }, 68 },
66 { 69 {
67 title: '上传扣款单', 70 title: '上传扣款单',
@@ -80,26 +83,41 @@ export const columns: BasicColumn[] = [ @@ -80,26 +83,41 @@ export const columns: BasicColumn[] = [
80 title: '实际应收金额$', 83 title: '实际应收金额$',
81 dataIndex: 'actualReceivableAmount', 84 dataIndex: 'actualReceivableAmount',
82 width: 120, 85 width: 120,
  86 + // customRender: (column) => {
  87 + // return column.record.actualReceivableAmount?.toFixed(2);
  88 + // },
83 }, 89 },
84 { 90 {
85 title: '实际收款金额1$', 91 title: '实际收款金额1$',
86 dataIndex: 'actualPayedAmount1', 92 dataIndex: 'actualPayedAmount1',
87 width: 120, 93 width: 120,
  94 + // customRender: (column) => {
  95 + // return column.record.actualPayedAmount1?.toFixed(2);
  96 + // },
88 }, 97 },
89 { 98 {
90 title: '实际收款金额2$', 99 title: '实际收款金额2$',
91 dataIndex: 'actualPayedAmount2', 100 dataIndex: 'actualPayedAmount2',
92 width: 120, 101 width: 120,
  102 + // customRender: (column) => {
  103 + // return column.record.actualPayedAmount2?.toFixed(2);
  104 + // },
93 }, 105 },
94 { 106 {
95 title: '实际收款金额3$', 107 title: '实际收款金额3$',
96 dataIndex: 'actualPayedAmount3', 108 dataIndex: 'actualPayedAmount3',
97 width: 120, 109 width: 120,
  110 + // customRender: (column) => {
  111 + // return column.record.actualPayedAmount3?.toFixed(2);
  112 + // },
98 }, 113 },
99 { 114 {
100 title: '其他费用$', 115 title: '其他费用$',
101 dataIndex: 'otherAmount', 116 dataIndex: 'otherAmount',
102 width: 120, 117 width: 120,
  118 + // customRender: (column) => {
  119 + // return column.record.otherAmount?.toFixed(2);
  120 + // },
103 }, 121 },
104 { 122 {
105 title: '总经理审核', 123 title: '总经理审核',
@@ -124,39 +142,56 @@ export const columnsAnalysis: BasicColumn[] = [ @@ -124,39 +142,56 @@ export const columnsAnalysis: BasicColumn[] = [
124 title: '实际应付金额总计$', 142 title: '实际应付金额总计$',
125 dataIndex: 'actualPayedAmount', 143 dataIndex: 'actualPayedAmount',
126 width: 50, 144 width: 50,
127 - // customRender: (column) => {  
128 - // console.log(column, 5656666);  
129 - // return 1;  
130 - // }, 145 + customRender: (column) => {
  146 + return column.record.actualPayedAmount?.toFixed(2);
  147 + },
131 }, 148 },
132 { 149 {
133 title: '实际应收金额总计$', 150 title: '实际应收金额总计$',
134 dataIndex: 'actualReceivableAmount', 151 dataIndex: 'actualReceivableAmount',
135 width: 50, 152 width: 50,
  153 + customRender: (column) => {
  154 + return column.record.actualReceivableAmount?.toFixed(2);
  155 + },
136 }, 156 },
137 { 157 {
138 title: '客户总价$', 158 title: '客户总价$',
139 dataIndex: 'customerTotalPrice', 159 dataIndex: 'customerTotalPrice',
140 width: 50, 160 width: 50,
  161 + customRender: (column) => {
  162 + return column.record.customerTotalPrice?.toFixed(2);
  163 + },
141 }, 164 },
142 { 165 {
143 title: '发生扣款金额总计$', 166 title: '发生扣款金额总计$',
144 dataIndex: 'deductAmount', 167 dataIndex: 'deductAmount',
145 width: 50, 168 width: 50,
  169 + customRender: (column) => {
  170 + return column.record.deductAmount?.toFixed(2);
  171 + },
146 }, 172 },
147 { 173 {
148 title: '实际应收金额总计$', 174 title: '实际应收金额总计$',
149 dataIndex: 'actualReceivableAmount', 175 dataIndex: 'actualReceivableAmount',
150 width: 50, 176 width: 50,
  177 + customRender: (column) => {
  178 + return column.record.actualReceivableAmount?.toFixed(2);
  179 + },
151 }, 180 },
152 { 181 {
153 title: '实际应收$', 182 title: '实际应收$',
154 dataIndex: 'otherAmount', 183 dataIndex: 'otherAmount',
155 width: 50, 184 width: 50,
  185 + customRender: (column) => {
  186 + return column.record.otherAmount?.toFixed(2);
  187 + },
156 }, 188 },
157 { 189 {
158 title: '其他费用金额汇总$', 190 title: '其他费用金额汇总$',
159 dataIndex: 'otherTotalAmount', 191 dataIndex: 'otherTotalAmount',
160 width: 50, 192 width: 50,
  193 + customRender: (column) => {
  194 + return column.record.otherTotalAmount?.toFixed(2);
  195 + },
161 }, 196 },
162 ]; 197 ];
vite.config.ts
@@ -21,14 +21,14 @@ export default defineApplicationConfig({ @@ -21,14 +21,14 @@ export default defineApplicationConfig({
21 }, 21 },
22 server: { 22 server: {
23 proxy: { 23 proxy: {
24 - // '/aliyun-oss-pdf': {  
25 - // target: VITE_ALIYUN_OSS_DOMAIN,  
26 - // changeOrigin: true,  
27 - // secure: true, // 确保使用 HTTPS  
28 - // rewrite(path) {  
29 - // return path.replace(/^\/aliyun-oss-pdf/, '');  
30 - // },  
31 - // }, 24 + '/aliyun-oss-pdf': {
  25 + target: 'https://test-alterego.oss-cn-qingdao.aliyuncs.com',
  26 + changeOrigin: true,
  27 + secure: true, // 确保使用 HTTPS
  28 + rewrite(path) {
  29 + return path.replace(/^\/aliyun-oss-pdf/, '');
  30 + },
  31 + },
32 '/basic-api/order': { 32 '/basic-api/order': {
33 target: 'http://47.104.8.35:18001', 33 target: 'http://47.104.8.35:18001',
34 // target: 'http://localhost:8001', 34 // target: 'http://localhost:8001',