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",
"version": "4.5.92",
"version": "4.5.95",
"private": true,
"description": "An out-of-box UI solution for enterprise applications",
"scripts": {

View File

@ -2,8 +2,9 @@ import { connect } from "umi";
import type { ConnectState } from "@/models/connect";
import { useImperativeHandle, useState } from "react";
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 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 [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 = [
@ -33,14 +45,44 @@ const SelectSetMealItems = ({ leftTreeData, onRef, comboCommodityDetail }: Detai
width: 250,
align: 'center',
dataIndex: 'COMMODITY_NAME',
render: (_, record: any) => (
<Input
render: (_, record: any) => {
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%' }}
value={record.COMMODITY_NAME}
defaultValue={record.COMMODITY_NAME}
placeholder="请输入商品名称"
onChange={(e) => {
onBlur={(e) => {
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;
@ -48,21 +90,30 @@ const SelectSetMealItems = ({ leftTreeData, onRef, comboCommodityDetail }: Detai
setTableData(newData);
}}
/>
),
},
},
{
title: '条码',
width: 150,
align: 'center',
dataIndex: 'COMMODITY_BARCODE',
render: (_, record: any) => (
<Input
render: (_, record: any) => {
if (record?.id === "addRow") {
return {
children: '',
props: { colSpan: 0 },
};
}
return <Input
style={{ width: '100%' }}
value={record.COMMODITY_BARCODE}
defaultValue={record.COMMODITY_BARCODE}
placeholder="请输入商品条码"
onChange={(e) => {
onBlur={(e) => {
console.log('tableDatatableDatatableData', tableData);
console.log('recordrecordrecordrecord', record);
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;
@ -70,7 +121,7 @@ const SelectSetMealItems = ({ leftTreeData, onRef, comboCommodityDetail }: Detai
setTableData(newData);
}}
/>
),
},
},
// {
// title: <div style={{ textAlign: 'center' }}>分类</div>,
@ -111,14 +162,20 @@ const SelectSetMealItems = ({ leftTreeData, onRef, comboCommodityDetail }: Detai
width: 120,
align: 'center',
dataIndex: 'COMMODITY_UNIT',
render: (_, record: any) => (
<Input
render: (_, record: any) => {
if (record?.id === "addRow") {
return {
children: '',
props: { colSpan: 0 },
};
}
return <Input
style={{ width: '100%' }}
value={record.COMMODITY_UNIT}
defaultValue={record.COMMODITY_UNIT}
placeholder="请输入商品单位"
onChange={(e) => {
onBlur={(e) => {
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;
@ -126,21 +183,27 @@ const SelectSetMealItems = ({ leftTreeData, onRef, comboCommodityDetail }: Detai
setTableData(newData);
}}
/>
),
},
},
{
title: '规格',
width: 120,
align: 'center',
dataIndex: 'COMMODITY_RULE',
render: (_, record: any) => (
<Input
render: (_, record: any) => {
if (record?.id === "addRow") {
return {
children: '',
props: { colSpan: 0 },
};
}
return <Input
style={{ width: '100%' }}
value={record.COMMODITY_RULE}
defaultValue={record.COMMODITY_RULE}
placeholder="请输入商品规格"
onChange={(e) => {
onBlur={(e) => {
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;
@ -148,73 +211,91 @@ const SelectSetMealItems = ({ leftTreeData, onRef, comboCommodityDetail }: Detai
setTableData(newData);
}}
/>
),
},
},
{
title: '市场价',
width: 120,
align: 'center',
dataIndex: 'COMMODITY_RETAILPRICE',
render: (_, record: any) => (
<InputNumber
render: (_, record: any) => {
if (record?.id === "addRow") {
return {
children: '',
props: { colSpan: 0 },
};
}
return <InputNumber
style={{ width: '100%' }}
value={record.COMMODITY_RETAILPRICE}
defaultValue={record.COMMODITY_RETAILPRICE}
placeholder="请输入市场价"
onChange={(value) => {
onBlur={(e) => {
const newData = tableData.map((item: any) => {
if (item.id === record.id) {
return { ...item, COMMODITY_RETAILPRICE: value as number };
if ((item.id && record.id && item.id === record.id) || item.COMMODITY_BARCODE === record.COMMODITY_BARCODE) {
return { ...item, COMMODITY_RETAILPRICE: e.target.value };
}
return item;
});
setTableData(newData);
}}
/>
),
},
},
{
title: '零售价格',
width: 120,
align: 'center',
dataIndex: 'COMMODITY_MEMBERPRICE',
render: (_, record: any) => (
<InputNumber
render: (_, record: any) => {
if (record?.id === "addRow") {
return {
children: '',
props: { colSpan: 0 },
};
}
return <InputNumber
style={{ width: '100%' }}
value={record.COMMODITY_MEMBERPRICE}
defaultValue={record.COMMODITY_MEMBERPRICE}
placeholder="请输入零售价格"
onChange={(value) => {
onBlur={(e) => {
const newData = tableData.map((item: any) => {
if (item.id === record.id) {
return { ...item, COMMODITY_MEMBERPRICE: value as number };
if ((item.id && record.id && item.id === record.id) || item.COMMODITY_BARCODE === record.COMMODITY_BARCODE) {
return { ...item, COMMODITY_MEMBERPRICE: e.target.value };
}
return item;
});
setTableData(newData);
}}
/>
),
},
},
{
title: '商品成本',
width: 120,
align: 'center',
dataIndex: 'COMMODITY_PURCHASEPRICE',
render: (_, record: any) => (
<InputNumber
render: (_, record: any) => {
if (record?.id === "addRow") {
return {
children: '',
props: { colSpan: 0 },
};
}
return <InputNumber
style={{ width: '100%' }}
value={record.COMMODITY_PURCHASEPRICE}
defaultValue={record.COMMODITY_PURCHASEPRICE}
placeholder="请输入商品成本"
onChange={(value) => {
onBlur={(e) => {
const newData = tableData.map((item: any) => {
if (item.id === record.id) {
return { ...item, COMMODITY_PURCHASEPRICE: value as number };
if ((item.id && record.id && item.id === record.id) || item.COMMODITY_BARCODE === record.COMMODITY_BARCODE) {
return { ...item, COMMODITY_PURCHASEPRICE: e.target.value };
}
return item;
});
setTableData(newData);
}}
/>
),
},
},
{
@ -222,36 +303,65 @@ const SelectSetMealItems = ({ leftTreeData, onRef, comboCommodityDetail }: Detai
width: 120,
align: 'center',
dataIndex: 'DUTY_PARAGRAPH',
render: (_, record: any) => (
<InputNumber
render: (_, record: any) => {
if (record?.id === "addRow") {
return {
children: '',
props: { colSpan: 0 },
};
}
return <Select
style={{ width: '100%' }}
value={record.DUTY_PARAGRAPH}
defaultValue={record.DUTY_PARAGRAPH}
options={DUTYPARAGRAPHList}
placeholder="请输入商品税率"
onChange={(value) => {
onChange={(e) => {
const newData = tableData.map((item: any) => {
if (item.id === record.id) {
return { ...item, DUTY_PARAGRAPH: value as number };
if ((item.id && record.id && item.id === record.id) || item.COMMODITY_BARCODE === record.COMMODITY_BARCODE) {
return { ...item, DUTY_PARAGRAPH: e };
}
return item;
});
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: '税务代码',
width: 120,
align: 'center',
dataIndex: 'TAX_CODE',
render: (_, record: any) => (
<Input
render: (_, record: any) => {
if (record?.id === "addRow") {
return {
children: '',
props: { colSpan: 0 },
};
}
return <Input
style={{ width: '100%' }}
value={record.TAX_CODE}
defaultValue={record.TAX_CODE}
placeholder="请输入商品税务代码"
onChange={(e) => {
onBlur={(e) => {
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;
@ -259,30 +369,43 @@ const SelectSetMealItems = ({ leftTreeData, onRef, comboCommodityDetail }: Detai
setTableData(newData);
}}
/>
),
},
},
{
title: '操作',
align: 'center',
valueType: 'option',
width: 60,
render: (_, record: any) => [
render: (_, record: any) => {
if (record?.id === "addRow") {
return {
children: '',
props: { colSpan: 0 },
};
}
return [
<a
key="delete"
onClick={() => {
const newData = tableData.filter((item: any) => item.id !== record.id);
setTableData(newData);
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, () => ({
tableData
tableData,
setIsClickAdd
}));
return (
<div>
@ -290,8 +413,11 @@ const SelectSetMealItems = ({ leftTreeData, onRef, comboCommodityDetail }: Detai
isClickAdd ?
<div>
<ProTable
rowKey="id"
headerTitle="套餐商品"
// rowKey="id"
rowKey={(record) => {
return `${record?.id}-${record?.COMMODITY_BARCODE}`
}}
headerTitle={<div><span></span><span style={{ color: 'red', marginLeft: '8px', fontSize: '14px' }}>*</span></div>}
columns={columns}
dataSource={tableData}
pagination={false}
@ -299,31 +425,31 @@ const SelectSetMealItems = ({ leftTreeData, onRef, comboCommodityDetail }: Detai
options={false}
bordered
toolBarRender={() => [
<Button
key="add"
type={'primary'}
onClick={() => {
const newData = {
id: Date.now(),
};
setTableData([...tableData, newData]);
}}
>
</Button>,
<Button onClick={() => {
setIsClickAdd(false)
}}>
</Button>
// <Button
// key="add"
// type={'primary'}
// onClick={() => {
// const newData = {
// id: Date.now(),
// };
// setTableData([...tableData, newData]);
// }}
// >
// 添加一行
// </Button>,
// <Button onClick={() => {
// setIsClickAdd(false)
// }}>
// 取消
// </Button>
]}
/>
</div> :
<div style={{ width: '100%', display: 'flex', alignItems: 'center', justifyContent: 'flex-end' }}>
<Button type={'primary'} onClick={() => {
setIsClickAdd(true)
}}></Button>
</div>
</div> : ''
// <div style={{ width: '100%', display: 'flex', alignItems: 'center', justifyContent: 'flex-end' }}>
// <Button type={'primary'} onClick={() => {
// setIsClickAdd(true)
// }}>添加套餐商品</Button>
// </div>
}
</div>
)

View File

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

View File

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