panhui 5 лет назад
Родитель
Сommit
83dfa98b69

+ 9 - 0
.idea/Dingdong.iml

@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module type="JAVA_MODULE" version="4">
+  <component name="NewModuleRootManager" inherit-compiler-output="true">
+    <exclude-output />
+    <content url="file://$MODULE_DIR$" />
+    <orderEntry type="inheritedJdk" />
+    <orderEntry type="sourceFolder" forTests="false" />
+  </component>
+</module>

+ 6 - 0
.idea/misc.xml

@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="JavaScriptSettings">
+    <option name="languageLevel" value="JSX" />
+  </component>
+</project>

+ 8 - 0
.idea/modules.xml

@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="ProjectModuleManager">
+    <modules>
+      <module fileurl="file://$PROJECT_DIR$/.idea/Dingdong.iml" filepath="$PROJECT_DIR$/.idea/Dingdong.iml" />
+    </modules>
+  </component>
+</project>

+ 6 - 0
.idea/vcs.xml

@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="VcsDirectoryMappings">
+    <mapping directory="$PROJECT_DIR$" vcs="Git" />
+  </component>
+</project>

+ 69 - 0
.idea/workspace.xml

@@ -0,0 +1,69 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="ChangeListManager">
+    <list default="true" id="8e470916-7a94-4d0c-b94e-4f8f9b5f4243" name="Default Changelist" comment="">
+      <change beforePath="$PROJECT_DIR$/App.js" beforeDir="false" afterPath="$PROJECT_DIR$/App.js" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/components/FormInput.js" beforeDir="false" afterPath="$PROJECT_DIR$/components/FormInput.js" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/language/zh.js" beforeDir="false" afterPath="$PROJECT_DIR$/language/zh.js" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/mapping.json" beforeDir="false" afterPath="$PROJECT_DIR$/mapping.json" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/models/routersModel.js" beforeDir="false" afterPath="$PROJECT_DIR$/models/routersModel.js" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/models/userModel.js" beforeDir="false" afterPath="$PROJECT_DIR$/models/userModel.js" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/navigation/GuideStackNavigator.js" beforeDir="false" afterPath="$PROJECT_DIR$/navigation/GuideStackNavigator.js" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/package-lock.json" beforeDir="false" afterPath="$PROJECT_DIR$/package-lock.json" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/package.json" beforeDir="false" afterPath="$PROJECT_DIR$/package.json" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/screens/Guide1Screen.js" beforeDir="false" afterPath="$PROJECT_DIR$/screens/Guide1Screen.js" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/yarn.lock" beforeDir="false" afterPath="$PROJECT_DIR$/yarn.lock" afterDir="false" />
+    </list>
+    <option name="SHOW_DIALOG" value="false" />
+    <option name="HIGHLIGHT_CONFLICTS" value="true" />
+    <option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
+    <option name="LAST_RESOLUTION" value="IGNORE" />
+  </component>
+  <component name="Git.Settings">
+    <option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
+  </component>
+  <component name="ProjectId" id="1bkx5MPiEWdSiDn9ymL65XSwvFZ" />
+  <component name="ProjectViewState">
+    <option name="hideEmptyMiddlePackages" value="true" />
+    <option name="showExcludedFiles" value="true" />
+    <option name="showLibraryContents" value="true" />
+  </component>
+  <component name="PropertiesComponent">
+    <property name="RunOnceActivity.ShowReadmeOnStart" value="true" />
+    <property name="WebServerToolWindowFactoryState" value="false" />
+    <property name="aspect.path.notification.shown" value="true" />
+    <property name="last_opened_file_path" value="$PROJECT_DIR$/../DingDong_back/dingdong" />
+  </component>
+  <component name="ServiceViewManager">
+    <option name="viewStates">
+      <list>
+        <serviceView>
+          <treeState>
+            <expand />
+            <select />
+          </treeState>
+        </serviceView>
+      </list>
+    </option>
+  </component>
+  <component name="SvnConfiguration">
+    <configuration />
+  </component>
+  <component name="TaskManager">
+    <task active="true" id="Default" summary="Default task">
+      <changelist id="8e470916-7a94-4d0c-b94e-4f8f9b5f4243" name="Default Changelist" comment="" />
+      <created>1589189708554</created>
+      <option name="number" value="Default" />
+      <option name="presentableId" value="Default" />
+      <updated>1589189708554</updated>
+      <workItem from="1589189709769" duration="31000" />
+    </task>
+    <servers />
+  </component>
+  <component name="WindowStateProjectService">
+    <state x="-1500" y="247" key="FileChooserDialogImpl" timestamp="1589189739638">
+      <screen x="-2560" y="-208" width="2560" height="1400" />
+    </state>
+    <state x="-1500" y="247" key="FileChooserDialogImpl/0.0.1536.824/-2560.-208.2560.1400@-2560.-208.2560.1400" timestamp="1589189739638" />
+  </component>
+</project>

+ 6 - 3
App.js

@@ -6,6 +6,7 @@ import {
     Button,
     IconRegistry,
     Text,
+    Modal,
 } from "@ui-kitten/components";
 import { EvaIconsPack } from "@ui-kitten/eva-icons";
 import { default as theme } from "./theme.json"; // <-- Import app theme
@@ -16,6 +17,7 @@ import * as Font from "expo-font";
 import { Ionicons } from "@expo/vector-icons";
 import { NavigationContainer, useNavigation } from "@react-navigation/native";
 import { createStackNavigator } from "@react-navigation/stack";
+import Dialog from "./components/Dialog";
 
 import { useModel } from "flooks";
 import * as models from "./models";
