Commit dc5a45b2 authored by XieZhiXiong's avatar XieZhiXiong

feat: 完成搬运登录页面

parent b904dcf9
......@@ -308,6 +308,8 @@ PODS:
- RCTTypeSafety
- React-Core
- ReactCommon/turbomodule/core
- react-native-webview (11.24.0):
- React-Core
- React-perflogger (0.70.6)
- React-RCTActionSheet (0.70.6):
- React-Core/RCTActionSheetHeaders (= 0.70.6)
......@@ -432,6 +434,7 @@ DEPENDENCIES:
- React-jsinspector (from `../node_modules/react-native/ReactCommon/jsinspector`)
- React-logger (from `../node_modules/react-native/ReactCommon/logger`)
- react-native-safe-area-context (from `../node_modules/react-native-safe-area-context`)
- react-native-webview (from `../node_modules/react-native-webview`)
- React-perflogger (from `../node_modules/react-native/ReactCommon/reactperflogger`)
- React-RCTActionSheet (from `../node_modules/react-native/Libraries/ActionSheetIOS`)
- React-RCTAnimation (from `../node_modules/react-native/Libraries/NativeAnimation`)
......@@ -511,6 +514,8 @@ EXTERNAL SOURCES:
:path: "../node_modules/react-native/ReactCommon/logger"
react-native-safe-area-context:
:path: "../node_modules/react-native-safe-area-context"
react-native-webview:
:path: "../node_modules/react-native-webview"
React-perflogger:
:path: "../node_modules/react-native/ReactCommon/reactperflogger"
React-RCTActionSheet:
......@@ -578,6 +583,7 @@ SPEC CHECKSUMS:
React-jsinspector: 60769e5a0a6d4b32294a2456077f59d0266f9a8b
React-logger: 1623c216abaa88974afce404dc8f479406bbc3a0
react-native-safe-area-context: 99b24a0c5acd0d5dcac2b1a7f18c49ea317be99a
react-native-webview: 6408bc328e65042d240d0ebd62baa76ffd23b1aa
React-perflogger: 8c79399b0500a30ee8152d0f9f11beae7fc36595
React-RCTActionSheet: 7316773acabb374642b926c19aef1c115df5c466
React-RCTAnimation: 5341e288375451297057391227f691d9b2326c3d
......
......@@ -23,7 +23,6 @@
"@types/qs": "^6.9.7",
"@types/react-native-vector-icons": "^6.4.12",
"crypto-es": "^1.2.7",
"expo-blur": "~8.2.0",
"i18next": "^20.5.0",
"mobx": "^6.7.0",
"mobx-react-lite": "^3.4.0",
......@@ -34,10 +33,13 @@
"react-native": "0.70.6",
"react-native-fetch-polyfill": "^1.1.3",
"react-native-image-zoom-viewer": "^3.0.1",
"react-native-root-siblings": "^4.1.1",
"react-native-root-toast": "^3.4.0",
"react-native-safe-area-context": "^4.4.1",
"react-native-screens": "^3.18.2",
"react-native-storage": "^1.0.1",
"react-native-vector-icons": "^9.2.0"
"react-native-vector-icons": "^9.2.0",
"react-native-webview": "^11.24.0"
},
"devDependencies": {
"@babel/core": "^7.12.9",
......
......@@ -9,6 +9,7 @@
*/
import React from 'react';
import { RootSiblingParent } from 'react-native-root-siblings';
import RootNavigationContainer from './routers/RootNavigationContainer';
import { storage } from './utils/storage';
import useColorScheme from './hooks/useColorScheme';
......@@ -18,7 +19,11 @@ global.storage = storage;
const App = () => {
const colorScheme = useColorScheme();
return <RootNavigationContainer colorScheme={colorScheme} />;
return (
<RootSiblingParent>
<RootNavigationContainer colorScheme={colorScheme} />
</RootSiblingParent>
);
};
export default App;
import React, { useEffect, useState } from 'react';
import { View, TextInput, Text, TouchableOpacity } from 'react-native';
import Icons from 'react-native-vector-icons/AntDesign';
import Toast from 'react-native-root-toast';
import {
postMemberMobileWechatAppletSends,
getMemberMobileRegisterCountryList,
} from '../../../../services/MemberV2Api';
import useAppStyle from '../../../../hooks/useAppStyle';
import AreaCodePopup from '../../../../components/AreaCodePopup';
import type { AreaCodeOption } from '../../../../components/AreaCodePopup';
import styles from './styles';
interface Iprops {
/**
* 登录回掉
*/
submit: (data: any) => void;
}
type MobileParamsType = {
phone: string;
smsCode: string;
countryCode: string;
shopType: string;
};
const MobileView: React.FC<any> = (props: Iprops) => {
const { submit } = props;
const [countryCode, setCode] = useState('+86'); // 手机区号
const [phoneLength, setphoneLength] = useState(11); // 手机号码长度
const [btnContent, setBtnContent] = useState<any>('获取验证码'); // f发送验证码文字
const [btnDisabled, setBtnDisabled] = useState(false); // 禁止点击发送验证
const [visibleAreaCode, setVisibleAreaCode] = useState(false);
const myStyle = useAppStyle(styles);
const [from, setFrom] = useState<MobileParamsType>({
phone: '',
smsCode: '',
countryCode: '',
shopType: '',
});
const [countryList, setCountryList] = useState<AreaCodeOption[]>([]);
const fetchCountryList = () => {
getMemberMobileRegisterCountryList().then(res => {
if (res.code === 1000) {
setCountryList(res.data);
}
});
};
useEffect(() => {
fetchCountryList();
}, []);
/* 倒计时 */
let time = 60;
const hanleCountdown = () => {
if (time > 0 && time <= 60) {
time -= 1;
setBtnContent(time < 10 ? `0${time}s` : `${time}s`);
setBtnDisabled(true);
setTimeout(() => {
hanleCountdown();
}, 1000);
} else {
time = 60;
setBtnDisabled(false);
setBtnContent('获取验证码');
}
};
// 获取国家代码和手机号码位数
const getcode = async () => {
const phone = from.phone;
if (!btnDisabled) {
if (!phone) {
Toast.show('请输入手机号码', { position: Toast.positions.CENTER });
} else {
const param = {
countryCode,
phone,
};
const res = await postMemberMobileWechatAppletSends(param);
if (res.code === 1000) {
hanleCountdown();
Toast.show('发送成功', { position: Toast.positions.CENTER });
}
}
}
};
const setKey = (val: string, key: string) => {
const fromData = from;
setFrom({ ...fromData, [key]: val });
};
const login = async () => {
const param: any = from;
if (!param.phone || !param.smsCode) {
Toast.show(!param.phone ? '请输入手机号码' : '请输入验证码', {
position: Toast.positions.CENTER,
});
return;
}
const data = {
...param,
shopType: 1,
countryCode,
};
submit(data);
};
const handleVisibleAreaCode = (flag?: boolean) => {
setVisibleAreaCode(!!flag);
};
const handleAreaCodeChange = (value: AreaCodeOption) => {
setCode(value.code);
setphoneLength(value.phoneLength as number);
};
return (
<View style={myStyle.mobileView}>
<View style={myStyle['mobileView-fromItem']}>
<View style={myStyle['mobileView-fromItem-fill']}>
<Text
style={myStyle['mobileView-fromItem-code']}
onPress={() => handleVisibleAreaCode(true)}
>
{countryCode}
</Text>
{/* <Image
source={fill}
style={myStyle['mobileView-fromItem-fill-image']}
/> */}
<Icons name="caretdown" size={10} color="#C0C4CC" />
</View>
<TextInput
value={from.phone}
keyboardType="numeric"
maxLength={phoneLength}
placeholder="请输入手机号"
onChangeText={val => setKey(val, 'phone')}
style={myStyle['mobileView-fromItem-input']}
/>
</View>
<View style={myStyle['mobileView-fromFlex']}>
<TextInput
value={from.smsCode}
placeholder="请输入验证码"
onChangeText={val => setKey(val, 'smsCode')}
style={myStyle['mobileView-fromItem-input']}
/>
<TouchableOpacity
onPress={getcode}
activeOpacity={0.8}
style={myStyle['mobileView-srmCode']}
>
<Text style={myStyle['mobileView-srmCode-text']}>{btnContent}</Text>
</TouchableOpacity>
</View>
<TouchableOpacity
style={myStyle['mobileView-submit']}
onPress={login}
activeOpacity={0.8}
>
<Text style={myStyle['mobileView-submit-text']} onPress={login}>
登录
</Text>
</TouchableOpacity>
{/* 区号弹窗 */}
<AreaCodePopup
visible={visibleAreaCode}
onClose={() => handleVisibleAreaCode(false)}
options={countryList}
value={
countryCode
? {
code: countryCode,
phoneLength,
}
: undefined
}
onChange={handleAreaCodeChange}
/>
</View>
);
};
export default MobileView;
import { StyleSheet } from 'react-native';
import themeLayout from '../../../../constants/theme/layout';
export default () =>
StyleSheet.create({
mobileView: {},
'mobileView-fromItem': {
marginTop: 16,
alignItems: 'center',
flexDirection: 'row',
backgroundColor: '#f5f6f7',
borderRadius: 8,
paddingHorizontal: 8,
},
'mobileView-fromItem-code': {
fontSize: 14,
marginRight: themeLayout['margin-xs'],
},
'mobileView-fromItem-input': {
fontSize: 14,
paddingVertical: 12,
flex: 1,
},
'mobileView-fromItem-fill': {
paddingHorizontal: 10,
borderRightWidth: 1,
borderColor: '#c8cacd',
borderStyle: 'solid',
alignItems: 'center',
flexDirection: 'row',
marginRight: 12,
},
'mobileView-fromItem-fill-image': {
width: 16,
height: 16,
},
'mobileView-fromFlex': {
marginTop: 16,
alignItems: 'center',
flexDirection: 'row',
backgroundColor: '#f5f6f7',
borderRadius: 8,
paddingHorizontal: 8,
justifyContent: 'space-between',
},
'mobileView-imgbox': {
width: 40,
height: 40,
justifyContent: 'flex-end',
alignItems: 'center',
},
'mobileView-srmCode': {
borderLeftWidth: 1,
borderColor: '#c8cacd',
borderStyle: 'solid',
paddingLeft: 10,
marginLeft: 12,
},
'mobileView-srmCode-text': {
fontSize: 14,
color: '#C0C4CC',
},
'mobileView-submit': {
marginTop: 30,
backgroundColor: '#EA5504',
borderRadius: 8,
paddingVertical: 10,
},
'mobileView-submit-text': {
fontSize: 14,
color: '#fff',
textAlign: 'center',
},
});
import React, { useState } from 'react';
import { View, TextInput, Image, TouchableOpacity, Text } from 'react-native';
import Toast from 'react-native-root-toast';
import Eye from '../../../../../assets/images/eye.png';
import EyeOff from '../../../../../assets/images/EyeOff.png';
import useAppStyle from '../../../../hooks/useAppStyle';
import styles from './styles';
type MobileParamsType = {
account: string;
password: string;
shopType: number;
};
interface Iprops {
submit: (data: MobileParamsType) => void;
}
const SingView: React.FC<any> = (props: Iprops) => {
const { submit } = props;
const [from, setFrom] = useState<MobileParamsType>({
account: '',
password: '',
shopType: 1,
});
const [type, setType] = useState<boolean>(true);
const [loginflag, setloginflag] = useState(false);
const myStyle = useAppStyle(styles);
const setKey = (val: string, key: string) => {
const fromData = from;
setFrom({ ...fromData, [key]: val });
};
/* 请求登录 */
const login = async () => {
if (!loginflag) {
setloginflag(true);
if (!from.account || !from.password) {
setloginflag(false);
Toast.show(!from.account ? '请输入用户名或手机号码' : '请输入密码', {
position: Toast.positions.CENTER,
});
return;
}
submit(from);
setTimeout(() => {
setloginflag(false);
}, 1000);
}
};
return (
<View style={myStyle.mobileView}>
<View style={myStyle['mobileView-fromItem']}>
<TextInput
value={from.account}
placeholder="请输入用户名/手机号"
onChangeText={val => setKey(val, 'account')}
style={myStyle['mobileView-fromItem-input']}
/>
</View>
<View style={myStyle['mobileView-fromFlex']}>
<TextInput
value={from.password}
secureTextEntry={type ? true : false}
placeholder="请输入密码"
onChangeText={val => setKey(val, 'password')}
style={myStyle['mobileView-fromItem-input']}
/>
<TouchableOpacity
style={myStyle['mobileView-imgbox']}
onPress={() => setType(!type)}
activeOpacity={0.8}
>
<Image
source={type ? EyeOff : Eye}
style={myStyle['mobileView-fromItem-fill-image']}
/>
</TouchableOpacity>
</View>
<TouchableOpacity
style={myStyle['mobileView-submit']}
onPress={login}
activeOpacity={0.8}
>
<Text style={myStyle['mobileView-submit-text']} onPress={login}>
登录
</Text>
</TouchableOpacity>
</View>
);
};
export default SingView;
import { StyleSheet } from 'react-native';
import themeLayout from '../../../../constants/theme/layout';
export default () =>
StyleSheet.create({
mobileView: {},
'mobileView-fromItem': {
marginTop: 16,
alignItems: 'center',
flexDirection: 'row',
backgroundColor: '#f5f6f7',
borderRadius: 8,
paddingHorizontal: 8,
},
'mobileView-fromItem-code': {
fontSize: 14,
marginRight: themeLayout['margin-xs'],
},
'mobileView-fromItem-input': {
fontSize: 14,
paddingVertical: 12,
flex: 1,
},
'mobileView-fromItem-fill': {
paddingHorizontal: 10,
borderRightWidth: 1,
borderColor: '#c8cacd',
borderStyle: 'solid',
alignItems: 'center',
flexDirection: 'row',
marginRight: 12,
},
'mobileView-fromItem-fill-image': {
width: 16,
height: 16,
},
'mobileView-fromFlex': {
marginTop: 16,
alignItems: 'center',
flexDirection: 'row',
backgroundColor: '#f5f6f7',
borderRadius: 8,
paddingHorizontal: 8,
justifyContent: 'space-between',
},
'mobileView-imgbox': {
justifyContent: 'flex-end',
alignItems: 'center',
flexShrink: 0,
marginLeft: themeLayout['margin-xs'],
},
'mobileView-submit': {
marginTop: 30,
backgroundColor: '#EA5504',
borderRadius: 8,
paddingVertical: 10,
},
'mobileView-submit-text': {
fontSize: 14,
color: '#fff',
textAlign: 'center',
},
});
import React, { useEffect, useState } from 'react';
import { View, Text, Image } from 'react-native';
// import { Text, Image, Toast } from '@linkseeks/god-mobile';
// import ModeMobile from '@/components/Modemobile';
// import Icon from 'react-native-vector-icons/FontAwesome';
import Toast from 'react-native-root-toast';
import { setAsyncStorage } from '../../utils/storage';
import { encryptedByAES, decryptedByAES } from '../../utils/cryptoAes';
import { useStores } from '../../hooks/useStores';
......@@ -12,40 +10,29 @@ import {
} from '../../services/MemberV2Api';
import { getManageContentNoticeFindWithOutContent } from '../../services/ManageV2Api';
import useAppStyle from '../../hooks/useAppStyle';
import { RootStackScreenProps } from '../../routers/types';
import { USER_INFO } from '../../constants';
import Checkbox from '../../components/Checkbox';
import zhongranLogo from '../../../assets/images/zhongran_logo.png';
// import MobileView from './components/Mobile'
// import SingView from './components/Sing'
import MobileView from './components/Mobile';
import SingView from './components/Sing';
import styles from './styles';
const Login = () => {
type LoginScreenNavigationProp = RootStackScreenProps<'Login'>;
const Login: React.FC<LoginScreenNavigationProp> = ({ navigation }) => {
const LoginTypeText = ['密码登录', '手机号码登录'];
const [current, setcurrent] = useState(0); // 0 是账号密码登录
const { userStore } = useStores();
const [toggle, settoggle] = useState<boolean>(false); // 显示手机号模态框
const [countryCode, setCode] = useState('+86'); // 手机区号
const [phoneLength, setphoneLength] = useState(11); // 手机号码长度
const [select, setSelect] = useState(false); // 设置协议选中
const [columnTypeList, setColumnTypeList] = useState<any>([]); // 协议数据
const myStyle = useAppStyle(styles);
// const renderComponentByType = () => {
// switch (current) {
// case 0:
// return <SingView submit={onSubmit} />
// case 1:
// return <MobileView submit={onSubmit} phoneLength={phoneLength} Confirm={Confirm} countryCode={countryCode} />
// default:
// return null
// }
// }
const { userStore } = useStores();
const onSubmit = async (data: any) => {
if (!select) {
Toast.show({
title: i18n.t('user:user.login.agreement.tips', '请阅读并同意相关协议'),
icon: 'none',
});
Toast.show('请阅读并同意相关协议', { position: Toast.positions.CENTER });
return;
}
let fn: Function | null = null;
......@@ -64,53 +51,49 @@ const Login = () => {
}
fn?.(current === 1 ? data : obj).then(res => {
if (res.code === 1000) {
setAsyncStorage('USER_INFO', res.data);
userStore.setUserInfo(res.data);
Router.reLaunch('root/home');
setAsyncStorage(USER_INFO, res.data);
// userStore.setUserInfo(res.data);
navigation.replace('BottomTabs', { screen: 'Home' });
return;
} else {
if (current == 1) {
if (current === 1) {
obj.password = decryptedByAES(obj.password);
}
Toast.show({ title: res.message, icon: 'none' });
Toast.show(res.message, { position: Toast.positions.CENTER });
return;
}
});
};
const Confirm = flag => {
settoggle(flag);
};
const findAllByColumnType = async () => {
const { code, data, message } =
await getManageContentNoticeFindWithOutContent({ columnType: '2' });
if (code === 1000) {
setColumnTypeList(data);
} else {
Taro.showToast({ title: message, icon: 'none' });
Toast.show(message, { position: Toast.positions.CENTER });
}
};
const renderComponentByType = () => {
switch (current) {
case 0:
return <SingView submit={onSubmit} />;
case 1:
return <MobileView submit={onSubmit} />;
default:
return null;
}
};
const webView = (item: any) => {
Router.navigateTo('root/richtext', { id: item.id, type: 'sign' });
const handleJumpLoginAgreement = (item: any) => {
navigation.navigate('LoginAgreement', { id: item.id });
};
useEffect(() => {
findAllByColumnType();
}, []);
/* 选择区号回调 */
const onConfirm = item => {
setCode(item.code);
setphoneLength(item.phoneLength);
settoggle(false);
};
/* 关闭 */
const onClose = item => {
settoggle(item.toggle);
};
return (
<View style={myStyle.container}>
<View style={myStyle.head}>
......@@ -140,19 +123,20 @@ const Login = () => {
))}
</View>
{/* {renderComponentByType()} */}
{renderComponentByType()}
{/* <ModeMobile containerClassName={styles['mobileModel']} toggle={toggle} onConfirm={onConfirm} onClose={onClose} /> */}
{/* 忘记密码 */}
<View style={myStyle.sign}>
{/* <Image src={select ? require('@/assets/images/Checked-@2x.png') : require('@/assets/images/Default@2x.png')} onClick={() => setSelect(!select)} /> */}
<View style={myStyle['sign-agree']}>
<Checkbox checked={select} onChange={value => setSelect(value)} />
</View>
<View style={myStyle['sign-signFlex']}>
<Text style={myStyle['sign-signText']}>阅读并同意</Text>
{columnTypeList.map((items: any) => (
<Text
key={items.id}
style={myStyle['sign-signRight']}
onPress={() => webView(items)}
onPress={() => handleJumpLoginAgreement(items)}
>
{items.title}{' '}
</Text>
......
......@@ -19,7 +19,7 @@ export default (theme: ThemeStyle) =>
marginTop: 32,
},
logo: {
width: 115.03,
width: 115,
height: 36,
},
logoTitle: {
......@@ -69,6 +69,9 @@ export default (theme: ThemeStyle) =>
color: '#000',
fontSize: 12,
},
'sign-agree': {
marginRight: 10,
},
mobileView: {},
'mobileView-fromItem': {
marginTop: 16,
......
declare module '*.css';
declare module '*.less';
declare module "*.png";
declare module "*.mp4";
declare module "classnames";
declare module "*.json";
declare module '*.svg'
declare module '*.png';
declare module '*.mp4';
declare module 'classnames';
declare module '*.json';
declare module '*.svg';
declare module 'react-native-echarts-pro';
......@@ -1302,6 +1302,11 @@
resolved "http://npm.shushangyun.com/@react-native%2fassets/-/assets-1.0.0.tgz#c6f9bf63d274bafc8e970628de24986b30a55c8e"
integrity sha512-KrwSpS1tKI70wuKl68DwJZYEvXktDHdZMG0k2AXD/rJVSlB23/X2CB2cutVR0HwNMJIal9HOUOBB2rVfa6UGtQ==
"@react-native/normalize-color@*":
version "2.1.0"
resolved "http://npm.shushangyun.com/@react-native%2fnormalize-color/-/normalize-color-2.1.0.tgz#939b87a9849e81687d3640c5efa2a486ac266f91"
integrity sha512-Z1jQI2NpdFJCVgpY+8Dq/Bt3d+YUi1928Q+/CZm/oh66fzM0RUl54vvuXlPJKybH4pdCZey1eDTPaLHkMPNgWA==
"@react-native/normalize-color@2.0.0":
version "2.0.0"
resolved "http://npm.shushangyun.com/@react-native%2fnormalize-color/-/normalize-color-2.0.0.tgz#da955909432474a9a0fe1cbffc66576a0447f567"
......@@ -2966,6 +2971,15 @@ depd@2.0.0:
resolved "http://npm.shushangyun.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df"
integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==
deprecated-react-native-prop-types@^2.3.0:
version "2.3.0"
resolved "http://npm.shushangyun.com/deprecated-react-native-prop-types/-/deprecated-react-native-prop-types-2.3.0.tgz#c10c6ee75ff2b6de94bb127f142b814e6e08d9ab"
integrity sha512-pWD0voFtNYxrVqvBMYf5gq3NA2GCpfodS1yNynTPc93AYA/KEMGeWDqqeUB6R2Z9ZofVhks2aeJXiuQqKNpesA==
dependencies:
"@react-native/normalize-color" "*"
invariant "*"
prop-types "*"
destroy@1.2.0:
version "1.2.0"
resolved "http://npm.shushangyun.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015"
......@@ -3199,16 +3213,16 @@ escape-html@~1.0.3:
resolved "http://npm.shushangyun.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988"
integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=
escape-string-regexp@2.0.0, escape-string-regexp@^2.0.0:
version "2.0.0"
resolved "http://npm.shushangyun.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344"
integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==
escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5:
version "1.0.5"
resolved "http://npm.shushangyun.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=
escape-string-regexp@^2.0.0:
version "2.0.0"
resolved "http://npm.shushangyun.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344"
integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==
escape-string-regexp@^4.0.0:
version "4.0.0"
resolved "http://npm.shushangyun.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34"
......@@ -3505,11 +3519,6 @@ expect@^26.6.2:
jest-message-util "^26.6.2"
jest-regex-util "^26.0.0"
expo-blur@~8.2.0:
version "8.2.2"
resolved "http://npm.shushangyun.com/expo-blur/-/expo-blur-8.2.2.tgz#a7643d893afb7aed5512b25d5df22ee6083832c1"
integrity sha512-Xiklw60RUPIchHKzfvLTIuccVDTIQEAIPv02yJY2xFDujQKjE0NU0/Z5Z+zsEI9QOi82jX9NbR8gQ+8Mm3hDhA==
ext@^1.1.2:
version "1.7.0"
resolved "http://npm.shushangyun.com/ext/-/ext-1.7.0.tgz#0ea4383c0103d60e70be99e9a7f11027a33c4f5f"
......@@ -4263,7 +4272,7 @@ internal-slot@^1.0.3:
has "^1.0.3"
side-channel "^1.0.4"
invariant@^2.2.4:
invariant@*, invariant@2.2.4, invariant@^2.2.4:
version "2.2.4"
resolved "http://npm.shushangyun.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6"
integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==
......@@ -6628,7 +6637,7 @@ prompts@^2.0.1, prompts@^2.0.4, prompts@^2.4.0:
kleur "^3.0.3"
sisteransi "^1.0.5"
prop-types@^15.7.2, prop-types@^15.8.1:
prop-types@*, prop-types@^15.5.10, prop-types@^15.7.2, prop-types@^15.8.1:
version "15.8.1"
resolved "http://npm.shushangyun.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5"
integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==
......@@ -6760,6 +6769,20 @@ react-native-image-zoom-viewer@^3.0.1:
dependencies:
react-native-image-pan-zoom "^2.1.12"
react-native-root-siblings@^4.0.0, react-native-root-siblings@^4.1.1:
version "4.1.1"
resolved "http://npm.shushangyun.com/react-native-root-siblings/-/react-native-root-siblings-4.1.1.tgz#b7742db7634a87f507eb99a5fd699c4f10c46ab0"
integrity sha512-sdmLElNs5PDWqmZmj4/aNH4anyxreaPm61c4ZkRiR8SO/GzLg6KjAbb0e17RmMdnBdD0AIQbS38h/l55YKN4ZA==
react-native-root-toast@^3.4.0:
version "3.4.0"
resolved "http://npm.shushangyun.com/react-native-root-toast/-/react-native-root-toast-3.4.0.tgz#f5fedc06c80b0ed20a93be8832d32e9a67762187"
integrity sha512-2jv9XG9tK0rbXkD3IaO/clSJJQYXRnOCnGliZnYP/Z6I3u2QtdOp5xQ/ni8BbLqpPwSeKfCuO7R9H6iHuAN+Ig==
dependencies:
deprecated-react-native-prop-types "^2.3.0"
prop-types "^15.5.10"
react-native-root-siblings "^4.0.0"
react-native-safe-area-context@^4.4.1:
version "4.4.1"
resolved "http://npm.shushangyun.com/react-native-safe-area-context/-/react-native-safe-area-context-4.4.1.tgz#239c60b8a9a80eac70a38a822b04c0f1d15ffc01"
......@@ -6789,6 +6812,14 @@ react-native-vector-icons@^9.2.0:
prop-types "^15.7.2"
yargs "^16.1.1"
react-native-webview@^11.24.0:
version "11.24.0"
resolved "http://npm.shushangyun.com/react-native-webview/-/react-native-webview-11.24.0.tgz#7ebc4c1bfc239c12bb91a3dbed5aabc929eae627"
integrity sha512-iQBVZt9inVzCfX6ShXgdx9siZs9TG2WOfN2Ve8zoCbaS1SI8bNHlAlWfjBQJ66xVfhHvq+A0WhGLVfd1eBweCQ==
dependencies:
escape-string-regexp "2.0.0"
invariant "2.2.4"
react-native@0.70.6:
version "0.70.6"
resolved "http://npm.shushangyun.com/react-native/-/react-native-0.70.6.tgz#d692f8b51baffc28e1a8bc5190cdb779de937aa8"
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment