From 1ca03dddf573fbdc54a971892fd3fe7f848feb66 Mon Sep 17 00:00:00 2001 From: sunlizhou <296190577@qq.com> Date: Fri, 18 Aug 2023 11:17:38 +0800 Subject: [PATCH] =?UTF-8?q?=E5=93=81=E7=89=8C=E6=A8=A1=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/app.config.ts | 6 + .../brand/list/components/BrandView.config.ts | 3 + src/pages/brand/list/components/BrandView.tsx | 176 ++++++++++++++++++ src/pages/brand/list/list.config.ts | 4 + src/pages/brand/list/list.module.scss | 43 +++++ src/pages/brand/list/list.tsx | 84 +++++++++ 6 files changed, 316 insertions(+) create mode 100644 src/pages/brand/list/components/BrandView.config.ts create mode 100644 src/pages/brand/list/components/BrandView.tsx create mode 100644 src/pages/brand/list/list.config.ts create mode 100644 src/pages/brand/list/list.module.scss create mode 100644 src/pages/brand/list/list.tsx diff --git a/src/app.config.ts b/src/app.config.ts index 9126b65..2ac1731 100644 --- a/src/app.config.ts +++ b/src/app.config.ts @@ -69,6 +69,12 @@ export default defineAppConfig({ 'userInfo/userInfo', 'courseAdmin/courseAdmin', ] + }, + { + root: 'pages/brand', + pages: [ + 'list/list', + ] } ], lazyCodeLoading: "requiredComponents" diff --git a/src/pages/brand/list/components/BrandView.config.ts b/src/pages/brand/list/components/BrandView.config.ts new file mode 100644 index 0000000..67241a3 --- /dev/null +++ b/src/pages/brand/list/components/BrandView.config.ts @@ -0,0 +1,3 @@ +export default definePageConfig({ + navigationBarTitleText: '登记', +}) diff --git a/src/pages/brand/list/components/BrandView.tsx b/src/pages/brand/list/components/BrandView.tsx new file mode 100644 index 0000000..16c8e89 --- /dev/null +++ b/src/pages/brand/list/components/BrandView.tsx @@ -0,0 +1,176 @@ +import {FC, useCallback, useEffect, useState} from "react"; +import {Form, Input, View} from "@tarojs/components"; +import Taro, {useRouter} from "@tarojs/taro"; +import {userApi, loginApi, LoginParams, meetingAPi, Meeting} from "@/api"; +import {Profile} from '@/store' +import {regexTel} from "@/utils/regu"; +import MyButton from "@/components/button/MyButton"; + +interface Params { + meeting_id: string + phone_number?: string + user_name?: string +} + +const MeetingLogin: FC = () => { + const {setUser, setToken, setCompany} = Profile.useContainer() + const [codeTime, setCodeTime] = useState(0) + const [phone_number, setPhone_number] = useState() + const [userName, setUserName] = useState('') + const [code, setCode] = useState('') + const [h5params, setH5Params] = useState(null) + const [meeting, setMeeting] = useState(null) + const params = useRouter().params as unknown as Params + + useEffect(() => { + loginApi.getMeetingParams().then((res) => { + setH5Params(res) + }) + if (params.user_name && params.phone_number) { + setPhone_number(Number(params.phone_number)) + setUserName(params.user_name) + Taro.showToast({title: '验证码错误', icon: 'error'}) + } + }, []) + + + useEffect(() => { + if (codeTime > 0) { + setTimeout(() => { + setCodeTime(codeTime - 1) + }, 1000) + } + }, [codeTime]) + + Taro.useLoad(() => { + meetingAPi.meetingInfo(params.meeting_id).then(res => { + if (res.type !== 1) { + Taro.showModal({ + title: res.type === 0 ? '暂未开始' : '二维码已过期', + success() { + Taro.reLaunch({url: '/pages/login/login'}) + } + }) + return + } + setMeeting(res.data) + }) + }) + + function submit(e) { + const value = e.detail.value + if (!value.user_name) { + Taro.showToast({title: '请写用户名', icon: "error"}) + return + } + + if (!regexTel.exec(value.phone_number)) { + Taro.showToast({title: '手机号错误', icon: 'error'}) + return + } + + if (!value.phone_code) { + Taro.showToast({title: '请获取手机验证码', icon: 'error'}) + return; + } + + if (process.env.TARO_ENV === 'h5') { + if (h5params == null) { + Taro.showToast({title: '页面参数错误,请刷新页面!', icon: 'error'}) + return; + } + location.href = "https://open.weixin.qq.com/connect/oauth2/authorize?" + + "appid=" + h5params!.appid + + "&redirect_uri=" + + encodeURIComponent( + h5params!.route + + `?dep_id=${meeting?.dep_id}&company_id=${meeting?.companyId}&phone_number=${value.phone_number}&user_name=${value.user_name}&meeting_id=${params.meeting_id}&phone_code=${value.phone_code}` + ) + + "&response_type=code" + + "&scope=snsapi_userinfo" + + "#wechat_redirect"; + } else { + Taro.login({ + success: async (res) => { + const data = await userApi.meetingSave({ + ...value, + code: res.code, + meeting_id: params.meeting_id + }) + setCompany(data.company) + setUser(data.user) + setToken(data.token) + Taro.switchTab({url: '/pages/index/index'}) + }, + fail: () => { + Taro.showToast({title: '获取微信登录失败', icon: "error"}) + } + }) + } + } + + const getCode = useCallback(async () => { + if (codeTime > 0) return; + if (!phone_number || !regexTel.exec(String(phone_number))) { + Taro.showToast({title: '请输入正确的手机号', icon: 'error'}) + return + } + + try { + await userApi.getCode(phone_number) + Taro.showToast({title: '请注意查收', icon: "none"}) + setCodeTime(60) + } catch (e) { + Taro.showToast({title: '获取短信验证码失败', icon: "error"}) + } + }, [codeTime, phone_number]) + + return ( + +
+ + + 用户名 + setUserName(e.detail.value)}/> + + + + 手机号 + setPhone_number(Number(e.detail.value))}/> + + + + + 验证码 + + setCode(e.detail.value)} + placeholder='输入验证码'/> + + {codeTime > 0 ? `${codeTime}` : '获取验证码'} + + + + + 登记 +
+
+ ) +} + + +export default MeetingLogin diff --git a/src/pages/brand/list/list.config.ts b/src/pages/brand/list/list.config.ts new file mode 100644 index 0000000..8617280 --- /dev/null +++ b/src/pages/brand/list/list.config.ts @@ -0,0 +1,4 @@ +export default definePageConfig({ + navigationBarTitleText: '见面会记录', + onReachBottomDistance: 30 +}) diff --git a/src/pages/brand/list/list.module.scss b/src/pages/brand/list/list.module.scss new file mode 100644 index 0000000..075fb8b --- /dev/null +++ b/src/pages/brand/list/list.module.scss @@ -0,0 +1,43 @@ +.meeting { + display: flex; + justify-content: space-between; + margin-bottom: 20rpx; +} + +.title { + position: relative; + flex: 1; + width: 70%; + background: #fff; + padding: 20rpx; + border-radius: 10rpx; + overflow: hidden; + box-sizing: border-box; +} + + +.overdue { + position: absolute; + top: 0; + bottom: 0; + right: 0; + left: 0; + text-align: center; + color: #fff; + display: flex; + justify-content: center; + align-items: center; + background: rgba(#000, .8); +} + + +.del { + border-radius: 10rpx; + background: #FF3A2F; + display: flex; + align-items: center; + color: #fff; + width: 100rpx; + justify-content: center; + margin-left: 20rpx; +} diff --git a/src/pages/brand/list/list.tsx b/src/pages/brand/list/list.tsx new file mode 100644 index 0000000..bbd5b0d --- /dev/null +++ b/src/pages/brand/list/list.tsx @@ -0,0 +1,84 @@ +import {FC, useCallback, useEffect, useState} from "react"; +import {View} from "@tarojs/components"; +import {Meeting, meetingAPi} from "@/api"; +import styles from './meetings.module.scss' +import Taro, {useReachBottom} from "@tarojs/taro"; +import Empty from "@/components/empty/empty"; +import {formatDate} from "@/utils/time"; + +const MeetingsConfig: FC = () => { + const [page, setPage] = useState(1) + const [meeting, setMeeting] = useState([]) + const [total, setTotal] = useState(0) + + const getData = useCallback(async () => { + try { + const res = await meetingAPi.setList(1, 10) + setTotal(res.total) + setMeeting([ + ...(meeting || []), + ...res.data + ]) + } catch (e) { + } + }, [page]) + + function del(id: number, index: number) { + try { + Taro.showModal({ + title: '确定删除', + async success({confirm}) { + if (confirm) { + await meetingAPi.del(id) + + const oldMeeting: Meeting[] = JSON.parse(JSON.stringify(meeting)) + oldMeeting.splice(index, 1) + setMeeting(oldMeeting) + } + } + }) + } catch (e) { + } + } + + function jumpInfo(item: Meeting) { + if (Date.now() > item.estimate_end_time || item.status > 0) { + return + } + Taro.navigateTo({url: `/pages/manage/spotMeeting/spotMeeting?id=${item.id}`}) + } + + useReachBottom(useCallback(() => { + if (meeting?.length < total) { + setPage(page + 1) + } + }, [total, meeting])) + + useEffect(() => { + getData() + }, [page]) + + return ( + + + { + meeting.length ? + meeting.map((d, index) => + jumpInfo(d)}> + {d.name} + {formatDate(new Date(d.estimate_start_time), "MM-dd")} 至 {formatDate(new Date(d.estimate_start_time), "MM-dd")} + { + (Date.now() > d.estimate_end_time || d.status > 1) && + {d.status > 1 ? '已结束' : "已过期"} + + } + + del(d.id, index)}>删除 + ) + : + } + + ) +} + +export default MeetingsConfig