From bb69d7a4bdfbb90cde19b3d828f490ab10f2bb43 Mon Sep 17 00:00:00 2001
From: chen.lin <1442464845@qq.com>
Date: 星期一, 02 二月 2026 15:44:33 +0800
Subject: [PATCH] 库区增加序号

---
 rsf-admin/src/page/basicInfo/basContainer/BasContainerEdit.jsx |   71 +++++++++++++++++++++++++++++++++++
 1 files changed, 70 insertions(+), 1 deletions(-)

diff --git a/rsf-admin/src/page/basicInfo/basContainer/BasContainerEdit.jsx b/rsf-admin/src/page/basicInfo/basContainer/BasContainerEdit.jsx
index b493002..e0d70ae 100644
--- a/rsf-admin/src/page/basicInfo/basContainer/BasContainerEdit.jsx
+++ b/rsf-admin/src/page/basicInfo/basContainer/BasContainerEdit.jsx
@@ -30,6 +30,7 @@
 import MemoInput from "../../components/MemoInput";
 import StatusSelectInput from "../../components/StatusSelectInput";
 import DictionarySelect from "../../components/DictionarySelect";
+import AreasSortInput from "../../components/AreasSortInput";
 
 const FormToolbar = () => {
     const { getValues } = useFormContext();
@@ -51,6 +52,51 @@
             mutationMode={EDIT_MODE}
             actions={<CustomerTopToolBar />}
             aside={<EditBaseAside />}
+            transform={(data) => {
+                // 淇濆瓨鍓嶈浆鎹細灏� areas 浠庣函ID鏁扮粍杞崲涓� [{id, sort}] 鏍煎紡
+                // 浠庨殣钘忓瓧娈� areasSort 鑾峰彇鎺掑簭淇℃伅
+                const areas = data.areas || [];
+                const areasSort = data.areasSort || [];
+                
+                if (areas.length > 0) {
+                    if (typeof areas[0] === 'number') {
+                        // 濡傛灉鏄函ID鏁扮粍锛屼娇鐢� areasSort 涓殑鎺掑簭淇℃伅
+                        if (areasSort.length > 0 && typeof areasSort[0] === 'object') {
+                            // 浣跨敤 areasSort 涓殑鎺掑簭淇℃伅锛屼絾鍙繚鐣� areas 涓瓨鍦ㄧ殑ID
+                            const areaIds = new Set(areas);
+                            const sortedAreas = areasSort
+                                .filter(item => areaIds.has(item.id))
+                                .sort((a, b) => (a.sort || 0) - (b.sort || 0));
+                            
+                            // 濡傛灉 areasSort 涓湁鎵�鏈塈D鐨勬帓搴忎俊鎭紝浣跨敤瀹�
+                            if (sortedAreas.length === areas.length) {
+                                data.areas = sortedAreas;
+                            } else {
+                                // 鍚﹀垯锛屼负缂哄け鐨処D娣诲姞榛樿鎺掑簭
+                                const existingIds = new Set(sortedAreas.map(item => item.id));
+                                const missingIds = areas.filter(id => !existingIds.has(id));
+                                const maxSort = sortedAreas.length > 0 
+                                    ? Math.max(...sortedAreas.map(item => item.sort || 1))
+                                    : 0;
+                                const newItems = missingIds.map((id, index) => ({
+                                    id: id,
+                                    sort: maxSort + index + 1,
+                                }));
+                                data.areas = [...sortedAreas, ...newItems];
+                            }
+                        } else {
+                            // 濡傛灉娌℃湁鎺掑簭淇℃伅锛屼娇鐢ㄩ粯璁ゆ帓搴�
+                            data.areas = areas.map((id, index) => ({
+                                id: id,
+                                sort: index + 1,
+                            }));
+                        }
+                    }
+                    // 鍒犻櫎涓存椂瀛楁
+                    delete data.areasSort;
+                }
+                return data;
+            }}
         >
             <SimpleForm
                 shouldUnregister
@@ -82,7 +128,26 @@
                             />
                         </Stack>
                         <Stack direction='row' gap={2}>
-                            <ReferenceArrayInput source="areas" reference="warehouseAreas">
+                            <ReferenceArrayInput 
+                                source="areas" 
+                                reference="warehouseAreas"
+                                sort={{ field: 'sort', order: 'ASC' }}
+                                format={(value) => {
+                                    // 浠庡悗绔帴鏀舵椂锛氬皢 [{id, sort}] 杞崲涓� [id, id, ...]
+                                    if (!value || !Array.isArray(value)) return [];
+                                    if (value.length === 0) return [];
+                                    // 濡傛灉鏄璞℃暟缁勶紝鎻愬彇id
+                                    if (typeof value[0] === 'object' && value[0] !== null && value[0].id !== undefined) {
+                                        return value.map(item => item.id);
+                                    }
+                                    // 濡傛灉宸茬粡鏄函ID鏁扮粍锛岀洿鎺ヨ繑鍥�
+                                    return value;
+                                }}
+                                parse={(value) => {
+                                    // 淇濆瓨鏃讹細淇濇寔鍘熷�硷紝鐢� AreasSortInput 澶勭悊杞崲
+                                    return value;
+                                }}
+                            >
                                 <SelectArrayInput
                                     label="table.field.basContainer.areas"
                                     optionText="name"
@@ -92,6 +157,10 @@
                                 />
                             </ReferenceArrayInput>
                         </Stack>
+                        {/* 涓嬫柟鏄剧ず宸查�夊簱鍖哄拰鎺掑簭缂栬緫 */}
+                        <AreasSortInput source="areas" />
+                        {/* 闅愯棌瀛楁锛氬瓨鍌ㄦ帓搴忎俊鎭� */}
+                        <TextInput source="areasSort" style={{ display: 'none' }} />
 
                     </Grid>
                     <Grid item xs={12} md={4}>

--
Gitblit v1.9.1