From c49682bb8472a6a665416c06be5970fac09f7b8d Mon Sep 17 00:00:00 2001 From: Lei OT Date: Mon, 28 Jul 2025 09:32:38 +0800 Subject: [PATCH] =?UTF-8?q?perf:=20=E4=BF=9D=E5=AD=98=E4=BA=A7=E5=93=81:?= =?UTF-8?q?=20=E8=BF=94=E5=9B=9E=E6=96=B0=E6=95=B0=E6=8D=AE=E6=98=BE?= =?UTF-8?q?=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/views/products/Detail/ProductInfoForm.jsx | 32 ++++++++++++------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/src/views/products/Detail/ProductInfoForm.jsx b/src/views/products/Detail/ProductInfoForm.jsx index 143762a..d1d460c 100644 --- a/src/views/products/Detail/ProductInfoForm.jsx +++ b/src/views/products/Detail/ProductInfoForm.jsx @@ -36,12 +36,8 @@ const InfoForm = ({ onSubmit, onReset, onValuesChange, editablePerm, infoEditabl const [showSave, setShowSave] = useState(true); useEffect(() => { form.resetFields(); - form.setFieldValue('city', editingProduct?.info?.city_id ? { value: editingProduct?.info?.city_id, label: editingProduct?.info?.city_name } : undefined); - form.setFieldValue('dept', { value: editingProduct?.info?.dept_id, label: editingProduct?.info?.dept_name }); - const lgc_details_mapped = (editingProduct?.lgc_details || []).reduce((r, c) => ({ ...r, [c.lgc]: c }), {}); - form.setFieldValue('lgc_details_mapped', lgc_details_mapped); - form.setFieldValue('quotation', editingProduct?.quotation); - form.setFieldValue('display_to_c', editingProduct.info?.display_to_c || '0'); + + form.setFieldsValue(serverData2Form(editingProduct)); setPickEditedInfo({ ...pickEditedInfo, product_title: editingProduct?.info?.product_title }); setFormEditable(infoEditable || priceEditable); @@ -54,7 +50,7 @@ const InfoForm = ({ onSubmit, onReset, onValuesChange, editablePerm, infoEditabl const onFinish = (values) => { console.log('Received values of form, origin form value: \n', values); - const dest = formValuesMapper(values); + const dest = formValuesMapper2Server(values); console.log('form value send to onSubmit:\n', dest); if (typeof onSubmit === 'function') { onSubmit(null, dest, values); @@ -80,7 +76,7 @@ const InfoForm = ({ onSubmit, onReset, onValuesChange, editablePerm, infoEditabl } }; const onIValuesChange = (changedValues, allValues) => { - const dest = formValuesMapper(allValues); + const dest = formValuesMapper2Server(allValues); // console.log('form onValuesChange', Object.keys(changedValues), changedValues); if ('product_title' in changedValues) { const editTitle = (changedValues.product_title); @@ -339,7 +335,7 @@ function getFields(props) { 'sort_order', 99, - + , fieldProps?.sort_order?.col || midCol ), @@ -407,7 +403,20 @@ function getFields(props) { return children; } -const formValuesMapper = (values) => { +const serverData2Form = (productItem) => { + const infoForRender = { + city: productItem?.info?.city_id ? { value: productItem?.info?.city_id, label: productItem?.info?.city_name } : undefined, + dept: { value: productItem?.info?.dept_id, label: productItem?.info?.dept_name }, + display_to_c: productItem.info?.display_to_c || '0', + city_list: productItem?.info?.city_list ? productItem?.info?.city_list?.map((ele) => ({ value: ele.id, label: ele.name })) : undefined, + sub_type_D: productItem?.info?.item_type || '', + }; + const lgc_details_mapped = (productItem?.lgc_details || []).reduce((r, c) => ({ ...r, [c.lgc]: c }), {}); + const quotation = productItem?.quotation || []; + return { ...productItem, ...(productItem?.info || {}), ...infoForRender, lgc_details_mapped }; +}; + +const formValuesMapper2Server = (values) => { const destinationObject = { 'city': [ { key: 'city_id', transform: (value) => value?.value || value?.key || '' }, @@ -464,13 +473,14 @@ const formValuesMapper = (values) => { ], 'product_title': { key: 'title' }, 'sub_type_D': { key: 'item_type'}, + 'sort_order': { key: 'sort_order'}, }; let dest = {}; const { city, dept, product_title, sub_type_D, ...omittedValue } = values; dest = { ...omittedValue, ...objectMapper(values, destinationObject) }; for (const key in dest) { if (Object.prototype.hasOwnProperty.call(dest, key)) { - dest[key] = typeof dest[key] === 'string' ? (dest[key] || '').trim() : dest[key]; + dest[key] = typeof dest[key] === 'string' ? (dest[key] || '').trim() : (dest[key] ?? ''); } } // omit empty