Commit 284c1916731cee8dfde513dc339e46f62eed6b45

Authored by Min
2 parents 3ad2d266 a636c058

Merge branch '云南五彩' of http://git.xlyprint.cn/xlyErp/xlyUmi into 云南五彩

src/components/Common/CommonBill/index.js
@@ -2378,15 +2378,38 @@ const BillComponent = Form.create({ @@ -2378,15 +2378,38 @@ const BillComponent = Form.create({
2378 const iIndex = tableData?.findIndex(item => item.sId === sId); 2378 const iIndex = tableData?.findIndex(item => item.sId === sId);
2379 if (iIndex > -1) { 2379 if (iIndex > -1) {
2380 const sPositiveColor = tableData[iIndex][sFieldName]; 2380 const sPositiveColor = tableData[iIndex][sFieldName];
2381 - const sPositiveColorList = (sPositiveColor && sPositiveColor !== 'undefined' && sPositiveColor !== 'null') 2381 + let sPositiveColorList = (sPositiveColor && sPositiveColor !== 'undefined' && sPositiveColor !== 'null')
2382 ? JSON.parse(sPositiveColor) 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 props.onSaveState({ 2407 props.onSaveState({
2385 sisColorChooseVisible: true, 2408 sisColorChooseVisible: true,
2386 controlSelectedRowId: sId, /* 控制表选中行sId */ 2409 controlSelectedRowId: sId, /* 控制表选中行sId */
2387 processSelectedRowId: '', /* 工序表选中行sId */ 2410 processSelectedRowId: '', /* 工序表选中行sId */
2388 sisColorSelectedRowKeys, 2411 sisColorSelectedRowKeys,
2389 - sisColorSelectedData: sPositiveColorList, 2412 + sisColorSelectedData: processedColorList,
2390 sisColorField: sFieldName, 2413 sisColorField: sFieldName,
2391 sisTableName: tableName, 2414 sisTableName: tableName,
2392 }); 2415 });
@@ -2784,17 +2807,37 @@ const BillComponent = Form.create({ @@ -2784,17 +2807,37 @@ const BillComponent = Form.create({
2784 </Form> 2807 </Form>
2785 ); 2808 );
2786 }); 2809 });
  2810 +
2787 const SisColorChooseComponent = props => { 2811 const SisColorChooseComponent = props => {
2788 const { sisColorChooseVisible, sisColorField, sisTableName, controlSelectedRowId } = props; 2812 const { sisColorChooseVisible, sisColorField, sisTableName, controlSelectedRowId } = props;
2789 2813
2790 const [rightData, setRightData] = useState(props?.sisColorSelectedData?.filter(item => item.bSelected) || []); 2814 const [rightData, setRightData] = useState(props?.sisColorSelectedData?.filter(item => item.bSelected) || []);
2791 useEffect(() => { 2815 useEffect(() => {
2792 if (props.sisColorSelectedData && props.sisColorSelectedData.length > 0) { 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 } else { 2837 } else {
2795 setRightData([]); 2838 setRightData([]);
2796 } 2839 }
2797 - }, [props.sisColorSelectedData, props.sisColorChooseVisible]) 2840 + }, [props.sisColorSelectedData, props.sisColorChooseVisible, sisTableName, controlSelectedRowId, sisColorField, props])
2798 if (!sisColorChooseVisible) return ""; 2841 if (!sisColorChooseVisible) return "";
2799 2842
2800 const handleClose = () => { 2843 const handleClose = () => {
@@ -2815,36 +2858,50 @@ const SisColorChooseComponent = props =&gt; { @@ -2815,36 +2858,50 @@ const SisColorChooseComponent = props =&gt; {
2815 }); 2858 });
2816 return 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 } else { 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 tableData[iIndex] = { 2899 tableData[iIndex] = {
2837 ...tableData[iIndex], 2900 ...tableData[iIndex],
2838 [sisColorField]: JSON.stringify(colorList), 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 tableData[iIndex] = { 2905 tableData[iIndex] = {
2849 ...tableData[iIndex], 2906 ...tableData[iIndex],
2850 iOutsideQty: allTotalDColor, 2907 iOutsideQty: allTotalDColor,