This commit is contained in:
ylj20011123 2026-01-08 18:15:18 +08:00
parent 70a3b9e4ec
commit 31a0a71e48
13 changed files with 374 additions and 99 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.95", "version": "4.5.111",
"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": {

BIN
src/assets/refreshIcon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.9 KiB

View File

@ -461,7 +461,7 @@ const BasicLayout: React.FC<BasicLayoutProps> = (props) => {
// 商品属性 // 商品属性
getFieldEnumTree({ FieldExplainField: 'COMMODITY_NATURE' }).then((COMMODITYNATURE: any) => { getFieldEnumTree({ FieldExplainField: 'COMMODITY_NATURE', FieldEnumStatus: true }).then((COMMODITYNATURE: any) => {
if (COMMODITYNATURE && COMMODITYNATURE.length > 0) { if (COMMODITYNATURE && COMMODITYNATURE.length > 0) {
const obj: any = {} const obj: any = {}
const list: any = [] const list: any = []

View File

@ -20,7 +20,6 @@ import { handeGetMERCHANTSList } from "@/pages/travelMember/service";
// 提交账号数据 // 提交账号数据
const handleAddUpdate = async (item: any, type: boolean) => { const handleAddUpdate = async (item: any, type: boolean) => {
console.log('handleAddUpdate', item); console.log('handleAddUpdate', item);
const loading = message.loading("正在提交...") const loading = message.loading("正在提交...")
const result = await updataUser(item) const result = await updataUser(item)
@ -382,7 +381,6 @@ const Edit = ({ tableTab, openType, detail, reloadTable, currentUser, selectTab,
// setShowServiceList(initDetail.PushList[0].type) // setShowServiceList(initDetail.PushList[0].type)
setShowWeChatFlag(initDetail.PushPermission) setShowWeChatFlag(initDetail.PushPermission)
// 请求获取该账户绑定的角色拥有的模块权限 // 请求获取该账户绑定的角色拥有的模块权限
if (initDetail.SystemRoleList.length > 0) { if (initDetail.SystemRoleList.length > 0) {
getRoleMenu(initDetail.SystemRoleList.toString()) getRoleMenu(initDetail.SystemRoleList.toString())
@ -393,7 +391,7 @@ const Edit = ({ tableTab, openType, detail, reloadTable, currentUser, selectTab,
handleGetMerchantTree() handleGetMerchantTree()
setSelectDetail('530000')
// , USER_PATTERN: currentUser?.UserPattern // , USER_PATTERN: currentUser?.UserPattern
setInitialDetail({ USER_STATUS: 1, USER_REPEATLOGON: 1, SUPER_ADMIN: 0 }) setInitialDetail({ USER_STATUS: 1, USER_REPEATLOGON: 1, SUPER_ADMIN: 0 })
// , USER_PATTERN: currentUser?.UserPattern // , USER_PATTERN: currentUser?.UserPattern
@ -407,6 +405,7 @@ const Edit = ({ tableTab, openType, detail, reloadTable, currentUser, selectTab,
setCheckedServerpart([]) // 清空选择的服务区/门店 setCheckedServerpart([]) // 清空选择的服务区/门店
getShopTree(BUSINESSMAN_ID?.value) getShopTree(BUSINESSMAN_ID?.value)
} }
console.log('没有');
return { USER_STATUS: 1, USER_REPEATLOGON: 1, SUPER_ADMIN: 0, USER_PROVINCE: 911 } return { USER_STATUS: 1, USER_REPEATLOGON: 1, SUPER_ADMIN: 0, USER_PROVINCE: 911 }
@ -830,7 +829,6 @@ const Edit = ({ tableTab, openType, detail, reloadTable, currentUser, selectTab,
<Form.Item <Form.Item
name="BUSINESSMAN_ID" name="BUSINESSMAN_ID"
label="所属供应商" label="所属供应商"
rules={[ rules={[
{ {
required: true, required: true,
@ -844,7 +842,10 @@ const Edit = ({ tableTab, openType, detail, reloadTable, currentUser, selectTab,
showSearch showSearch
treeNodeFilterProp="label" treeNodeFilterProp="label"
onSelect={(value: any, options: any) => { onSelect={(value: any, options: any) => {
detailForm.current?.setFieldsValue({ USERTYPE_ID: '' })
setInitialDetail({ ...initialDetail, BUSINESSMAN_NAME: options.label })
setCheckedServerpart([]) // 清空选择的服务区/门店
getShopTree(value)
}} }}
placeholder="请选择所属供应商" placeholder="请选择所属供应商"
allowClear allowClear
@ -852,6 +853,12 @@ const Edit = ({ tableTab, openType, detail, reloadTable, currentUser, selectTab,
</Form.Item> </Form.Item>
</Col> : '' </Col> : ''
} }
<Col span={6} style={{ display: 'none' }}>
<ProFormText
label="所属供应商"
name="BUSINESSMAN_NAME"
/>
</Col>
<Col span={16}> <Col span={16}>
<ProFormText <ProFormText
label="备注" label="备注"

View File

@ -28,7 +28,7 @@ import defaultIcon from '../../../assets/brand/defaultIcon.png'
import ModalFooter from '../scenicSpotConfig/component/modalFooter'; import ModalFooter from '../scenicSpotConfig/component/modalFooter';
import { handleSetlogSave } from '@/utils/format'; import { handleSetlogSave } from '@/utils/format';
import { highlightText } from '@/utils/highlightText'; import { highlightText } from '@/utils/highlightText';
import { handlesyncWeChatGetMallGoodsType } from '@/pages/operatingMerchants/service'; import { handlecsyncWeChatGetMallGoodsInfo, handlesyncWeChatGetMallGoodsType } from '@/pages/operatingMerchants/service';
const beforeUpload = (file: any) => { const beforeUpload = (file: any) => {
@ -284,6 +284,9 @@ const MallClassificationManage: React.FC<{ currentUser: CurrentUser | undefined
STAFF_ID: currentUser?.ID, STAFF_ID: currentUser?.ID,
STAFF_NAME: currentUser?.Name, STAFF_NAME: currentUser?.Name,
OPERATE_DATE: moment().format('YYYY-MM-DD HH:mm:ss'), OPERATE_DATE: moment().format('YYYY-MM-DD HH:mm:ss'),
WECHATAPP_APPID: "wxee018fb96955552a",
WECHATAPPSIGN_NAME: "彩云驿出行",
WECHATAPPSIGN_ID: 38
} }
} else { } else {
req = { req = {
@ -299,6 +302,9 @@ const MallClassificationManage: React.FC<{ currentUser: CurrentUser | undefined
STAFF_NAME: currentUser?.Name, STAFF_NAME: currentUser?.Name,
OPERATE_DATE: moment().format('YYYY-MM-DD HH:mm:ss'), OPERATE_DATE: moment().format('YYYY-MM-DD HH:mm:ss'),
USERDEFINEDTYPE_DATE: moment().format('YYYY-MM-DD HH:mm:ss'), USERDEFINEDTYPE_DATE: moment().format('YYYY-MM-DD HH:mm:ss'),
WECHATAPP_APPID: "wxee018fb96955552a",
WECHATAPPSIGN_NAME: "彩云驿出行",
WECHATAPPSIGN_ID: 38
} }
} }
const data = await handlSynchroUSERDEFINEDTYPE(req) const data = await handlSynchroUSERDEFINEDTYPE(req)
@ -314,6 +320,8 @@ const MallClassificationManage: React.FC<{ currentUser: CurrentUser | undefined
actionRef.current?.reload() actionRef.current?.reload()
handlesyncWeChatGetMallGoodsType({ appId: 'wxee018fb96955552a' }) handlesyncWeChatGetMallGoodsType({ appId: 'wxee018fb96955552a' })
handlecsyncWeChatGetMallGoodsInfo({ appId: 'wxee018fb96955552a', userdefinedTypeId: data.Result_Data.USERDEFINEDTYPE_PID === -1 ? data.Result_Data.USERDEFINEDTYPE_ID : data.Result_Data.USERDEFINEDTYPE_PID })
} else { } else {
message.error(data.Result_Desc) message.error(data.Result_Desc)
} }
@ -473,7 +481,7 @@ const MallClassificationManage: React.FC<{ currentUser: CurrentUser | undefined
<ProForm <ProForm
layout={'horizontal'} layout={'horizontal'}
formRef={formRef} formRef={formRef}
labelCol={{ style: { width: 80 } }} labelCol={{ style: { width: 100 } }}
autoFocusFirstInput autoFocusFirstInput
submitter={false} submitter={false}
preserve={false} preserve={false}
@ -697,6 +705,18 @@ const MallClassificationManage: React.FC<{ currentUser: CurrentUser | undefined
disabled disabled
/> />
</Col> </Col>
<Col span={12}>
<ProFormSelect
name="SERVERPARTSHOP_ID"
label="小程序显示"
options={[
{ label: '精选商城', value: '1' },
{ label: '工会商城', value: '2' },
{ label: '不显示', value: '0' },
]}
initialValue={0}
/>
</Col>
<Col span={24}> <Col span={24}>
<ProFormTextArea <ProFormTextArea
name="USERDEFINEDTYPE_DESC" name="USERDEFINEDTYPE_DESC"

View File

@ -2,6 +2,7 @@ import { connect } from "umi";
import type { ConnectState } from "@/models/connect"; import type { ConnectState } from "@/models/connect";
import ProCard from "@ant-design/pro-card"; import ProCard from "@ant-design/pro-card";
import searchIcon from '@/assets/ai/searchIcon.png' import searchIcon from '@/assets/ai/searchIcon.png'
import refreshIcon from '@/assets/refreshIcon.png'
import { useRef, useState } from "react"; import { useRef, useState } from "react";
import { MenuFoldOutlined } from "@ant-design/icons"; import { MenuFoldOutlined } from "@ant-design/icons";
import ProForm, { ProFormText } from "@ant-design/pro-form"; import ProForm, { ProFormText } from "@ant-design/pro-form";
@ -130,7 +131,6 @@ const LeftSelectMallType = ({ setSelectedId, reload, actionRef, currentUser, wid
console.log('res', res); console.log('res', res);
return res return res
} }
// 仅支持单选一个服务区的时候 调用的方法 // 仅支持单选一个服务区的时候 调用的方法
const convertTreeForSelectOnly = (treeData: any[]): any[] => { const convertTreeForSelectOnly = (treeData: any[]): any[] => {
return treeData.map(item => { return treeData.map(item => {
@ -144,6 +144,23 @@ const LeftSelectMallType = ({ setSelectedId, reload, actionRef, currentUser, wid
return newItem; return newItem;
}); });
}; };
// 因为现在要添加一个刷新 所以将获取左侧列数据的方法 包成一个方法 可以去调用
const handleRefreshData = async () => {
const req = {
OWNERUNIT_ID: '911',
PROVINCE_CODE: "",
GOODSTYPE: 4000,
USERDEFINEDTYPE_STATE: 1,
SCANCODE_ORDER: 1
}
const data = await handlGetUSERDEFINEDTYPEList(req);
setTreeView(data)
setData(data)
session.set("USERDEFINEDTYPEList", data)
setAllTreeViews(data)
return data
}
return ( return (
<div> <div>
@ -152,6 +169,9 @@ const LeftSelectMallType = ({ setSelectedId, reload, actionRef, currentUser, wid
className="pageTable-leftnav" className="pageTable-leftnav"
bodyStyle={{ padding: 0, paddingTop: 20, paddingLeft: 20, width: !collapsible ? width ? `${width}px` : "300px" : "60px" }} bodyStyle={{ padding: 0, paddingTop: 20, paddingLeft: 20, width: !collapsible ? width ? `${width}px` : "300px" : "60px" }}
extra={<div className="leftSelectBox"> extra={<div className="leftSelectBox">
<img className="refreshIcon" src={refreshIcon} onClick={() => {
handleRefreshData()
}} />
<img className="searchIcon" src={searchIcon} onClick={() => { <img className="searchIcon" src={searchIcon} onClick={() => {
setShowServiceSearchBox(true) setShowServiceSearchBox(true)
}} /> }} />

View File

@ -19,9 +19,10 @@ type DetailProps = {
leftTreeData?: TreeDataType[] leftTreeData?: TreeDataType[]
onRef?: any onRef?: any
comboCommodityDetail?: any // 查询到的套餐数据 comboCommodityDetail?: any // 查询到的套餐数据
parentFormRef?: any // 父级的表单实例
}; };
const SelectSetMealItems = ({ leftTreeData, onRef, comboCommodityDetail }: DetailProps) => { const SelectSetMealItems = ({ leftTreeData, onRef, comboCommodityDetail, parentFormRef }: DetailProps) => {
// 判断用户是否点击了 添加套餐商品的按钮 // 判断用户是否点击了 添加套餐商品的按钮
const [isClickAdd, setIsClickAdd] = useState<boolean>(comboCommodityDetail && comboCommodityDetail.length > 0 ? true : false); const [isClickAdd, setIsClickAdd] = useState<boolean>(comboCommodityDetail && comboCommodityDetail.length > 0 ? true : false);
// 表格数据 // 表格数据
@ -82,7 +83,7 @@ const SelectSetMealItems = ({ leftTreeData, onRef, comboCommodityDetail }: Detai
placeholder="请输入商品名称" placeholder="请输入商品名称"
onBlur={(e) => { onBlur={(e) => {
const newData = tableData.map((item: any) => { const newData = tableData.map((item: any) => {
if ((item.id && record.id && item.id === record.id) || item.COMMODITY_BARCODE === record.COMMODITY_BARCODE) { if (item.id !== 'addRow' && item.id === record?.id) {
return { ...item, COMMODITY_NAME: e.target.value }; return { ...item, COMMODITY_NAME: e.target.value };
} }
return item; return item;
@ -111,11 +112,11 @@ const SelectSetMealItems = ({ leftTreeData, onRef, comboCommodityDetail }: Detai
onBlur={(e) => { onBlur={(e) => {
console.log('tableDatatableDatatableData', tableData); console.log('tableDatatableDatatableData', tableData);
console.log('recordrecordrecordrecord', record); console.log('recordrecordrecordrecord', record);
const newData = tableData.map((item: any) => { const newData = tableData.map((item: any) => {
if ((item.id && record.id && item.id === record.id) || item.COMMODITY_BARCODE === record.COMMODITY_BARCODE) { if (item.id !== 'addRow' && item.id === record?.id) {
return { ...item, COMMODITY_BARCODE: e.target.value }; return { ...item, COMMODITY_BARCODE: e.target.value };
} }
return item; return item;
}); });
setTableData(newData); setTableData(newData);
@ -175,7 +176,7 @@ const SelectSetMealItems = ({ leftTreeData, onRef, comboCommodityDetail }: Detai
placeholder="请输入商品单位" placeholder="请输入商品单位"
onBlur={(e) => { onBlur={(e) => {
const newData = tableData.map((item: any) => { const newData = tableData.map((item: any) => {
if ((item.id && record.id && item.id === record.id) || item.COMMODITY_BARCODE === record.COMMODITY_BARCODE) { if (item.id !== 'addRow' && item.id === record?.id) {
return { ...item, COMMODITY_UNIT: e.target.value }; return { ...item, COMMODITY_UNIT: e.target.value };
} }
return item; return item;
@ -203,7 +204,7 @@ const SelectSetMealItems = ({ leftTreeData, onRef, comboCommodityDetail }: Detai
placeholder="请输入商品规格" placeholder="请输入商品规格"
onBlur={(e) => { onBlur={(e) => {
const newData = tableData.map((item: any) => { const newData = tableData.map((item: any) => {
if ((item.id && record.id && item.id === record.id) || item.COMMODITY_BARCODE === record.COMMODITY_BARCODE) { if (item.id !== 'addRow' && item.id === record?.id) {
return { ...item, COMMODITY_RULE: e.target.value }; return { ...item, COMMODITY_RULE: e.target.value };
} }
return item; return item;
@ -231,12 +232,25 @@ const SelectSetMealItems = ({ leftTreeData, onRef, comboCommodityDetail }: Detai
placeholder="请输入市场价" placeholder="请输入市场价"
onBlur={(e) => { onBlur={(e) => {
const newData = tableData.map((item: any) => { const newData = tableData.map((item: any) => {
if ((item.id && record.id && item.id === record.id) || item.COMMODITY_BARCODE === record.COMMODITY_BARCODE) { if (item.id !== 'addRow' && item.id === record?.id) {
return { ...item, COMMODITY_RETAILPRICE: e.target.value }; return { ...item, COMMODITY_RETAILPRICE: Number(e.target.value) };
} }
return item; return item;
}); });
console.log('newDatanewDatanewDatanewData', JSON.parse(JSON.stringify(newData)));
setTableData(newData); setTableData(newData);
// 重新算合计
if (parentFormRef) {
console.log('newDatanewDatanewDatanewData', newData);
let COMMODITY_RETAILPRICESUM: number = 0
newData.forEach((item: any) => {
if (item.id !== 'addRow') {
COMMODITY_RETAILPRICESUM += item.COMMODITY_RETAILPRICE ? Number(item.COMMODITY_RETAILPRICE) : 0
}
})
parentFormRef.current.setFieldsValue({ COMMODITY_RETAILPRICE: Number(COMMODITY_RETAILPRICESUM.toFixed(2)) })
}
}} }}
/> />
}, },
@ -259,12 +273,23 @@ const SelectSetMealItems = ({ leftTreeData, onRef, comboCommodityDetail }: Detai
placeholder="请输入零售价格" placeholder="请输入零售价格"
onBlur={(e) => { onBlur={(e) => {
const newData = tableData.map((item: any) => { const newData = tableData.map((item: any) => {
if ((item.id && record.id && item.id === record.id) || item.COMMODITY_BARCODE === record.COMMODITY_BARCODE) { if (item.id !== 'addRow' && item.id === record?.id) {
return { ...item, COMMODITY_MEMBERPRICE: e.target.value }; return { ...item, COMMODITY_MEMBERPRICE: e.target.value };
} }
return item; return item;
}); });
setTableData(newData); setTableData(newData);
// 重新算合计
if (parentFormRef) {
let COMMODITY_MEMBERPRICESUM: number = 0
newData.forEach((item: any) => {
if (item.id !== 'addRow') {
COMMODITY_MEMBERPRICESUM += item.COMMODITY_MEMBERPRICE ? Number(item.COMMODITY_MEMBERPRICE) : 0
}
})
parentFormRef.current.setFieldsValue({ COMMODITY_MEMBERPRICE: Number(COMMODITY_MEMBERPRICESUM.toFixed(2)) })
}
}} }}
/> />
}, },
@ -287,12 +312,23 @@ const SelectSetMealItems = ({ leftTreeData, onRef, comboCommodityDetail }: Detai
placeholder="请输入商品成本" placeholder="请输入商品成本"
onBlur={(e) => { onBlur={(e) => {
const newData = tableData.map((item: any) => { const newData = tableData.map((item: any) => {
if ((item.id && record.id && item.id === record.id) || item.COMMODITY_BARCODE === record.COMMODITY_BARCODE) { if (item.id !== 'addRow' && item.id === record?.id) {
return { ...item, COMMODITY_PURCHASEPRICE: e.target.value }; return { ...item, COMMODITY_PURCHASEPRICE: e.target.value };
} }
return item; return item;
}); });
setTableData(newData); setTableData(newData);
// 重新算合计
if (parentFormRef) {
let COMMODITY_PURCHASEPRICESUM: number = 0
newData.forEach((item: any) => {
if (item.id !== 'addRow') {
COMMODITY_PURCHASEPRICESUM += item.COMMODITY_PURCHASEPRICE ? Number(item.COMMODITY_PURCHASEPRICE) : 0
}
})
parentFormRef.current.setFieldsValue({ COMMODITY_PURCHASEPRICE: Number(COMMODITY_PURCHASEPRICESUM.toFixed(2)) })
}
}} }}
/> />
}, },
@ -317,7 +353,7 @@ const SelectSetMealItems = ({ leftTreeData, onRef, comboCommodityDetail }: Detai
placeholder="请输入商品税率" placeholder="请输入商品税率"
onChange={(e) => { onChange={(e) => {
const newData = tableData.map((item: any) => { const newData = tableData.map((item: any) => {
if ((item.id && record.id && item.id === record.id) || item.COMMODITY_BARCODE === record.COMMODITY_BARCODE) { if (item.id !== 'addRow' && item.id === record?.id) {
return { ...item, DUTY_PARAGRAPH: e }; return { ...item, DUTY_PARAGRAPH: e };
} }
return item; return item;
@ -361,7 +397,7 @@ const SelectSetMealItems = ({ leftTreeData, onRef, comboCommodityDetail }: Detai
placeholder="请输入商品税务代码" placeholder="请输入商品税务代码"
onBlur={(e) => { onBlur={(e) => {
const newData = tableData.map((item: any) => { const newData = tableData.map((item: any) => {
if ((item.id && record.id && item.id === record.id) || item.COMMODITY_BARCODE === record.COMMODITY_BARCODE) { if (item.id !== 'addRow' && item.id === record?.id) {
return { ...item, TAX_CODE: e.target.value }; return { ...item, TAX_CODE: e.target.value };
} }
return item; return item;
@ -387,9 +423,26 @@ const SelectSetMealItems = ({ leftTreeData, onRef, comboCommodityDetail }: Detai
<a <a
key="delete" key="delete"
onClick={() => { onClick={() => {
console.log('tableDatatableDatatableData', tableData); console.log('22222', JSON.parse(JSON.stringify(record)));
const newData = tableData.filter((item: any) => item.COMMODITY_BARCODE !== record.COMMODITY_BARCODE && item.id !== 'addRow'); console.log('tableData', JSON.parse(JSON.stringify(tableData)));
console.log('newDatanewDatanewData', newData); const newData = tableData.filter((item: any) => item.id !== record.id && item?.id !== 'addRow');
if (parentFormRef) {
let COMMODITY_RETAILPRICESUM: number = 0
let COMMODITY_MEMBERPRICESUM: number = 0
let COMMODITY_PURCHASEPRICESUM: number = 0
newData.forEach((item: any) => {
if (item.id !== 'addRow') {
COMMODITY_RETAILPRICESUM += item.COMMODITY_RETAILPRICE ? Number(item.COMMODITY_RETAILPRICE) : 0
COMMODITY_MEMBERPRICESUM += item.COMMODITY_MEMBERPRICE ? Number(item.COMMODITY_MEMBERPRICE) : 0
COMMODITY_PURCHASEPRICESUM += item.COMMODITY_PURCHASEPRICE ? Number(item.COMMODITY_PURCHASEPRICE) : 0
}
})
parentFormRef.current.setFieldsValue({ COMMODITY_RETAILPRICE: Number(COMMODITY_RETAILPRICESUM.toFixed(2)), COMMODITY_MEMBERPRICE: Number(COMMODITY_MEMBERPRICESUM.toFixed(2)), COMMODITY_PURCHASEPRICE: Number(COMMODITY_PURCHASEPRICESUM.toFixed(2)) })
}
setTableData([...newData, { setTableData([...newData, {
id: "addRow", id: "addRow",
}]); }]);
@ -405,7 +458,8 @@ const SelectSetMealItems = ({ leftTreeData, onRef, comboCommodityDetail }: Detai
// 暴露表格数据 // 暴露表格数据
useImperativeHandle(onRef, () => ({ useImperativeHandle(onRef, () => ({
tableData, tableData,
setIsClickAdd setIsClickAdd,
isClickAdd
})); }));
return ( return (
<div> <div>

View File

@ -1,29 +1,39 @@
.pageTable-leftnav{ .pageTable-leftnav {
.leftSelectBox{ .leftSelectBox {
position: relative; position: relative;
.searchIcon{
width: 20px; .searchIcon {
height: 20px; width: 20px;
cursor: pointer; height: 20px;
margin-right: 15px; cursor: pointer;
} margin-right: 15px;
.fixedBox{ }
position: absolute;
width: 275px; .refreshIcon {
background: #fff; width: 18px;
right: -10px; height: 18px;
box-shadow: 0 3px 6px -4px rgba(0, 0, 0, 0.12), 0 6px 16px 0 rgba(0, 0, 0, 0.08), 0 9px 28px 8px rgba(0, 0, 0, 0.05); cursor: pointer;
border-radius: 8px; margin-right: 15px;
box-sizing: border-box; }
padding: 12px;
z-index: 2; .fixedBox {
display: flex; position: absolute;
align-items: center; width: 275px;
.noBottom{ background: #fff;
.ant-form-item{ right: -10px;
margin-bottom: 0!important; box-shadow: 0 3px 6px -4px rgba(0, 0, 0, 0.12), 0 6px 16px 0 rgba(0, 0, 0, 0.08), 0 9px 28px 8px rgba(0, 0, 0, 0.05);
} border-radius: 8px;
box-sizing: border-box;
padding: 12px;
z-index: 2;
display: flex;
align-items: center;
.noBottom {
.ant-form-item {
margin-bottom: 0 !important;
} }
} }
} }
} }
}

View File

@ -742,13 +742,35 @@ const COMMODITYTable: React.FC<{ currentUser: CurrentUser | undefined }> = (prop
const handleAddUpdate = async (res: any, type?: string) => { const handleAddUpdate = async (res: any, type?: string) => {
let itemList = setSelectSetMealItemsRef.current.tableData let itemList = setSelectSetMealItemsRef.current.tableData
if (itemList && itemList.length > 0) { let isClickAdd = setSelectSetMealItemsRef.current.isClickAdd
console.log('itemListitemList', itemList);
// 判断一下是不是套餐商品 即itemList 长度为1时 id是否为addRow
let isCombo: boolean = false
if (itemList && itemList.length > 1) {
isCombo = true
} else if (itemList && itemList.length === 1) {
if (itemList[0].id !== 'addRow') {
isCombo = true
}
}
if (isCombo && isClickAdd) {
// 拿到市场价、零售价格、商品成本的 合计值
let COMMODITY_RETAILPRICESUM: number = 0
let COMMODITY_MEMBERPRICESUM: number = 0
let COMMODITY_PURCHASEPRICESUM: number = 0
itemList = itemList.filter((item: any) => item.id !== 'addRow') itemList = itemList.filter((item: any) => item.id !== 'addRow')
// 判断条码 是否都填了 // 判断条码 是否都填了
let isCodeAllOK: boolean = true let isCodeAllOK: boolean = true
itemList.forEach((item: any) => { itemList.forEach((item: any) => {
COMMODITY_RETAILPRICESUM += Number(item.COMMODITY_RETAILPRICE)
COMMODITY_MEMBERPRICESUM += Number(item.COMMODITY_MEMBERPRICE)
COMMODITY_PURCHASEPRICESUM += Number(item.COMMODITY_PURCHASEPRICE)
// 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 = 5000
item.UPPER_STATE = 1 item.UPPER_STATE = 1
item.PROVINCE_CODE = currentUser?.ProvinceCode item.PROVINCE_CODE = currentUser?.ProvinceCode
item.COMMODITY_STATE = 1 item.COMMODITY_STATE = 1
@ -759,12 +781,33 @@ const COMMODITYTable: React.FC<{ currentUser: CurrentUser | undefined }> = (prop
isCodeAllOK = false isCodeAllOK = false
} }
}) })
if (!isCodeAllOK) { if (!isCodeAllOK) {
message.error('请填写完整的套餐内单品信息!'); message.error('请填写完整的套餐内单品信息!');
handleConfirmLoading(false) handleConfirmLoading(false)
return return
} }
if (Number(COMMODITY_RETAILPRICESUM.toFixed(2)) !== Number(res.COMMODITY_RETAILPRICE.toFixed(2))) {
message.error('套餐内单品市场价合计值与套餐市场价不一致');
handleConfirmLoading(false)
return
}
if (Number(COMMODITY_MEMBERPRICESUM.toFixed(2)) !== Number(res.COMMODITY_MEMBERPRICE.toFixed(2))) {
message.error('套餐内单品零售价合计值与套餐零售价不一致');
handleConfirmLoading(false)
return
}
if (Number(COMMODITY_PURCHASEPRICESUM.toFixed(2)) !== Number(res.COMMODITY_PURCHASEPRICE.toFixed(2))) {
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 = {
@ -784,11 +827,18 @@ const COMMODITYTable: React.FC<{ currentUser: CurrentUser | undefined }> = (prop
COMMODITY_TYPE: 4000, COMMODITY_TYPE: 4000,
COMMODITY_STATE: 1, COMMODITY_STATE: 1,
USERDEFINEDTYPE_ID: "", USERDEFINEDTYPE_ID: "",
DATAFORMAT: currentUser?.UserPattern === 4000 ? 1 : res?.DATAFORMAT,
OPERATE_TIME: moment().format('YYYY-MM-DD HH:mm:ss'), OPERATE_TIME: moment().format('YYYY-MM-DD HH:mm:ss'),
UPPER_DATE: res.UPPER_DATE && res.UPPER_DATE.length > 0 ? moment(res.UPPER_DATE[0]).format('YYYY-MM-DD HH:mm:ss') : "", UPPER_DATE: res.UPPER_DATE && res.UPPER_DATE.length > 0 ? moment(res.UPPER_DATE[0]).format('YYYY-MM-DD HH:mm:ss') : "",
OFF_DATE: res.UPPER_DATE && res.UPPER_DATE.length > 0 ? moment(res.UPPER_DATE[1]).format('YYYY-MM-DD HH:mm:ss') : "", OFF_DATE: res.UPPER_DATE && res.UPPER_DATE.length > 0 ? moment(res.UPPER_DATE[1]).format('YYYY-MM-DD HH:mm:ss') : "",
WECHATAPP_APPID: "wxee018fb96955552a", WECHATAPP_APPID: "wxee018fb96955552a",
WECHATAPPSIGN_NAME: "彩云驿出行" WECHATAPPSIGN_NAME: "彩云驿出行",
COMMODITY_EN: res.COMMODITY_EN || "",
COMMODITY_INDEX: res.COMMODITY_INDEX || "",
COMMODITY_POINT: res.COMMODITY_POINT || "",
REMINDER_DAY: res.REMINDER_DAY || "",
LIMIT_TOTALCOUNT: res.LIMIT_TOTALCOUNT || "",
LIMIT_DAILYCOUNT: res.LIMIT_DAILYCOUNT || "",
} }
} else { } else {
req = { req = {
@ -805,20 +855,26 @@ const COMMODITYTable: React.FC<{ currentUser: CurrentUser | undefined }> = (prop
OPERATE_PERSON: currentUser?.Name, OPERATE_PERSON: currentUser?.Name,
SELLER_ID: currentUser?.ID, SELLER_ID: currentUser?.ID,
COMMODITY_TYPE: 4000, COMMODITY_TYPE: 4000,
DATAFORMAT: currentUser?.UserPattern === 4000 ? 1 : res?.DATAFORMAT,
COMMODITY_STATE: 1, COMMODITY_STATE: 1,
USERDEFINEDTYPE_ID: "", USERDEFINEDTYPE_ID: "",
OPERATE_TIME: moment().format('YYYY-MM-DD HH:mm:ss'), OPERATE_TIME: moment().format('YYYY-MM-DD HH:mm:ss'),
UPPER_DATE: res.UPPER_DATE && res.UPPER_DATE.length > 0 ? moment(res.UPPER_DATE[0]).format('YYYY-MM-DD HH:mm:ss') : "", UPPER_DATE: res.UPPER_DATE && res.UPPER_DATE.length > 0 ? moment(res.UPPER_DATE[0]).format('YYYY-MM-DD HH:mm:ss') : "",
OFF_DATE: res.UPPER_DATE && res.UPPER_DATE.length > 0 ? moment(res.UPPER_DATE[1]).format('YYYY-MM-DD HH:mm:ss') : "", OFF_DATE: res.UPPER_DATE && res.UPPER_DATE.length > 0 ? moment(res.UPPER_DATE[1]).format('YYYY-MM-DD HH:mm:ss') : "",
WECHATAPP_APPID: "wxee018fb96955552a", WECHATAPP_APPID: "wxee018fb96955552a",
WECHATAPPSIGN_NAME: "彩云驿出行" WECHATAPPSIGN_NAME: "彩云驿出行",
COMMODITY_EN: res.COMMODITY_EN || "",
COMMODITY_INDEX: res.COMMODITY_INDEX || "",
COMMODITY_POINT: res.COMMODITY_POINT || "",
REMINDER_DAY: res.REMINDER_DAY || "",
LIMIT_TOTALCOUNT: res.LIMIT_TOTALCOUNT || "",
LIMIT_DAILYCOUNT: res.LIMIT_DAILYCOUNT || "",
} }
} }
// 同步商品数据 因为添加了套餐数据 最方便的方法 就是在当前基础上 换接口 所以换入参 // 同步商品数据 因为添加了套餐数据 最方便的方法 就是在当前基础上 换接口 所以换入参
const newReq: any = { const newReq: any = {
commodityModel: req, commodityModel: req,
singleCommodityList: itemList && itemList.length > 0 ? itemList : '' singleCommodityList: isCombo && isClickAdd ? itemList && itemList.length > 0 ? itemList : '' : ''
} }
console.log('newReqnewReq', newReq); console.log('newReqnewReq', newReq);
@ -1087,6 +1143,18 @@ const COMMODITYTable: React.FC<{ currentUser: CurrentUser | undefined }> = (prop
return result; return result;
} }
const addDisabledForParent = (list: any[]): any[] => {
return list.map(item => {
const hasChildren = Array.isArray(item.children) && item.children.length > 0;
return {
...item,
disabled: hasChildren, // ⭐ 只新增这一行
children: hasChildren ? addDisabledForParent(item.children) : item.children,
};
});
};
return ( return (
<div> <div>
<div style={{ backgroundColor: '#fff', display: 'flex' }}> <div style={{ backgroundColor: '#fff', display: 'flex' }}>
@ -1156,6 +1224,11 @@ const COMMODITYTable: React.FC<{ currentUser: CurrentUser | undefined }> = (prop
] ]
res = formatTreeData(JSON.parse(JSON.stringify(data.List)), [], enumList, [COMMODITYNATUREList, PAY_METHODList, UPPER_STATEList, COMMODITY_STATEList], []) res = formatTreeData(JSON.parse(JSON.stringify(data.List)), [], enumList, [COMMODITYNATUREList, PAY_METHODList, UPPER_STATEList, COMMODITY_STATEList], [])
console.log('resresresres', res); console.log('resresresres', res);
let nameList: any = []
res.forEach((item: any) => {
nameList.push(item.COMMODITY_NAME)
})
console.log('nameListnameList', nameList);
setReqDetailList(res) setReqDetailList(res)
return { data: data.List, success: true, total: data.TotalCount } return { data: data.List, success: true, total: data.TotalCount }
} }
@ -1303,6 +1376,7 @@ const COMMODITYTable: React.FC<{ currentUser: CurrentUser | undefined }> = (prop
setDetailImgList([]) setDetailImgList([])
setRelevanceCouponList([]) setRelevanceCouponList([])
setSelectRelevanceId([]) setSelectRelevanceId([])
setComboCommodityDetail([])
// setBRAND_NAMEList([]) // setBRAND_NAMEList([])
}} }}
footer={<div style={{ width: '100%', display: 'flex', alignItems: 'center', justifyContent: 'space-between' }}> footer={<div style={{ width: '100%', display: 'flex', alignItems: 'center', justifyContent: 'space-between' }}>
@ -1457,7 +1531,12 @@ const COMMODITYTable: React.FC<{ currentUser: CurrentUser | undefined }> = (prop
let data: any = res.commodityModel let data: any = res.commodityModel
setCurrentRowDetail(data) setCurrentRowDetail(data)
setComboCommodityDetail(res.singleCommodityList || []) // 处理一下 多个id字段 让商品条码等于id字段 这样就可以有唯一行号了
let list: any = res.singleCommodityList && res.singleCommodityList.length > 0 ? JSON.parse(JSON.stringify(res.singleCommodityList)) : []
list.forEach((item: any) => {
item.id = item.COMMODITY_BARCODE
})
setComboCommodityDetail(list || [])
let mainImgList: any = [] let mainImgList: any = []
let headerImgList: any = [] let headerImgList: any = []
@ -1518,7 +1597,8 @@ const COMMODITYTable: React.FC<{ currentUser: CurrentUser | undefined }> = (prop
} else { } else {
return { return {
OPERATE_PERSON: currentUser?.Name, OPERATE_PERSON: currentUser?.Name,
UPPER_STATE: currentUser?.SupplierID ? 0 : "" UPPER_STATE: currentUser?.SupplierID ? 0 : "",
MERCHANTS_ID: currentUser?.UserPattern === 4000 ? `${currentUser?.SupplierName}-${currentUser?.SupplierID}` : "",
} }
} }
} }
@ -1561,7 +1641,27 @@ const COMMODITYTable: React.FC<{ currentUser: CurrentUser | undefined }> = (prop
<ProFormSelect <ProFormSelect
name="COMMODITY_NATURE" name="COMMODITY_NATURE"
label="商品性质" label="商品性质"
options={COMMODITYNATUREList} // options={COMMODITYNATUREList}
request={async () => {
if (COMMODITYNATUREList && COMMODITYNATUREList.length > 0) {
return COMMODITYNATUREList
} else {
const COMMODITYNATURE = await getFieldEnumTree({ FieldExplainField: 'COMMODITY_NATURE', FieldEnumStatus: true })
if (COMMODITYNATURE && COMMODITYNATURE.length > 0) {
const obj: any = {}
const list: any = []
COMMODITYNATURE.forEach((item: any) => {
list.push({ label: item.label, value: item.value })
obj[item.value] = item.label
})
session.set('COMMODITYNATUREList', list);
session.set('COMMODITYNATUREObj', obj);
session.set('COMMODITYNATURETree', COMMODITYNATURE);
return list
}
return []
}
}}
rules={[ rules={[
{ {
required: true, required: true,
@ -1625,7 +1725,15 @@ const COMMODITYTable: React.FC<{ currentUser: CurrentUser | undefined }> = (prop
name="USERDEFINEDTYPE_ID" name="USERDEFINEDTYPE_ID"
label="商品分类" label="商品分类"
request={async () => { request={async () => {
return leftTreeData if (leftTreeData && leftTreeData.length > 0) {
let list: any = JSON.parse(JSON.stringify(leftTreeData))
list = addDisabledForParent(list)
console.log('listlist', list);
return list
} else {
return []
}
}} }}
fieldProps={{ fieldProps={{
fieldNames: { fieldNames: {
@ -1635,6 +1743,7 @@ const COMMODITYTable: React.FC<{ currentUser: CurrentUser | undefined }> = (prop
showSearch: true, showSearch: true,
multiple: true, // 支持多选 multiple: true, // 支持多选
allowClear: true, // 允许清除和删除 allowClear: true, // 允许清除和删除
treeDefaultExpandAll: true,
filterTreeNode: (input, node) => filterTreeNode: (input, node) =>
(node.USERDEFINEDTYPE_NAME || '').toLowerCase().includes(input.toLowerCase()) (node.USERDEFINEDTYPE_NAME || '').toLowerCase().includes(input.toLowerCase())
}} }}
@ -1701,6 +1810,12 @@ const COMMODITYTable: React.FC<{ currentUser: CurrentUser | undefined }> = (prop
<ProFormText <ProFormText
name="COMMODITY_BARCODE" name="COMMODITY_BARCODE"
label="商品条码" label="商品条码"
rules={[
{
required: true,
message: "请输入商品条码!"
}
]}
/> />
</Col> </Col>
<Col span={6}> <Col span={6}>
@ -1777,7 +1892,27 @@ const COMMODITYTable: React.FC<{ currentUser: CurrentUser | undefined }> = (prop
<ProFormSelect <ProFormSelect
name="PAY_METHOD" name="PAY_METHOD"
label="消费模式" label="消费模式"
options={PAYMETHODList} // options={PAYMETHODList}
request={async () => {
if (PAYMETHODList && PAYMETHODList.length > 0) {
return PAYMETHODList
} else {
const PAYMETHOD = await getFieldEnumTree({ FieldExplainField: 'PAY_METHOD' })
if (PAYMETHOD && PAYMETHOD.length > 0) {
const obj: any = {}
const list: any = []
PAYMETHOD.forEach((item: any) => {
list.push({ label: item.label, value: item.value })
obj[item.value] = item.label
})
session.set('PAYMETHODList', list);
session.set('PAYMETHODObj', obj);
session.set('PAYMETHODTree', PAYMETHOD);
return list
}
return []
}
}}
rules={[ rules={[
{ {
required: true, required: true,
@ -1790,7 +1925,27 @@ const COMMODITYTable: React.FC<{ currentUser: CurrentUser | undefined }> = (prop
<ProFormSelect <ProFormSelect
name="DUTY_PARAGRAPH" name="DUTY_PARAGRAPH"
label="商品税率" label="商品税率"
options={DUTYPARAGRAPHList} // options={DUTYPARAGRAPHList}
request={async () => {
if (DUTYPARAGRAPHList && DUTYPARAGRAPHList.length > 0) {
return DUTYPARAGRAPHList
} else {
const DUTYPARAGRAPH = await getFieldEnumTree({ FieldExplainField: 'DUTY_PARAGRAPH' })
if (DUTYPARAGRAPH && DUTYPARAGRAPH.length > 0) {
const obj: any = {}
const list: any = []
DUTYPARAGRAPH.forEach((item: any) => {
list.push({ label: item.label, value: item.value })
obj[item.value] = item.label
})
session.set('DUTYPARAGRAPHList', list);
session.set('DUTYPARAGRAPHObj', obj);
session.set('DUTYPARAGRAPHTree', DUTYPARAGRAPH);
return list
}
return []
}
}}
rules={[ rules={[
{ {
required: true, required: true,
@ -1857,7 +2012,7 @@ const COMMODITYTable: React.FC<{ currentUser: CurrentUser | undefined }> = (prop
{/* 若是一个套餐商品 那么这里就要有一个录入套餐商品的地方 */} {/* 若是一个套餐商品 那么这里就要有一个录入套餐商品的地方 */}
<Col span={24}> <Col span={24}>
<SelectSetMealItems onRef={setSelectSetMealItemsRef} leftTreeData={leftTreeData} comboCommodityDetail={comboCommodityDetail} /> <SelectSetMealItems onRef={setSelectSetMealItemsRef} leftTreeData={leftTreeData} comboCommodityDetail={comboCommodityDetail} parentFormRef={formRef} />
</Col> </Col>
<Divider orientation="left"></Divider> <Divider orientation="left"></Divider>
@ -1890,7 +2045,7 @@ const COMMODITYTable: React.FC<{ currentUser: CurrentUser | undefined }> = (prop
<Divider orientation="left"></Divider> <Divider orientation="left"></Divider>
<Col span={12}> <Col span={12}>
<ProFormDateRangePicker <ProFormDateRangePicker
width={'lg'} width={'100%'}
name="UPPER_DATE" name="UPPER_DATE"
label="上架时间" label="上架时间"
// rules={[{ // rules={[{
@ -1917,7 +2072,7 @@ const COMMODITYTable: React.FC<{ currentUser: CurrentUser | undefined }> = (prop
label="小程序" label="小程序"
options={[ options={[
{ label: "彩云驿", value: 37 }, { label: "彩云驿", value: 37 },
{ label: "彩云驿商城", value: 38 }, { label: "彩云驿出行", value: 38 },
]} ]}
rules={[ rules={[
{ {
@ -1946,23 +2101,28 @@ const COMMODITYTable: React.FC<{ currentUser: CurrentUser | undefined }> = (prop
disabled={currentUser?.SupplierID || currentUser?.UserPattern === 4000 ? true : false} disabled={currentUser?.SupplierID || currentUser?.UserPattern === 4000 ? true : false}
/> />
</Col> </Col>
<Col span={6}> {
<ProFormSelect currentUser?.UserPattern === 4000 ?
name="DATAFORMAT" '' :
label="数据形式" <Col span={6}>
options={[ <ProFormSelect
{ label: "正式数据", value: 1 }, name="DATAFORMAT"
{ label: "测试数据", value: 0 }, label="数据形式"
{ label: "品诺数据", value: 2 }, options={[
]} { label: "正式数据", value: 1 },
rules={[ { label: "测试数据", value: 0 },
{ { label: "品诺数据", value: 2 },
required: true, ]}
message: "请选择数据形式!" rules={[
} {
]} required: true,
/> message: "请选择数据形式!"
</Col> }
]}
/>
</Col>
}
<Col span={6}> <Col span={6}>
<ProFormText <ProFormText
name="OPERATE_PERSON" name="OPERATE_PERSON"
@ -2014,6 +2174,14 @@ const COMMODITYTable: React.FC<{ currentUser: CurrentUser | undefined }> = (prop
handlePreview(1) handlePreview(1)
}, },
fileList: mainImgList, // 绑定 fileList fileList: mainImgList, // 绑定 fileList
customRequest: ({ file, onSuccess }) => {
// 自定义上传,不实际发送请求
setTimeout(() => {
if (onSuccess) {
onSuccess({});
}
}, 0);
},
onChange: async (info: any) => { onChange: async (info: any) => {
if (info.file.status === 'removed') { if (info.file.status === 'removed') {
const index = mainImgList.findIndex(n => n.uid === info.file.uid); const index = mainImgList.findIndex(n => n.uid === info.file.uid);

View File

@ -349,7 +349,7 @@ const TradingLedger: React.FC<{ currentUser: CurrentUser }> = (props) => {
{ {
title: "商品条码", title: "商品条码",
width: 150, width: 150,
dataIndex: "商品条码", dataIndex: "CommodityBarcode",
}, },
{ {
title: "供货商", title: "供货商",

View File

@ -51,13 +51,6 @@ function resizeToHalfDimensions(
resolve: (file: File) => void, resolve: (file: File) => void,
reject: (error: Error) => void reject: (error: Error) => void
) { ) {
// 判断是否需要压缩:只有当长或宽任意一边大于500px时才压缩
if (img.width <= 500 && img.height <= 500) {
console.log(`图片尺寸 ${img.width}x${img.height} 不大于500px,无需压缩,返回原图`);
resolve(originalFile);
return;
}
const canvas = document.createElement('canvas'); const canvas = document.createElement('canvas');
const ctx = canvas.getContext('2d'); const ctx = canvas.getContext('2d');
@ -91,8 +84,11 @@ function resizeToHalfDimensions(
return; return;
} }
// 保持原始文件名不变,避免服务器端根据文件名做特殊处理 // 创建新的文件名添加_resize_half后缀
const newFileName = originalFile.name; const fileNameParts = originalFile.name.split('.');
const extension = fileNameParts.pop();
const fileNameWithoutExtension = fileNameParts.join('.');
const newFileName = `${fileNameWithoutExtension}_half.${extension}`;
// 创建压缩后的文件对象 // 创建压缩后的文件对象
const resizedFile = new File([blob], newFileName, { const resizedFile = new File([blob], newFileName, {

View File

@ -1,4 +1,4 @@
// 由 scripts/writeVersion.js 自动生成 // 由 scripts/writeVersion.js 自动生成
export const VERSION = "4.5.95"; export const VERSION = "4.5.111";
export const GIT_HASH = "1f17ff8"; export const GIT_HASH = "70a3b9e";
export const BUILD_TIME = "2025-12-22T03:06:07.263Z"; export const BUILD_TIME = "2026-01-08T08:04:25.225Z";