This commit is contained in:
ylj20011123 2025-12-22 19:43:32 +08:00
parent 1f17ff805d
commit 70a3b9e4ec
5 changed files with 255 additions and 111 deletions

BIN
dist.zip

Binary file not shown.

View File

@ -1,6 +1,6 @@
{ {
"name": "ant-design-pro", "name": "ant-design-pro",
"version": "4.5.92", "version": "4.5.95",
"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

@ -2,8 +2,9 @@ import { connect } from "umi";
import type { ConnectState } from "@/models/connect"; import type { ConnectState } from "@/models/connect";
import { useImperativeHandle, useState } from "react"; import { useImperativeHandle, useState } from "react";
import ProTable from '@ant-design/pro-table'; import ProTable from '@ant-design/pro-table';
import { Button, Input, InputNumber, TreeSelect } from 'antd'; import { Button, Input, InputNumber, Select, TreeSelect } from 'antd';
import type { ProColumns } from '@ant-design/pro-table'; import type { ProColumns } from '@ant-design/pro-table';
import session from "@/utils/session";
@ -24,7 +25,18 @@ const SelectSetMealItems = ({ leftTreeData, onRef, comboCommodityDetail }: Detai
// 判断用户是否点击了 添加套餐商品的按钮 // 判断用户是否点击了 添加套餐商品的按钮
const [isClickAdd, setIsClickAdd] = useState<boolean>(comboCommodityDetail && comboCommodityDetail.length > 0 ? true : false); const [isClickAdd, setIsClickAdd] = useState<boolean>(comboCommodityDetail && comboCommodityDetail.length > 0 ? true : false);
// 表格数据 // 表格数据
const [tableData, setTableData] = useState<any>(comboCommodityDetail && comboCommodityDetail.length > 0 ? comboCommodityDetail : []); const [tableData, setTableData] = useState<any>(comboCommodityDetail && comboCommodityDetail.length > 0 ? [
...comboCommodityDetail,
{
id: "addRow",
}
] : [
{
id: "addRow",
}
]);
const DUTYPARAGRAPHList = session.get('DUTYPARAGRAPHList')
// 表格列定义 // 表格列定义
const columns: any = [ const columns: any = [
@ -33,14 +45,44 @@ const SelectSetMealItems = ({ leftTreeData, onRef, comboCommodityDetail }: Detai
width: 250, width: 250,
align: 'center', align: 'center',
dataIndex: 'COMMODITY_NAME', dataIndex: 'COMMODITY_NAME',
render: (_, record: any) => ( render: (_, record: any) => {
<Input if (record?.id === "addRow") {
return {
children: <div onClick={() => {
const newData = {
id: Date.now(),
};
if (tableData && tableData.length > 0) {
let oldList: any = JSON.parse(JSON.stringify(tableData))
let newList: any = []
let addRowObj: any = []
oldList.forEach((item: any) => {
if (item.id === 'addRow') {
addRowObj = item
} else {
newList.push(item)
}
})
newList = [...newList, newData]
newList.push(addRowObj)
setTableData(newList)
}
}} style={{
width: '100%', fontSize: '14px', textAlign: 'center', boxSizing: 'border-box', lineHeight: '14px', cursor: 'pointer',
border: '1px dashed #d9d9d9', padding: '8px 0'
}}>+ </div>,
props: {
colSpan: 10, // 合并所有列(包括操作列)
},
};
}
return <Input
style={{ width: '100%' }} style={{ width: '100%' }}
value={record.COMMODITY_NAME} defaultValue={record.COMMODITY_NAME}
placeholder="请输入商品名称" placeholder="请输入商品名称"
onChange={(e) => { onBlur={(e) => {
const newData = tableData.map((item: any) => { const newData = tableData.map((item: any) => {
if (item.id === record.id) { if ((item.id && record.id && item.id === record.id) || item.COMMODITY_BARCODE === record.COMMODITY_BARCODE) {
return { ...item, COMMODITY_NAME: e.target.value }; return { ...item, COMMODITY_NAME: e.target.value };
} }
return item; return item;
@ -48,21 +90,30 @@ const SelectSetMealItems = ({ leftTreeData, onRef, comboCommodityDetail }: Detai
setTableData(newData); setTableData(newData);
}} }}
/> />
), },
}, },
{ {
title: '条码', title: '条码',
width: 150, width: 150,
align: 'center', align: 'center',
dataIndex: 'COMMODITY_BARCODE', dataIndex: 'COMMODITY_BARCODE',
render: (_, record: any) => ( render: (_, record: any) => {
<Input if (record?.id === "addRow") {
return {
children: '',
props: { colSpan: 0 },
};
}
return <Input
style={{ width: '100%' }} style={{ width: '100%' }}
value={record.COMMODITY_BARCODE} defaultValue={record.COMMODITY_BARCODE}
placeholder="请输入商品条码" placeholder="请输入商品条码"
onChange={(e) => { onBlur={(e) => {
console.log('tableDatatableDatatableData', tableData);
console.log('recordrecordrecordrecord', record);
const newData = tableData.map((item: any) => { const newData = tableData.map((item: any) => {
if (item.id === record.id) { if ((item.id && record.id && item.id === record.id) || item.COMMODITY_BARCODE === record.COMMODITY_BARCODE) {
return { ...item, COMMODITY_BARCODE: e.target.value }; return { ...item, COMMODITY_BARCODE: e.target.value };
} }
return item; return item;
@ -70,7 +121,7 @@ const SelectSetMealItems = ({ leftTreeData, onRef, comboCommodityDetail }: Detai
setTableData(newData); setTableData(newData);
}} }}
/> />
), },
}, },
// { // {
// title: <div style={{ textAlign: 'center' }}>分类</div>, // title: <div style={{ textAlign: 'center' }}>分类</div>,
@ -111,14 +162,20 @@ const SelectSetMealItems = ({ leftTreeData, onRef, comboCommodityDetail }: Detai
width: 120, width: 120,
align: 'center', align: 'center',
dataIndex: 'COMMODITY_UNIT', dataIndex: 'COMMODITY_UNIT',
render: (_, record: any) => ( render: (_, record: any) => {
<Input if (record?.id === "addRow") {
return {
children: '',
props: { colSpan: 0 },
};
}
return <Input
style={{ width: '100%' }} style={{ width: '100%' }}
value={record.COMMODITY_UNIT} defaultValue={record.COMMODITY_UNIT}
placeholder="请输入商品单位" placeholder="请输入商品单位"
onChange={(e) => { onBlur={(e) => {
const newData = tableData.map((item: any) => { const newData = tableData.map((item: any) => {
if (item.id === record.id) { if ((item.id && record.id && item.id === record.id) || item.COMMODITY_BARCODE === record.COMMODITY_BARCODE) {
return { ...item, COMMODITY_UNIT: e.target.value }; return { ...item, COMMODITY_UNIT: e.target.value };
} }
return item; return item;
@ -126,21 +183,27 @@ const SelectSetMealItems = ({ leftTreeData, onRef, comboCommodityDetail }: Detai
setTableData(newData); setTableData(newData);
}} }}
/> />
), },
}, },
{ {
title: '规格', title: '规格',
width: 120, width: 120,
align: 'center', align: 'center',
dataIndex: 'COMMODITY_RULE', dataIndex: 'COMMODITY_RULE',
render: (_, record: any) => ( render: (_, record: any) => {
<Input if (record?.id === "addRow") {
return {
children: '',
props: { colSpan: 0 },
};
}
return <Input
style={{ width: '100%' }} style={{ width: '100%' }}
value={record.COMMODITY_RULE} defaultValue={record.COMMODITY_RULE}
placeholder="请输入商品规格" placeholder="请输入商品规格"
onChange={(e) => { onBlur={(e) => {
const newData = tableData.map((item: any) => { const newData = tableData.map((item: any) => {
if (item.id === record.id) { if ((item.id && record.id && item.id === record.id) || item.COMMODITY_BARCODE === record.COMMODITY_BARCODE) {
return { ...item, COMMODITY_RULE: e.target.value }; return { ...item, COMMODITY_RULE: e.target.value };
} }
return item; return item;
@ -148,73 +211,91 @@ const SelectSetMealItems = ({ leftTreeData, onRef, comboCommodityDetail }: Detai
setTableData(newData); setTableData(newData);
}} }}
/> />
), },
}, },
{ {
title: '市场价', title: '市场价',
width: 120, width: 120,
align: 'center', align: 'center',
dataIndex: 'COMMODITY_RETAILPRICE', dataIndex: 'COMMODITY_RETAILPRICE',
render: (_, record: any) => ( render: (_, record: any) => {
<InputNumber if (record?.id === "addRow") {
return {
children: '',
props: { colSpan: 0 },
};
}
return <InputNumber
style={{ width: '100%' }} style={{ width: '100%' }}
value={record.COMMODITY_RETAILPRICE} defaultValue={record.COMMODITY_RETAILPRICE}
placeholder="请输入市场价" placeholder="请输入市场价"
onChange={(value) => { onBlur={(e) => {
const newData = tableData.map((item: any) => { const newData = tableData.map((item: any) => {
if (item.id === record.id) { if ((item.id && record.id && item.id === record.id) || item.COMMODITY_BARCODE === record.COMMODITY_BARCODE) {
return { ...item, COMMODITY_RETAILPRICE: value as number }; return { ...item, COMMODITY_RETAILPRICE: e.target.value };
} }
return item; return item;
}); });
setTableData(newData); setTableData(newData);
}} }}
/> />
), },
}, },
{ {
title: '零售价格', title: '零售价格',
width: 120, width: 120,
align: 'center', align: 'center',
dataIndex: 'COMMODITY_MEMBERPRICE', dataIndex: 'COMMODITY_MEMBERPRICE',
render: (_, record: any) => ( render: (_, record: any) => {
<InputNumber if (record?.id === "addRow") {
return {
children: '',
props: { colSpan: 0 },
};
}
return <InputNumber
style={{ width: '100%' }} style={{ width: '100%' }}
value={record.COMMODITY_MEMBERPRICE} defaultValue={record.COMMODITY_MEMBERPRICE}
placeholder="请输入零售价格" placeholder="请输入零售价格"
onChange={(value) => { onBlur={(e) => {
const newData = tableData.map((item: any) => { const newData = tableData.map((item: any) => {
if (item.id === record.id) { if ((item.id && record.id && item.id === record.id) || item.COMMODITY_BARCODE === record.COMMODITY_BARCODE) {
return { ...item, COMMODITY_MEMBERPRICE: value as number }; return { ...item, COMMODITY_MEMBERPRICE: e.target.value };
} }
return item; return item;
}); });
setTableData(newData); setTableData(newData);
}} }}
/> />
), },
}, },
{ {
title: '商品成本', title: '商品成本',
width: 120, width: 120,
align: 'center', align: 'center',
dataIndex: 'COMMODITY_PURCHASEPRICE', dataIndex: 'COMMODITY_PURCHASEPRICE',
render: (_, record: any) => ( render: (_, record: any) => {
<InputNumber if (record?.id === "addRow") {
return {
children: '',
props: { colSpan: 0 },
};
}
return <InputNumber
style={{ width: '100%' }} style={{ width: '100%' }}
value={record.COMMODITY_PURCHASEPRICE} defaultValue={record.COMMODITY_PURCHASEPRICE}
placeholder="请输入商品成本" placeholder="请输入商品成本"
onChange={(value) => { onBlur={(e) => {
const newData = tableData.map((item: any) => { const newData = tableData.map((item: any) => {
if (item.id === record.id) { if ((item.id && record.id && item.id === record.id) || item.COMMODITY_BARCODE === record.COMMODITY_BARCODE) {
return { ...item, COMMODITY_PURCHASEPRICE: value as number }; return { ...item, COMMODITY_PURCHASEPRICE: e.target.value };
} }
return item; return item;
}); });
setTableData(newData); setTableData(newData);
}} }}
/> />
), },
}, },
{ {
@ -222,36 +303,65 @@ const SelectSetMealItems = ({ leftTreeData, onRef, comboCommodityDetail }: Detai
width: 120, width: 120,
align: 'center', align: 'center',
dataIndex: 'DUTY_PARAGRAPH', dataIndex: 'DUTY_PARAGRAPH',
render: (_, record: any) => ( render: (_, record: any) => {
<InputNumber if (record?.id === "addRow") {
return {
children: '',
props: { colSpan: 0 },
};
}
return <Select
style={{ width: '100%' }} style={{ width: '100%' }}
value={record.DUTY_PARAGRAPH} defaultValue={record.DUTY_PARAGRAPH}
options={DUTYPARAGRAPHList}
placeholder="请输入商品税率" placeholder="请输入商品税率"
onChange={(value) => { onChange={(e) => {
const newData = tableData.map((item: any) => { const newData = tableData.map((item: any) => {
if (item.id === record.id) { if ((item.id && record.id && item.id === record.id) || item.COMMODITY_BARCODE === record.COMMODITY_BARCODE) {
return { ...item, DUTY_PARAGRAPH: value as number }; return { ...item, DUTY_PARAGRAPH: e };
} }
return item; return item;
}); });
setTableData(newData); setTableData(newData);
}} }}
/> >
), </Select>
// <InputNumber
// style={{ width: '100%' }}
// defaultValue={record.DUTY_PARAGRAPH}
// placeholder="请输入商品税率"
// onBlur={(e) => {
// const newData = tableData.map((item: any) => {
// if ((item.id && record.id && item.id === record.id) || item.COMMODITY_BARCODE === record.COMMODITY_BARCODE) {
// return { ...item, DUTY_PARAGRAPH: e.target.value };
// }
// return item;
// });
// setTableData(newData);
// }}
// />
},
}, },
{ {
title: '税务代码', title: '税务代码',
width: 120, width: 120,
align: 'center', align: 'center',
dataIndex: 'TAX_CODE', dataIndex: 'TAX_CODE',
render: (_, record: any) => ( render: (_, record: any) => {
<Input if (record?.id === "addRow") {
return {
children: '',
props: { colSpan: 0 },
};
}
return <Input
style={{ width: '100%' }} style={{ width: '100%' }}
value={record.TAX_CODE} defaultValue={record.TAX_CODE}
placeholder="请输入商品税务代码" placeholder="请输入商品税务代码"
onChange={(e) => { onBlur={(e) => {
const newData = tableData.map((item: any) => { const newData = tableData.map((item: any) => {
if (item.id === record.id) { if ((item.id && record.id && item.id === record.id) || item.COMMODITY_BARCODE === record.COMMODITY_BARCODE) {
return { ...item, TAX_CODE: e.target.value }; return { ...item, TAX_CODE: e.target.value };
} }
return item; return item;
@ -259,30 +369,43 @@ const SelectSetMealItems = ({ leftTreeData, onRef, comboCommodityDetail }: Detai
setTableData(newData); setTableData(newData);
}} }}
/> />
), },
}, },
{ {
title: '操作', title: '操作',
align: 'center', align: 'center',
valueType: 'option', valueType: 'option',
width: 60, width: 60,
render: (_, record: any) => [ render: (_, record: any) => {
<a if (record?.id === "addRow") {
key="delete" return {
onClick={() => { children: '',
const newData = tableData.filter((item: any) => item.id !== record.id); props: { colSpan: 0 },
setTableData(newData); };
}} }
> return [
<a
</a>, key="delete"
], onClick={() => {
console.log('tableDatatableDatatableData', tableData);
const newData = tableData.filter((item: any) => item.COMMODITY_BARCODE !== record.COMMODITY_BARCODE && item.id !== 'addRow');
console.log('newDatanewDatanewData', newData);
setTableData([...newData, {
id: "addRow",
}]);
}}
>
</a>,
];
},
}, },
]; ];
// 暴露表格数据 // 暴露表格数据
useImperativeHandle(onRef, () => ({ useImperativeHandle(onRef, () => ({
tableData tableData,
setIsClickAdd
})); }));
return ( return (
<div> <div>
@ -290,8 +413,11 @@ const SelectSetMealItems = ({ leftTreeData, onRef, comboCommodityDetail }: Detai
isClickAdd ? isClickAdd ?
<div> <div>
<ProTable <ProTable
rowKey="id" // rowKey="id"
headerTitle="套餐商品" rowKey={(record) => {
return `${record?.id}-${record?.COMMODITY_BARCODE}`
}}
headerTitle={<div><span></span><span style={{ color: 'red', marginLeft: '8px', fontSize: '14px' }}>*</span></div>}
columns={columns} columns={columns}
dataSource={tableData} dataSource={tableData}
pagination={false} pagination={false}
@ -299,31 +425,31 @@ const SelectSetMealItems = ({ leftTreeData, onRef, comboCommodityDetail }: Detai
options={false} options={false}
bordered bordered
toolBarRender={() => [ toolBarRender={() => [
<Button // <Button
key="add" // key="add"
type={'primary'} // type={'primary'}
onClick={() => { // onClick={() => {
const newData = { // const newData = {
id: Date.now(), // id: Date.now(),
}; // };
setTableData([...tableData, newData]); // setTableData([...tableData, newData]);
}} // }}
> // >
// 添加一行
</Button>, // </Button>,
<Button onClick={() => { // <Button onClick={() => {
setIsClickAdd(false) // setIsClickAdd(false)
}}> // }}>
// 取消
</Button> // </Button>
]} ]}
/> />
</div> : </div> : ''
<div style={{ width: '100%', display: 'flex', alignItems: 'center', justifyContent: 'flex-end' }}> // <div style={{ width: '100%', display: 'flex', alignItems: 'center', justifyContent: 'flex-end' }}>
<Button type={'primary'} onClick={() => { // <Button type={'primary'} onClick={() => {
setIsClickAdd(true) // setIsClickAdd(true)
}}></Button> // }}>添加套餐商品</Button>
</div> // </div>
} }
</div> </div>
) )

View File

@ -741,10 +741,11 @@ const COMMODITYTable: React.FC<{ currentUser: CurrentUser | undefined }> = (prop
}; };
const handleAddUpdate = async (res: any, type?: string) => { const handleAddUpdate = async (res: any, type?: string) => {
console.log('setSelectSetMealItemsRef', setSelectSetMealItemsRef.current)
console.log('resresresresresresresres', res)
let itemList = setSelectSetMealItemsRef.current.tableData let itemList = setSelectSetMealItemsRef.current.tableData
if (itemList && itemList.length > 0) { if (itemList && itemList.length > 0) {
itemList = itemList.filter((item: any) => item.id !== 'addRow')
// 判断条码 是否都填了
let isCodeAllOK: boolean = true
itemList.forEach((item: any) => { itemList.forEach((item: any) => {
// item.USERDEFINEDTYPE_ID = item.USERDEFINEDTYPE_ID && item.USERDEFINEDTYPE_ID.length > 0 ? item.USERDEFINEDTYPE_ID.toString() : item.USERDEFINEDTYPE_ID // item.USERDEFINEDTYPE_ID = item.USERDEFINEDTYPE_ID && item.USERDEFINEDTYPE_ID.length > 0 ? item.USERDEFINEDTYPE_ID.toString() : item.USERDEFINEDTYPE_ID
item.COMMODITY_TYPE = 4000 item.COMMODITY_TYPE = 4000
@ -753,9 +754,17 @@ const COMMODITYTable: React.FC<{ currentUser: CurrentUser | undefined }> = (prop
item.COMMODITY_STATE = 1 item.COMMODITY_STATE = 1
item.OWNERUNIT_ID = currentUser?.OwnerUnitId item.OWNERUNIT_ID = currentUser?.OwnerUnitId
item.OWNERUNIT_NAME = currentUser?.OwnerUnitName item.OWNERUNIT_NAME = currentUser?.OwnerUnitName
if (!item.COMMODITY_NAME || !item.COMMODITY_BARCODE || !item.COMMODITY_UNIT || !item.COMMODITY_RULE ||
!item.COMMODITY_MEMBERPRICE || !item.COMMODITY_PURCHASEPRICE || !item.DUTY_PARAGRAPH || !item.TAX_CODE) {
isCodeAllOK = false
}
}) })
if (!isCodeAllOK) {
message.error('请填写完整的套餐内单品信息!');
handleConfirmLoading(false)
return
}
} }
let req: any = {} let req: any = {}
if (currentRow?.USERDEFINEDTYPE_ID && type !== 'saveAs') { if (currentRow?.USERDEFINEDTYPE_ID && type !== 'saveAs') {
req = { req = {
@ -889,9 +898,11 @@ const COMMODITYTable: React.FC<{ currentUser: CurrentUser | undefined }> = (prop
} }
} }
handleConfirmLoading(false) handleConfirmLoading(false)
handleModalVisible(false);
} else { } else {
message.error(data.Result_Desc) message.error(data.Result_Desc)
handleConfirmLoading(false) handleConfirmLoading(false)
handleModalVisible(false);
} }
}; };
@ -1296,6 +1307,10 @@ const COMMODITYTable: React.FC<{ currentUser: CurrentUser | undefined }> = (prop
}} }}
footer={<div style={{ width: '100%', display: 'flex', alignItems: 'center', justifyContent: 'space-between' }}> footer={<div style={{ width: '100%', display: 'flex', alignItems: 'center', justifyContent: 'space-between' }}>
<div style={{ display: 'flex', alignItems: 'center' }}> <div style={{ display: 'flex', alignItems: 'center' }}>
<Button type={'primary'} onClick={() => {
// setIsClickAdd(true)
setSelectSetMealItemsRef.current?.setIsClickAdd(true)
}}></Button>
<Button type={"primary"} style={{ marginRight: '8px' }} onClick={async () => { <Button type={"primary"} style={{ marginRight: '8px' }} onClick={async () => {
const data = await formRef.current?.getFieldValue('relevanceCoupon') const data = await formRef.current?.getFieldValue('relevanceCoupon')
setSelectRelevanceId(data && data.length > 0 && data[0] ? data : []) setSelectRelevanceId(data && data.length > 0 && data[0] ? data : [])
@ -1525,7 +1540,7 @@ const COMMODITYTable: React.FC<{ currentUser: CurrentUser | undefined }> = (prop
// 如果有开关,要把开关的代码写进去 // 如果有开关,要把开关的代码写进去
await handleAddUpdate(newValue); await handleAddUpdate(newValue);
handleModalVisible(false);
}} }}
> >
<Row gutter={8}> <Row gutter={8}>
@ -1839,6 +1854,12 @@ const COMMODITYTable: React.FC<{ currentUser: CurrentUser | undefined }> = (prop
label="兑换积分" label="兑换积分"
/> />
</Col> </Col>
{/* 若是一个套餐商品 那么这里就要有一个录入套餐商品的地方 */}
<Col span={24}>
<SelectSetMealItems onRef={setSelectSetMealItemsRef} leftTreeData={leftTreeData} comboCommodityDetail={comboCommodityDetail} />
</Col>
<Divider orientation="left"></Divider> <Divider orientation="left"></Divider>
<Col span={6}> <Col span={6}>
<ProFormSelect <ProFormSelect
@ -1859,7 +1880,7 @@ const COMMODITYTable: React.FC<{ currentUser: CurrentUser | undefined }> = (prop
label="发货天数" label="发货天数"
/> />
</Col> </Col>
<Col span={12}> <Col span={6}>
<ProFormSelect <ProFormSelect
name="AFTERSALE_NATRUE" name="AFTERSALE_NATRUE"
label="售后模式" label="售后模式"
@ -2152,10 +2173,7 @@ const COMMODITYTable: React.FC<{ currentUser: CurrentUser | undefined }> = (prop
/> />
</Col> </Col>
{/* 若是一个套餐商品 那么这里就要有一个录入套餐商品的地方 */}
<Col span={24}>
<SelectSetMealItems onRef={setSelectSetMealItemsRef} leftTreeData={leftTreeData} comboCommodityDetail={comboCommodityDetail} />
</Col>
</Row> </Row>
</ProForm> </ProForm>
</Modal> </Modal>

View File

@ -1,4 +1,4 @@
// 由 scripts/writeVersion.js 自动生成 // 由 scripts/writeVersion.js 自动生成
export const VERSION = "4.5.92"; export const VERSION = "4.5.95";
export const GIT_HASH = "ee6fa92"; export const GIT_HASH = "1f17ff8";
export const BUILD_TIME = "2025-12-19T01:04:57.460Z"; export const BUILD_TIME = "2025-12-22T03:06:07.263Z";