Commit ebb7dca2 authored by silver47gin's avatar silver47gin
Browse files

增加Taro-RN代码

parent fc039aac
export default {
pages: ["pages/index", "pages/login", "pages/sign"],
window: {
backgroundTextStyle: "light",
navigationBarBackgroundColor: "#fff",
navigationBarTitleText: "WeChat",
navigationBarTextStyle: "black",
},
};
import codepush from "react-native-code-push";
import { Component } from "react";
import "./app.scss";
class App extends Component {
componentDidMount() {}
componentDidShow() {}
componentDidHide() {}
componentDidCatchError() {}
// this.props.children 是将要会渲染的页面
render() {
return this.props.children;
}
}
export default codepush({
checkFrequency: codepush.CheckFrequency.ON_APP_START,
installMode: codepush.InstallMode.IMMEDIATE,
updateDialog: true,
})(App);
import { AMapSdk } from "react-native-amap3d";
import { PermissionsAndroid } from "react-native";
import { useCallback, useEffect } from "react";
import { init, Geolocation, Coordinates } from "react-native-amap-geolocation";
const androidKey = "20071bdcf9a2031ccee484febd627d2e";
export const useAmap = () => {
useEffect(() => {
AMapSdk.setApiKey(androidKey);
}, []);
};
export const useAmapGeoLocation = () => {
const initSDK = useCallback(async () => {
await PermissionsAndroid.requestMultiple([
PermissionsAndroid.PERMISSIONS.ACCESS_FINE_LOCATION,
PermissionsAndroid.PERMISSIONS.ACCESS_COARSE_LOCATION,
]);
await init({
ios: "",
android: androidKey,
});
}, []);
useEffect(() => {
initSDK();
}, [initSDK]);
return useCallback(
() =>
new Promise<Coordinates>((resolve) => {
Geolocation.getCurrentPosition(({ coords }) => {
resolve(coords);
});
}),
[]
);
};
<!DOCTYPE html>
<html>
<head>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
<meta content="width=device-width,initial-scale=1,user-scalable=no" name="viewport">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-touch-fullscreen" content="yes">
<meta name="format-detection" content="telephone=no,address=no">
<meta name="apple-mobile-web-app-status-bar-style" content="white">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" >
<title></title>
<script>
!function(x){function w(){var v,u,t,tes,s=x.document,r=s.documentElement,a=r.getBoundingClientRect().width;if(!v&&!u){var n=!!x.navigator.appVersion.match(/AppleWebKit.*Mobile.*/);v=x.devicePixelRatio;tes=x.devicePixelRatio;v=n?v:1,u=1/v}if(a>=640){r.style.fontSize="40px"}else{if(a<=320){r.style.fontSize="20px"}else{r.style.fontSize=a/320*20+"px"}}}x.addEventListener("resize",function(){w()});w()}(window);
</script>
</head>
<body>
<div id="app"></div>
</body>
</html>
export default {
navigationBarTitleText: "首页",
};
.container {
color: green;
}
import { Component } from "react";
import { View, Text, Button } from "@tarojs/components";
import Taro from "@tarojs/taro";
import "./index.scss";
export default class Index extends Component {
componentDidMount() {}
componentWillUnmount() {}
componentDidShow() {}
componentDidHide() {}
render() {
return (
<View className="container">
<Text>Hello worldasdad!</Text>
<Button onClick={() => Taro.navigateTo({ url: "/pages/login" })}>
前往登录
</Button>
<Button onClick={() => Taro.navigateTo({ url: "/pages/sign" })}>
前往签到
</Button>
</View>
);
}
}
export default {
navigationBarTitleText: "登录",
};
import { View, Button } from "@tarojs/components";
import { useEffect } from "react";
import { WeWork } from "../../utils/WeWork";
import { api } from "../../utils/Api";
const Login = () => {
useEffect(() => {
WeWork.init("wwauth994c6f0045619f58000022");
}, []);
return (
<View>
<Button
onClick={async () => {
try {
const code = await WeWork.login(
"wx994c6f0045619f58",
"1000022",
"wwauth994c6f0045619f58000022"
);
console.log(code);
const userInfo = await api.getUserInfo(code);
console.log(userInfo);
} catch (error) {
console.log(error);
}
}}
>
登录
</Button>
</View>
);
};
export default Login;
export default {
navigationBarTitleText: "签到",
};
import { MapView, MapType } from "react-native-amap3d";
import { View, Button } from "@tarojs/components";
import { useAmap, useAmapGeoLocation } from "../../hooks/useAmap";
const Sign = () => {
useAmap();
const getCurrentPosition = useAmapGeoLocation();
return (
<View>
<Button onClick={async () => console.log(await getCurrentPosition())}>
获取定位地址
</Button>
<MapView
mapType={MapType.Standard}
initialCameraPosition={{
target: {
latitude: 39.91095,
longitude: 116.37296,
},
zoom: 8,
}}
></MapView>
</View>
);
};
export default Sign;
class Api {
baseUrl: string;
api: Api;
constructor(baseUrl: string) {
this.baseUrl = baseUrl;
}
getUrl = (path: string) => `${this.baseUrl}${path}`;
getUserInfo = async (code: string) =>
await (await fetch(this.getUrl(`/getUserInfo?code=${code}`))).json();
}
export const api = new Api("http://10.1.121.166:8000");
import { NativeModules } from "react-native";
const { CalendarModule } = NativeModules;
interface CalendarModuleInterface {
createCalendarEvent: (name: string) => Promise<string>;
}
export const Calendar = CalendarModule as CalendarModuleInterface;
import { NativeModules } from "react-native";
const { WWNativeModule } = NativeModules;
interface WeWorkInterface {
/**
* 初始化
*/
init: (schema: string) => void;
/**
* 登录
*/
login: (appId: string, agentId: string, schema: string) => Promise<string>;
/**
* 获取常量
*/
getConstants: () => Record<string, string>;
}
export const WeWork = WWNativeModule as WeWorkInterface;
{
"compilerOptions": {
"target": "es2017",
"module": "commonjs",
"removeComments": false,
"preserveConstEnums": true,
"moduleResolution": "node",
"experimentalDecorators": true,
"noImplicitAny": false,
"allowSyntheticDefaultImports": true,
"outDir": "lib",
"noUnusedLocals": true,
"noUnusedParameters": true,
"strictNullChecks": true,
"sourceMap": true,
"baseUrl": ".",
"rootDir": ".",
"jsx": "react-jsx",
"allowJs": true,
"resolveJsonModule": true,
"typeRoots": [
"node_modules/@types",
"global.d.ts"
]
},
"exclude": [
"node_modules",
"dist"
],
"compileOnSave": false
}
This source diff could not be displayed because it is too large. You can view the blob instead.
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