From ddcae32b637fa13bfc3c141020efade6b50f1f9e Mon Sep 17 00:00:00 2001 From: czm <2192718639@qq.com> Date: Tue, 28 Jun 2022 20:36:06 +0800 Subject: [PATCH] dev --- src/api/favorite.ts | 24 ++++++ src/common/constant.js | 6 +- .../components/createPopup/index.module.scss | 66 ++++++++++++++++ .../components/createPopup/index.tsx | 61 +++++++++++++++ src/pages/collection/index.module.scss | 47 ++++++++++++ src/pages/collection/index.tsx | 64 +++++++++++++++- .../advanceOrderState/index.module.scss | 16 ++++ .../components/advanceOrderState/index.tsx | 59 +++++++++++++-- src/pages/order/index.tsx | 7 +- src/pages/user/index.tsx | 4 +- src/use/useCommonData.ts | 75 ++++++++++++++----- src/use/useHttp.ts | 12 ++- 12 files changed, 403 insertions(+), 38 deletions(-) create mode 100644 src/api/favorite.ts create mode 100644 src/pages/collection/components/createPopup/index.module.scss create mode 100644 src/pages/collection/components/createPopup/index.tsx diff --git a/src/api/favorite.ts b/src/api/favorite.ts new file mode 100644 index 0000000..b621784 --- /dev/null +++ b/src/api/favorite.ts @@ -0,0 +1,24 @@ +import { useRequest } from "@/use/useHttp" + +/** + * 获取收藏夹列表 + * @returns +*/ +export const FavoriteListApi = () => { + return useRequest({ + url: `/v1/mall/favorite/list`, + method: "get", + }) +} + + +/** + * 创建收藏夹列表 + * @returns +*/ +export const CreateFavoriteApi = () => { + return useRequest({ + url: `/v1/mall/favorite`, + method: "post", + }) +} diff --git a/src/common/constant.js b/src/common/constant.js index d044f8e..8e37364 100644 --- a/src/common/constant.js +++ b/src/common/constant.js @@ -4,13 +4,13 @@ // export const BASE_URL = `http://10.0.0.5:50001/lymarket` // export const BASE_URL = `http://192.168.0.89:40001/lymarket` // export const BASE_URL = `http://192.168.1.165:40001/lymarket` // 王霞 -export const BASE_URL = `https://test.zzfzyc.com/lymarket` // 测试环境 -// export const BASE_URL = `http://192.168.1.30:40001/lymarket` // 发 +// export const BASE_URL = `https://test.zzfzyc.com/lymarket` // 测试环境 +// export const BASE_URL = `http://192.168.1.9:40001/lymarket` // 发 // export const BASE_URL = `http://192.168.1.30:50001/lymarket` // 发 // export const BASE_URL = `https://dev.zzfzyc.com/lymarket` // 开发环境 // export const BASE_URL = `https://www.zzfzyc.com/lymarket` // 正式环境 // export const BASE_URL = `http://192.168.1.5:40001/lymarket` // 王霞 -// export const BASE_URL = `http://192.168.1.7:50002/lymarket` // 添 +export const BASE_URL = `http://192.168.1.7:50002/lymarket` // 添 // export const BASE_URL = `http://192.168.1.15:50001/lymarket` // 杰 // CDN diff --git a/src/pages/collection/components/createPopup/index.module.scss b/src/pages/collection/components/createPopup/index.module.scss new file mode 100644 index 0000000..82a58c3 --- /dev/null +++ b/src/pages/collection/components/createPopup/index.module.scss @@ -0,0 +1,66 @@ + +.collection_con{ + padding: 20px; + .title_item{ + display: flex; + align-items: center; + padding-bottom: 20px; + flex-wrap: wrap; + .title{ + font-size: $font_size; + font-weight: 700; + width: 60px; + } + .select{ + flex:1; + height: 60px; + border: 2px solid #e6e6e6; + border-radius: 10px; + margin-left: 20px; + display: flex; + align-items: center; + justify-content: space-between; + padding: 0 20px; + font-size: 26px; + color: $color_font_two; + .input{ + width: 100%; + height: 100%; + } + } + } + .desc_item{ + display: flex; + .title{ + font-size: $font_size; + font-weight: 700; + width: 60px; + padding-top: 20px; + } + .desc{ + margin-left: 20px; + flex:1; + } + } + .btns_con{ + width: 100%; + bottom:0; + box-sizing: border-box; + margin-top: 50px; + .btns_two{ + display: flex; + height: 82px; + font-size: $font_size_big; + border-radius: 40px; + margin-bottom: 20px; + .verify_btn{ + flex:1; + border-radius: 40px; + background: #007aff; + text-align: center; + line-height: 82px; + color: #fff; + } + } + } +} \ No newline at end of file diff --git a/src/pages/collection/components/createPopup/index.tsx b/src/pages/collection/components/createPopup/index.tsx new file mode 100644 index 0000000..340df98 --- /dev/null +++ b/src/pages/collection/components/createPopup/index.tsx @@ -0,0 +1,61 @@ +import Popup from "@/components/popup"; +import { Input, ScrollView, Text, View } from "@tarojs/components"; +import { memo, useCallback, useMemo, useRef } from "react"; +import classnames from "classnames"; +import styles from './index.module.scss' +import TextareaEnhance from "@/components/textareaEnhance"; +import { CreateFavoriteApi } from "@/api/favorite"; +import { alert } from "@/common/common"; + +//原因选择 +type ReasonInfoParam = { + show?: boolean, //显示 + onClose?: () => void, //关闭 +} +export default memo(({show = false, onClose}: ReasonInfoParam) => { + + + const submitData = useRef({ + "name": '', + "remark": '' + }) + + const getOtherReason = useCallback((val) => { + submitData.current.remark = val + }, []) + + const changeInput = useCallback((val) => { + submitData.current.remark = val.detail.value + }, []) + + //创建 + const {fetchData} = CreateFavoriteApi() + const onSubmit = async () => { + if(submitData.current.name) return alert.error('请输入收藏夹名称') + let res = await fetchData(submitData.current) + } + return ( + + + + 名称 + + + + + + 简介 + + + + + + + + onSubmit()}>确认 + + + + + ) +}) \ No newline at end of file diff --git a/src/pages/collection/index.module.scss b/src/pages/collection/index.module.scss index e69de29..73573d6 100644 --- a/src/pages/collection/index.module.scss +++ b/src/pages/collection/index.module.scss @@ -0,0 +1,47 @@ + +.collection_main { + padding: 0 20px; + min-height: 100%; + background-color: #F8F8F8; + .class_list{ + margin-top: 30px; + .class_item{ + margin: 20px 0; + } + .class_title{ + display: flex; + margin-bottom: 20px; + .title{ + flex: 1; + color: #000; + font-weight: 700; + font-size: 28px; + padding: 0 20px; + } + .fg{ + padding: 0 10px; + } + .num, .fg{ + color: #707070; + font-weight: normal; + } + .miconfont_left{ + font-size: 30px; + color: #707070; + } + .miconfont_open{ + transform: rotate(-90deg); + } + .miconfont_close { + transform: rotate(90deg); + } + .more{font-size: 26px;} + + } + .class_con{ + overflow: hidden; + transition: all 0.5s ease-in-out; + } + + } +} \ No newline at end of file diff --git a/src/pages/collection/index.tsx b/src/pages/collection/index.tsx index 67a9d9f..8544bf1 100644 --- a/src/pages/collection/index.tsx +++ b/src/pages/collection/index.tsx @@ -1,12 +1,72 @@ +import { FavoriteListApi } from "@/api/favorite"; +import Product from "@/components/product"; import Search from "@/components/search" -import { View } from "@tarojs/components" +import { Text, View } from "@tarojs/components" +import classnames from "classnames"; +import { useCallback, useEffect, useState } from "react"; +import CreatePopup from "./components/createPopup"; import styles from './index.module.scss' export default () => { + const changeOpenCon = (item) => { + item.openStatus = !item.openStatus + setList((e) => [...e]) + } + + //获取列表 + const [list, setList] = useState([]) + const {fetchData: fetchDataList} = FavoriteListApi() + const getFavoriteList = async () => { + let res = await fetchDataList() + console.log('res::', res) + } + useEffect(() => { + getFavoriteList() + let res:any = [] + new Array(10).fill('').map(item => { + res.push( + { + "create_time": "string", + "create_user_name": "string", + "creator_id": 0, + "id": 0, + "name": `${item}- 收藏夹`, + "product_color_list": [ + { + "product_code": "string", + "product_id": 0, + "product_name": "string" + } + ], + "remark": "string", + "update_time": "string", + "update_user_name": "string", + "updater_id": 0 + } + ) + }) + console.log('res33::', res) + setList(res) + }, []) + + return ( - + console.log(e)} placeholder="请输入面料关键词" placeIcon="out" showBtn={true} /> + + {list?.map((item:any) => + changeOpenCon(item)}> + + 默认收藏夹·11 + 更多 + + + + + )} + + ) } \ No newline at end of file diff --git a/src/pages/order/components/advanceOrderState/index.module.scss b/src/pages/order/components/advanceOrderState/index.module.scss index 86e995e..9f2a56a 100644 --- a/src/pages/order/components/advanceOrderState/index.module.scss +++ b/src/pages/order/components/advanceOrderState/index.module.scss @@ -45,4 +45,20 @@ height: 100%; } } + .refresh{ + position: absolute; + top: 23px; + right: 20px; + display: flex; + color: #dddddd; + display: flex; + align-items: center; + + .mconfont{ + font-size: 36px; + } + .refresh_text{ + font-size: 25px; + } + } } \ No newline at end of file diff --git a/src/pages/order/components/advanceOrderState/index.tsx b/src/pages/order/components/advanceOrderState/index.tsx index 45faaf1..922e013 100644 --- a/src/pages/order/components/advanceOrderState/index.tsx +++ b/src/pages/order/components/advanceOrderState/index.tsx @@ -1,25 +1,74 @@ import { formatImgUrl } from "@/common/fotmat"; import { Image, Text, View } from "@tarojs/components"; -import { memo } from "react"; +import { memo, useEffect, useMemo, useRef, useState } from "react"; +import classnames from "classnames"; import styles from './index.module.scss' +import dayjs from "dayjs"; +import { useTimeCountDown } from "@/use/useCommonData"; +import { ORDER_STATUS, PAYMENT_METHOD, PAYMENT_METHOD_PARAM } from "@/common/enum"; + +type List = { + status: string, + time: string, + tag: string, + desc: string, + expire_time: string +} + +type Param = { + onRefresh?: () => void, + orderInfo?: { + logistics_details:List[], //订单状态列表 + payment_method: 0|PAYMENT_METHOD_PARAM, //支付方式 + status: number, //订单状态 + } +} + + +export default memo(({orderInfo, onRefresh}:Param) => { + + const {showTime, onStart, timeStatus} = useTimeCountDown() + + //订单状态枚举 + const {SaleorderstatusWaitingPrePayment} = ORDER_STATUS + + //获取预付款最后时间 + const endTime = useMemo(() => { + if(orderInfo?.status == SaleorderstatusWaitingPrePayment.value && orderInfo.logistics_details.length > 0) { + return orderInfo.logistics_details[0].expire_time + } + return '' + }, [orderInfo]) + + useEffect(() => { + if(endTime) onStart(endTime) + }, [endTime]) + + useEffect(() => { + if(timeStatus == 2) onRefresh?.() + }, [timeStatus]) + -export default memo(() => { return ( - 23 + {showTime.HH} : - 58 + {showTime.MM} : - 55 + {showTime.SS} 支付关闭,订单自动取消 + onRefresh?.()}> + + 刷新 + ) }) \ No newline at end of file diff --git a/src/pages/order/index.tsx b/src/pages/order/index.tsx index d76edd3..022c164 100644 --- a/src/pages/order/index.tsx +++ b/src/pages/order/index.tsx @@ -15,6 +15,7 @@ import ShopCart from "@/components/shopCart"; import { Text, Textarea, View } from "@tarojs/components" import Taro, { useDidShow, usePullDownRefresh, useRouter } from "@tarojs/taro"; import classnames from "classnames"; +import dayjs from "dayjs"; import { useCallback, useEffect, useMemo, useRef, useState } from "react"; import AddressInfoDetail from "./components/addressInfoDetail"; import AdvanceOrderState from "./components/advanceOrderState"; @@ -191,7 +192,7 @@ import styles from './index.module.scss' }, [orderDetail]) //订单状态枚举 - const {SaleOrderStatusCancel} = ORDER_STATUS + const {SaleOrderStatusCancel, SaleorderstatusWaitingPrePayment} = ORDER_STATUS //刷新页面 const refresh = useCallback(() => { @@ -250,8 +251,8 @@ import styles from './index.module.scss' return ( - - {/* */} + {(orderDetail?.status != SaleorderstatusWaitingPrePayment.value)&&|| + } diff --git a/src/pages/user/index.tsx b/src/pages/user/index.tsx index 9c24437..7c748b5 100644 --- a/src/pages/user/index.tsx +++ b/src/pages/user/index.tsx @@ -249,13 +249,13 @@ const Assets = (props: any) => { 预存款 - + {/* {props.data.data.coupon_count || 0} 优惠券 - + */} props.checkShow()}> ¥ diff --git a/src/use/useCommonData.ts b/src/use/useCommonData.ts index eebefef..ee36c61 100644 --- a/src/use/useCommonData.ts +++ b/src/use/useCommonData.ts @@ -1,23 +1,60 @@ -import { useDispatch } from 'react-redux' -import {SET_COMMON, CLEAR_COMMON} from '@/constants/common' -import {useSelector} from '@/reducers/hooks' -/** - * 这个hook 用来临时存储数据用 - */ -export default () => { - const {common: commonData} = useSelector(state => state.commonData) - const dispatch = useDispatch() - const setCommonData = (val:any) => { - dispatch({type:SET_COMMON, data:val}) - } +import dayjs from "dayjs" +import { useEffect, useRef, useState } from "react" - const removeCommonData = () => { - dispatch({type:CLEAR_COMMON}) +//倒计时hook +export const useTimeCountDown = () => { + const [showTime, setShowTime] = useState({ + DD: '', + HH: '', + MM: '', + SS: '' + }) + const [timeStatus, setTimeStatus] = useState<0|1|2>(0) //倒计时状体 0:倒计时未开始 1:倒计时中, 2:倒计时已结束 + const timeObj:any = useRef() + const endTime = useRef('') + const onStart = (val = '') => { + endTime.current = val + if(endTime.current) { + clearInterval(timeObj.current) + timeObj.current = setInterval(() => { + count_down() + }, 1000) + } + } + useEffect(() => { + return () => { + clearInterval(timeObj.current) + } + }, []) + const count_down = () => { + var startData = dayjs(); + var endDate = dayjs(endTime.current); + setTimeStatus(() => 1) + if(startData >= endDate) { + clearInterval(timeObj.current) + setShowTime((e) => ({...e, DD:'00', HH:'00', MM:'00', SS:'00'})) + setTimeStatus(() => 2) + return false + } + var _dd = endDate.diff(startData,'day'); + var _hh = endDate.diff(startData,'hour'); + var _mm = endDate.diff(startData,'minute'); + var _ss = endDate.diff(startData,'second'); + // 转换 + var hh = _hh - (_dd*24); + var mm = _mm - (_hh*60); + var ss = _ss - (_mm*60); + // 格式化 + var DD = ('00'+_dd).slice(-2); + var HH = ('00'+hh).slice(-2); + var MM = ('00'+mm).slice(-2); + var SS = ('00'+ss).slice(-2); + // console.log('endTime::', `${DD}-${HH}-${MM}-${SS}`) + setShowTime((e) => ({...e, DD, HH, MM, SS})) } - return { - setCommonData, - removeCommonData, - commonData + showTime, + onStart, + timeStatus } -} \ No newline at end of file +} diff --git a/src/use/useHttp.ts b/src/use/useHttp.ts index 07312f4..79a544f 100644 --- a/src/use/useHttp.ts +++ b/src/use/useHttp.ts @@ -86,7 +86,7 @@ const showStatus = (status) => { } //登录状态 -const loginStatus: false|true = false // true:登录中 +let loginStatus: false|true = false // true:登录中 /** * axios 请求状态封装,返回响应式数据 fetch(), loading, error, code, msg 等常用方法/状态 @@ -176,9 +176,13 @@ export const useRequest = (options:option = { stateRef.current.total = data?.list ? data?.total : 0 }else{ if (statusCode === 401) { - removeToken() - removeSessionKey() - login() + if(!loginStatus) { + removeToken() + removeSessionKey() + login() + loginStatus = true + } + //todo 登录数据刷新次数问题 } else { Taro.showToast({ title: `错误:${showStatus(statusCode)}`,