ylj20011123 018ce67a4d update
2025-07-18 20:21:30 +08:00

380 lines
15 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// 商城交易台账 交易台账管理
import { connect } from "umi";
import type { CurrentUser } from "umi";
import type { ConnectState } from "@/models/connect";
import React, { useRef, useState } from "react";
import ProCard from "@ant-design/pro-card";
import { MenuFoldOutlined } from "@ant-design/icons";
import type { FormInstance } from "antd";
import { Button, message, Space, Spin, Tree } from "antd";
import useRequest from "@ahooksjs/use-request";
import { getServerpartTree } from "@/services/options";
import type { ActionType } from "@ant-design/pro-table";
import ProTable from "@ant-design/pro-table";
import ReactHTMLTableToExcel from "react-html-table-to-excel";
import LeftSelectTree from "@/pages/reports/settlementAccount/component/leftSelectTree";
import PageTitleBox from "@/components/PageTitleBox";
import { handeGetSupplierSaleBillList } from "../service";
import moment from 'moment'
import OrderDetailModal from "../BookingMealOrder/components/orderDetailModal";
import { handleSetlogSave } from "@/utils/format";
const TradingLedger: React.FC<{ currentUser: CurrentUser }> = (props) => {
const { currentUser } = props
const downloadBtnRef = useRef<any>()
const actionRef = useRef<ActionType>();
const formRef = useRef<FormInstance>();
const [reqDetailList, setReqDetailList] = useState<any>(); // 合计项数据源
const [printOut, setPrintOut] = useState<any>(); // 打印数据的内容
const [collapsible, setCollapsible] = useState<boolean>(false)
const [treeView, setTreeView] = useState<any>()
const [printIndex, setPrintIndex] = useState<number>(new Date().getTime())
// 树相关的属性和方法
const [selectedId, setSelectedId] = useState<string>()
// 导出的加载效果
const [showLoading, setShowLoading] = useState<boolean>(false)
// 是否显示打印的表格
const [showExportTable, setShowExportTable] = useState<boolean>(false)
// 查询的条件
const [searchParams, setSearchParams] = useState<any>()
const [currentRow, setCurrentRow] = useState<any>();
const [modalVisible, handleModalVisible] = useState<boolean>(false);
const columns: any = [
{
title: '查询内容',
hideInTable: true,
dataIndex: 'searchText',
fieldprop: {
placeholder: "请输入供应商名称/订单号等"
}
},
{
title: '下单时间',
dataIndex: 'search_date',
valueType: 'dateRange',
hideInTable: true,
hideInDescriptions: true,
search: {
transform: (value) => {
return {
ORDER_DATE_Start: value[0],
ORDER_DATE_End: value[1],
};
},
},
initialValue: [moment().subtract(1, 'M').format('YYYY-MM-DD'), moment().format('YYYY-MM-DD')],
},
{
dataIndex: 'MERCHANTS_NAME',
title: <div style={{ textAlign: 'center' }}></div>,
align: 'left',
width: 200,
ellipsis: true,
hideInSearch: true,
},
{
dataIndex: 'SALEBILL_CODE',
title: <div style={{ textAlign: 'center' }}></div>,
align: 'center',
width: 220,
ellipsis: true,
hideInSearch: true,
render: (_, record) => {
return record?.SALEBILL_CODE ?
<a onClick={() => {
setCurrentRow(record);
handleModalVisible(true)
handleSetlogSave(`查询收货人【${record?.ORDER_PERSON}】编码【${record.SALEBILL_CODE}】订单`)
}}>{record?.SALEBILL_CODE}</a> : "-"
}
},
{
dataIndex: 'PAYMENT_CODE',
title: <div style={{ textAlign: 'center' }}></div>,
align: 'center',
width: 220,
ellipsis: true,
hideInSearch: true,
},
{
dataIndex: 'COMMODITY_NAME',
title: <div style={{ textAlign: 'center' }}></div>,
align: 'left',
width: 300,
ellipsis: true,
hideInSearch: true,
},
{
title: "订单类型",
width: 150,
dataIndex: "SALEBILL_TYPE",
valueType: "select",
align: 'center',
valueEnum: {
"0": "全部",
"3000": "零售商城",
"3001": "工会商城",
"3002": "品诺商城",
"3010": "积分商城"
},
initialValue: '0',
},
{
title: "订单状态",
dataIndex: "SALEBILL_STATE",
width: 150,
ellipsis: true,
valueType: "select",
valueEnum: {
"0": "全部",
"1005": "订单待支付",
"1010": "订单待发货",
"2010": "订单已发货",
"3000": "订单已完成",
"8000": "退款申请中",
"8900": "订单已退款",
"9000": "订单已关闭",
"9999": "订单已撤销"
},
align: "center",
initialValue: '0',
},
{
dataIndex: 'ORDER_AMOUNT',
title: '订单金额',
align: 'center',
width: 150,
ellipsis: true,
hideInSearch: true,
},
{
dataIndex: 'PAY_AMOUNT',
title: '实付金额',
align: 'center',
width: 150,
ellipsis: true,
hideInSearch: true,
},
{
title: "支付方式",
dataIndex: "CHANNEL_TYPE",
valueType: "select",
valueEnum: {
"0": "全部",
"支付宝": "支付宝",
"微信": "微信",
"积分兑换": "积分兑换",
"余额支付": "余额支付",
},
width: 120,
hideInSearch: true,
ellipsis: true,
align: "center",
initialValue: '0',
},
{
dataIndex: 'ORDER_PERSON',
title: '收货人',
align: 'center',
width: 150,
ellipsis: true,
hideInSearch: true,
},
{
dataIndex: 'ORDER_DATE',
title: '下单时间',
align: 'center',
width: 150,
ellipsis: true,
hideInSearch: true,
render: (_, record) => {
return record?.ORDER_DATE ? moment(record?.ORDER_DATE).format('YYYY-MM-DD HH:mm:ss') : "-"
}
}
]
const exportTable = (e) => {
e.stopPropagation(); // 防止Collapse组件收起
const main = document.getElementsByClassName(`saleReportHideBox${printIndex}`)[0]
const thead = main.querySelector('thead').cloneNode(true); // 深克隆DOM节点
const tbody = main.querySelector('tbody').cloneNode(true); // 深克隆DOM节点
const container = document.querySelector('#hiddenBox');
const tempTable = document.createElement('table');
tempTable.appendChild(thead);
tempTable.appendChild(tbody);
tempTable.setAttribute('id', 'table-to-xls-TradingLedger'); // 给table添加id值与按钮上的table字段对应
container.appendChild(tempTable); // 把创建的节点添加到页面容器中
setShowLoading(false)
downloadBtnRef.current.handleDownload();
setShowExportTable(false)
tempTable.remove() // 防止重复打印一个内容
}
const handleCloseModal = () => {
handleModalVisible(false)
}
return (
<div ref={(el) => {
// 打印报表
if (!reqDetailList || reqDetailList.length === 0) return;
setPrintOut(el);
}} >
{
showLoading ?
<div
style={{
width: '100%',
height: '100%',
background: 'rgba(0,0,0,0.1)',
position: 'fixed',
zIndex: 5,
display: 'flex',
alignItems: 'center',
justifyContent: 'center'
}}
>
<div style={{
display: 'flex',
alignItems: 'center',
justifyContent: 'center',
padding: '15px 20px 10px',
background: '#fff',
borderRadius: '8px',
width: '200px'
}}>
<Spin />
<span style={{ marginLeft: '5px' }}>...</span>
</div>
</div> : ''
}
<div className={`saleReportHideBox${printIndex}`} style={{ position: 'fixed', zIndex: -1, top: 0, left: 0 }}>
{
showExportTable && reqDetailList && reqDetailList.length > 0 ?
<ProTable
columns={columns}
dataSource={reqDetailList}
pagination={false}
expandable={{
defaultExpandAllRows: true
}}
/> : ''
}
</div>
<div id='hiddenBox' style={{ position: 'fixed', zIndex: -1, top: 0, left: 0 }} />
<div style={{ backgroundColor: '#fff', display: 'flex' }}>
{/* <LeftSelectTree setSelectedId={setSelectedId} setCollapsible={setCollapsible} collapsible={collapsible} /> */}
<div style={{
width: '100%',
paddingTop: 0,
paddingBottom: 0,
paddingRight: 0
}}>
<ProTable
actionRef={actionRef}
formRef={formRef}
columns={columns}
bordered
expandable={{
expandRowByClick: true
}}
scroll={{ x: "100%", y: "calc(100vh - 410px)" }}
headerTitle={<PageTitleBox props={props} />} // 列表表头
search={{ span: 6 }}
request={async (params) => {
const req: any = {
SearchParameter: {
SALEBILL_IDS: "",
SALEBILL_TYPES: params?.SALEBILL_TYPE === '0' ? '3000,3001,3002,3010' : params?.SALEBILL_TYPE,
MEMBERSHIP_IDS: "",
MERCHANTS_IDS: "",
// PROVINCE_CODE: currentUser?.ProvinceCode,
SERVERPART_IDS: "",
SERVERPARTSHOP_IDS: "",
ORDER_DATE_Start: params?.ORDER_DATE_Start || "",
ORDER_DATE_End: params?.ORDER_DATE_End || "",
SALEBILL_STATES: params?.SALEBILL_STATE === "0" ? "1010,2010,3000" : params?.SALEBILL_STATE || "",
CHANNEL_TYPE: params?.CHANNEL_TYPE === "0" ? "" : params?.CHANNEL_TYPE || "",
WECHATAPPSIGN_ID: "",
WECHATAPP_APPID: "",
OWNERUNIT_ID: currentUser?.OwnerUnitId,
SearchKeyValue: params?.searchText || "",
},
PageIndex: 1,
PageSize: 999999
}
setSearchParams(params)
console.log('reqreqreqreq', req);
const data = await handeGetSupplierSaleBillList(req)
handleSetlogSave(`点击查询按钮`)
console.log('datadatadatadatadata', data);
setReqDetailList(data)
if (data && data.length > 0) {
return { data, success: true }
}
return { data: [], success: true }
}}
toolbar={{
actions: [
<span style={{ visibility: 'hidden' }}>
<ReactHTMLTableToExcel
buttonText={'导出excel'}
ref={downloadBtnRef}
table="table-to-xls-TradingLedger"
filename={`交易台账${searchParams?.ORDER_DATE_Start}-${searchParams?.ORDER_DATE_End}`}
sheet="sheet1"
/>
</span>,
<Button
key="new"
type="primary"
onClick={(e) => {
if (reqDetailList && reqDetailList.length > 0) {
setShowLoading(true)
setTimeout(() => {
setShowExportTable(true)
setTimeout(() => {
handleSetlogSave('导出Excel')
exportTable(e)
}, 100)
}, 100)
} else {
message.error('暂无数据可导出!')
}
}}
>
excel
</Button>
]
}}
/>
</div>
</div>
<OrderDetailModal modalVisible={modalVisible} handleCloseModal={handleCloseModal} currentRow={currentRow} />
</div>
)
}
export default connect(({ user }: ConnectState) => ({
currentUser: user.currentUser
}))(TradingLedger);