@@ -28,7 +30,7 @@ const Stack = createStackNavigator();
 
 export default function App(props) {
     const [isLoadingComplete, setLoadingComplete] = React.useState(false);
-    const { checkLogin, isLogin, guideStep } = useModel("userModel");
+    const { checkLogin, isLogin, status, guideStep } = useModel("userModel");
     const { getWords } = useModel("wordsModel", true);
     const { getToken } = useModel("httpModel", true);
 
@@ -63,17 +65,18 @@ export default function App(props) {
         return (
             <>
                 <IconRegistry icons={EvaIconsPack} />
-
                 <ApplicationProvider
                     {...eva}
                     theme={{ ...eva.light, ...theme }}
                     customMapping={customMapping}
                 >
+                    <Dialog />
                     <Layout style={{ flex: 1 }}>
                         <NavigationContainer>
                             <Stack.Navigator headerMode='none'>
                                 {isLogin ? (
-                                    guideStep >= 3 ? (
+                                    status === "PASS" &&
+                                    guideStep == "finish" ? (
                                         <Stack.Screen
                                             name='Root'
                                             component={BottomTabNavigator}

BIN
assets/images/shehe1.png


BIN
assets/images/shenhe.png


+ 99 - 0
components/Actionsheet.js

@@ -0,0 +1,99 @@
+import React from "react";
+import { StyleSheet, View, Text } from "react-native";
+import {
+    Menu,
+    MenuItem,
+    Layout,
+    SelectItem,
+    Icon,
+} from "@ui-kitten/components";
+import { useModel } from "flooks";
+import { Dimensions } from "react-native";
+import { Actionsheet } from "beeshell";
+
+const selects = (list, selectAction) => {
+    return list.map((item) => {
+        return <MenuItem title={item} key={item} />;
+    });
+};
+const ForwardIcon = (props) => <Icon {...props} name='arrow-ios-forward' />;
+export default function myActionsheet({ list, onChange, value }) {
+    const { cancel } = useModel("wordsModel");
+
+    const datas = React.useMemo(() => {
+        if (list && list.length > 0) {
+            return list.map((item) => {
+                return { label: item, value: item };
+            });
+        } else {
+            return [];
+        }
+    }, [list]);
+
+    const [bottomModalX, changeBottomModalx] = React.useState("");
+    return (
+        <>
+            <SelectItem
+                appearance='form'
+                style={{ flex: 1 }}
+                accessoryRight={ForwardIcon}
+                title={value || " "}
+                onPress={() => {
+                    bottomModalX.open();
+                }}
+            />
+            <Actionsheet
+                ref={(c) => {
+                    changeBottomModalx(c);
+                }}
+                header={<View />}
+                data={list}
+                cancelable={true}
+                maxShowNum={4}
+                useSafeAreaView={true}
+                onPressConfirm={(item) => {
+                    onChange(item);
+                }}
+                onPressCancel={() => {
+                    console.log("cancel");
+                }}
+                renderItem={(item, index) => {
+                    return (
+                        <View style={styles.item}>
+                            <Text style={styles.text}>{item}</Text>
+                        </View>
+                    );
+                }}
+            ></Actionsheet>
+        </>
+    );
+}
+
+const styles = StyleSheet.create({
+    backdrop: {
+        backgroundColor: "rgba(0, 0, 0, 0.5)",
+    },
+    menu: {
+        bottom: 0,
+    },
+    modal: {},
+    layout: {
+        position: "absolute",
+        top: 0,
+        left: 0,
+        bottom: 0,
+        right: 0,
+    },
+    text: {
+        fontSize: 12,
+    },
+    item: {
+        flexDirection: "row",
+        paddingVertical: 10,
+        alignItems: "center",
+        justifyContent: "center",
+        backgroundColor: "#fff",
+        borderBottomWidth: 1,
+        borderColor: "rgb(228, 233, 242)",
+    },
+});

+ 1 - 0
components/ConnectButton.js

@@ -8,6 +8,7 @@ export default function ConnectButton(props) {
     return (
         <>
             <Layout style={{ flex: 1, minHeight: 30 }} />
+            {props.children}
             <Button
                 appearance='outline'
                 style={{ alignSelf: "center" }}

+ 112 - 0
components/Dialog.js

@@ -0,0 +1,112 @@
+import React from "react";
+import { StyleSheet } from "react-native";
+import { Modal, Card, Text, Button, Layout } from "@ui-kitten/components";
+import { useModel, setModel } from "flooks";
+import dialogModel from "../models/dialogModel";
+
+setModel("dialogModel", dialogModel);
+
+const Header = (props, title) => (
+    <Text {...props} category='s1'>
+        {title}
+    </Text>
+);
+
+const Footer = (
+    props,
+    cancelLabelText,
+    confirmLabelText,
+    cancelable,
+    confirmCallback,
+    cancelCallback
+) => (
+    <Layout {...props} style={[props.style, styles.footerContainer]}>
+        {cancelable && (
+            <Button
+                style={styles.footerControl}
+                status='basic'
+                size='small'
+                appearance='outline'
+                onPress={cancelCallback}
+            >
+                {cancelLabelText}
+            </Button>
+        )}
+        <Button
+            style={styles.footerControl}
+            size='small'
+            onPress={confirmCallback}
+        >
+            {confirmLabelText}
+        </Button>
+    </Layout>
+);
+
+export default function Dialog(props) {
+    const { tip, confirm, cancel } = useModel("wordsModel");
+
+    const {
+        hideDialog,
+        diloadShow,
+        title,
+        cancelLabelText,
+        confirmLabelText,
+        cancelable,
+        confirmCallback,
+        cancelCallback,
+        bodyText,
+        status,
+    } = useModel("dialogModel");
+    return (
+        <Modal visible={diloadShow} backdropStyle={styles.backdrop}>
+            <Card
+                style={styles.card}
+                appearance='diaogOutline'
+                header={(props) => {
+                    return Header(props, title || tip);
+                }}
+                footer={(props) => {
+                    return Footer(
+                        props,
+                        cancelLabelText || cancel,
+                        confirmLabelText || confirm,
+                        cancelable || false,
+                        () => {
+                            hideDialog();
+                            if (confirmCallback) {
+                                confirmCallback();
+                            }
+                        },
+                        () => {
+                            hideDialog();
+                            if (cancelCallback) {
+                                cancelCallback();
+                            }
+                        }
+                    );
+                }}
+            >
+                <Text {...props} category='p1' status={status || ""}>
+                    {bodyText || "确认删除吗"}
+                </Text>
+            </Card>
+        </Modal>
+    );
+}
+
+const styles = StyleSheet.create({
+    backdrop: {
+        backgroundColor: "rgba(0, 0, 0, 0.5)",
+    },
+    card: {
+        alignItems: "center",
+        minWidth: 263,
+    },
+    footerContainer: {
+        flexDirection: "row",
+    },
+    footerControl: {
+        minWidth: 112,
+        marginHorizontal: 10,
+    },
+});

+ 12 - 1
components/FormInput.js

@@ -16,6 +16,7 @@ import { useModel } from "flooks";
 import OpenTime from "./OpenTime";
 import UpLoadImage from "./UpLoadImage";
 import moment from "moment";
+import Actionsheet from "./Actionsheet";
 
 const AlertIcon = (props) => <Icon {...props} name='alert-circle-outline' />;
 
@@ -202,10 +203,20 @@ const FormInput = React.memo((props) => {
                     appearance='form'
                     style={{ flex: 1 }}
                     accessoryRight={ForwardIcon}
-                    title={props.value}
+                    title=' '
                     onPress={props.changePath}
                 />
             );
+        } else if (type == "actionSheet") {
+            return (
+                <>
+                    <Actionsheet
+                        list={props.list}
+                        value={props.value}
+                        onChange={props.onChange}
+                    />
+                </>
+            );
         } else if (type == "img") {
             return (
                 <UpLoadImage

+ 76 - 0
components/GoodsCard.js

@@ -0,0 +1,76 @@
+import React from "react";
+import { StyleSheet } from "react-native";
+import {
+    Modal,
+    Card,
+    Text,
+    Button,
+    Layout,
+    Avatar,
+} from "@ui-kitten/components";
+import { useModel } from "flooks";
+export default function GoodsCard(props) {
+    const { add, remove } = useModel("wordsModel");
+    return (
+        <Card style={styles.card} appearance='goodsCard'>
+            <Layout style={styles.layout}>
+                <Avatar
+                    style={styles.avatar}
+                    shape='rounded'
+                    source='https://t7.baidu.com/it/u=3616242789,1098670747&fm=79&app=86&size=h300&n=0&g=4n&f=jpeg'
+                />
+
+                <Layout style={styles.main}>
+                    <Text category='s1' ellipsizeMode='tail' numberOfLines={1}>
+                        原味板烧鸡腿堡麦满分套餐原味板烧鸡腿堡麦满分套餐
+                    </Text>
+                    <Text
+                        category='c1'
+                        status='info'
+                        ellipsizeMode='tail'
+                        numberOfLines={1}
+                    >
+                        原味板烧鸡腿堡麦满分套餐
+                    </Text>
+                    <Text category='c1' status='info'>
+                        月售 9999+
+                    </Text>
+                    <Layout style={styles.flex1} />
+                    <Text category='h6' status='danger'>
+                        ¥70
+                    </Text>
+                </Layout>
+
+                <Layout style={styles.butContent}>
+                    <Button status='primary' size='tiny'>
+                        {add}
+                    </Button>
+                </Layout>
+            </Layout>
+        </Card>
+    );
+}
+
+const styles = StyleSheet.create({
+    card: { marginTop: 10 },
+    layout: {
+        flexDirection: "row",
+    },
+    avatar: {
+        width: 80,
+        height: 80,
+        marginRight: 10,
+    },
+    main: {
+        flex: 1,
+    },
+    flex1: {
+        flex: 1,
+    },
+    butContent: {
+        marginLeft: 6,
+    },
+    fontColor: {
+        color: "#B5B5B5",
+    },
+});

+ 6 - 2
components/GuideHeaderBar.js

@@ -5,7 +5,7 @@ import { Image, StyleSheet } from "react-native";
 
 export default function GuideHeaderBar(props) {
     const theme = useTheme();
-    const { registerInfo } = useModel("userModel");
+    const { registerInfo, showName } = useModel("userModel");
     return (
         <Layout
             style={[
@@ -18,7 +18,11 @@ export default function GuideHeaderBar(props) {
                 style={styles.icon}
             />
             <Text style={styles.text} category='h6'>
-                {registerInfo ? registerInfo.showName : "商家名称"}
+                {showName
+                    ? showName
+                    : registerInfo
+                    ? registerInfo.showName
+                    : "商家名称"}
             </Text>
         </Layout>
     );

+ 37 - 0
components/NavHeaderBar.js

@@ -0,0 +1,37 @@
+import React from "react";
+import {
+    Button,
+    Layout,
+    useTheme,
+    Text,
+    TopNavigation,
+    TopNavigationAction,
+    Icon,
+} from "@ui-kitten/components";
+import { useModel } from "flooks";
+import { Image, StyleSheet } from "react-native";
+
+const BackIcon = (props) => <Icon {...props} fill='#fff' name='arrow-back' />;
+
+export default function NavHeaderBar(props) {
+    const theme = useTheme();
+    const { registerInfo } = useModel("userModel", true);
+    const { backRouter } = useModel("routersModel", true);
+
+    const renderBackAction = () => (
+        <TopNavigationAction icon={BackIcon} onPress={backRouter} />
+    );
+    return (
+        <TopNavigation
+            alignment='center'
+            title={props.title}
+            accessoryLeft={props.back != false && renderBackAction}
+        />
+    );
+}
+
+const styles = StyleSheet.create({
+    container: {
+        height: 45,
+    },
+});

+ 38 - 3
language/zh.js

@@ -46,8 +46,37 @@ export default {
     guide1_form_4: "每日供应数量",
     guide1_pla_4: "输入每日供应数量",
     guide1_form_5: "供应时间",
-    guide1_pla_4: "添加商品简介(不超过50字)",
-    
+    guide1_pla_5: "添加商品简介(不超过50字)",
+    guide2_title1:
+        "woo!您的商品看上去就会很畅销!您可以再软件内添加更多的商品。",
+    guide2_title2:
+        "woo!为了用户更好地认识您,请为这些商品建立分类。分类将在商品的左侧栏!",
+    guide2_form_1: "类别名称",
+    guide2_pla_1: "输入类别名称",
+    guide2_pla_2: "比如单人套餐、前菜、主食等等",
+    guide2_form_2: "显示排序",
+    guide2_form_3: "包含商品",
+    guide3_title1: "woo!太好了!您已经在叮咚的外卖版图上站有一席之地了!",
+    guide3_title2: "为了用户更好地认识您,请认真填写!",
+    guide3_form_1: "支付宝账号",
+    guide3_pla_1: "输入支付宝账号",
+    guide3_form_2: "支付宝账户名",
+    guide3_pla_2: "输入支付宝账账户名",
+    guide4_title1: "完美!您已经完成了本向导!",
+    guide4_title2: "完整的信息您可以在后续陆续添加。祝您轻松赚钱,开心生活",
+
+   
+
+    goodsClassificationTitle1: "分类下的商品",
+    goodsClassificationTitle2: "已选择的商品",
+    goodsClassificationTitle3: "未选择的商品",
+
+    storeAudio: "审核店铺",
+    storeAudioText1:"您的店铺正在审核中",
+    storeAudioText2:"请耐心等待...",
+    storeAudioText3:"恭喜!!!",
+    storeAudioText4:"您的店铺审核成功!",
+
 
     //公共的文字
 
@@ -56,8 +85,9 @@ export default {
     appName: "叮咚外卖",
     connect: "联系客服",
     next: "下一步",
+    pass: "跳过",
     cancel: "取消",
-    confirm: "确",
+    confirm: "确",
     MON: "周一",
     TUE: "周二",
     WED: "周三",
@@ -71,4 +101,9 @@ export default {
     hour: "时",
     min: "分",
     weekName: "周期",
+    tip: "提示",
+    passTips: "确认要跳过吗?",
+    add: "添加",
+    remove: "移除",
+    complete: "完成",
 };

+ 548 - 6
mapping.json

@@ -10,6 +10,98 @@
         "text-subtitle-2-font-weight": "400"
     },
     "components": {
+        "Avatar": {
+            "meta": {
+                "scope": "all",
+                "parameters": {
+                    "roundCoefficient": {
+                        "type": "number"
+                    },
+                    "width": {
+                        "type": "number"
+                    },
+                    "height": {
+                        "type": "number"
+                    }
+                },
+                "appearances": {
+                    "default": {
+                        "default": true
+                    }
+                },
+                "variantGroups": {
+                    "shape": {
+                        "round": {
+                            "default": true
+                        },
+                        "rounded": {
+                            "default": false
+                        },
+                        "square": {
+                            "default": false
+                        }
+                    },
+                    "size": {
+                        "tiny": {
+                            "default": false
+                        },
+                        "small": {
+                            "default": false
+                        },
+                        "medium": {
+                            "default": true
+                        },
+                        "large": {
+                            "default": false
+                        },
+                        "giant": {
+                            "default": false
+                        }
+                    }
+                },
+                "states": {}
+            },
+            "appearances": {
+                "default": {
+                    "mapping": {},
+                    "variantGroups": {
+                        "shape": {
+                            "round": {
+                                "roundCoefficient": 0.5
+                            },
+                            "rounded": {
+                                "roundCoefficient": 0.03
+                            },
+                            "square": {
+                                "roundCoefficient": 0.0
+                            }
+                        },
+                        "size": {
+                            "tiny": {
+                                "width": "size-tiny",
+                                "height": "size-tiny"
+                            },
+                            "small": {
+                                "width": "size-small",
+                                "height": "size-small"
+                            },
+                            "medium": {
+                                "width": "size-medium",
+                                "height": "size-medium"
+                            },
+                            "large": {
+                                "width": "size-large",
+                                "height": "size-large"
+                            },
+                            "giant": {
+                                "width": "size-giant",
+                                "height": "size-giant"
+                            }
+                        }
+                    }
+                }
+            }
+        },
         "Input": {
             "appearances": {
                 "default": {
@@ -37,6 +129,9 @@
                                 "labelColor": "text-basic-color",
                                 "captionColor": "color-danger-500",
                                 "state": {
+                                    "focused": {
+                                        "backgroundColor": "#F0F0F0"
+                                    },
                                     "active": {
                                         "backgroundColor": "#F0F0F0"
                                     },
@@ -69,14 +164,14 @@
                     "variantGroups": {
                         "size": {
                             "tiny": {
-                                "minWidth": "size-tiny",
-                                "minHeight": "size-tiny",
+                                "minWidth": 0,
+                                "minHeight": 0,
                                 "borderRadius": "border-radius",
-                                "borderWidth": "border-width",
+                                "borderWidth": 0,
                                 "paddingHorizontal": 6,
-                                "paddingVertical": 6,
-                                "textMarginHorizontal": 6,
-                                "textFontSize": 10,
+                                "paddingVertical": 3,
+                                "textMarginHorizontal": 0,
+                                "textFontSize": 12,
                                 "textFontWeight": "bold",
                                 "iconWidth": 12,
                                 "iconHeight": 12,
@@ -799,6 +894,150 @@
                         "footerPaddingHorizontal": 10,
                         "footerPaddingVertical": 10
                     }
+                },
+                "diaogOutline": {
+                    "mapping": {
+                        "accentHeight": 0,
+                        "bodyPaddingHorizontal": 24,
+                        "bodyPaddingVertical": 10,
+                        "headerPaddingHorizontal": 24,
+                        "headerPaddingVertical": 20,
+                        "footerPaddingHorizontal": 24,
+                        "footerPaddingVertical": 15,
+                        "state": {
+                            "active": {
+                                "backgroundColor": "background-basic-color-2"
+                            }
+                        }
+                    },
+                    "variantGroups": {
+                        "status": {
+                            "basic": {
+                                "accentHeight": 4,
+                                "accentBackgroundColor": "color-basic-default"
+                            },
+                            "primary": {
+                                "accentHeight": 4,
+                                "accentBackgroundColor": "color-primary-default"
+                            },
+                            "success": {
+                                "accentHeight": 4,
+                                "accentBackgroundColor": "color-success-default"
+                            },
+                            "info": {
+                                "accentHeight": 4,
+                                "accentBackgroundColor": "color-info-default"
+                            },
+                            "warning": {
+                                "accentHeight": 4,
+                                "accentBackgroundColor": "color-warning-default"
+                            },
+                            "danger": {
+                                "accentHeight": 4,
+                                "accentBackgroundColor": "color-danger-default"
+                            },
+                            "control": {
+                                "accentHeight": 4,
+                                "accentBackgroundColor": "color-control-default"
+                            }
+                        }
+                    }
+                },
+                "headerList": {
+                    "mapping": {
+                        "backgroundColor": "transparent",
+                        "accentHeight": 0,
+                        "bodyPaddingHorizontal": 15,
+                        "bodyPaddingVertical": 10,
+                        "headerPaddingHorizontal": 15,
+                        "headerPaddingVertical": 0,
+                        "footerPaddingHorizontal": 15,
+                        "footerPaddingVertical": 0,
+                        "borderColor": "transparent",
+                        "state": {
+                            "active": {
+                                "backgroundColor": "background-basic-color-2"
+                            }
+                        }
+                    },
+                    "variantGroups": {
+                        "status": {
+                            "basic": {
+                                "accentHeight": 4,
+                                "accentBackgroundColor": "color-basic-default"
+                            },
+                            "primary": {
+                                "accentHeight": 4,
+                                "accentBackgroundColor": "color-primary-default"
+                            },
+                            "success": {
+                                "accentHeight": 4,
+                                "accentBackgroundColor": "color-success-default"
+                            },
+                            "info": {
+                                "accentHeight": 4,
+                                "accentBackgroundColor": "color-info-default"
+                            },
+                            "warning": {
+                                "accentHeight": 4,
+                                "accentBackgroundColor": "color-warning-default"
+                            },
+                            "danger": {
+                                "accentHeight": 4,
+                                "accentBackgroundColor": "color-danger-default"
+                            },
+                            "control": {
+                                "accentHeight": 4,
+                                "accentBackgroundColor": "color-control-default"
+                            }
+                        }
+                    }
+                },
+                "goodsCard": {
+                    "mapping": {
+                        "accentHeight": 0,
+                        "bodyPaddingHorizontal": 13,
+                        "bodyPaddingVertical": 20,
+                        "borderColor": "transparent",
+                        "borderRadius": 3,
+                        "state": {
+                            "active": {
+                                "backgroundColor": "background-basic-color-2"
+                            }
+                        }
+                    },
+                    "variantGroups": {
+                        "status": {
+                            "basic": {
+                                "accentHeight": 4,
+                                "accentBackgroundColor": "color-basic-default"
+                            },
+                            "primary": {
+                                "accentHeight": 4,
+                                "accentBackgroundColor": "color-primary-default"
+                            },
+                            "success": {
+                                "accentHeight": 4,
+                                "accentBackgroundColor": "color-success-default"
+                            },
+                            "info": {
+                                "accentHeight": 4,
+                                "accentBackgroundColor": "color-info-default"
+                            },
+                            "warning": {
+                                "accentHeight": 4,
+                                "accentBackgroundColor": "color-warning-default"
+                            },
+                            "danger": {
+                                "accentHeight": 4,
+                                "accentBackgroundColor": "color-danger-default"
+                            },
+                            "control": {
+                                "accentHeight": 4,
+                                "accentBackgroundColor": "color-control-default"
+                            }
+                        }
+                    }
                 }
             }
         },
@@ -907,6 +1146,309 @@
                     }
                 }
             }
+        },
+        "TopNavigation": {
+            "meta": {
+                "scope": "mobile",
+                "parameters": {
+                    "minHeight": {
+                        "type": "number"
+                    },
+                    "paddingVertical": {
+                        "type": "number"
+                    },
+                    "paddingHorizontal": {
+                        "type": "number"
+                    },
+                    "backgroundColor": {
+                        "type": "string"
+                    },
+                    "titleTextAlign": {
+                        "type": "string"
+                    },
+                    "titleFontFamily": {
+                        "type": "string"
+                    },
+                    "titleFontSize": {
+                        "type": "number"
+                    },
+                    "titleFontWeight": {
+                        "type": "string"
+                    },
+                    "titleColor": {
+                        "type": "string"
+                    },
+                    "subtitleTextAlign": {
+                        "type": "string"
+                    },
+                    "subtitleFontFamily": {
+                        "type": "string"
+                    },
+                    "subtitleFontSize": {
+                        "type": "number"
+                    },
+                    "subtitleFontWeight": {
+                        "type": "string"
+                    },
+                    "subtitleColor": {
+                        "type": "string"
+                    }
+                },
+                "appearances": {
+                    "default": {
+                        "default": true
+                    },
+                    "control": {
+                        "default": false
+                    }
+                },
+                "variantGroups": {
+                    "alignment": {
+                        "start": {
+                            "default": true
+                        },
+                        "center": {
+                            "default": false
+                        }
+                    }
+                },
+                "states": {}
+            },
+            "appearances": {
+                "default": {
+                    "mapping": {
+                        "minHeight": 56,
+                        "paddingVertical": 8,
+                        "paddingHorizontal": 8,
+                        "backgroundColor": "color-primary-500",
+                        "titleColor": "#fff",
+                        "iconTintColor": "#fff"
+                    },
+                    "variantGroups": {
+                        "alignment": {
+                            "start": {
+                                "titleTextAlign": "left",
+                                "subtitleTextAlign": "left"
+                            },
+                            "center": {
+                                "titleTextAlign": "center",
+                                "subtitleTextAlign": "center"
+                            }
+                        }
+                    }
+                },
+                "control": {
+                    "mapping": {
+                        "backgroundColor": "transparent"
+                    }
+                }
+            }
+        },
+        "Text": {
+            "meta": {
+                "scope": "all",
+                "parameters": {
+                    "fontFamily": {
+                        "type": "string"
+                    },
+                    "fontSize": {
+                        "type": "number"
+                    },
+                    "fontWeight": {
+                        "type": "string"
+                    },
+                    "color": {
+                        "type": "string"
+                    }
+                },
+                "appearances": {
+                    "default": {
+                        "default": true
+                    },
+                    "alternative": {
+                        "default": false
+                    },
+                    "hint": {
+                        "default": false
+                    }
+                },
+                "variantGroups": {
+                    "category": {
+                        "h1": {
+                            "default": false
+                        },
+                        "h2": {
+                            "default": false
+                        },
+                        "h3": {
+                            "default": false
+                        },
+                        "h4": {
+                            "default": false
+                        },
+                        "h5": {
+                            "default": false
+                        },
+                        "h6": {
+                            "default": false
+                        },
+                        "s1": {
+                            "default": false
+                        },
+                        "s2": {
+                            "default": false
+                        },
+                        "p1": {
+                            "default": true
+                        },
+                        "p2": {
+                            "default": false
+                        },
+                        "c1": {
+                            "default": false
+                        },
+                        "c2": {
+                            "default": false
+                        },
+                        "label": {
+                            "default": false
+                        }
+                    },
+                    "status": {
+                        "basic": {
+                            "default": false
+                        },
+                        "primary": {
+                            "default": false
+                        },
+                        "success": {
+                            "default": false
+                        },
+                        "info": {
+                            "default": false
+                        },
+                        "warning": {
+                            "default": false
+                        },
+                        "danger": {
+                            "default": false
+                        },
+                        "control": {
+                            "default": false
+                        }
+                    }
+                },
+                "states": {}
+            },
+            "appearances": {
+                "default": {
+                    "mapping": {
+                        "color": "text-basic-color"
+                    },
+                    "variantGroups": {
+                        "category": {
+                            "h1": {
+                                "fontSize": "text-heading-1-font-size",
+                                "fontWeight": "text-heading-1-font-weight",
+                                "fontFamily": "text-heading-1-font-family"
+                            },
+                            "h2": {
+                                "fontSize": "text-heading-2-font-size",
+                                "fontWeight": "text-heading-2-font-weight",
+                                "fontFamily": "text-heading-2-font-family"
+                            },
+                            "h3": {
+                                "fontSize": "text-heading-3-font-size",
+                                "fontWeight": "text-heading-3-font-weight",
+                                "fontFamily": "text-heading-3-font-family"
+                            },
+                            "h4": {
+                                "fontSize": "text-heading-4-font-size",
+                                "fontWeight": "text-heading-4-font-weight",
+                                "fontFamily": "text-heading-4-font-family"
+                            },
+                            "h5": {
+                                "fontSize": "text-heading-5-font-size",
+                                "fontWeight": "text-heading-5-font-weight",
+                                "fontFamily": "text-heading-5-font-family"
+                            },
+                            "h6": {
+                                "fontSize": "text-heading-6-font-size",
+                                "fontWeight": "text-heading-6-font-weight",
+                                "fontFamily": "text-heading-6-font-family"
+                            },
+                            "s1": {
+                                "fontSize": "text-subtitle-1-font-size",
+                                "fontWeight": "text-subtitle-1-font-weight",
+                                "fontFamily": "text-subtitle-1-font-family"
+                            },
+                            "s2": {
+                                "fontSize": "text-subtitle-2-font-size",
+                                "fontWeight": "text-subtitle-2-font-weight",
+                                "fontFamily": "text-subtitle-2-font-family"
+                            },
+                            "p1": {
+                                "fontSize": "text-paragraph-1-font-size",
+                                "fontWeight": "text-paragraph-1-font-weight",
+                                "fontFamily": "text-paragraph-1-font-family"
+                            },
+                            "p2": {
+                                "fontSize": "text-paragraph-2-font-size",
+                                "fontWeight": "text-paragraph-2-font-weight",
+                                "fontFamily": "text-paragraph-2-font-family"
+                            },
+                            "c1": {
+                                "fontSize": "text-caption-1-font-size",
+                                "fontWeight": "text-caption-1-font-weight",
+                                "fontFamily": "text-caption-1-font-family"
+                            },
+                            "c2": {
+                                "fontSize": "text-caption-2-font-size",
+                                "fontWeight": "text-caption-2-font-weight",
+                                "fontFamily": "text-caption-2-font-family"
+                            },
+                            "label": {
+                                "fontSize": "text-label-font-size",
+                                "fontWeight": "text-label-font-weight",
+                                "fontFamily": "text-label-font-family"
+                            }
+                        },
+                        "status": {
+                            "basic": {
+                                "color": "text-basic-color"
+                            },
+                            "primary": {
+                                "color": "text-primary-color"
+                            },
+                            "success": {
+                                "color": "text-success-color"
+                            },
+                            "info": {
+                                "color": "#B5B5B5"
+                            },
+                            "warning": {
+                                "color": "text-warning-color"
+                            },
+                            "danger": {
+                                "color": "text-danger-color"
+                            },
+                            "control": {
+                                "color": "text-control-color"
+                            }
+                        }
+                    }
+                },
+                "alternative": {
+                    "mapping": {
+                        "color": "text-alternate-color"
+                    }
+                },
+                "hint": {
+                    "mapping": {
+                        "color": "text-hint-color"
+                    }
+                }
+            }
         }
     }
 }

+ 32 - 0
models/dialogModel.js

@@ -0,0 +1,32 @@
+import { i18n, keys } from "../language";
+export default {
+    state: {
+        title: "",
+        bodyText: "",
+        cancelable: "",
+        cancelLabelText: "",
+        confirmLabelText: "",
+        confirmCallback: null,
+        cancelCallback: null,
+        diloadShow: false,
+        status: "",
+    },
+    actions: ({ model, setState }) => ({
+        showDialog({ ...props }) {
+            setState({
+                diloadShow: true,
+                title: props.title,
+                bodyText: props.bodyText,
+                cancelable: props.cancelable,
+                cancelLabelText: props.cancelLabelText,
+                confirmLabelText: props.confirmLabelText,
+                confirmCallback: props.confirmCallback,
+                cancelCallback: props.cancelCallback,
+                status: props.status,
+            });
+        },
+        hideDialog() {
+            setState({ diloadShow: false });
+        },
+    }),
+};

+ 12 - 0
models/routersModel.js

@@ -18,5 +18,17 @@ export default {
             const { navigation } = model();
             navigation.navigate(to);
         },
+        replaceRouter(to) {
+            const { navigation } = model();
+            navigation.replace(to);
+        },
+        backRouter() {
+            const { navigation } = model();
+            navigation.goBack();
+        },
+        resetRouter(to) {
+            const { navigation } = model();
+            navigation.reset(to);
+        },
     }),
 };

+ 35 - 3
models/userModel.js

@@ -1,6 +1,6 @@
 export default {
     state: {
-        id: 0,
+        mid: 0,
         name: "未登录",
         showName: "未登录",
         phone: "",
@@ -32,8 +32,8 @@ export default {
                 getUserInfo()
                     .then(async (_) => {
                         let guideStep = await getAsyncStorage("guideStep");
-                        if (aliAccount) {
-                            guideStep = 3;
+                        if (status == "PASS") {
+                            guideStep = 4;
                         }
                         console.log(guideStep);
                         if (guideStep) {
@@ -113,5 +113,37 @@ export default {
             };
             registerUser(_registerInfo);
         },
+        changeGuideStep(step, next) {
+            const { addAsyncStorage } = model("httpModel");
+            addAsyncStorage("guideStep", step);
+            if (step == "finish") {
+                setState({
+                    guideStep: "finish",
+                });
+            } else {
+                const { replaceRouter, resetRouter } = model("routersModel");
+                replaceRouter(next);
+            }
+        },
+        saveMerchant({ ...data }) {
+            const { mid, changeGuideStep } = model();
+            const { loading, success } = model("loadingModel");
+            const { httpPost, addAsyncStorage } = model("httpModel");
+            httpPost(
+                "/merchant/save",
+                {
+                    ...data,
+                    id: mid,
+                },
+                { body: "json" }
+            ).then((res) => {
+                changeGuideStep(3, "Guide4");
+            });
+        },
+        checkInfo({ aliAccountEvent, aliNameEvent }) {
+            const { aliAccount, aliName } = model();
+            aliAccountEvent(aliAccount);
+            aliNameEvent(aliName);
+        },
     }),
 };

+ 2 - 2
navigation/BottomTabNavigator.js

@@ -21,7 +21,7 @@ export default function BottomTabNavigator({ navigation, route }) {
                 options={{
                     title: "Get Started",
                     tabBarIcon: ({ focused }) => (
-                        <TabBarIcon focused={focused} name='md-code-working' />
+                        <TabBarIcon focused={focused} name='home' />
                     ),
                 }}
             />
@@ -31,7 +31,7 @@ export default function BottomTabNavigator({ navigation, route }) {
                 options={{
                     title: "Resources",
                     tabBarIcon: ({ focused }) => (
-                        <TabBarIcon focused={focused} name='md-book' />
+                        <TabBarIcon focused={focused} name='file-text' />
                     ),
                 }}
             />

+ 24 - 0
navigation/GuideStackNavigator.js

@@ -6,6 +6,12 @@ import * as React from "react";
 import { useModel } from "flooks";
 
 import Guide1Screen from "../screens/Guide1Screen";
+import Guide2Screen from "../screens/Guide2Screen";
+import Guide3Screen from "../screens/Guide3Screen";
+import Guide4Screen from "../screens/Guide4Screen";
+import StoreAudit from "../screens/StoreAudit";
+import AddGoodsClassification from "../screens/AddGoodsClassification";
+
 const GuideStack = createStackNavigator();
 
 const config = {
@@ -23,8 +29,18 @@ const config = {
 export default function GuideStackNavigator() {
     const { guideStep } = useModel("userModel");
     const initial = React.useMemo(() => {
+        console.log(guideStep);
+        // return "AddGoods";
         if (guideStep == 0) {
             return "Guide1";
+        } else if (guideStep == 1) {
+            return "Guide2";
+        } else if (guideStep == 2) {
+            return "Guide3";
+        } else if (guideStep == 3) {
+            return "Guide4";
+        } else if (guideStep == 4) {
+            return "StoreAudit";
         } else {
             return "Guide1";
         }
@@ -40,6 +56,14 @@ export default function GuideStackNavigator() {
             initialRouteName={initial}
         >
             <GuideStack.Screen name='Guide1' component={Guide1Screen} />
+            <GuideStack.Screen name='Guide2' component={Guide2Screen} />
+            <GuideStack.Screen name='Guide3' component={Guide3Screen} />
+            <GuideStack.Screen name='Guide4' component={Guide4Screen} />
+            <GuideStack.Screen name='StoreAudit' component={StoreAudit} />
+            <GuideStack.Screen
+                name='AddGoods'
+                component={AddGoodsClassification}
+            />
         </GuideStack.Navigator>
     );
 }

+ 8 - 0
package-lock.json

@@ -12588,6 +12588,14 @@
         "css-tree": "^1.0.0-alpha.39"
       }
     },
+    "react-native-textarea": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/react-native-textarea/-/react-native-textarea-1.0.4.tgz",
+      "integrity": "sha512-XM78hqlpUom+YOtjZn69sPZn3ReRXsJfjV0t790k/qNPuc7NG8akfU7vSeKsuRSRH2zVaqk5FbxdkITkeh+3jw==",
+      "requires": {
+        "prop-types": "^15.5.10"
+      }
+    },
     "react-native-view-shot": {
       "version": "3.1.2",
       "resolved": "https://registry.npmjs.org/react-native-view-shot/-/react-native-view-shot-3.1.2.tgz",

+ 2 - 0
package.json

@@ -39,10 +39,12 @@
     "react-native": "https://github.com/expo/react-native/archive/sdk-37.0.1.tar.gz",
     "react-native-gesture-handler": "~1.6.0",
     "react-native-maps": "0.26.1",
+    "react-native-modal": "^11.5.6",
     "react-native-number-please": "^1.0.5",
     "react-native-safe-area-context": "0.7.3",
     "react-native-screens": "~2.2.0",
     "react-native-svg": "11.0.1",
+    "react-native-textarea": "^1.0.4",
     "react-native-web": "^0.11.7"
   },
   "devDependencies": {

+ 142 - 0
screens/AddGoodsClassification.js

@@ -0,0 +1,142 @@
+import * as WebBrowser from "expo-web-browser";
+import * as React from "react";
+import {
+    Image,
+    Platform,
+    StyleSheet,
+    TouchableOpacity,
+    View,
+    ImageBackground,
+} from "react-native";
+import scrollPage from "../decorator/scrollPage";
+import { useModel } from "flooks";
+import {
+    Layout,
+    Tab,
+    TabView,
+    Text,
+    useTheme,
+    Button,
+    Card,
+} from "@ui-kitten/components";
+import FormInput from "../components/FormInput";
+import { useFocusEffect } from "@react-navigation/native";
+import ScrollPage from "../components/ScrollPage";
+import NavHeaderBar from "../components/NavHeaderBar";
+import GoodsCard from "../components/GoodsCard";
+
+const Header = (props, title) => (
+    <Text {...props} category='s1'>
+        {title}
+    </Text>
+);
+
+export default function AddGoodsClassification({ navigation, route }) {
+    const theme = useTheme();
+    const { changeBackground } = useModel("barModel");
+    const { setNavigation, pushRouter } = useModel("routersModel", true);
+    const { httpGet } = useModel("httpModel", true);
+    const { registerSecend, guideStep } = useModel("userModel", true);
+
+    const {
+        goodsClassificationTitle1,
+        goodsClassificationTitle2,
+        goodsClassificationTitle3,
+    } = useModel("wordsModel");
+    const { showDialog } = useModel("dialogModel");
+    const [categoryList, changeCategoryList] = React.useState([]);
+    const [merchantNatureList, changeMerchantNatureList] = React.useState([]);
+    useFocusEffect(
+        React.useCallback(() => {
+            changeBackground(theme["color-primary-500"]);
+            setNavigation(navigation);
+        }, [])
+    );
+
+    const [name, changeName] = React.useState("");
+    const [sort, changeSort] = React.useState("");
+    const [goodsIds, changeGoodsIds] = React.useState("");
+
+    const canNext = React.useMemo(() => {
+        return true;
+    }, [name]);
+
+    return (
+        <>
+            <NavHeaderBar title={goodsClassificationTitle1} />
+            <ScrollPage>
+                <Layout style={styles.container}>
+                    <Card
+                        appearance='headerList'
+                        header={(props) => {
+                            return Header(props, goodsClassificationTitle2);
+                        }}
+                    >
+                        <GoodsCard />
+                        <GoodsCard />
+                    </Card>
+
+                    <Card
+                        appearance='headerList'
+                        header={(props) => {
+                            return Header(props, goodsClassificationTitle3);
+                        }}
+                    >
+                        <GoodsCard />
+                        <GoodsCard />
+                    </Card>
+                </Layout>
+            </ScrollPage>
+        </>
+    );
+}
+
+const styles = StyleSheet.create({
+    container: {
+        flex: 1,
+        paddingBottom: 33,
+        backgroundColor: "#EEEEEE",
+        paddingVertical: 20,
+    },
+    tabContent: {
+        backgroundColor: "#fff",
+        marginTop: 20,
+    },
+    img: {
+        width: 100,
+        height: 100,
+        alignSelf: "center",
+    },
+    img2: {
+        width: 97,
+        height: 21,
+        alignSelf: "center",
+        marginTop: 2,
+    },
+    text: {
+        marginTop: 16,
+    },
+    layoutLeft: {
+        // flexDirection: "row",
+        paddingVertical: 10,
+        justifyContent: "center",
+        alignItems: "center",
+    },
+    form: {
+        paddingHorizontal: 26,
+        paddingVertical: 20,
+    },
+    textareaContainer: {
+        backgroundColor: "#F0F0F0",
+        height: 100,
+        borderRadius: 4,
+    },
+    textarea: {
+        textAlignVertical: "top", // hack android
+        fontSize: 13,
+        color: "#333",
+        paddingHorizontal: 14,
+        paddingVertical: 10,
+        height: 100,
+    },
+});

+ 128 - 70
screens/Guide1Screen.js

@@ -24,30 +24,33 @@ import { useFocusEffect } from "@react-navigation/native";
 import ScrollPage from "../components/ScrollPage";
 import ConnectButton from "../components/ConnectButton";
 import GuideHeaderBar from "../components/GuideHeaderBar";
-import OpenTime from "../components/OpenTime";
+import Textarea from "react-native-textarea";
 
 export default function Guide1Screen({ navigation, route }) {
     const theme = useTheme();
     const { changeBackground } = useModel("barModel");
     const { setNavigation, pushRouter } = useModel("routersModel", true);
     const { httpGet } = useModel("httpModel", true);
-    const { registerSecend } = useModel("userModel", true);
+    const { registerSecend, changeGuideStep } = useModel("userModel", true);
 
     const {
-        guideHome_title1,
+        guide1_title1,
         guideHome_title2,
-        guideHome_form_1,
-        guideHome_form_2,
-        guideHome_form_3,
-        guideHome_form_4,
-        guideHome_form_5,
-        guideHome_form_6,
-        guideHome_form_7,
-        guideHome_pla_1,
-        guideHome_pla_2,
-        guideHome_pla_3,
+        guide1_form_1,
+        guide1_pla_1,
+        guide1_form_2,
+        guide1_pla_2,
+        guide1_form_3,
+        guide1_pla_3,
+        guide1_form_4,
+        guide1_pla_4,
+        guide1_form_5,
+        guide1_pla_5,
         next,
+        pass,
+        passTips,
     } = useModel("wordsModel");
+    const { showDialog } = useModel("dialogModel");
     const [categoryList, changeCategoryList] = React.useState([]);
     const [merchantNatureList, changeMerchantNatureList] = React.useState([]);
     useFocusEffect(
@@ -64,16 +67,15 @@ export default function Guide1Screen({ navigation, route }) {
         }, [])
     );
 
-    const [category, changeCategory] = React.useState("");
-    const [address, changeAddress] = React.useState("");
+    const [name, changeName] = React.useState("");
+    const [amount, changeAmount] = React.useState("");
+    const [discountAmount, changeDiscountAmount] = React.useState("");
+    const [inventory, changeInventory] = React.useState(0);
     const [week, changeWeek] = React.useState("");
     const [startTime, changeStartTime] = React.useState("08:00");
     const [endTime, changeEndTime] = React.useState("22:00");
-    const [qualification, changeQualification] = React.useState("");
-    const [merchantNatureId, changeMerchantNatureId] = React.useState("");
-    const [logo, changeLogo] = React.useState(
-        "https://idingdong.oss-cn-hangzhou.aliyuncs.com/image/2020-05-08-17-49-29YVnqAOHy.jpg"
-    );
+    const [introduction, changeIntroduction] = React.useState();
+    const [img, changeImg] = React.useState();
     const timeValue = React.useMemo(() => {
         if (week && startTime && endTime) {
             return week + " " + startTime + "~" + endTime;
@@ -83,10 +85,32 @@ export default function Guide1Screen({ navigation, route }) {
     }, [week, startTime, endTime]);
 
     const canNext = React.useMemo(() => {
-        return true;
-    }, [logo]);
-
-    const { registerFirst } = useModel("userModel", true);
+        if (
+            name &&
+            amount &&
+            discountAmount &&
+            inventory &&
+            week &&
+            startTime &&
+            endTime &&
+            introduction &&
+            img
+        ) {
+            return true;
+        } else {
+            return false;
+        }
+    }, [
+        name,
+        amount,
+        discountAmount,
+        inventory,
+        week,
+        startTime,
+        endTime,
+        introduction,
+        img,
+    ]);
 
     return (
         <>
@@ -94,32 +118,49 @@ export default function Guide1Screen({ navigation, route }) {
             <ScrollPage>
                 <Layout style={styles.container}>
                     <Card appearance='headFilled'>
-                        <Text category='s1'>{guideHome_title1}</Text>
+                        <Text category='s1'>{guide1_title1}</Text>
                         <Text category='s1'>{guideHome_title2}</Text>
                     </Card>
                     <Card appearance='formFilled'>
-                        {/* 输入商家名称 */}
+                        {/* 商品名称 */}
                         <FormInput
-                            label={guideHome_form_1}
-                            selectTitle={guideHome_form_1}
-                            type='select'
-                            value={category}
-                            onChange={changeCategory}
+                            label={guide1_form_1}
+                            placeholder={guide1_pla_1}
+                            value={name}
+                            onChange={changeName}
+                            style={{ paddingVertical: 3 }}
+                        />
+                        {/* 商品价格 */}
+                        <FormInput
+                            label={guide1_form_2}
+                            placeholder={guide1_pla_2}
+                            value={amount}
+                            type='money'
+                            onChange={changeAmount}
                             textAlign='right'
-                            selectList={categoryList}
-                            style={{ paddingVertical: 5 }}
                         />
 
+                        {/* 优惠价格 */}
                         <FormInput
-                            label={guideHome_form_2}
-                            value={address}
-                            onChange={changeAddress}
+                            label={guide1_form_3}
+                            placeholder={guide1_pla_3}
+                            value={discountAmount}
+                            type='money'
+                            onChange={changeDiscountAmount}
                             textAlign='right'
                         />
+                        {/* 每日供应数量 */}
+                        <FormInput
+                            label={guide1_form_4}
+                            placeholder={guide1_pla_4}
+                            value={inventory}
+                            type='amount'
+                            onChange={changeInventory}
+                        />
 
+                        {/* 供应时间 */}
                         <FormInput
-                            label={guideHome_form_4}
-                            selectTitle={guideHome_form_4}
+                            label={guide1_form_5}
                             type='openTime'
                             value={timeValue}
                             onChange={(week, startTime, endTime) => {
@@ -127,41 +168,28 @@ export default function Guide1Screen({ navigation, route }) {
                                 changeStartTime(startTime);
                                 changeEndTime(endTime);
                             }}
-                            textAlign='right'
-                            style={{ paddingVertical: 5 }}
-                        />
-
-                        <FormInput
-                            label={guideHome_form_5}
-                            sub={guideHome_pla_2}
-                            type='url'
-                            value={qualification ? "已上传" : " "}
-                            textAlign='right'
-                            style={{ paddingVertical: 5 }}
-                            changePath={() => {
-                                pushRouter("Qualification");
-                            }}
                         />
 
-                        <FormInput
-                            label={guideHome_form_6}
-                            sub={guideHome_pla_3}
-                            selectTitle={guideHome_form_6}
-                            type='select'
-                            value={merchantNatureId}
-                            textAlign='right'
-                            style={{ paddingVertical: 5 }}
-                            onChange={changeMerchantNatureId}
-                            selectList={merchantNatureList}
-                        />
+                        <Layout>
+                            <Textarea
+                                containerStyle={styles.textareaContainer}
+                                style={styles.textarea}
+                                onChangeText={changeIntroduction}
+                                defaultValue={introduction}
+                                maxLength={50}
+                                placeholder={guide1_pla_5}
+                                placeholderTextColor={"#B4B4B4"}
+                                underlineColorAndroid={"transparent"}
+                            />
+                        </Layout>
 
                         <FormInput
-                            label={guideHome_form_7}
                             type='img'
-                            value={logo}
+                            value={img}
                             textAlign='right'
-                            onChange={changeLogo}
+                            onChange={changeImg}
                         />
+
                         <Layout style={styles.layoutLeft} level='1'>
                             <Button
                                 status='primary'
@@ -175,12 +203,28 @@ export default function Guide1Screen({ navigation, route }) {
                                         endTime,
                                         qualification,
                                         merchantNatureId,
-                                        logo,
+                                        img,
                                     })
                                 }
                             >
                                 {next}
                             </Button>
+                            <Button
+                                style={{ marginTop: 10 }}
+                                appearance='ghost'
+                                status='primary'
+                                onPress={() => {
+                                    showDialog({
+                                        bodyText: passTips,
+                                        cancelable: true,
+                                        confirmCallback: () => {
+                                            changeGuideStep(1, "Guide2");
+                                        },
+                                    });
+                                }}
+                            >
+                                {pass}
+                            </Button>
                         </Layout>
                     </Card>
                     <ConnectButton />
@@ -199,12 +243,12 @@ const styles = StyleSheet.create({
         backgroundColor: "#fff",
         marginTop: 20,
     },
-    logo: {
+    img: {
         width: 100,
         height: 100,
         alignSelf: "center",
     },
-    logo2: {
+    img2: {
         width: 97,
         height: 21,
         alignSelf: "center",
@@ -214,12 +258,26 @@ const styles = StyleSheet.create({
         marginTop: 16,
     },
     layoutLeft: {
-        flexDirection: "row",
+        // flexDirection: "row",
         paddingVertical: 10,
         justifyContent: "center",
+        alignItems: "center",
     },
     form: {
         paddingHorizontal: 26,
         paddingVertical: 20,
     },
+    textareaContainer: {
+        backgroundColor: "#F0F0F0",
+        height: 100,
+        borderRadius: 4,
+    },
+    textarea: {
+        textAlignVertical: "top", // hack android
+        fontSize: 13,
+        color: "#333",
+        paddingHorizontal: 14,
+        paddingVertical: 10,
+        height: 100,
+    },
 });

+ 187 - 0
screens/Guide2Screen.js

@@ -0,0 +1,187 @@
+import * as WebBrowser from "expo-web-browser";
+import * as React from "react";
+import {
+    Image,
+    Platform,
+    StyleSheet,
+    TouchableOpacity,
+    View,
+    ImageBackground,
+} from "react-native";
+import scrollPage from "../decorator/scrollPage";
+import { useModel } from "flooks";
+import {
+    Layout,
+    Tab,
+    TabView,
+    Text,
+    useTheme,
+    Button,
+    Card,
+} from "@ui-kitten/components";
+import FormInput from "../components/FormInput";
+import { useFocusEffect } from "@react-navigation/native";
+import ScrollPage from "../components/ScrollPage";
+import ConnectButton from "../components/ConnectButton";
+import GuideHeaderBar from "../components/GuideHeaderBar";
+import Textarea from "react-native-textarea";
+
+export default function Guide1Screen({ navigation, route }) {
+    const theme = useTheme();
+    const { changeBackground } = useModel("barModel");
+    const { setNavigation, pushRouter } = useModel("routersModel", true);
+    const { httpGet } = useModel("httpModel", true);
+    const { registerSecend, changeGuideStep } = useModel("userModel", true);
+
+    const {
+        guide2_title1,
+        guide2_title2,
+        guide2_form_1,
+        guide2_pla_1,
+        guide2_pla_2,
+        guide1_pla_2,
+        guide2_form_2,
+        guide2_form_3,
+        guide1_form_4,
+        guide1_pla_4,
+        guide1_form_5,
+        guide1_pla_5,
+        next,
+        pass,
+        passTips,
+    } = useModel("wordsModel");
+    const { showDialog } = useModel("dialogModel");
+    useFocusEffect(
+        React.useCallback(() => {
+            changeBackground(theme["color-primary-500"]);
+            setNavigation(navigation);
+        }, [])
+    );
+
+    const [name, changeName] = React.useState("");
+    const [sort, changeSort] = React.useState("");
+    const [goodsIds, changeGoodsIds] = React.useState("");
+
+    const canNext = React.useMemo(() => {
+        return true;
+    }, [name]);
+
+    return (
+        <>
+            <GuideHeaderBar />
+            <ScrollPage>
+                <Layout style={styles.container}>
+                    <Card appearance='headFilled'>
+                        <Text category='s1'>{guide2_title1}</Text>
+                        <Text category='s1'>{guide2_title2}</Text>
+                    </Card>
+                    <Card appearance='formFilled'>
+                        {/* 类别名称 */}
+                        <FormInput
+                            label={guide2_form_1}
+                            placeholder={guide2_pla_1}
+                            value={name}
+                            onChange={changeName}
+                            style={{ paddingVertical: 3 }}
+                        />
+                        {/* 显示排序 */}
+                        <FormInput
+                            label={guide2_form_2}
+                            value={sort}
+                            type='actionSheet'
+                            list={[1, 2, 3, 4, 5, 6, 7, 8, 9]}
+                            onChange={changeSort}
+                            textAlign='right'
+                        />
+
+                        {/* 商品 */}
+                        <FormInput
+                            label={guide2_form_3}
+                            value={goodsIds}
+                            type='url'
+                            changePath={() => {
+                                pushRouter("AddGoods");
+                            }}
+                            textAlign='right'
+                        />
+                    </Card>
+                    <ConnectButton>
+                        <Layout style={styles.layoutLeft} level='1'>
+                            <Button
+                                status='primary'
+                                disabled={!canNext}
+                                onPress={() => registerSecend({})}
+                            >
+                                {next}
+                            </Button>
+                            <Button
+                                style={{ marginTop: 10 }}
+                                appearance='ghost'
+                                status='primary'
+                                onPress={() => {
+                                    showDialog({
+                                        bodyText: passTips,
+                                        cancelable: true,
+                                        confirmCallback: () => {
+                                            changeGuideStep(2, "Guide3");
+                                        },
+                                    });
+                                }}
+                            >
+                                {pass}
+                            </Button>
+                        </Layout>
+                    </ConnectButton>
+                </Layout>
+            </ScrollPage>
+        </>
+    );
+}
+
+const styles = StyleSheet.create({
+    container: {
+        flex: 1,
+        paddingBottom: 33,
+    },
+    tabContent: {
+        backgroundColor: "#fff",
+        marginTop: 20,
+    },
+    img: {
+        width: 100,
+        height: 100,
+        alignSelf: "center",
+    },
+    img2: {
+        width: 97,
+        height: 21,
+        alignSelf: "center",
+        marginTop: 2,
+    },
+    text: {
+        marginTop: 16,
+    },
+    layoutLeft: {
+        // flexDirection: "row",
+        paddingVertical: 10,
+        justifyContent: "center",
+        alignItems: "center",
+    },
+    form: {
+        paddingHorizontal: 26,
+        paddingVertical: 20,
+    },
+    textareaContainer: {
+        backgroundColor: "#F0F0F0",
+        height: 100,
+        borderRadius: 4,
+    },
+    textarea: {
+        textAlignVertical: "top", // hack android
+        fontSize: 13,
+        color: "#333",
+        paddingHorizontal: 14,
+        paddingVertical: 10,
+        height: 100,
+    },
+});

+ 155 - 0
screens/Guide3Screen.js

@@ -0,0 +1,155 @@
+import * as WebBrowser from "expo-web-browser";
+import * as React from "react";
+import {
+    Image,
+    Platform,
+    StyleSheet,
+    TouchableOpacity,
+    View,
+    ImageBackground,
+} from "react-native";
+import scrollPage from "../decorator/scrollPage";
+import { useModel } from "flooks";
+import {
+    Layout,
+    Tab,
+    TabView,
+    Text,
+    useTheme,
+    Button,
+    Card,
+} from "@ui-kitten/components";
+import FormInput from "../components/FormInput";
+import { useFocusEffect } from "@react-navigation/native";
+import ScrollPage from "../components/ScrollPage";
+import ConnectButton from "../components/ConnectButton";
+import GuideHeaderBar from "../components/GuideHeaderBar";
+import Textarea from "react-native-textarea";
+
+export default function Guide1Screen({ navigation, route }) {
+    const theme = useTheme();
+    const { changeBackground } = useModel("barModel");
+    const { setNavigation, pushRouter } = useModel("routersModel", true);
+    const { httpGet } = useModel("httpModel", true);
+    const { saveMerchant, guideStep, checkInfo } = useModel("userModel", true);
+
+    const {
+        guide3_title1,
+        guide3_title2,
+        guide3_form_1,
+        guide3_pla_1,
+        guide3_form_2,
+        guide3_pla_2,
+        complete,
+    } = useModel("wordsModel");
+    const [aliName, changeAliName] = React.useState("");
+    const [aliAccount, changeAliAccount] = React.useState("");
+    useFocusEffect(
+        React.useCallback(() => {
+            changeBackground(theme["color-primary-500"]);
+            setNavigation(navigation);
+            checkInfo({
+                aliAccountEvent: changeAliAccount,
+                aliNameEvent: changeAliName,
+            });
+        }, [])
+    );
+
+    const canNext = React.useMemo(() => {
+        return true;
+    }, [name]);
+
+    return (
+        <>
+            <GuideHeaderBar />
+            <ScrollPage>
+                <Layout style={styles.container}>
+                    <Card appearance='headFilled'>
+                        <Text category='s1'>{guide3_title1}</Text>
+                        <Text category='s1'>{guide3_title2}</Text>
+                    </Card>
+                    <Card appearance='formFilled'>
+                        {/* 支付宝账号 */}
+                        <FormInput
+                            label={guide3_form_1}
+                            placeholder={guide3_pla_1}
+                            value={aliName}
+                            onChange={changeAliName}
+                            style={{ paddingVertical: 3 }}
+                        />
+                        {/* 支付宝账户名 */}
+                        <FormInput
+                            label={guide3_form_2}
+                            placeholder={guide3_pla_2}
+                            value={aliAccount}
+                            onChange={changeAliAccount}
+                            style={{ paddingVertical: 3 }}
+                        />
+
+                        <Layout style={styles.layoutLeft} level='1'>
+                            <Button
+                                status='primary'
+                                disabled={!canNext}
+                                onPress={() =>
+                                    saveMerchant({ aliName, aliAccount })
+                                }
+                            >
+                                {complete}
+                            </Button>
+                        </Layout>
+                    </Card>
+                    <ConnectButton />
+                </Layout>
+            </ScrollPage>
+        </>
+    );
+}
+
+const styles = StyleSheet.create({
+    container: {
+        flex: 1,
+        paddingBottom: 33,
+    },
+    tabContent: {
+        backgroundColor: "#fff",
+        marginTop: 20,
+    },
+    img: {
+        width: 100,
+        height: 100,
+        alignSelf: "center",
+    },
+    img2: {
+        width: 97,
+        height: 21,
+        alignSelf: "center",
+        marginTop: 2,
+    },
+    text: {
+        marginTop: 16,
+    },
+    layoutLeft: {
+        // flexDirection: "row",
+        paddingVertical: 10,
+        justifyContent: "center",
+        alignItems: "center",
+        marginTop: 50,
+    },
+    form: {
+        paddingHorizontal: 26,
+        paddingVertical: 20,
+    },
+    textareaContainer: {
+        backgroundColor: "#F0F0F0",
+        height: 100,
+        borderRadius: 4,
+    },
+    textarea: {
+        textAlignVertical: "top", // hack android
+        fontSize: 13,
+        color: "#333",
+        paddingHorizontal: 14,
+        paddingVertical: 10,
+        height: 100,
+    },
+});

+ 118 - 0
screens/Guide4Screen.js

@@ -0,0 +1,118 @@
+import * as WebBrowser from "expo-web-browser";
+import * as React from "react";
+import {
+    Image,
+    Platform,
+    StyleSheet,
+    TouchableOpacity,
+    View,
+    ImageBackground,
+} from "react-native";
+import scrollPage from "../decorator/scrollPage";
+import { useModel } from "flooks";
+import {
+    Layout,
+    Tab,
+    TabView,
+    Text,
+    useTheme,
+    Button,
+    Card,
+} from "@ui-kitten/components";
+import FormInput from "../components/FormInput";
+import { useFocusEffect } from "@react-navigation/native";
+import ScrollPage from "../components/ScrollPage";
+import ConnectButton from "../components/ConnectButton";
+import GuideHeaderBar from "../components/GuideHeaderBar";
+import Textarea from "react-native-textarea";
+
+export default function Guide1Screen({ navigation, route }) {
+    const theme = useTheme();
+    const { changeBackground } = useModel("barModel");
+    const { setNavigation, pushRouter } = useModel("routersModel", true);
+    const { httpGet } = useModel("httpModel", true);
+    const { saveMerchant, changeGuideStep } = useModel("userModel", true);
+
+    const { guide4_title1, guide4_title2, complete } = useModel("wordsModel");
+    useFocusEffect(
+        React.useCallback(() => {
+            changeBackground(theme["color-primary-500"]);
+            setNavigation(navigation);
+        }, [])
+    );
+
+    return (
+        <>
+            <GuideHeaderBar />
+            <ScrollPage>
+                <Layout style={styles.container}>
+                    <Card appearance='headFilled'>
+                        <Text category='s1'>{guide4_title1}</Text>
+                        <Text category='s1'>{guide4_title2}</Text>
+                    </Card>
+
+                    <Layout style={styles.layoutLeft} level='1'>
+                        <Button
+                            status='primary'
+                            onPress={() =>
+                                changeGuideStep(4,'StoreAudit')
+                            }
+                        >
+                            {complete}
+                        </Button>
+                    </Layout>
+                    <ConnectButton />
+                </Layout>
+            </ScrollPage>
+        </>
+    );
+}
+
+const styles = StyleSheet.create({
+    container: {
+        flex: 1,
+        paddingBottom: 33,
+    },
+    tabContent: {
+        backgroundColor: "#fff",
+        marginTop: 20,
+    },
+    img: {
+        width: 100,
+        height: 100,
+        alignSelf: "center",
+    },
+    img2: {
+        width: 97,
+        height: 21,
+        alignSelf: "center",
+        marginTop: 2,
+    },
+    text: {
+        marginTop: 16,
+    },
+    layoutLeft: {
+        // flexDirection: "row",
+        paddingVertical: 10,
+        justifyContent: "center",
+        alignItems: "center",
+        marginTop: 50,
+    },
+    form: {
+        paddingHorizontal: 26,
+        paddingVertical: 20,
+    },
+    textareaContainer: {
+        backgroundColor: "#F0F0F0",
+        height: 100,
+        borderRadius: 4,
+    },
+    textarea: {
+        textAlignVertical: "top", // hack android
+        fontSize: 13,
+        color: "#333",
+        paddingHorizontal: 14,
+        paddingVertical: 10,
+        height: 100,
+    },
+});

+ 134 - 0
screens/StoreAudit.js

@@ -0,0 +1,134 @@
+import * as WebBrowser from "expo-web-browser";
+import * as React from "react";
+import {
+    Image,
+    Platform,
+    StyleSheet,
+    TouchableOpacity,
+    View,
+    ImageBackground,
+} from "react-native";
+import scrollPage from "../decorator/scrollPage";
+import { useModel } from "flooks";
+import {
+    Layout,
+    Tab,
+    TabView,
+    Text,
+    useTheme,
+    Button,
+    Card,
+} from "@ui-kitten/components";
+import FormInput from "../components/FormInput";
+import { useFocusEffect } from "@react-navigation/native";
+import ScrollPage from "../components/ScrollPage";
+import NavHeaderBar from "../components/NavHeaderBar";
+import GoodsCard from "../components/GoodsCard";
+
+export default function StoreAudit({ navigation, route }) {
+    const theme = useTheme();
+    const { changeBackground } = useModel("barModel");
+    const { setNavigation, pushRouter } = useModel("routersModel", true);
+    const { status, changeGuideStep } = useModel("userModel");
+
+    const {
+        storeAudio,
+        storeAudioText1,
+        storeAudioText2,
+        storeAudioText3,
+        storeAudioText4,
+        complete,
+    } = useModel("wordsModel");
+    const [categoryList, changeCategoryList] = React.useState([]);
+    const [merchantNatureList, changeMerchantNatureList] = React.useState([]);
+    useFocusEffect(
+        React.useCallback(() => {
+            changeBackground(theme["color-primary-500"]);
+            setNavigation(navigation);
+        }, [])
+    );
+
+    const canNext = React.useMemo(() => {
+        return true;
+    }, [name]);
+
+    return (
+        <>
+            <NavHeaderBar title={storeAudio} back={false} />
+            <ScrollPage>
+                <Layout style={styles.container}>
+                    {status == "PENDING" ? (
+                        <>
+                            <Image
+                                source={require("../assets/images/shenhe.png")}
+                                style={styles.icon}
+                            />
+                            <Text
+                                category='h6'
+                                status='info'
+                                style={styles.text}
+                            >
+                                {storeAudioText1}
+                            </Text>
+                            <Text
+                                category='h6'
+                                status='info'
+                                style={styles.text}
+                            >
+                                {storeAudioText2}
+                            </Text>
+                        </>
+                    ) : (
+                        <>
+                            <Image
+                                source={require("../assets/images/shehe1.png")}
+                                style={styles.icon}
+                            />
+                            <Text
+                                category='h6'
+                                status='primary'
+                                style={styles.text}
+                            >
+                                {storeAudioText3}
+                            </Text>
+                            <Text
+                                category='h6'
+                                status='primary'
+                                style={styles.text}
+                            >
+                                {storeAudioText4}
+                            </Text>
+                            <Button
+                                style={styles.button}
+                                onPress={() => changeGuideStep("finish")}
+                            >
+                                {complete}
+                            </Button>
+                        </>
+                    )}
+                </Layout>
+            </ScrollPage>
+        </>
+    );
+}
+
+const styles = StyleSheet.create({
+    container: {
+        flex: 1,
+        paddingBottom: 33,
+        paddingVertical: 40,
+        alignItems: "center",
+    },
+    icon: {
+        width: 90,
+        height: 80,
+        marginBottom: 26,
+    },
+    text: {
+        fontWeight: "500",
+        marginBottom: 7,
+    },
+    button: {
+        marginTop: 19,
+    },
+});

+ 23 - 1
yarn.lock

@@ -8822,7 +8822,7 @@ prompts@^2.0.1, prompts@^2.2.1:
     kleur "^3.0.3"
     sisteransi "^1.0.4"
 
-prop-types@^15.6.0, prop-types@^15.6.1, prop-types@^15.6.2, prop-types@^15.7.2:
+prop-types@^15.5.10, prop-types@^15.6.0, prop-types@^15.6.1, prop-types@^15.6.2, prop-types@^15.7.2:
   version "15.7.2"
   resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5"
   integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==
@@ -9040,6 +9040,13 @@ react-is@^16.12.0, react-is@^16.13.0, react-is@^16.7.0, react-is@^16.8.1, react-
   resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4"
   integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==
 
+react-native-animatable@1.3.3:
+  version "1.3.3"
+  resolved "https://registry.yarnpkg.com/react-native-animatable/-/react-native-animatable-1.3.3.tgz#a13a4af8258e3bb14d0a9d839917e9bb9274ec8a"
+  integrity sha512-2ckIxZQAsvWn25Ho+DK3d1mXIgj7tITkrS4pYDvx96WyOttSvzzFeQnM2od0+FUMzILbdHDsDEqZvnz1DYNQ1w==
+  dependencies:
+    prop-types "^15.7.2"
+
 react-native-eva-icons@^1.3.1:
   version "1.3.1"
   resolved "https://registry.yarnpkg.com/react-native-eva-icons/-/react-native-eva-icons-1.3.1.tgz#1e6e019b0fd3cb1669db50bd6bbdaa6d89327593"
@@ -9065,6 +9072,14 @@ react-native-maps@0.26.1:
   resolved "https://registry.yarnpkg.com/react-native-maps/-/react-native-maps-0.26.1.tgz#6ec316259b38d259c8974448d894bd7a23101da4"
   integrity sha512-p4VTB8YB5ZmOmDRCUpoHZkm05amZwhIo04AJMBbB9+JAR2PNNfpo0vceoWX0Mag4wnePkdzPomeWMplr/wimTg==
 
+react-native-modal@^11.5.6:
+  version "11.5.6"
+  resolved "https://registry.yarnpkg.com/react-native-modal/-/react-native-modal-11.5.6.tgz#bb25a78c35a5e24f45de060e5f64284397d38a87"
+  integrity sha512-APGNfbvgC4hXbJqcSADu79GLoMKIHUmgR3fDQ7rCGZNBypkStSP8imZ4PKK/OzIZZfjGU9aP49jhMgGbhY9KHA==
+  dependencies:
+    prop-types "^15.6.2"
+    react-native-animatable "1.3.3"
+
 react-native-number-please@^1.0.5:
   version "1.0.5"
   resolved "https://registry.yarnpkg.com/react-native-number-please/-/react-native-number-please-1.0.5.tgz#6dfe6d4ab8438ed38cd3f21468ef5f9d41c3718e"
@@ -9094,6 +9109,13 @@ react-native-svg@11.0.1:
     css-select "^2.1.0"
     css-tree "^1.0.0-alpha.39"
 
+react-native-textarea@^1.0.4:
+  version "1.0.4"
+  resolved "https://registry.yarnpkg.com/react-native-textarea/-/react-native-textarea-1.0.4.tgz#c250e3c03234adfb82ca9da490fac3db29c06e63"
+  integrity sha512-XM78hqlpUom+YOtjZn69sPZn3ReRXsJfjV0t790k/qNPuc7NG8akfU7vSeKsuRSRH2zVaqk5FbxdkITkeh+3jw==
+  dependencies:
+    prop-types "^15.5.10"
+
 react-native-view-shot@3.1.2:
   version "3.1.2"
   resolved "https://registry.yarnpkg.com/react-native-view-shot/-/react-native-view-shot-3.1.2.tgz#8c8e84c67a4bc8b603e697dbbd59dbc9b4f84825"