diff --git a/src/pages/DigitalElectronics/index.tsx b/src/pages/DigitalElectronics/index.tsx
index e6302b6..f26669a 100644
--- a/src/pages/DigitalElectronics/index.tsx
+++ b/src/pages/DigitalElectronics/index.tsx
@@ -1,6 +1,6 @@
// 数电的开票
import ProTable, { ActionType } from "@ant-design/pro-table";
-import { FormInstance, Button, message, Tag } from "antd";
+import { FormInstance, Button, message, Tag, Popconfirm } from "antd";
import { useRef, useState } from "react";
import { connect } from "umi";
import { Datum } from "@/types/invoice";
@@ -32,8 +32,45 @@ const DigitalElectronics: React.FC<{ currentUser: any }> = (props) => {
return;
}
+
+ let obj: any = {
+ billNo: record?.billNo, // 单据编号
+ billDate: record?.billDate, // 单据日期
+ totalAmount: record?.totalAmount, // 单据金额
+ includeTaxFlag: "1",// 判断是否含税
+ autoInvoice: "1",// 自动开票标记
+ invoiceType: record?.invoiceType, //发票种类
+ buyerName: record?.buyerName, // 购买方名称
+ buyerProperty: "0", // 购买方性质 0-企业,1-个人,2-非企业单位
+ sellerTaxpayerId: "91530112MA7MQ2JR9U", // 销方税号 写死
+ sellerName: "云南交投集团经营开发有限公司彩云驿商业管理分公司", // 销方名称 写死
+ sellerBankAndAccount: "13710884704", // 销方银行和账号 写死
+ sellerAddressAndTel: "", // 销方地址和电话 写死 应该可以不传
+ drawer: record?.drawer,// 开票人
+ buyerRecipientPhone: record?.buyerRecipientPhone || "",// 购方收票手机号
+ buyerRecipientMail: record?.buyerRecipientMail || "",// 购方收件邮箱
+ redReason: record?.redReason,
+ blueinvoiceNo: record?.blueinvoiceNo,
+ billDetail: [
+ {
+ amount: record?.amount, // 明细金额 明细金额,含税标识includeTaxFlag=1时该金额为含税金额
+ detailId: record?.detailId,// 业务系统明细id 业务系统明细id,用于反写回原业务系统明细 【长度:50】
+ goodsName: record?.goodsName,// 商品名称 商品名称,与商品编码2填1,需提前在系统维护【长度:GBK92字节】
+ lineProperty: 2,// 行性质 行性质,1折扣行(折扣行必须紧跟被折扣的正常商品行),2正常商品行
+ price: record?.price, // 单价 单价【长度:整数位加小数位最大16位,小数位最多13,小数点占1位】,price有值则quantity必填,含税标识includeTaxFlag=1时该金额为含税金额
+ quantity: record?.quantity,// 数量 数量【长度:整数位加小数位最大16位,小数位最多13,小数点占1位】,quantity有值则price必填
+ revenueCode: record?.revenueCode,// 税收分类编码 税收分类编码,开票项补全或映射会补全税收分类编码,未走开票项补全或映射必填
+ taxRate: record?.taxRate,// 税率 税率,【0.13,0.09,0.06等】。不传时根据开票项匹配税率
+ units: record?.units// 计量单位 计量单位,【长度:GBK22字节】
+ }
+ ]
+ }
+
+ console.log('objobj', obj);
+
+
// 构造原始数据
- const originalData = [record]; // 将record作为data数组的一项
+ const originalData = [obj]; // 将record作为data数组的一项
// 将data字段进行base64加密
const dataString = JSON.stringify(originalData);
@@ -56,7 +93,11 @@ const DigitalElectronics: React.FC<{ currentUser: any }> = (props) => {
const response = await handleGetKaiPiao(invoiceData, accessToken);
console.log('开票响应:', response);
- if (response && response.code === 200) {
+ if (response && response.success) {
+ let res: any = JSON.parse(decodeURIComponent(escape(atob(response.data))));
+ console.log('最终结果:', res);
+
+
message.success({ content: `单据 ${record.billNo} 开票申请已提交成功`, key: 'invoice' });
} else {
message.error({ content: `开票申请失败: ${response?.message || '未知错误'}`, key: 'invoice' });
@@ -71,185 +112,105 @@ const DigitalElectronics: React.FC<{ currentUser: any }> = (props) => {
{
title: '单据编号',
dataIndex: 'billNo',
- key: 'billNo',
width: 180,
+ align: 'center',
ellipsis: true,
- search: true,
hideInSearch: false,
- onHeaderCell: () => ({
- style: { textAlign: 'center' }
- }),
},
{
title: '购方名称',
dataIndex: 'buyerName',
- key: 'buyerName',
width: 200,
+ align: 'center',
ellipsis: true,
- search: false,
- hideInSearch: true,
- onHeaderCell: () => ({
- style: { textAlign: 'center' }
- }),
+ hideInSearch: false,
},
{
title: '购方税号',
dataIndex: 'buyerTaxpayerId',
- key: 'buyerTaxpayerId',
width: 180,
+ align: 'center',
ellipsis: true,
- search: false,
hideInSearch: true,
- onHeaderCell: () => ({
- style: { textAlign: 'center' }
- }),
},
{
title: '销方名称',
dataIndex: 'sellerName',
- key: 'sellerName',
width: 200,
+ align: 'center',
ellipsis: true,
- search: false,
hideInSearch: true,
- onHeaderCell: () => ({
- style: { textAlign: 'center' }
- }),
},
{
title: '销方税号',
dataIndex: 'sellerTaxpayerId',
- key: 'sellerTaxpayerId',
width: 180,
+ align: 'center',
ellipsis: true,
- search: true,
hideInSearch: false,
- onHeaderCell: () => ({
- style: { textAlign: 'center' }
- }),
},
{
title: '单据日期',
dataIndex: 'billDate',
- key: 'billDate',
width: 120,
- search: false,
+ align: 'center',
hideInSearch: true,
- onHeaderCell: () => ({
- style: { textAlign: 'center' }
- }),
},
{
title: '单据金额',
dataIndex: 'totalAmount',
- key: 'totalAmount',
width: 120,
- search: false,
+ align: 'center',
hideInSearch: true,
render: (text: number) => text ? `¥${text.toFixed(2)}` : '-',
- onHeaderCell: () => ({
- style: { textAlign: 'center' }
- }),
},
{
title: '含税标识',
dataIndex: 'includeTaxFlag',
- key: 'includeTaxFlag',
width: 100,
- search: false,
+ align: 'center',
hideInSearch: true,
render: (text: string) => (
{text === '1' ? '含税' : '不含税'}
),
- onHeaderCell: () => ({
- style: { textAlign: 'center' }
- }),
- },
- {
- title: '发票性质',
- dataIndex: 'invoiceProperty',
- key: 'invoiceProperty',
- width: 100,
- search: true,
- hideInSearch: false,
- valueType: 'select',
- valueEnum: {
- '0': { text: '蓝票', status: 'Success' },
- '1': { text: '红票', status: 'Error' },
- },
- render: (text: string) => (
-
- {text === '1' ? '红票' : '蓝票'}
-
- ),
- onHeaderCell: () => ({
- style: { textAlign: 'center' }
- }),
- },
- {
- title: '自动开票',
- dataIndex: 'autoInvoice',
- key: 'autoInvoice',
- width: 100,
- search: false,
- hideInSearch: true,
- render: (text: string) => (
-
- {text === '1' ? '是' : '否'}
-
- ),
- onHeaderCell: () => ({
- style: { textAlign: 'center' }
- }),
},
{
title: '备注',
dataIndex: 'remark',
- key: 'remark',
width: 150,
ellipsis: true,
- search: false,
+ align: 'center',
hideInSearch: true,
- onHeaderCell: () => ({
- style: { textAlign: 'center' }
- }),
},
{
title: '操作',
- key: 'action',
+ dataIndex: 'action',
width: 120,
- fixed: 'center',
- search: false,
+ fixed: 'right',
+ align: 'center',
hideInSearch: true,
render: (text: any, record: Datum) => (
-
+ < Button type="primary" size="small" > 发起开票
+
),
- onHeaderCell: () => ({
- style: { textAlign: 'center' }
- }),
},
]
return (
-
= (props) => {
rowKey={(record) => {
return `${record?.billNo}`
}}
- scroll={{ x: "100%", y: 'calc(100vh - 400px)' }}
+ scroll={{ x: "100%", y: 'calc(100vh - 450px)' }}
headerTitle={待开票列表}
- search={{
- span: 8,
- labelWidth: 100,
- searchText: '查询',
- resetText: '重置',
- collapseRender: false,
- collapsed: false
- }}
+ search={{ span: 6, labelWidth: 100 }}
request={async (params: any) => {
let req: any = {
appId: "FPY001",
@@ -301,166 +255,135 @@ const DigitalElectronics: React.FC<{ currentUser: any }> = (props) => {
// 模拟数据
const mockData: any = [
+ // 专票
{
- billNo: "SRM_20250820001",
- billDate: "2023-05-17",
- totalAmount: 11300,
- autoInvoice: "0",
- invoiceType: "08xdp",
- buyerName: "深圳市顺丰快运有限公司test01",
- buyerProperty: "0",
+ billNo: "SRM_202508220945", // 单据编号
+ billDate: "2025-08-22", // 单据日期
+ totalAmount: 10, // 单据金额
+ includeTaxFlag: "1",// 判断是否含税
+ autoInvoice: "1",// 自动开票标记
+ invoiceType: "08xdp", //发票种类
+ buyerName: "深圳市顺丰快运有限公司test01", // 购买方名称
+ buyerProperty: "0", // 购买方性质
+ sellerTaxpayerId: "91530112MA7MQ2JR9U", // 销方税号 写死
+ sellerName: "云南交投集团经营开发有限公司彩云驿商业管理分公司", // 销方名称 写死
+ sellerBankAndAccount: "13710884704", // 销方银行和账号 写死
+ sellerAddressAndTel: "", // 销方地址和电话 写死 应该可以不传
+ drawer: "测试人",// 开票人
+ buyerRecipientPhone: "18158132615",// 购方收票手机号
+ buyerRecipientMail: "",// 购方收件邮箱
+ amount: 10, // 明细金额 明细金额,含税标识includeTaxFlag=1时该金额为含税金额
+ detailId: "1194121661989796666",// 业务系统明细id 业务系统明细id,用于反写回原业务系统明细 【长度:50】
+ goodsName: "蜂胶口腔膜",// 商品名称 商品名称,与商品编码2填1,需提前在系统维护【长度:GBK92字节】
+ lineProperty: 2,// 行性质 行性质,1折扣行(折扣行必须紧跟被折扣的正常商品行),2正常商品行
+ price: 10,// 单价 单价【长度:整数位加小数位最大16位,小数位最多13,小数点占1位】,price有值则quantity必填,含税标识includeTaxFlag=1时该金额为含税金额
+ quantity: 1,// 数量 数量【长度:整数位加小数位最大16位,小数位最多13,小数点占1位】,quantity有值则price必填
+ revenueCode: "1070304990000000000",// 税收分类编码 税收分类编码,开票项补全或映射会补全税收分类编码,未走开票项补全或映射必填
+ taxRate: "0.13",// 税率 税率,【0.13,0.09,0.06等】。不传时根据开票项匹配税率
+ units: "个"// 计量单位 计量单位,【长度:GBK22字节】
+
+ // billDetail: [
+ // {
+
+ // }
+ // ]
+ },
+ {
+ billNo: "SRM_202508220966", // 单据编号
+ billDate: "2025-08-22", // 单据日期
+ totalAmount: 10, // 单据金额
+ includeTaxFlag: "1",// 判断是否含税
+ autoInvoice: "1",// 自动开票标记
+ invoiceType: "10xdp", //发票种类
+ buyerName: "深圳市顺丰快运有限公司test01", // 购买方名称
+ buyerProperty: "0", // 购买方性质
+ sellerTaxpayerId: "91530112MA7MQ2JR9U", // 销方税号 写死
+ sellerName: "云南交投集团经营开发有限公司彩云驿商业管理分公司", // 销方名称 写死
+ sellerBankAndAccount: "13710884704", // 销方银行和账号 写死
+ sellerAddressAndTel: "", // 销方地址和电话 写死 应该可以不传
+ drawer: "测试人",// 开票人
+ buyerRecipientPhone: "18158132615",// 购方收票手机号
+ buyerRecipientMail: "",// 购方收件邮箱
+ amount: 10, // 明细金额 明细金额,含税标识includeTaxFlag=1时该金额为含税金额
+ detailId: "1194121661989796666",// 业务系统明细id 业务系统明细id,用于反写回原业务系统明细 【长度:50】
+ goodsName: "蜂胶口腔膜",// 商品名称 商品名称,与商品编码2填1,需提前在系统维护【长度:GBK92字节】
+ lineProperty: 2,// 行性质 行性质,1折扣行(折扣行必须紧跟被折扣的正常商品行),2正常商品行
+ price: 10,// 单价 单价【长度:整数位加小数位最大16位,小数位最多13,小数点占1位】,price有值则quantity必填,含税标识includeTaxFlag=1时该金额为含税金额
+ quantity: 1,// 数量 数量【长度:整数位加小数位最大16位,小数位最多13,小数点占1位】,quantity有值则price必填
+ revenueCode: "1070304990000000000",// 税收分类编码 税收分类编码,开票项补全或映射会补全税收分类编码,未走开票项补全或映射必填
+ taxRate: "0.13",// 税率 税率,【0.13,0.09,0.06等】。不传时根据开票项匹配税率
+ units: "个"// 计量单位 计量单位,【长度:GBK22字节】
+
+ // billDetail: [
+ // {
+
+ // }
+ // ]
+ },
+ // 普票
+ {
+ billNo: "SRM_202508221427", // 单据编号
+ billDate: "2025-08-22", // 单据日期
+ totalAmount: -10, // 单据金额
+ includeTaxFlag: "1",// 判断是否含税
+ invoiceProperty: 1,
+ autoMerge: 1,
+ autoInvoice: "1",// 自动开票标记
+ invoiceType: "10xdp", //发票种类
+ buyerName: "深圳市顺丰快运有限公司test01", // 购买方名称
+ buyerProperty: "0", // 购买方性质
+ sellerTaxpayerId: "91530112MA7MQ2JR9U", // 销方税号 写死
+ sellerName: "云南交投集团经营开发有限公司彩云驿商业管理分公司", // 销方名称 写死
+ sellerBankAndAccount: "13710884704", // 销方银行和账号 写死
+ sellerAddressAndTel: "", // 销方地址和电话 写死 应该可以不传
+ drawer: "测试人",// 开票人
+ buyerRecipientPhone: "18158132615",// 购方收票手机号
+ buyerRecipientMail: "",// 购方收件邮箱
+ amount: -10, // 明细金额 明细金额,含税标识includeTaxFlag=1时该金额为含税金额
+ detailId: "1194121661989796666",// 业务系统明细id 业务系统明细id,用于反写回原业务系统明细 【长度:50】
+ goodsName: "蜂胶口腔膜",// 商品名称 商品名称,与商品编码2填1,需提前在系统维护【长度:GBK92字节】
+ lineProperty: 2,// 行性质 行性质,1折扣行(折扣行必须紧跟被折扣的正常商品行),2正常商品行
+ price: -10,// 单价 单价【长度:整数位加小数位最大16位,小数位最多13,小数点占1位】,price有值则quantity必填,含税标识includeTaxFlag=1时该金额为含税金额
+ quantity: 1,// 数量 数量【长度:整数位加小数位最大16位,小数位最多13,小数点占1位】,quantity有值则price必填
+ revenueCode: "1070304990000000000",// 税收分类编码 税收分类编码,开票项补全或映射会补全税收分类编码,未走开票项补全或映射必填
+ taxRate: "0.13",// 税率 税率,【0.13,0.09,0.06等】。不传时根据开票项匹配税率
+ units: "个",// 计量单位 计量单位,【长度:GBK22字节】
+ redReason: "2",
+ blueinvoiceNo: "200_20250822181151135_0001"
+ // billDetail: [
+ // {
+
+ // }
+ // ]
+ },
+ {
+ billNo: "202508220003",
+ billDate: "2025-08-22",
+ autoInvoice: "1",
+ includeTaxFlag: "0",
+ invoiceProperty: "1",
+ invoiceType: "10xdp",
+ totalAmount: -60,
+ buyerTaxpayerId: "91440300MA5G9GK78Y",
+ buyerName: "金蝶票据云科技(深圳)有限公司",
sellerTaxpayerId: "91530112MA7MQ2JR9U",
sellerName: "云南交投集团经营开发有限公司彩云驿商业管理分公司",
sellerBankAndAccount: "13710884704",
sellerAddressAndTel: "高新技术产业园南区科技南十二路58996989",
- drawer: "开票人",
+ drawer: "王协芬",
+ autoMerge: "0",
+ blueinvoiceNo: "22871379197244241920",
+ redReason: "2",
billDetail: [
{
- amount: 11300,
- detailId: "1194121661989796666",
- goodsName: "蜂胶口腔膜",
+ amount: -60,
+ goodsName: "通天口服液",
lineProperty: 2,
- price: 11300,
- quantity: 1,
+ price: -12,
+ quantity: 5,
revenueCode: "1070304990000000000",
- taxRate: "0.13",
- units: "个"
- }
- ]
- },
- {
- billNo: "SRM_20250820002",
- billDate: "2025-08-20",
- buyerName: "深圳电子有限公司",
- buyerTaxpayerId: "91440300123456789C",
- sellerName: "云南交投集团经营开发有限公司彩云驿商业管理分公司",
- sellerTaxpayerId: "91530112MA7MQ2JR9U",
- totalAmount: 1.13,
- includeTaxFlag: "1",
- buyerProperty: "0",
- sellerBankAndAccount: "",
- sellerAddressAndTel: "",
- pushMatchRules: "3",
- drawer: "",
- invoiceProperty: "0",
- autoInvoice: "0",
- invoiceType: "08xdp",
- buyerRecipientPhone: "18158132615",
- buyerRecipientMail: "",
- remark: "设备采购款",
- billDetail: [
- {
- amount: 1,
- detailId: "1194121661989796666",
- goodsName: "蜂胶口腔膜",
- lineProperty: 1,
- price: 11300,
- quantity: 1,
- revenueCode: "1070304990000000000",
- taxRate: "0.13",
- units: "个"
- }
- ]
- },
- {
- billNo: "SRM_20250820003",
- billDate: "2025-08-19",
- buyerName: "杭州互联网有限公司",
- buyerTaxpayerId: "91330100123456789E",
- sellerName: "云南交投集团经营开发有限公司彩云驿商业管理分公司",
- sellerTaxpayerId: "91530112MA7MQ2JR9U",
- totalAmount: 1.13,
- includeTaxFlag: "1",
- buyerProperty: "0",
- sellerBankAndAccount: "",
- pushMatchRules: "3",
- sellerAddressAndTel: "",
- drawer: "",
- invoiceProperty: "0",
- autoInvoice: "1",
- invoiceType: "08xdp",
- buyerRecipientPhone: "18158132615",
- buyerRecipientMail: "",
- remark: "技术咨询服务",
- billDetail: [
- {
- amount: 1,
- detailId: "1194121661989796666",
- goodsName: "蜂胶口腔膜",
- lineProperty: 2,
- price: 1,
- quantity: 1,
- revenueCode: "1070304990000000000",
- taxRate: "0.13",
- units: "个"
- }
- ]
- },
- {
- billNo: "SRM_20250820004",
- billDate: "2025-08-18",
- buyerName: "成都科技有限公司",
- buyerTaxpayerId: "91510100123456789G",
- sellerName: "云南交投集团经营开发有限公司彩云驿商业管理分公司",
- sellerTaxpayerId: "91530112MA7MQ2JR9U",
- totalAmount: 1.13,
- includeTaxFlag: "1",
- buyerProperty: "0",
- sellerBankAndAccount: "",
- sellerAddressAndTel: "",
- pushMatchRules: "3",
- drawer: "",
- invoiceProperty: "1",
- autoInvoice: "0",
- invoiceType: "08xdp",
- buyerRecipientPhone: "18158132615",
- buyerRecipientMail: "",
- remark: "物流服务费红冲",
- billDetail: [
- {
- amount: 1,
- detailId: "1194121661989796666",
- goodsName: "蜂胶口腔膜",
- lineProperty: 1,
- price: 11300,
- quantity: 1,
- revenueCode: "1070304990000000000",
- taxRate: "0.13",
- units: "个"
- }
- ]
- },
- {
- billNo: "SRM_20250820005",
- billDate: "2025-08-17",
- buyerName: "西安制造有限公司",
- buyerTaxpayerId: "91610100123456789I",
- sellerName: "云南交投集团经营开发有限公司彩云驿商业管理分公司",
- sellerTaxpayerId: "91530112MA7MQ2JR9U",
- totalAmount: 1.13,
- includeTaxFlag: "1",
- buyerProperty: "0",
- sellerBankAndAccount: "",
- sellerAddressAndTel: "",
- pushMatchRules: "3",
- drawer: "",
- invoiceProperty: "0",
- autoInvoice: "1",
- invoiceType: "08xdp",
- buyerRecipientPhone: "18158132615",
- buyerRecipientMail: "",
- remark: "原材料采购",
- billDetail: [
- {
- amount: 1,
- detailId: "1194121661989796666",
- goodsName: "蜂胶口腔膜",
- lineProperty: 2,
- price: 1,
- quantity: 1,
- revenueCode: "1070304990000000000",
- taxRate: "0.13",
- units: "个"
+ taxRate: "0.09",
+ units: "盒"
}
]
}
diff --git a/src/pages/InvoiceSearch/index.tsx b/src/pages/InvoiceSearch/index.tsx
index 90d5dec..c2d1b8e 100644
--- a/src/pages/InvoiceSearch/index.tsx
+++ b/src/pages/InvoiceSearch/index.tsx
@@ -1,2 +1,373 @@
-// 开票查询
+import React, { useRef, useState } from 'react';
+import ProTable, { ActionType, ProColumns } from '@ant-design/pro-table';
+import { Button, message, Tag, FormInstance, Popconfirm } from 'antd';
+import { handleGetInvoicePageTable } from '../Invoicing/service';
+import { handleGetAppToken, handleGetInvoiceSearch, handleGetSDToken } from '../DigitalElectronics/service';
+// 定义查询接口的返回类型
+export interface ApifoxModel {
+ businessSystemCode: string;
+ data: Data;
+ interfaceCode: InterfaceCode;
+ requestId: string;
+ [property: string]: any;
+}
+
+export interface Data {
+ sellerTaxpayerId: string;
+ serialNo: string;
+ [property: string]: any;
+}
+
+export enum InterfaceCode {
+ BillInvoiceQuery = "BILL.INVOICE.QUERY",
+}
+
+// 发票查询页面组件
+const InvoiceSearch: React.FC = () => {
+ const actionRef = useRef();
+ const formRef = useRef();
+ // 第一个接口的token
+ const [appToken, setAppToken] = useState()
+ // 第二个接口的token
+ const [accessToken, setAccessToken] = useState()
+ // 查看详情
+ const handleViewDetail = (record: any) => {
+ message.info('查看详情功能待开发');
+ console.log('详情数据:', record);
+ };
+
+ // 表格列定义
+ const columns: ProColumns[] = [
+ {
+ title: '序号',
+ dataIndex: 'index',
+ valueType: "index",
+ width: 48,
+ align: 'center',
+ ellipsis: true,
+ hideInSearch: true,
+ },
+ {
+ title: '单据编号',
+ dataIndex: 'billNo',
+ width: 150,
+ ellipsis: true,
+ align: 'center',
+ hideInSearch: false,
+ },
+ {
+ title: '发票代码',
+ dataIndex: 'invoiceCode',
+ width: 120,
+ ellipsis: true,
+ align: 'center',
+ hideInSearch: true,
+ },
+ {
+ title: '发票号码',
+ dataIndex: 'invoiceNumber',
+ width: 120,
+ ellipsis: true,
+ align: 'center',
+ hideInSearch: true,
+ },
+ {
+ title: '发票种类',
+ dataIndex: 'invoiceType',
+ width: 120,
+ ellipsis: true,
+ align: 'center',
+ valueType: 'select',
+ valueEnum: {
+ '004': { text: '增值税纸质专用发票' },
+ '007': { text: '增值税纸质普通发票' },
+ '025': { text: '增值税电子普通发票(卷票)' },
+ '026': { text: '增值税电子普通发票' },
+ '028': { text: '增值税电子专用发票' },
+ '08xdp': { text: '数电专票' },
+ '10xdp': { text: '数电普票' },
+ },
+ },
+ {
+ title: '购方名称',
+ dataIndex: 'buyerName',
+ width: 200,
+ ellipsis: true,
+ align: 'center',
+ hideInSearch: true,
+ },
+ {
+ title: '购方税号',
+ dataIndex: 'buyerTaxpayerId',
+ width: 180,
+ ellipsis: true,
+ align: 'center',
+ hideInSearch: false,
+ },
+ {
+ title: '销方名称',
+ dataIndex: 'sellerName',
+ width: 180,
+ align: 'center',
+ ellipsis: true,
+ hideInSearch: true,
+ },
+ {
+ title: '销方税号',
+ dataIndex: 'sellerTaxpayerId',
+ width: 180,
+ align: 'center',
+ ellipsis: true,
+ hideInSearch: false,
+ },
+ {
+ title: '开票日期',
+ dataIndex: 'invoiceDate',
+ valueType: 'date',
+ width: 120,
+ ellipsis: true,
+ align: 'center',
+ hideInSearch: true,
+ render: (text, record) => {
+ if (record.invoiceDate) {
+ return new Date(record.invoiceDate).toLocaleDateString();
+ }
+ return '-';
+ },
+ },
+ {
+ title: '合计金额',
+ dataIndex: 'totalAmount',
+ width: 120,
+ align: 'center',
+ hideInSearch: true,
+ render: (text) => {
+ if (text !== undefined && text !== null) {
+ return `¥${Number(text).toFixed(2)}`;
+ }
+ return '-';
+ },
+ },
+ {
+ title: '合计税额',
+ dataIndex: 'totalTaxAmount',
+ width: 120,
+ align: 'center',
+ hideInSearch: true,
+ render: (text) => {
+ if (text !== undefined && text !== null) {
+ return `¥${Number(text).toFixed(2)}`;
+ }
+ return '-';
+ },
+ },
+ {
+ title: '发票状态',
+ dataIndex: 'invoiceStatus',
+ width: 100,
+ align: 'center',
+ ellipsis: true,
+ hideInSearch: false,
+ valueType: 'select',
+ valueEnum: {
+ 0: { text: '正常', status: 'Success' },
+ 1: { text: '作废', status: 'Error' },
+ 2: { text: '红冲', status: 'Warning' },
+ },
+ },
+ {
+ title: '操作',
+ valueType: 'option',
+ width: 200,
+ align: 'center',
+ fixed: 'right',
+ hideInSearch: true,
+ render: (text, record) => [
+ {
+ await handleRevoke(record)
+ }}
+ onCancel={() => { }}
+ okText="确认"
+ cancelText="取消"
+ >
+ < Button type="primary" size="small" >撤回
+ ,
+ {
+ await handleRedReversal(record)
+ }}
+ onCancel={() => { }}
+ okText="确认"
+ cancelText="取消"
+ >
+ < Button type="primary" size="small" >红冲
+
+ ],
+ },
+ ];
+
+ // 撤回
+ const handleRevoke = async (params: any) => {
+ console.log('paramsparamsparams', params);
+ const queryData = {
+ sellerTaxpayerId: "91530112MA7MQ2JR9U",
+ serialNos: params.billNo || "",
+ };
+ // 将data字段进行base64加密
+ const dataString = JSON.stringify(queryData);
+ const encryptedData = btoa(unescape(encodeURIComponent(dataString)));
+ const req: any = {
+ requestId: Date.now().toString(),
+ businessSystemCode: "BUSINESS_YCIC",
+ interfaceCode: "BILL.WITHDRAW",
+ data: encryptedData
+ }
+ // 他这个接口 就一个地址 改不一样的参数就能调不一样的接口
+ const data = await handleGetInvoiceSearch(req, accessToken)
+ if (data && data.success) {
+ let res = JSON.parse(decodeURIComponent(escape(atob(data.data))))
+ if (res && res.length > 0) {
+ let result = res[0]
+ message.success(result.message)
+ actionRef.current?.reload()
+ }
+ } else {
+ message.error(data?.message || '查询失败');
+ }
+ }
+
+ // 红冲
+ const handleRedReversal = async (params: any) => {
+ const queryData = {
+ billNo: params?.billNo || "",
+ drawer: params?.drawer || "",
+ orgCode: params?.orgCode || "",
+ sellerTaxpayerId: "91530112MA7MQ2JR9U",
+ redReason: "",
+ };
+ // 将data字段进行base64加密
+ const dataString = JSON.stringify(queryData);
+ const encryptedData = btoa(unescape(encodeURIComponent(dataString)));
+ const req: any = {
+ requestId: Date.now().toString(),
+ businessSystemCode: "BUSINESS_YCIC",
+ interfaceCode: "BILL.QUICK.RED",
+ data: encryptedData
+ }
+ // 他这个接口 就一个地址 改不一样的参数就能调不一样的接口
+ const data = await handleGetInvoiceSearch(req, accessToken)
+ console.log('datadatadatadata', data);
+
+ if (data && data.success) {
+ let res = JSON.parse(decodeURIComponent(escape(atob(data.data))))
+ console.log('resresresresres', res);
+ if (res && res.length > 0) {
+ let result = res[0]
+ message.success(result.message)
+ actionRef.current?.reload()
+ }
+ } else {
+ message.error(data?.message || '查询失败');
+ }
+ }
+
+ // 请求表格数据
+ const request = async (params: any) => {
+ try {
+ console.log('查询参数:', params);
+ let req: any = {
+ appId: "FPY001",
+ appSecret: "FPY001fpy@2023***",
+ accountId: "2280459335882518528",
+ tenantid: "xhcamzchwbgonerr",
+ language: ""
+ }
+ const token = await handleGetAppToken(req)
+ console.log('tokentokentoken', token);
+
+ let appToken: any = token.data.app_token
+
+ let tokenReq: any = {
+ user: "18620126214",
+ apptoken: appToken,
+ tenantid: "xhcamzchwbgonerr",
+ accountId: "2280459335882518528",
+ usertype: ""
+ }
+
+ const accessToken: any = await handleGetSDToken(tokenReq)
+ console.log('accessTokenaccessTokenaccessToken', accessToken);
+ setAppToken(appToken)
+ setAccessToken(accessToken.data.access_token)
+
+ // 构造查询数据
+ const queryData = {
+ sellerTaxpayerId: "91530112MA7MQ2JR9U",
+ serialNo: params.serialNo || "SRM_202508220966",
+ };
+
+ // 将data字段进行base64加密
+ const dataString = JSON.stringify(queryData);
+ const encryptedData = btoa(unescape(encodeURIComponent(dataString)));
+
+ // 构造最终请求参数
+ const requestParams = {
+ businessSystemCode: "BUSINESS_YCIC",
+ interfaceCode: "BILL.INVOICE.QUERY",
+ requestId: Date.now().toString(),
+ data: encryptedData
+ };
+
+ console.log('最终请求参数:', requestParams);
+
+ // 调用查询接口 (这里需要传入正确的code参数)
+ const response = await handleGetInvoiceSearch(requestParams, accessToken.data.access_token);
+ console.log('responseresponseresponseresponse', response);
+
+
+ if (response && response.success) {
+
+ let res = JSON.parse(decodeURIComponent(escape(atob(response.data))))
+ console.log('最终请求结果:', res);
+ let result = res[0].invoiceList
+
+ return { data: result || [], success: true };
+ } else {
+ message.error(response?.message || '查询失败');
+ return { data: [], success: true };
+ }
+ } catch (error) {
+ console.error('查询异常:', error);
+ message.error('查询异常,请重试');
+ return {
+ data: [],
+ success: false,
+ total: 0,
+ };
+ }
+ };
+
+ return (
+
+
发票查询列表}
+ search={{ span: 6 }}
+ toolBarRender={() => [
+ ]}
+ />
+
+ );
+};
+
+export default InvoiceSearch;