You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

272 lines
7.2 KiB
TypeScript

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

import classnames from "classnames";
import { Component } from "react";
import Taro from "@tarojs/taro";
// 引入 Swiper, SwiperItem 组件
import { Block, Button, Image, Text, View } from "@tarojs/components";
/*** redux ***/
import { connect } from "react-redux";
import { setMobile } from "@/store/features/userInfo";
/*** redux end ***/
import "taro-ui/dist/style/components/button.scss"; // 按需引入
import "./register.less";
/** 自定义组件 **/
import Navbar from "../../components/navbar/navbar";
/** 自定义组件 **/
import { GetUserMobile, MpSplashDetail } from "@/utils/Interface";
import { go, msg } from "@/utils/traoAPI";
class Register extends Component<any, any> {
constructor(props) {
super(props);
this.state = {
name: "注册",
style:
"width:calc(100% - 100rpx);background:#fff;border-radius: 20rpx;box-shadow: -2rpx 0 12rpx .5rpx rgba(129, 129, 129, 0.1); height: 800rpx; padding: 30rpx;",
titleHeight: "",
menu: {},
isChecked: false,
isRegister: false,
isShow: false,
isButtonDisabled: false,
userAgreement: "",
policy: "",
bg: "",
showPrivacyPopup: false,
showPrivacyContent: false,
// isRead: true,
fromUrl: "",
serial: Taro.getStorageSync("serial"),
};
}
/**
* 生命周期函数--监听页面加载
*/
async onLoad() {
this.initData();
}
onSkip = () => {
// 返回首页尽量清空路由记录,防止扫码参数bug扰乱逻辑
Taro.switchTab({ url: "/pages/index/index" });
};
skipRegister() {
// 跳过注册
Taro.setStorageSync("skipRegister", true);
Taro.switchTab({ url: "/pages/index/index" });
}
onDisagreeTap = () => {
// 关闭小程序
Taro.exitMiniProgram({});
};
onClosePrivacyContentPopup = () => {
this.setState({
showPrivacyContent: false,
});
};
handleAgreePrivacyAuthorization = () => {
this.setState({
showPrivacyPopup: false,
});
// app.globalData.needAuthorization = false;
};
onCheck = () => {
const { isChecked } = this.state;
this.setState({ isChecked: !isChecked });
};
onSubmit = async (event) => {
if (event.detail.errMsg !== "getPhoneNumber:ok") {
this.changeGetPhoneNumberBtn();
return msg("手机号获取失败");
}
const { code } = event.detail;
try {
let res = await GetUserMobile({ code });
if (res.data) {
const mobile = res.data.data;
Taro.setStorageSync("mobile", mobile);
this.props.setMobile(mobile);
this.changeGetPhoneNumberBtn();
msg("注册成功");
// 注册成功两秒后跳转个人信息完善页
setTimeout(() => {
go("/pages/userInfo/userInfo");
}, 1000);
} else {
msg("请求异常");
}
} catch (error) {
this.changeGetPhoneNumberBtn();
}
};
// 防止重复获取手机号
changeGetPhoneNumberBtn = () => {
let { isButtonDisabled } = this.state;
this.setState({
isButtonDisabled: !isButtonDisabled,
});
};
onCloseRegister = () => {
if (!this.state.isRegister) return;
this.setState({ isRegister: false });
if (this.state.fromUrl) {
const url = this.state.fromUrl;
this.setState({
fromUrl: "",
});
Taro.redirectTo({
url: decodeURIComponent(url),
});
} else {
go("/pages/userInfo/userInfo");
}
};
onClosePopup = () => {
this.setState({ isShow: false, userAgreement: null, policy: null });
};
onPopup = async (event) => {
const { type } = event.target.dataset;
console.log("onPopup", event, type);
};
onPrivacyTap = () => {
// 跳转用户隐私协议
go("/pages/privacyPolicy/privacyPolicy");
};
onUserTap = () => {
// 跳转用户协议
go("/pages/userPolicy/userPolicy");
};
componentDidMount() {}
componentWillUnmount() {}
componentDidShow() {}
componentDidHide() {}
async initData() {
console.log("MpSplashDetail Register");
const { data } = await MpSplashDetail({
pageNum: 1,
pageSize: 5,
type: 2,
});
if (data.code === 200) {
this.setState({ bg: data.rows[0].filePath });
}
}
render() {
let { isChecked, bg, isButtonDisabled, serial } = this.state;
return (
<Block>
<View>
<Navbar />
<View />
<View className="main">
<Image className="bg" src={bg} mode="aspectFill" />
</View>
<View className="footer">
<View className="title"></View>
<View className="content">
<View>
<Text onClick={this.onUserTap} data-type="agreement">
</Text>
</View>
<View>
<Text onClick={this.onPrivacyTap} data-type="policy">
</Text>
</View>
</View>
{serial && (
<View className="footer1">
<Button
type="primary"
disabled={!isChecked || isButtonDisabled}
open-type="getPhoneNumber"
className={classnames("btn_login")}
onGetPhoneNumber={this.onSubmit}
onClick={this.changeGetPhoneNumberBtn}
>
</Button>
<View className="text" onClick={this.skipRegister}>
&gt;
</View>
</View>
)}
{!serial && (
<Button
type="primary"
disabled={!isChecked || isButtonDisabled}
open-type="getPhoneNumber"
className={classnames("btn_login1")}
onGetPhoneNumber={this.onSubmit}
onClick={this.changeGetPhoneNumberBtn}
>
</Button>
)}
<View className="checked_box">
{isChecked ? (
<Image
onClick={this.onCheck}
className="icon"
src={require("../../img/welcome/checked.png")}
/>
) : (
<Image
onClick={this.onCheck}
className="icon"
src={require("../../img/welcome/unchecked.png")}
/>
)}
<View className="tips" onClick={this.onCheck}>
</View>
</View>
<Image
className="close"
mode="widthFix"
src={require("../../img/close.png")}
onClick={this.onSkip}
/>
</View>
</View>
</Block>
);
}
}
const mapStateToProps = (state) => ({
mobile: state.userInfo.mobile,
});
const mapDispatchToProps = (dispatch) => ({
setMobile(data) {
dispatch(setMobile(data));
},
});
export default connect(mapStateToProps, mapDispatchToProps)(Register);