From 6bd60b7578a319d88dae5a56547eae99f344941d Mon Sep 17 00:00:00 2001 From: Lei OT Date: Mon, 21 Jul 2025 14:49:51 +0800 Subject: [PATCH] =?UTF-8?q?perf:=20=E4=BF=9D=E5=AD=98=E4=BA=A7=E5=93=81:?= =?UTF-8?q?=20=E4=BF=A1=E6=81=AF=E5=8F=98=E6=9B=B4=E5=AD=97=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/views/products/Detail/ProductInfo.jsx | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/src/views/products/Detail/ProductInfo.jsx b/src/views/products/Detail/ProductInfo.jsx index d30d8a3..43f19ab 100644 --- a/src/views/products/Detail/ProductInfo.jsx +++ b/src/views/products/Detail/ProductInfo.jsx @@ -5,7 +5,7 @@ import { useProductsTypesMapVal, useNewProductRecord } from '@/hooks/useProducts import useProductsStore, { postProductsSaveAction } from '@/stores/Products/Index'; import useAuthStore from '@/stores/Auth'; import { PERM_PRODUCTS_MANAGEMENT, PERM_PRODUCTS_OFFER_PUT, PERM_PRODUCTS_INFO_PUT, PERM_PRODUCTS_NEW } from '@/config'; -import { isEmpty, pick } from '@/utils/commons'; +import { isEmpty, objectMapper, pick, unique } from '@/utils/commons'; import ProductInfoForm from './ProductInfoForm'; import { usingStorage } from '@/hooks/usingStorage'; import Extras from './Extras'; @@ -50,13 +50,20 @@ const ProductInfo = ({ ...props }) => { setLgcEdits({}); setInfoEditStatus(''); + setEditKeys([]); return () => {}; }, [activeAgency, editingProduct]); const [infoEditStatus, setInfoEditStatus] = useState(''); const [lgcEdits, setLgcEdits] = useState({}); - const onValuesChange = (changedValues, forms) => { + // const [editChanged, setEditChanged] = useState({}); + const [editKeys, setEditKeys] = useState([]); + + const onValuesChange = (changedValues) => { // console.log('onValuesChange', changedValues); + const changedKeys = objectMapper(changedValues, { 'city': 'city_id', 'dept': 'dept_id', 'product_title': 'title'}); + setEditKeys(prev => unique([...prev, ...Object.keys(changedKeys)])); + // const preValues = pick(editingProduct.info, editKeys); if ('product_title' in changedValues) { setInfoEditStatus('2'); setLgcEdits({...lgcEdits, '2': {'edit_status': '2'}}); @@ -71,6 +78,9 @@ const ProductInfo = ({ ...props }) => { const onSave = async (err, values, forms) => { values.travel_agency_id = activeAgency.travel_agency_id; + const editChanged = pick(editingProduct.info, editKeys); + // console.log("editKeys pre values", editKeys, editChanged); + const copyNewProduct = structuredClone(newProductRecord); const poster = { // ...(topPerm ? { } : { 'audit_state': -1 }), // 高级权限: 不变更状态值 @@ -78,9 +88,10 @@ const ProductInfo = ({ ...props }) => { // "created_by": userId, 'travel_agency_id': activeAgency.travel_agency_id, // "travel_agency_name": "", - // "lastedit_changed": "", - "edit_status": infoEditStatus || editingProduct.info.edit_status, + 'lastedit_changed': editChanged, // isEmpty(editChanged) ? "" : JSON.stringify(editChanged), + 'edit_status': infoEditStatus || editingProduct.info.edit_status, }; + // console.log("ready to post", poster); const copyFields = pick(editingProduct.info, ['product_type_id']); // 'title', const readyToSubInfo = { ...copyNewProduct.info, ...editingProduct.info, title: editingProduct.info.product_title, ...values.info, ...copyFields, ...poster }; // console.log('onSave', editingProduct.info, readyToSubInfo); @@ -95,8 +106,9 @@ const ProductInfo = ({ ...props }) => { } } - // console.log('before save', '\n lgcEdits:', lgcEdits, '\n mergedLgc', mergedLgc); + // console.log('before save', readyToSubInfo, '\n lgcEdits:', lgcEdits, '\n mergedLgc', mergedLgc); // return false; // debug: 0 + // throw new Error("Test save"); /** 提交保存 */ setLoading(true); const { success, result } = await postProductsSaveAction({