Commit 284c1916731cee8dfde513dc339e46f62eed6b45
Merge branch '云南五彩' of http://git.xlyprint.cn/xlyErp/xlyUmi into 云南五彩
Showing
1 changed file
with
84 additions
and
27 deletions
src/components/Common/CommonBill/index.js
| ... | ... | @@ -2378,15 +2378,38 @@ const BillComponent = Form.create({ |
| 2378 | 2378 | const iIndex = tableData?.findIndex(item => item.sId === sId); |
| 2379 | 2379 | if (iIndex > -1) { |
| 2380 | 2380 | const sPositiveColor = tableData[iIndex][sFieldName]; |
| 2381 | - const sPositiveColorList = (sPositiveColor && sPositiveColor !== 'undefined' && sPositiveColor !== 'null') | |
| 2381 | + let sPositiveColorList = (sPositiveColor && sPositiveColor !== 'undefined' && sPositiveColor !== 'null') | |
| 2382 | 2382 | ? JSON.parse(sPositiveColor) |
| 2383 | 2383 | : []; |
| 2384 | + | |
| 2385 | + // 处理C+M+Y+K拆分为单独选项 | |
| 2386 | + const processedColorList = []; | |
| 2387 | + sPositiveColorList.forEach(item => { | |
| 2388 | + if (item.sName === 'C+M+Y+K') { | |
| 2389 | + // 拆分为C、M、Y、K四个单独选项 | |
| 2390 | + const colors = item.sName.split("+"); | |
| 2391 | + colors.forEach(color => { | |
| 2392 | + processedColorList.push({ | |
| 2393 | + ...item, | |
| 2394 | + sId: `${item.sId}_${color}`, // 生成唯一ID | |
| 2395 | + sName: color, | |
| 2396 | + dColor: 1, // 每个颜色板数为1 | |
| 2397 | + bSelected: item.bSelected || false, | |
| 2398 | + isSplitFromCMYK: true // 标记为从CMYK拆分 | |
| 2399 | + }); | |
| 2400 | + }); | |
| 2401 | + } else { | |
| 2402 | + processedColorList.push(item); | |
| 2403 | + } | |
| 2404 | + }); | |
| 2405 | + | |
| 2406 | + | |
| 2384 | 2407 | props.onSaveState({ |
| 2385 | 2408 | sisColorChooseVisible: true, |
| 2386 | 2409 | controlSelectedRowId: sId, /* 控制表选中行sId */ |
| 2387 | 2410 | processSelectedRowId: '', /* 工序表选中行sId */ |
| 2388 | 2411 | sisColorSelectedRowKeys, |
| 2389 | - sisColorSelectedData: sPositiveColorList, | |
| 2412 | + sisColorSelectedData: processedColorList, | |
| 2390 | 2413 | sisColorField: sFieldName, |
| 2391 | 2414 | sisTableName: tableName, |
| 2392 | 2415 | }); |
| ... | ... | @@ -2784,17 +2807,37 @@ const BillComponent = Form.create({ |
| 2784 | 2807 | </Form> |
| 2785 | 2808 | ); |
| 2786 | 2809 | }); |
| 2810 | + | |
| 2787 | 2811 | const SisColorChooseComponent = props => { |
| 2788 | 2812 | const { sisColorChooseVisible, sisColorField, sisTableName, controlSelectedRowId } = props; |
| 2789 | 2813 | |
| 2790 | 2814 | const [rightData, setRightData] = useState(props?.sisColorSelectedData?.filter(item => item.bSelected) || []); |
| 2791 | 2815 | useEffect(() => { |
| 2792 | 2816 | if (props.sisColorSelectedData && props.sisColorSelectedData.length > 0) { |
| 2793 | - setRightData(props?.sisColorSelectedData?.filter(item => item.bSelected) || []); | |
| 2817 | + // 处理拆分的C、M、Y、K选项的选中状态 | |
| 2818 | + const selectedData = props.sisColorSelectedData.filter(item => { | |
| 2819 | + if (item.isSplitFromCMYK) { | |
| 2820 | + // 对于拆分的CMYK选项,检查原始数据中对应的选中状态 | |
| 2821 | + const originalItem = JSON.parse(props[`${sisTableName}Data`]?.find(row => row.sId === controlSelectedRowId)?.[sisColorField] || '[]').find(orig => orig.sName === 'C+M+Y+K'); | |
| 2822 | + if (originalItem) { | |
| 2823 | + switch (item.sName) { | |
| 2824 | + case 'C': return originalItem.cSelected || false; | |
| 2825 | + case 'M': return originalItem.mSelected || false; | |
| 2826 | + case 'Y': return originalItem.ySelected || false; | |
| 2827 | + case 'K': return originalItem.kSelected || false; | |
| 2828 | + default: return false; | |
| 2829 | + } | |
| 2830 | + } | |
| 2831 | + return false; | |
| 2832 | + } else { | |
| 2833 | + return item.bSelected || false; | |
| 2834 | + } | |
| 2835 | + }); | |
| 2836 | + setRightData(selectedData); | |
| 2794 | 2837 | } else { |
| 2795 | 2838 | setRightData([]); |
| 2796 | 2839 | } |
| 2797 | - }, [props.sisColorSelectedData, props.sisColorChooseVisible]) | |
| 2840 | + }, [props.sisColorSelectedData, props.sisColorChooseVisible, sisTableName, controlSelectedRowId, sisColorField, props]) | |
| 2798 | 2841 | if (!sisColorChooseVisible) return ""; |
| 2799 | 2842 | |
| 2800 | 2843 | const handleClose = () => { |
| ... | ... | @@ -2815,36 +2858,50 @@ const SisColorChooseComponent = props => { |
| 2815 | 2858 | }); |
| 2816 | 2859 | return |
| 2817 | 2860 | } |
| 2818 | - const colorList = JSON.parse(tableData[iIndex][sisColorField]).map(item => { | |
| 2819 | - const i = rightData.findIndex(rightItem => rightItem.sId === item.sId); | |
| 2820 | - let newItem = { | |
| 2821 | - ...item | |
| 2822 | - } | |
| 2823 | - if (i > -1) { | |
| 2824 | - newItem = { | |
| 2825 | - ...newItem, | |
| 2826 | - bSelected: true | |
| 2827 | - } | |
| 2861 | + | |
| 2862 | + // 处理颜色数据,将拆分的C、M、Y、K合并回原来的C+M+Y+K格式,保持原始顺序 | |
| 2863 | + const originalColorList = JSON.parse(tableData[iIndex][sisColorField]); | |
| 2864 | + const colorList = []; | |
| 2865 | + | |
| 2866 | + // 按照原始顺序处理颜色 | |
| 2867 | + originalColorList.forEach(item => { | |
| 2868 | + if (item.sName === 'C+M+Y+K') { | |
| 2869 | + // 处理CMYK颜色 | |
| 2870 | + // 检查C、M、Y、K是否被选中 | |
| 2871 | + const cSelected = rightData.some(item => item.sName === 'C' && item.isSplitFromCMYK); | |
| 2872 | + const mSelected = rightData.some(item => item.sName === 'M' && item.isSplitFromCMYK); | |
| 2873 | + const ySelected = rightData.some(item => item.sName === 'Y' && item.isSplitFromCMYK); | |
| 2874 | + const kSelected = rightData.some(item => item.sName === 'K' && item.isSplitFromCMYK); | |
| 2875 | + | |
| 2876 | + // 计算选中的CMYK颜色数量 | |
| 2877 | + const selectedCount = [cSelected, mSelected, ySelected, kSelected].filter(Boolean).length; | |
| 2878 | + | |
| 2879 | + // 添加C+M+Y+K项,bSelected为true当且仅当至少有一个颜色被选中 | |
| 2880 | + colorList.push({ | |
| 2881 | + ...item, | |
| 2882 | + bSelected: selectedCount > 0, | |
| 2883 | + // 保存选中的CMYK颜色状态 | |
| 2884 | + cSelected, | |
| 2885 | + mSelected, | |
| 2886 | + ySelected, | |
| 2887 | + kSelected | |
| 2888 | + }); | |
| 2828 | 2889 | } else { |
| 2829 | - newItem = { | |
| 2830 | - ...newItem, | |
| 2831 | - bSelected: false | |
| 2832 | - } | |
| 2890 | + // 处理非CMYK的颜色 | |
| 2891 | + const i = rightData.findIndex(rightItem => rightItem.sId === item.sId); | |
| 2892 | + colorList.push({ | |
| 2893 | + ...item, | |
| 2894 | + bSelected: i > -1 | |
| 2895 | + }); | |
| 2833 | 2896 | } |
| 2834 | - return newItem | |
| 2835 | 2897 | }); |
| 2898 | + | |
| 2836 | 2899 | tableData[iIndex] = { |
| 2837 | 2900 | ...tableData[iIndex], |
| 2838 | 2901 | [sisColorField]: JSON.stringify(colorList), |
| 2839 | 2902 | } |
| 2840 | - const { sPositiveColor, sOppositeColor } = tableData[iIndex] | |
| 2841 | - const sPositiveColorList = (sPositiveColor && sPositiveColor !== 'undefined' && sPositiveColor !== 'null') | |
| 2842 | - ? JSON.parse(sPositiveColor).filter(item => item.bSelected) | |
| 2843 | - : []; | |
| 2844 | - const sOppositeColorList = (sOppositeColor && sOppositeColor !== 'undefined' && sOppositeColor !== 'null') | |
| 2845 | - ? JSON.parse(sOppositeColor).filter(item => item.bSelected) | |
| 2846 | - : []; | |
| 2847 | - const allTotalDColor = sPositiveColorList.reduce((total, item) => total + item.dColor, 0) + sOppositeColorList.reduce((total, item) => total + item.dColor, 0); | |
| 2903 | + // 直接从右边表格计算allTotalDColor | |
| 2904 | + const allTotalDColor = rightData.reduce((total, item) => total + item.dColor, 0); | |
| 2848 | 2905 | tableData[iIndex] = { |
| 2849 | 2906 | ...tableData[iIndex], |
| 2850 | 2907 | iOutsideQty: allTotalDColor, | ... | ... |