panhui 5 роки тому
батько
коміт
46233acc04

+ 14 - 15
components/ListComponentParent.js

@@ -4,7 +4,7 @@
 import * as React from "react";
 import * as React from "react";
 import { Divider, List, Layout } from "@ui-kitten/components";
 import { Divider, List, Layout } from "@ui-kitten/components";
 import { useFocusEffect } from "@react-navigation/native";
 import { useFocusEffect } from "@react-navigation/native";
-import { useModel } from "flooks";
+// import { useModel } from "flooks";
 import { useBoolean, useCreation } from "@umijs/hooks";
 import { useBoolean, useCreation } from "@umijs/hooks";
 import EmptyComponent from "./EmptyComponent";
 import EmptyComponent from "./EmptyComponent";
 
 
@@ -24,7 +24,6 @@ export default function ListComponent(props) {
     showList,
     showList,
     extraData,
     extraData,
     initialNumToRender,
     initialNumToRender,
-    list$,
   } = props;
   } = props;
 
 
   function getList() {
   function getList() {
@@ -59,18 +58,18 @@ export default function ListComponent(props) {
 
 
   const showdataList = useCreation(() => {
   const showdataList = useCreation(() => {
     const returnList = [];
     const returnList = [];
-    console.log(dataList);
-    dataList.forEach(value => {
-      returnList.push(value);
-      if (value.children.length > 0) {
-        returnList.push(
-          value.children.map((item, index) => {
-            return { ...item, childIndex: index };
-          })
-        );
-      }
-    });
-
+    if (!refreshing.state) {
+      dataList.forEach(value => {
+        returnList.push(value);
+        if (value.children.length > 0) {
+          returnList.push(
+            value.children.map((item, index) => {
+              return { ...item, childIndex: index };
+            })
+          );
+        }
+      });
+    }
     return [
     return [
       ...returnList.flat().map(item => {
       ...returnList.flat().map(item => {
         if (item.amount != null) {
         if (item.amount != null) {
@@ -79,7 +78,7 @@ export default function ListComponent(props) {
         return item;
         return item;
       }),
       }),
     ];
     ];
-  }, [dataList]);
+  }, [dataList, refreshing.state]);
 
 
   const changePorps = React.useMemo(() => {
   const changePorps = React.useMemo(() => {
     let _props = { renderItem: () => <Layout /> };
     let _props = { renderItem: () => <Layout /> };

+ 32 - 11
models/goodsModel.js

@@ -108,20 +108,17 @@ export default {
     // 获取商品分类
     // 获取商品分类
     getGoodsClassParent(goodsId) {
     getGoodsClassParent(goodsId) {
       const { editGoodsMap } = model();
       const { editGoodsMap } = model();
-      if (goodsId && editGoodsMap.get(goodsId)) {
-        const list = editGoodsMap.get(goodsId);
+      if (goodsId && editGoodsMap.has(goodsId)) {
+        const list = editGoodsMap.get(goodsId).filter(item => {
+          return !item.parent;
+        });
         const dataMap = new Map();
         const dataMap = new Map();
         list.forEach(item => {
         list.forEach(item => {
           dataMap.set(item.id, item);
           dataMap.set(item.id, item);
         });
         });
+        console.log(dataMap);
         return Promise.resolve(dataMap);
         return Promise.resolve(dataMap);
-      } else if (goodsId === "NEW") {
-        editGoodsMap.set(goodsId, []);
-        setState({
-          editGoodsMap,
-        });
-        return Promise.resolve(new Map());
-      } else {
+      } else if (goodsId !== "NEW") {
         const { httpGet } = model("httpModel");
         const { httpGet } = model("httpModel");
         return httpGet(
         return httpGet(
           "/goodsSpecification/parent",
           "/goodsSpecification/parent",
@@ -136,19 +133,43 @@ export default {
           });
           });
           return Promise.resolve(dataMap);
           return Promise.resolve(dataMap);
         });
         });
+      } else {
+        return Promise.resolve(new Map());
       }
       }
     },
     },
     // 添加修改的分类
     // 添加修改的分类
     setGoodsClassMap(key, map) {
     setGoodsClassMap(key, map) {
+      console.log(map);
       let list = [];
       let list = [];
       Array.from(map.values()).forEach(item => {
       Array.from(map.values()).forEach(item => {
-        list.push(item);
-        if (item.children.length > 0) {
+        if (item.name) {
+          list.push(item);
+          item.children = item.children.filter(child => {
+            return child.name && child.amount && !item.isNew;
+          });
+          item.children = item.children.map(child => {
+            return {
+              ...child,
+              edit: false,
+            };
+          });
           list.push(item.children);
           list.push(item.children);
         }
         }
       });
       });
 
 
       list = list.flat();
       list = list.flat();
+      list = list.filter(item => {
+        return (
+          item.name && (!item.parent || item.amount.toString()) && !item.isNew
+        );
+      });
+
+      list = list.map(item => {
+        return {
+          ...item,
+          edit: false,
+        };
+      });
       const { editGoodsMap } = model();
       const { editGoodsMap } = model();
       editGoodsMap.set(key, list);
       editGoodsMap.set(key, list);
       setState({ editGoodsMap });
       setState({ editGoodsMap });

+ 10 - 5
screens/Goods/GoodsSpecificationScreenNew.js

@@ -74,7 +74,7 @@ export default function GoodsSpecificationScreen() {
   const theme = useTheme();
   const theme = useTheme();
   const { changeBackground } = useModel("barModel", true);
   const { changeBackground } = useModel("barModel", true);
   // const { mid } = useModel("userModel");
   // const { mid } = useModel("userModel");
-  const { httpGet, httpPost } = useModel("httpModel", true);
+  const {  httpPost } = useModel("httpModel", true);
   const { showDialog } = useModel("dialogModel");
   const { showDialog } = useModel("dialogModel");
   const [goodsId, setGoodsId] = React.useState(0);
   const [goodsId, setGoodsId] = React.useState(0);
   const list$ = useEventEmitter();
   const list$ = useEventEmitter();
@@ -89,9 +89,12 @@ export default function GoodsSpecificationScreen() {
     "wordsModel"
     "wordsModel"
   );
   );
 
 
-  const { addClassGoods, getGoodsClassParent, setGoodsClassMap } = useModel(
-    "goodsModel"
-  );
+  const {
+    addClassGoods,
+    getGoodsClassParent,
+    setGoodsClassMap,
+    editGoodsMap,
+  } = useModel("goodsModel");
   useFocusEffect(
   useFocusEffect(
     React.useCallback(() => {
     React.useCallback(() => {
       changeBackground(theme["color-primary-500"]);
       changeBackground(theme["color-primary-500"]);
@@ -100,6 +103,9 @@ export default function GoodsSpecificationScreen() {
 
 
   useUnmount(() => {
   useUnmount(() => {
     setGoodsClassMap(goodsId, dataMap);
     setGoodsClassMap(goodsId, dataMap);
+    dataMapAction.reset();
+    editMapAction.reset();
+    console.log(editGoodsMap);
   });
   });
 
 
   const route = useRoute();
   const route = useRoute();
@@ -109,7 +115,6 @@ export default function GoodsSpecificationScreen() {
     const { goodsId } = params || {};
     const { goodsId } = params || {};
     setGoodsId(goodsId || "NEW");
     setGoodsId(goodsId || "NEW");
     return getGoodsClassParent(goodsId || "NEW").then(res => {
     return getGoodsClassParent(goodsId || "NEW").then(res => {
-      console.log(res);
       dataMapAction.setAll(res);
       dataMapAction.setAll(res);
       return Promise.resolve();
       return Promise.resolve();
     });
     });

+ 35 - 33
screens/Guide1Screen.js

@@ -7,7 +7,7 @@ import { StyleSheet } from "react-native";
 import { Layout, Text, useTheme, Button, Card } from "@ui-kitten/components";
 import { Layout, Text, useTheme, Button, Card } from "@ui-kitten/components";
 import { useModel } from "flooks";
 import { useModel } from "flooks";
 import { useFocusEffect, useRoute } from "@react-navigation/native";
 import { useFocusEffect, useRoute } from "@react-navigation/native";
-import { useCreation, useUnmount } from "@umijs/hooks";
+import { useCreation, useUnmount, useMount } from "@umijs/hooks";
 import moment from "moment";
 import moment from "moment";
 import Textarea from "react-native-textarea";
 import Textarea from "react-native-textarea";
 import ScrollPage from "../components/ScrollPage";
 import ScrollPage from "../components/ScrollPage";
@@ -76,13 +76,14 @@ export default function Guide1Screen({ navigation }) {
   const theme = useTheme();
   const theme = useTheme();
   const { changeBackground } = useModel("barModel");
   const { changeBackground } = useModel("barModel");
   const { httpGet, httpPost } = useModel("httpModel", true);
   const { httpGet, httpPost } = useModel("httpModel", true);
-  const { success, loading } = useModel("loadingModel", true);
+  const { success, loading, clearLoading } = useModel("loadingModel", true);
   const { mid, changeGuideStep } = useModel("userModel", true);
   const { mid, changeGuideStep } = useModel("userModel", true);
   const {
   const {
     addClassification,
     addClassification,
     editGoodsMap,
     editGoodsMap,
     saveClassByList,
     saveClassByList,
     removeGoodsClassMap,
     removeGoodsClassMap,
+    sortClassification,
   } = useModel("goodsModel");
   } = useModel("goodsModel");
 
 
   const {
   const {
@@ -110,7 +111,7 @@ export default function Guide1Screen({ navigation }) {
   const route = useRoute();
   const route = useRoute();
   const [routeName, setRouteName] = React.useState("");
   const [routeName, setRouteName] = React.useState("");
 
 
-  const [id, changeId] = React.useState("");
+  const [id, changeId] = React.useState("NEW");
 
 
   const [name, changeName] = React.useState("");
   const [name, changeName] = React.useState("");
   const [amount, changeAmount] = React.useState("");
   const [amount, changeAmount] = React.useState("");
@@ -132,11 +133,6 @@ export default function Guide1Screen({ navigation }) {
     });
     });
   }, [goodsSpecification]);
   }, [goodsSpecification]);
 
 
-  useUnmount(() => {
-	removeGoodsClassMap();
-	console.log('离开')
-  });
-
   function getInfo(res) {
   function getInfo(res) {
     changeName(res.name || "");
     changeName(res.name || "");
     if (res.discountAmount) {
     if (res.discountAmount) {
@@ -166,31 +162,37 @@ export default function Guide1Screen({ navigation }) {
       ]);
       ]);
     }
     }
   }
   }
-  useFocusEffect(
-    React.useCallback(() => {
-      changeBackground(theme["color-primary-500"]);
-      const { params, name } = route;
-	  setRouteName(name);
-      if (params) {
-        if (params.id) {
-          changeId(params.id);
-          loading();
-          httpGet(`/goods/get/${params.id}`).then(res => {
-            getInfo(res);
 
 
-            if (editGoodsMap.has(params.id)) {
-              changeGoodsSpecification(editGoodsMap.get(params.id));
-            } else {
-              changeGoodsSpecification(res.specifications);
-            }
+  useMount(() => {
+    const { params, name } = route;
+    setRouteName(name);
+    if (params) {
+      if (params.id) {
+        changeId(params.id);
+        loading();
+        httpGet(`/goods/get/${params.id}`, {}, true)
+          .then(res => {
+            getInfo(res);
+            changeGoodsSpecification(sortClassification(res.specifications));
+          })
+          .finally(() => {
+            clearLoading();
           });
           });
-        }
-      } else {
-        getInfo({});
-        if (editGoodsMap.has("NEW")) {
-          changeGoodsSpecification(editGoodsMap.get("NEW"));
-        }
       }
       }
+    }
+  });
+  useUnmount(() => {
+    removeGoodsClassMap();
+  });
+
+  React.useEffect(() => {
+    if (editGoodsMap.has(id)) {
+      changeGoodsSpecification(editGoodsMap.get(id));
+    }
+  }, [editGoodsMap.get(id)]);
+  useFocusEffect(
+    React.useCallback(() => {
+      changeBackground(theme["color-primary-500"]);
     }, [])
     }, [])
   );
   );
 
 
@@ -362,7 +364,7 @@ export default function Guide1Screen({ navigation }) {
                     true
                     true
                   )
                   )
                     .then(res => {
                     .then(res => {
-                      if (!id) {
+                      if (id === "NEW") {
                         const { params } = route;
                         const { params } = route;
                         const { classifyId } = params || {};
                         const { classifyId } = params || {};
                         if (classifyId) {
                         if (classifyId) {
@@ -373,7 +375,7 @@ export default function Guide1Screen({ navigation }) {
                       return saveClassByList(postByList, res.id);
                       return saveClassByList(postByList, res.id);
                     })
                     })
                     .then(() => {
                     .then(() => {
-                      success(`${id ? "修改" : "添加"}成功`);
+                      success(`${id !== "NEW" ? "修改" : "添加"}成功`);
                       if (routeName !== "AddGoods") {
                       if (routeName !== "AddGoods") {
                         changeGuideStep("2");
                         changeGuideStep("2");
                       } else {
                       } else {
@@ -384,7 +386,7 @@ export default function Guide1Screen({ navigation }) {
               >
               >
                 {routeName !== "AddGoods" ? next : confirm}
                 {routeName !== "AddGoods" ? next : confirm}
               </Button>
               </Button>
-              {routeName === "AddGoods" && !!id && (
+              {routeName === "AddGoods" && id !== "NEW" && (
                 <Button
                 <Button
                   appearance="ghost"
                   appearance="ghost"
                   status="info"
                   status="info"