From a636c0582a2dbb50fec7cc254da972142d52059d Mon Sep 17 00:00:00 2001 From: chenxt <10125295+chen-xintao97@user.noreply.gitee.com> Date: Fri, 3 Apr 2026 09:56:24 +0800 Subject: [PATCH] 选择颜色分割展示cmyk --- src/components/Common/CommonBill/index.js | 111 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--------------------------- 1 file changed, 84 insertions(+), 27 deletions(-) diff --git a/src/components/Common/CommonBill/index.js b/src/components/Common/CommonBill/index.js index 3d0ca62..8b1cb42 100644 --- a/src/components/Common/CommonBill/index.js +++ b/src/components/Common/CommonBill/index.js @@ -2378,15 +2378,38 @@ const BillComponent = Form.create({ const iIndex = tableData?.findIndex(item => item.sId === sId); if (iIndex > -1) { const sPositiveColor = tableData[iIndex][sFieldName]; - const sPositiveColorList = (sPositiveColor && sPositiveColor !== 'undefined' && sPositiveColor !== 'null') + let sPositiveColorList = (sPositiveColor && sPositiveColor !== 'undefined' && sPositiveColor !== 'null') ? JSON.parse(sPositiveColor) : []; + + // 处理C+M+Y+K拆分为单独选项 + const processedColorList = []; + sPositiveColorList.forEach(item => { + if (item.sName === 'C+M+Y+K') { + // 拆分为C、M、Y、K四个单独选项 + const colors = item.sName.split("+"); + colors.forEach(color => { + processedColorList.push({ + ...item, + sId: `${item.sId}_${color}`, // 生成唯一ID + sName: color, + dColor: 1, // 每个颜色板数为1 + bSelected: item.bSelected || false, + isSplitFromCMYK: true // 标记为从CMYK拆分 + }); + }); + } else { + processedColorList.push(item); + } + }); + + props.onSaveState({ sisColorChooseVisible: true, controlSelectedRowId: sId, /* 控制表选中行sId */ processSelectedRowId: '', /* 工序表选中行sId */ sisColorSelectedRowKeys, - sisColorSelectedData: sPositiveColorList, + sisColorSelectedData: processedColorList, sisColorField: sFieldName, sisTableName: tableName, }); @@ -2784,17 +2807,37 @@ const BillComponent = Form.create({ ); }); + const SisColorChooseComponent = props => { const { sisColorChooseVisible, sisColorField, sisTableName, controlSelectedRowId } = props; const [rightData, setRightData] = useState(props?.sisColorSelectedData?.filter(item => item.bSelected) || []); useEffect(() => { if (props.sisColorSelectedData && props.sisColorSelectedData.length > 0) { - setRightData(props?.sisColorSelectedData?.filter(item => item.bSelected) || []); + // 处理拆分的C、M、Y、K选项的选中状态 + const selectedData = props.sisColorSelectedData.filter(item => { + if (item.isSplitFromCMYK) { + // 对于拆分的CMYK选项,检查原始数据中对应的选中状态 + const originalItem = JSON.parse(props[`${sisTableName}Data`]?.find(row => row.sId === controlSelectedRowId)?.[sisColorField] || '[]').find(orig => orig.sName === 'C+M+Y+K'); + if (originalItem) { + switch (item.sName) { + case 'C': return originalItem.cSelected || false; + case 'M': return originalItem.mSelected || false; + case 'Y': return originalItem.ySelected || false; + case 'K': return originalItem.kSelected || false; + default: return false; + } + } + return false; + } else { + return item.bSelected || false; + } + }); + setRightData(selectedData); } else { setRightData([]); } - }, [props.sisColorSelectedData, props.sisColorChooseVisible]) + }, [props.sisColorSelectedData, props.sisColorChooseVisible, sisTableName, controlSelectedRowId, sisColorField, props]) if (!sisColorChooseVisible) return ""; const handleClose = () => { @@ -2815,36 +2858,50 @@ const SisColorChooseComponent = props => { }); return } - const colorList = JSON.parse(tableData[iIndex][sisColorField]).map(item => { - const i = rightData.findIndex(rightItem => rightItem.sId === item.sId); - let newItem = { - ...item - } - if (i > -1) { - newItem = { - ...newItem, - bSelected: true - } + + // 处理颜色数据,将拆分的C、M、Y、K合并回原来的C+M+Y+K格式,保持原始顺序 + const originalColorList = JSON.parse(tableData[iIndex][sisColorField]); + const colorList = []; + + // 按照原始顺序处理颜色 + originalColorList.forEach(item => { + if (item.sName === 'C+M+Y+K') { + // 处理CMYK颜色 + // 检查C、M、Y、K是否被选中 + const cSelected = rightData.some(item => item.sName === 'C' && item.isSplitFromCMYK); + const mSelected = rightData.some(item => item.sName === 'M' && item.isSplitFromCMYK); + const ySelected = rightData.some(item => item.sName === 'Y' && item.isSplitFromCMYK); + const kSelected = rightData.some(item => item.sName === 'K' && item.isSplitFromCMYK); + + // 计算选中的CMYK颜色数量 + const selectedCount = [cSelected, mSelected, ySelected, kSelected].filter(Boolean).length; + + // 添加C+M+Y+K项,bSelected为true当且仅当至少有一个颜色被选中 + colorList.push({ + ...item, + bSelected: selectedCount > 0, + // 保存选中的CMYK颜色状态 + cSelected, + mSelected, + ySelected, + kSelected + }); } else { - newItem = { - ...newItem, - bSelected: false - } + // 处理非CMYK的颜色 + const i = rightData.findIndex(rightItem => rightItem.sId === item.sId); + colorList.push({ + ...item, + bSelected: i > -1 + }); } - return newItem }); + tableData[iIndex] = { ...tableData[iIndex], [sisColorField]: JSON.stringify(colorList), } - const { sPositiveColor, sOppositeColor } = tableData[iIndex] - const sPositiveColorList = (sPositiveColor && sPositiveColor !== 'undefined' && sPositiveColor !== 'null') - ? JSON.parse(sPositiveColor).filter(item => item.bSelected) - : []; - const sOppositeColorList = (sOppositeColor && sOppositeColor !== 'undefined' && sOppositeColor !== 'null') - ? JSON.parse(sOppositeColor).filter(item => item.bSelected) - : []; - const allTotalDColor = sPositiveColorList.reduce((total, item) => total + item.dColor, 0) + sOppositeColorList.reduce((total, item) => total + item.dColor, 0); + // 直接从右边表格计算allTotalDColor + const allTotalDColor = rightData.reduce((total, item) => total + item.dColor, 0); tableData[iIndex] = { ...tableData[iIndex], iOutsideQty: allTotalDColor, -- libgit2 0.22.2