This commit is contained in:
ylj20011123 2025-08-19 18:59:04 +08:00
parent 55eacd99f8
commit 1ce314d533
4 changed files with 115 additions and 99 deletions

View File

@ -1,6 +1,6 @@
{ {
"name": "ant-design-pro", "name": "ant-design-pro",
"version": "4.5.31", "version": "4.5.32",
"private": true, "private": true,
"description": "An out-of-box UI solution for enterprise applications", "description": "An out-of-box UI solution for enterprise applications",
"scripts": { "scripts": {

View File

@ -27,10 +27,11 @@ import numeral from 'numeral';
import { exportExcel } from '@/utils/utils'; import { exportExcel } from '@/utils/utils';
import { getYSSellMasterList } from './service'; import { getYSSellMasterList } from './service';
import { getUserShopTree } from '@/services/options'; import { getMoney, getUserShopTree } from '@/services/options';
import '../../style.less'; import '../../style.less';
import './salesFlow.less' import './salesFlow.less'
import { getYSSellMasterListAllData } from '@/pages/reports/BusinessAnalysis/saleFlow/service';
const { Text } = Typography; const { Text } = Typography;
@ -52,6 +53,7 @@ const CommoditysaleTable: React.FC<{ currentUser: CurrentUser | undefined }> = (
const { loading: shopLoading, data: shopTree } = useRequest(() => { return getUserShopTree(currentUser?.ID) }) const { loading: shopLoading, data: shopTree } = useRequest(() => { return getUserShopTree(currentUser?.ID) })
const defaultShops = currentUser?.ServerpartShopIds ? currentUser?.ServerpartShopIds.split(',').map(Number) : [] const defaultShops = currentUser?.ServerpartShopIds ? currentUser?.ServerpartShopIds.split(',').map(Number) : []
const [shopId, setShopId] = useState<[]>(); // 选择的门店 根据选择的门店筛选数据结果 const [shopId, setShopId] = useState<[]>(); // 选择的门店 根据选择的门店筛选数据结果
const [otherData, setOtherData] = useState<any>()
const columns: ProColumns<YSSELLMASTERModel>[] = [ const columns: ProColumns<YSSELLMASTERModel>[] = [
@ -200,21 +202,22 @@ const CommoditysaleTable: React.FC<{ currentUser: CurrentUser | undefined }> = (
search={{ span: 6 }} search={{ span: 6 }}
request={async (params) => { request={async (params) => {
if (shopId && shopId.length > 0) { if (shopId && shopId.length > 0) {
const data = await getYSSellMasterList({ const data = await getYSSellMasterListAllData({
...params, ...params,
SERVERPARTSHOP_ID: shopId && shopId.length > 0 ? shopId.toString() : currentUser?.ServerpartShopIds, SERVERPARTSHOP_ID: shopId && shopId.length > 0 ? shopId.toString() : currentUser?.ServerpartShopIds,
}); });
setReqDetailList(data.data); setReqDetailList(data.data);
console.log('data', data.data); console.log('data', data);
const list: any = JSON.parse(JSON.stringify(data.data)) const list: any = JSON.parse(JSON.stringify(data.List))
if (list && list.length > 0) { if (list && list.length > 0) {
list.forEach((item: any, index: number) => { list.forEach((item: any, index: number) => {
item.index = index + 1 item.index = index + 1
}) })
} }
console.log('list', list); console.log('list', list);
data.data = list data.List = list
return data; setOtherData(data.OtherData)
return { data: data.List, success: true };
} }
return { data: [], success: true } return { data: [], success: true }
}} }}
@ -243,16 +246,28 @@ const CommoditysaleTable: React.FC<{ currentUser: CurrentUser | undefined }> = (
}} }}
tableExtraRender={ tableExtraRender={
(_, data) => { (_, data) => {
if (data) { if (data) {
const devicesList: any = []
const reduceData = data.reduce(( const reduceData = data.reduce((
p: { SELLMASTER_OFFPRICE: number, SELLMASTER_COUNT: number, SELLMASTER_AMOUNT: number, MACHINECODE: string[], payway: {}, mobilePay: {} }, p: {
SELLMASTER_OFFPRICE: number,
SELLMASTER_COUNT: number,
SELLMASTER_AMOUNT: number,
MACHINECODE: string[],
payway: {},
mobilePay: {}
},
currentValue: YSSELLMASTERModel) => { currentValue: YSSELLMASTERModel) => {
const previousValue = { ...p } const previousValue = { ...p }
previousValue.SELLMASTER_COUNT += currentValue.SELLMASTER_COUNT || 0; // 销售数量 previousValue.SELLMASTER_COUNT += currentValue.SELLMASTER_COUNT || 0; // 销售数量
previousValue.SELLMASTER_OFFPRICE += currentValue.SELLMASTER_OFFPRICE || 0; // 优惠金额 previousValue.SELLMASTER_OFFPRICE += currentValue.SELLMASTER_OFFPRICE || 0; // 优惠金额
previousValue.SELLMASTER_AMOUNT += currentValue.SELLMASTER_AMOUNT || 0; // 实收金额 previousValue.SELLMASTER_AMOUNT += currentValue.SELLMASTER_AMOUNT || 0; // 实收金额
if (devicesList.indexOf(currentValue.MACHINECODE) === -1) {
devicesList.push(currentValue.MACHINECODE)
}
if (currentValue.PAYMENT_TYPE === 1010 || currentValue.PAYMENT_TYPE === 1020) { if (currentValue.PAYMENT_TYPE === 1010 || currentValue.PAYMENT_TYPE === 1020) {
previousValue.payway['移动'] += currentValue.SELLMASTER_AMOUNT previousValue.payway['移动'] += currentValue.SELLMASTER_AMOUNT
if (!previousValue.mobilePay[currentValue.PAYMENT_TYPE_TEXT]) { // 移动支付方式 if (!previousValue.mobilePay[currentValue.PAYMENT_TYPE_TEXT]) { // 移动支付方式
@ -270,60 +285,61 @@ const CommoditysaleTable: React.FC<{ currentUser: CurrentUser | undefined }> = (
previousValue.MACHINECODE.push(currentValue.MACHINECODE); // 收银机号 previousValue.MACHINECODE.push(currentValue.MACHINECODE); // 收银机号
} }
return previousValue return previousValue
}, { SELLMASTER_OFFPRICE: 0, SELLMASTER_COUNT: 0, SELLMASTER_AMOUNT: 0, MACHINECODE: [], payway: { '移动': 0, '现金': 0, }, mobilePay: {} }); }, {
console.log('reduceData', reduceData); SELLMASTER_OFFPRICE: 0,
SELLMASTER_COUNT: 0,
SELLMASTER_AMOUNT: 0,
MACHINECODE: [],
payway: { '移动': 0, '现金': 0, },
mobilePay: {}
});
return <div style={{ paddingLeft: 24 }}> return <div style={{ paddingLeft: 24 }}>
<Descriptions <Descriptions
title={<Text type="success" style={{ color: "#1890ff", fontSize: 14 }}></Text>} title={<Text type="success" style={{ color: "#1890ff", fontSize: 14 }}></Text>}
size="small" column={5} size="small" column={7}
className="commity-sale-description" className="commity-sale-description"
contentStyle={{ fontWeight: "bolder" }} labelStyle={{ color: "#00000073" }} contentStyle={{ fontWeight: "bolder" }} labelStyle={{ color: "#00000073" }}
> >
<Descriptions.Item className='mobileMoney' label="移动支付"> <Descriptions.Item label="客单数量">{numeral(data.length).format('0,0')}<Text
¥<span className='mobileMoneyText'>{numeral(reduceData.payway['移动']).format('0,0.00')}</span> type="secondary"> </Text></Descriptions.Item>
</Descriptions.Item> <Descriptions.Item
<Descriptions.Item label="现金支付">¥{numeral(reduceData.payway['现金']).format('0,0.00')}</Descriptions.Item> label="实收金额">¥{numeral(reduceData.SELLMASTER_AMOUNT).format('0,0.00')}</Descriptions.Item>
<Descriptions.Item label="实收金额">¥{numeral(reduceData.SELLMASTER_AMOUNT).format('0,0.00')}</Descriptions.Item> <Descriptions.Item
</Descriptions> label="优惠金额">¥{numeral(reduceData.SELLMASTER_OFFPRICE).format('0,0.00')}</Descriptions.Item>
<Descriptions size="small" className="commity-sale-description" column={5} contentStyle={{ fontWeight: "bolder" }} labelStyle={{ color: "#00000073" }}> <Descriptions.Item
<Descriptions.Item label="客单数量">{numeral(data.length).format('0,0')}<Text type="secondary"> </Text></Descriptions.Item> label="客单均价">¥{numeral(reduceData.SELLMASTER_AMOUNT / data.length).format('0,0.00')}</Descriptions.Item>
<Descriptions.Item label="优惠金额">¥{numeral(reduceData.SELLMASTER_OFFPRICE).format('0,0.00')}</Descriptions.Item> <Descriptions.Item label="销售数量">{numeral(reduceData.SELLMASTER_COUNT).format('0,0')}<Text
<Descriptions.Item label="收银机">{numeral(reduceData.MACHINECODE.length).format('0,0')}<Text type="secondary"> </Text></Descriptions.Item> type="secondary"> </Text></Descriptions.Item>
</Descriptions> <Descriptions.Item label="设备数量">{devicesList && devicesList.length > 0 ? devicesList.length : '-'}</Descriptions.Item>
<Descriptions size="small" className="commity-sale-description" column={5} contentStyle={{ fontWeight: "bolder" }} labelStyle={{ color: "#00000073" }}> <Descriptions.Item label="统计时间">{moment().format('YYYY-MM-DD')}</Descriptions.Item>
<Descriptions.Item label="销售数量">{numeral(reduceData.SELLMASTER_COUNT).format('0,0')}<Text type="secondary"> </Text></Descriptions.Item>
<Descriptions.Item label="客单均价">¥{numeral(reduceData.SELLMASTER_AMOUNT / data.length).format('0,0.00')}</Descriptions.Item>
<Descriptions.Item label="商品均价">¥{numeral(reduceData.SELLMASTER_AMOUNT / reduceData.SELLMASTER_COUNT).format('0,0.00')}</Descriptions.Item>
</Descriptions> </Descriptions>
{/* <Descriptions <Descriptions
size="small" title={<Text type="success" style={{ color: "#1890ff", fontSize: 14 }}></Text>}
column={5} size="small" column={7}
className="commity-sale-description" className="commity-sale-description"
contentStyle={{ fontWeight: "bolder" }} labelStyle={{ color: "#00000073" }} contentStyle={{ fontWeight: "bolder" }} labelStyle={{ color: "#00000073" }}
> >
{ <Descriptions.Item
Object.keys(reduceData.payway).reverse().map((n, index) => { label="现金支付">{otherData?.CASH ? `¥${numeral(getMoney(otherData?.CASH)).format('0,0.00')}` : '¥0.00'}</Descriptions.Item>
if (n === '移动') { <Descriptions.Item
return <Descriptions.Item span={index === 1 ? 4 : 3} label={`${n}支付`}>¥ label="微信支付">{otherData?.TICKETBILL ? `¥${numeral(getMoney(otherData?.TICKETBILL)).format('0,0.00')}` : '¥0.00'}</Descriptions.Item>
<Space>{numeral(reduceData.payway[n]).format('0,0.00')}{() => { <Descriptions.Item label="支付宝支付">{otherData?.OTHERPAY ? `¥${numeral(getMoney(otherData?.OTHERPAY)).format('0,0.00')}` : '¥0.00'}</Descriptions.Item>
return (reduceData.payway[n] > 0 && <><Text type="secondary">(</Text>{ <Descriptions.Item label="云闪付">{otherData?.CREDITCARD ? `¥${numeral(getMoney(otherData?.CREDITCARD)).format('0,0.00')}` : '¥0.00'}</Descriptions.Item>
Object.keys(reduceData.mobilePay).map(m => <Descriptions.Item label="银联记账">{otherData?.YUNSHANFU ? `¥${numeral(getMoney(otherData?.YUNSHANFU)).format('0,0.00')}` : '¥0.00'}</Descriptions.Item>
<Text type="secondary">{m}: ¥{numeral(reduceData.mobilePay[m]).format('0,0.00')}</Text>) <Descriptions.Item label="企业会员">{otherData?.COUPONTYPE_2010 ? `¥${numeral(getMoney(otherData?.COUPONTYPE_2010)).format('0,0.00')}` : '¥0.00'}</Descriptions.Item>
}<Text type="secondary">)</Text></>) <Descriptions.Item label="电子优惠券">{otherData?.COUPONTYPE_2020 ? `¥${numeral(getMoney(otherData?.COUPONTYPE_2020)).format('0,0.00')}` : '¥0.00'}</Descriptions.Item>
}} </Descriptions>
</Space> <Descriptions size="small" className="commity-sale-description" column={7}
</Descriptions.Item> contentStyle={{ fontWeight: "bolder" }} labelStyle={{ color: "#00000073" }}>
} <Descriptions.Item label="大巴优惠券">{otherData?.COUPONTYPE_2030 ? `¥${numeral(getMoney(otherData?.COUPONTYPE_2030)).format('0,0.00')}` : '¥0.00'}</Descriptions.Item>
return <Descriptions.Item label={`${n}支付`} span={1} >¥{numeral(reduceData.payway[n]).format('0,0.00')}</Descriptions.Item> <Descriptions.Item label="团购餐券">{otherData?.COUPONTYPE_2040 ? `¥${numeral(getMoney(otherData?.COUPONTYPE_2040)).format('0,0.00')}` : '¥0.00'}</Descriptions.Item>
}) <Descriptions.Item label="促销流水">{otherData?.SELLMASTERTYPE_1010 ? `¥${numeral(getMoney(otherData?.SELLMASTERTYPE_1010)).format('0,0.00')}` : '¥0.00'}</Descriptions.Item>
} <Descriptions.Item label="香烟销售">{otherData?.SELLMASTERTYPE_1020 ? `¥${numeral(getMoney(otherData?.SELLMASTERTYPE_1020)).format('0,0.00')}` : '¥0.00'}</Descriptions.Item>
<Descriptions.Item label="在线订单">{otherData?.SELLMASTERTYPE_1030 ? `¥${numeral(getMoney(otherData?.SELLMASTERTYPE_1030)).format('0,0.00')}` : '¥0.00'}</Descriptions.Item>
</Descriptions> */} <Descriptions.Item label="稽核补录">{otherData?.SELLMASTERTYPE_1040 ? `¥${numeral(getMoney(otherData?.SELLMASTERTYPE_1040)).format('0,0.00')}` : '¥0.00'}</Descriptions.Item>
</Descriptions>
</div> </div>
} }
return <></> return <></>
} }

View File

@ -1,4 +1,4 @@
// 由 scripts/writeVersion.js 自动生成 // 由 scripts/writeVersion.js 自动生成
export const VERSION = "4.5.31"; export const VERSION = "4.5.32";
export const GIT_HASH = "cb0823b"; export const GIT_HASH = "55eacd9";
export const BUILD_TIME = "2025-08-18T02:35:36.007Z"; export const BUILD_TIME = "2025-08-19T10:31:57.380Z";