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.

363 lines
11 KiB
TypeScript

import { SaveMessage } from "../../utils/Interface";
import dayjs from "dayjs";
import { Component, PropsWithChildren, useEffect, useState } from "react";
import Taro from "@tarojs/taro";
// 引入 Swiper, SwiperItem 组件
import { View, Block, Textarea, Image } from "@tarojs/components";
// import { Toast } from "@antmjs/vantui";
// const Toast_ = Toast.createOnlyToast();
import { go, loading, msg } from "../../utils/traoAPI";
/*** redux ***/
import { connect } from "react-redux";
import { userRefresh } from "../../store/features/userInfo";
/*** redux end ***/
import "taro-ui/dist/style/components/button.scss"; // 按需引入
import "./user.less";
import type CustomTabBar from "../../custom-tab-bar";
import Navbar from "../../components/navbar/navbar";
import PopupAlert from "../../components/popup/popup-alert";
import PopupDrawer from "../../components/popup/popup-drawer";
class User extends Component<any, any> {
pageCtx = Taro.getCurrentInstance().page;
constructor(props) {
super(props);
this.state = {
name: "user",
userInfo: this.props.userInfo,
MerchMobile: "",
count: 0,
year: new Date().getFullYear(),
lastDay: dayjs().endOf("month").format("YYYY-MM-DD"),
messagecount: 0,
isNotRegister: false, // 是否未注册
isShowCustomerService: false, // 反馈留言
messageInfo: "", // 用户留言
};
}
async onLoad() {}
componentDidMount() {}
componentWillUnmount() {}
componentDidShow() {
this.setState({ userInfo: this.props.userInfo });
const tabbar = Taro.getTabBar<CustomTabBar>(this.pageCtx);
tabbar?.setSelected(4);
}
componentDidHide() {}
async initData() {}
postSaveMessage = async () => {
let { messageInfo } = this.state;
let params = {
source: 1,
messageInfo: messageInfo,
};
let res = await SaveMessage(params);
if (res.data.code === 200) {
}
};
gourl = (e) => {
let { userInfo } = this.state;
if (!userInfo.mobile) {
this.setState({ isNotRegister: true }); // 打开弹窗
return;
}
let url = e.currentTarget.dataset.url;
// if (url == "/pages/integral_list/integral_list") {
// // this.CreditSubscribe(url);
// return false;
// }
Taro.navigateTo({
url,
});
};
gourls = (e) => {
let url = e.currentTarget.dataset.url;
if (url === "/pages/register/register" && this.state.userInfo.mobile) {
url = "/pages/userInfoDetail/userInfoDetail";
}
Taro.navigateTo({
url,
});
};
gominiapp() {
Taro.navigateToMiniProgram({
appId: "wx438760012de48d74",
path: "/pages/home/home",
envVersion: "release",
success(res) {
// 打开成功
},
});
}
showCustomerService = () => {
let { messageInfo } = this.state;
console.log("messageInfo", messageInfo);
this.setState({ isShowCustomerService: true });
};
confirmCustomerService = () => {
let { messageInfo } = this.state;
if (messageInfo.length) {
this.postSaveMessage();
this.closeCustomerService();
} else {
msg("留言内容不能为空!");
// Toast_.fail({
// message: "留言内容不能为空!",
// });
}
};
closeCustomerService = () => {
this.setState({ isShowCustomerService: false });
};
closeRegisterAlert = () => {
this.setState({ isNotRegister: false });
};
onInputTextarea = (e) => {
this.setState({ messageInfo: e.detail.value });
};
render() {
let {
userInfo,
count,
lastDay,
messagecount,
isNotRegister,
isShowCustomerService,
} = this.state;
return (
<Block>
<Navbar transparent={true}></Navbar>
<View className="user_bg_card">
<Image
src={require("../../img/user/user-bg.png")}
mode="aspectFill"
></Image>
</View>
<View className="info_box">
<View className="infobox1">
<View className="img">
<Image src={userInfo.headimg} mode="widthFix" />
</View>
<View
className="info1 flex aitems"
data-url="/pages/userInfoDetail/userInfoDetail"
>
<View className="tipbox flex aitems">
<View className="tip1 flex aitems">
<View className="name">
{userInfo.nickname
? userInfo.nickname
: "用户" + (userInfo.id || "001")}
</View>
</View>
{userInfo.id ? (
<View className="tip2"> :{userInfo.id}</View>
) : (
<View className="tip2"> : 001</View>
)}
</View>
</View>
<View className="info2 flex aitems sa">
<View
className="block"
data-url="/pages/instrument_manage/instrument_manage?isback=1"
onClick={this.gourl}
>
<Image
className="bg_img"
src={require("../../img/device_bg.png")}
mode="aspectFill"
></Image>
<View className="tip flex aitems">
<View className="tip1"></View>
<View className="right">
<Image src="/img/my_right.png" mode="aspectFill" />
</View>
</View>
<View className="num">{count}</View>
<View className="txt"></View>
</View>
<View
className="block"
onClick={this.gourl}
data-url="/pages/integral_list/integral_list"
>
<Image
className="bg_img"
src={require("../../img/point_bg.png")}
mode="aspectFill"
></Image>
<View className="tip flex aitems">
<View className="tip1"></View>
<View className="right">
<Image
src={require("../../img/my_right.png")}
mode="aspectFill"
/>
</View>
</View>
<View className="num">{userInfo.credit}</View>
<View className="txt">{lastDay}</View>
</View>
</View>
<View className="info3">
{lastDay}: {userInfo.expireCredit}
</View>
</View>
<View className="infobox2">
<View className="title"></View>
<View className="info flex aitems">
<View
className="block flex aitems"
data-url="/pages/userInfoDetail/userInfoDetail"
onClick={this.gourl}
>
<View className="img">
<Image src={require("../../img/1.png")} mode="aspectFill" />
</View>
<View className="tip1"></View>
</View>
<View className="block flex aitems" onClick={this.gominiapp}>
<View className="img">
<Image src={require("../../img/2.png")} mode="aspectFill" />
</View>
<View className="tip1"></View>
</View>
<View
className="block flex aitems"
onClick={this.gourl}
data-url="/pages/integral_list/integral_list"
>
<View className="img">
<Image src={require("../../img/3.png")} mode="aspectFill" />
</View>
<View className="tip1"></View>
</View>
<View
className="block flex aitems"
data-url="/pages/message/message"
onClick={this.gourls}
>
<View className="img">
<Image src={require("../../img/4.png")} mode="aspectFill" />
{messagecount > 0 ? <View className="num"></View> : ""}
</View>
<View className="tip1"></View>
</View>
</View>
<View className="title" style="margin-top: 82rpx;">
</View>
<View className="info flex aitems">
<View
className="block flex aitems"
data-url="/pages/consultant/consultant"
onClick={this.gourls}
>
<View className="img">
<Image src={require("../../img/5.png")} mode="aspectFill" />
</View>
<View className="tip1"></View>
</View>
<View
className="block flex aitems"
onClick={this.showCustomerService}
>
<View className="img">
<Image src={require("../../img/6.png")} mode="aspectFill" />
</View>
<View className="tip1"></View>
</View>
<View
className="block flex aitems"
data-url="/pages/about/about"
onClick={this.gourls}
>
<View className="img">
<Image src={require("../../img/7.png")} mode="aspectFill" />
</View>
<View className="tip1"></View>
</View>
<View
className="block flex aitems"
data-url="/pages/privacyPolicy/privacyPolicy"
onClick={this.gourls}
>
<View className="img">
<Image src={require("../../img/8.png")} mode="aspectFill" />
</View>
<View className="tip1"></View>
</View>
</View>
</View>
</View>
<PopupAlert
isShow={isNotRegister}
title="提示"
content="暂未授权注册,请点击注册"
confirmButtonText="确定"
textAlgin="center"
type="1"
close={this.closeRegisterAlert}
confirm={this.closeRegisterAlert}
/>
<PopupDrawer
isShow={isShowCustomerService}
isClose={true}
title="留言反馈"
content={
<Block>
<Textarea
className="service-textarea"
maxlength={100}
showCount={true}
placeholder="请在此处写下您的意见与反馈"
onInput={this.onInputTextarea}
></Textarea>
</Block>
}
confirmButtonText="确定"
textAlgin="left"
close={this.closeCustomerService}
confirm={this.confirmCustomerService}
/>
{/* <Toast_ /> */}
</Block>
);
}
}
const mapStateToProps = (state) => ({
userInfo: state.userInfo,
});
const mapDispatchToProps = (dispatch) => ({
userRefresh(data) {
dispatch(userRefresh(data));
},
});
export default connect(mapStateToProps, mapDispatchToProps)(User);