diff --git a/src/api/salesAfterOrder.ts b/src/api/salesAfterOrder.ts index 1755ce0..ac66c62 100644 --- a/src/api/salesAfterOrder.ts +++ b/src/api/salesAfterOrder.ts @@ -60,3 +60,23 @@ export const GetSaleOrderListApi = () => { method: "get", }) } + +/** + * 售后退货原因 + */ + export const ReturnReasonApi = () => { + return useRequest({ + url: `/v1/mall/enum/returnOrder/returnReason`, + method: "get", + }) +} + +/** + * 售后退货原因 + */ + export const ReturnExplainApi = () => { + return useRequest({ + url: `/v1/mall/enum/returnExplain`, + method: "get", + }) +} \ No newline at end of file diff --git a/src/common/constant.js b/src/common/constant.js index ba43cfa..2289265 100644 --- a/src/common/constant.js +++ b/src/common/constant.js @@ -4,14 +4,14 @@ // 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 = `https://test.zzfzyc.com/lymarket` // 测试环境 // export const BASE_URL = `http://192.168.1.30: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.224:50002/lymarket` // 添 -export const BASE_URL = `http://192.168.1.15:50001/lymarket` // 杰 +// export const BASE_URL = `http://192.168.1.15:50001/lymarket` // 杰 // CDN // 生成密钥 diff --git a/src/pages/applyAfterSales/components/reasonPopup/index.module.scss b/src/pages/applyAfterSales/components/reasonPopup/index.module.scss index eba26cd..2d0f899 100644 --- a/src/pages/applyAfterSales/components/reasonPopup/index.module.scss +++ b/src/pages/applyAfterSales/components/reasonPopup/index.module.scss @@ -22,6 +22,9 @@ .reason_item{ margin-bottom: 36px; } + .select_item { + color: #007AFF; + } } } } \ No newline at end of file diff --git a/src/pages/applyAfterSales/components/reasonPopup/index.tsx b/src/pages/applyAfterSales/components/reasonPopup/index.tsx index 6b1f1ef..0ed990c 100644 --- a/src/pages/applyAfterSales/components/reasonPopup/index.tsx +++ b/src/pages/applyAfterSales/components/reasonPopup/index.tsx @@ -1,16 +1,19 @@ import Popup from "@/components/popup"; import { ScrollView, Text, View } from "@tarojs/components"; import { memo, useMemo } from "react"; +import classnames from "classnames"; import styles from './index.module.scss' //原因选择 type ReasonInfoParam = { - show?: boolean, - onClose?: () => void, - title?: string, - list?: {id:number, name:string}[] + show?: boolean, //显示 + onClose?: () => void, //关闭 + title?: string, //标题 + list?: {id:number, name:string, typle?:number}[], //数据列表 + onSelect?: (val: object) => void, //选择 + defaultValue?: number, //默认选中 } -export default memo(({show = false, onClose, title = '', list= []}: ReasonInfoParam) => { +export default memo(({show = false, onClose, title = '', list= [], onSelect, defaultValue}: ReasonInfoParam) => { return ( @@ -18,7 +21,7 @@ export default memo(({show = false, onClose, title = '', list= []}: ReasonInfoPa {title} - {list.map(item => {item.name} )} + {list.map(item => onSelect?.(item)} key={item.id} className={classnames(styles.reason_item, item.id == defaultValue&&styles.select_item)}>{item.name} )} diff --git a/src/pages/applyAfterSales/index copy.tsx b/src/pages/applyAfterSales/index copy.tsx new file mode 100644 index 0000000..0314289 --- /dev/null +++ b/src/pages/applyAfterSales/index copy.tsx @@ -0,0 +1,254 @@ +import { Image, ScrollView, Text, View } from "@tarojs/components"; +import { FC, memo, useCallback, useEffect, useMemo, useRef, useState } from "react"; +import classnames from "classnames"; +import styles from './index.module.scss' +import ReasonPopup from "./components/reasonPopup"; +import { useDidShow, useRouter } from "@tarojs/taro"; +import { GetSaleOrderDetailApi } from "@/api/order"; +import KindList from "./components/kindList" +import { ReturnApplyOrderApi, ReturnExplainApi, ReturnGoodsStatusApi, ReturnReasonApi } from "@/api/salesAfterOrder"; +import { alert, goLink } from "@/common/common"; +import UploadImage from "@/components/uploadImage" +import TextareaEnhance from "@/components/textareaEnhance"; + +enum returnStatus { + return_reason = 1, //原因 + reason_describe = 2, //状况 + return_explain = 3, //说明 + +} +export default () => { + + useDidShow(() => { + getSaleOrderPreView() + }) + + const router = useRouter() + const orderId = useRef(Number(router.params.id)) + + //需要提交的数据 + const [submitData, setSubmitData] = useState({ + fabric_piece_accessory_url: [], + goods_status: 0, + reason_describe: '', + return_explain: 0, + return_reason: 1, + roll: 0, + roll_list: [], + sale_order_id: orderId.current + }) + + //获取订单数据 + const [orderDetail, setOrderDetail] = useState() //获取到的原始数据 + const {fetchData: getOrderFetchData} = GetSaleOrderDetailApi() + const getSaleOrderPreView = async () => { + if(orderId.current) { + let res = await getOrderFetchData({id: orderId.current}) + setOrderDetail(res.data) + } + } + + //监听获取到的数据 + useEffect(() => { + if(orderDetail) { + formatData() + } + }, [orderDetail]) + + //格式化数据格式 + const [formatDetailOrder, setFormatDetailOrder] = useState() //格式化后的数据 + const formatData = () => { + setFormatDetailOrder({ + sale_mode: orderDetail.sale_mode, + sale_mode_name: orderDetail.sale_mode_name, + total_colors: orderDetail.total_colors, //总颜色数量 + total_number: orderDetail.total_number, //总数量 + total_fabrics: orderDetail.total_fabrics, //面料数量 + unit: orderDetail.sale_mode == 0?'条':'m', //单位 + list: orderDetail.product_list, + status: orderDetail.status, //订单状态 + + }) + } + + //数据总量 + const dataCount = useMemo(() => { + if(formatDetailOrder) { + return `${formatDetailOrder.total_fabrics}种面料,${formatDetailOrder.total_colors}种颜色,共${formatDetailOrder.total_number}条` + } + }, [formatDetailOrder]) + + + + //面料数据 + let roll_list = useRef({}) + + //大货时获取计步器数据 + const getNumChange = useCallback((val) => { + if(parseInt(val.number) > 0) { + roll_list.current[val.color_id] = {product_color_id: val.color_id, product_roll: val.number} + } else { + delete roll_list.current[val.color_id] + } + + let count = 0 + Object.values(roll_list.current).map((item: any) => { + count += item.product_roll + }) + setSubmitData((e) => ({...e, roll_list:Object.values(roll_list.current), roll: count})) + }, []) + + //散剪和剪板 + const getSelectChange = useCallback((val) => { + if(val.status) { + roll_list.current[val.color_id] = {product_color_id: val.color_id, product_roll: val.length} + } else { + delete roll_list.current[val.color_id] + } + let count = 0 + Object.values(roll_list.current).map((item: any) => { + count += item.product_roll + }) + setSubmitData((e) => ({...e, roll_list:Object.values(roll_list.current), roll: count})) + }, []) + + //获取图片列表 + const getImageList = useCallback((list) => { + setSubmitData((e) => ({...e, fabric_piece_accessory_url:list})) + }, []) + + //其他说明 + const getOtherReason = useCallback((val) => { + setSubmitData((e) => ({...e, reason_describe: val})) + }, []) + + //提交数据 + const {fetchData: fetchDataReturnApply} = ReturnApplyOrderApi() + const onSubmitData = async () => { + if(submitData.roll_list.length <= 0) return alert.error('请选择退货颜色') + let res = await fetchDataReturnApply(submitData) + if(res.success) { + alert.success('申请成功') + goLink('/pages/salesAfterList/index',{}, 'reLaunch') + } else { + alert.error('申请失败') + } + console.log('提交::',submitData) + } + + //底部按钮 + const onSubmit = (val) => { + if(val == 2) { + onSubmitData() + } + } + + //退货选择弹窗 + + const [showReason, setShowReason] = useState(false) + const closeReason = useCallback(() => setShowReason(false), []) + const onShowReason = (status) => { + if(status == returnStatus.reason_describe) { + getReturnReason() + } else if (status == returnStatus.return_explain) { + getReturnGoodsStatus() + } else { + getReturnExplain() + } + setShowReason(true) + } + + const [returnGoodsInfo, setReturnGoodsInfo] = useState<{title:string, list: any[], status: 1|2|3}>({title:'', list:[], status: returnStatus.reason_describe}) + //售后货物状况 + const {fetchData: fetchDataGoodsStatus} = ReturnGoodsStatusApi() + const getReturnGoodsStatus = async () => { + let res = await fetchDataGoodsStatus() + setReturnGoodsInfo((e) => ({...e, title: '货物状况', list:res.data?.list||[], status:returnStatus.reason_describe})) + } + //退货原因 + const {fetchData: fetchDataReturnReason} = ReturnReasonApi() + const getReturnReason = async () => { + let res = await fetchDataReturnReason() + setReturnGoodsInfo((e) => ({...e, title: '退货原因', list:res.data?.list||[], status:returnStatus.return_explain})) + } + //售后退货说明 + const {fetchData: fetchDataReturnExplain} = ReturnExplainApi() + const getReturnExplain = async () => { + let res = await fetchDataReturnExplain() + setReturnGoodsInfo((e) => ({...e, title: '退货说明', list:res.data?.list||[], status:returnStatus.return_reason})) + } + //选择返回的数据 + const [returnObj, setReturnObj] = useState<{[val:number]:string, id: number}>({}) + const onReturnSelect = useCallback((val) => { + let {id, name} = val + if(returnGoodsInfo.status == returnStatus.reason_describe) { + setSubmitData((e) => ({...e, reason_describe:id})) + setReturnObj(e => ({...e, [returnStatus.reason_describe]:name, id})) + } + if(returnGoodsInfo.status == returnStatus.return_explain) { + setSubmitData((e) => ({...e, return_explain:id})) + setReturnObj(e => ({...e, [returnStatus.return_explain]:name, id})) + } + if(returnGoodsInfo.status == returnStatus.return_reason) { + setSubmitData((e) => ({...e, return_reason:id})) + setReturnObj(e => ({...e, [returnStatus.return_reason]:name, id})) + } + + }, []) + + useEffect(() => { + console.log('returnObj::', returnObj) + }, [returnObj]) + + return ( + + + {dataCount} + + + + + + 退货原因 + onShowReason(returnStatus.reason_describe)}> + {returnObj[returnStatus.reason_describe]||'请选择'} + + + + + 货物状况 + onShowReason(returnStatus.return_explain)}> + {returnObj[returnStatus.return_explain]||'请选择'} + + + + + 退货说明 + onShowReason(returnStatus.return_reason)}> + {returnObj[returnStatus.return_reason]||'请选择'} + + + + + 拍照上传 + + + + + + + + + + + + + + onSubmit(1)}>取消 + onSubmit(2)}>确认 + + + + + ) +} \ No newline at end of file diff --git a/src/pages/applyAfterSales/index.tsx b/src/pages/applyAfterSales/index.tsx index 9698934..7cfbc41 100644 --- a/src/pages/applyAfterSales/index.tsx +++ b/src/pages/applyAfterSales/index.tsx @@ -3,16 +3,20 @@ import { FC, memo, useCallback, useEffect, useMemo, useRef, useState } from "rea import classnames from "classnames"; import styles from './index.module.scss' import ReasonPopup from "./components/reasonPopup"; -import OtherReason from "./components/otherReason"; import { useDidShow, useRouter } from "@tarojs/taro"; import { GetSaleOrderDetailApi } from "@/api/order"; import KindList from "./components/kindList" -import { ReturnApplyOrderApi, ReturnGoodsStatusApi } from "@/api/salesAfterOrder"; +import { ReturnApplyOrderApi, ReturnExplainApi, ReturnGoodsStatusApi, ReturnReasonApi } from "@/api/salesAfterOrder"; import { alert, goLink } from "@/common/common"; import UploadImage from "@/components/uploadImage" import TextareaEnhance from "@/components/textareaEnhance"; -type ReasonParam = 1|2|3 //1 退货原因 2 货物状况 3 退货说明 +enum returnStatus { + return_reason = 1, //原因 + goods_status = 2, //状况 + return_explain = 3, //说明 + +} export default () => { useDidShow(() => { @@ -28,7 +32,7 @@ export default () => { goods_status: 0, reason_describe: '', return_explain: 0, - return_reason: 1, + return_reason: 0, roll: 0, roll_list: [], sale_order_id: orderId.current @@ -75,13 +79,7 @@ export default () => { }, [formatDetailOrder]) - //退货选择弹窗 - const [showReason, setShowReason] = useState<{show:true|false, title: string}>({show:false, title: ''}) - const closeReason = useCallback(() => setShowReason({...showReason, show:false}), []) - const onShowReason = (status) => { - setShowReason({...showReason, show:true}) - } - + //面料数据 let roll_list = useRef({}) @@ -102,7 +100,6 @@ export default () => { //散剪和剪板 const getSelectChange = useCallback((val) => { - console.log('val::', val) if(val.status) { roll_list.current[val.color_id] = {product_color_id: val.color_id, product_roll: val.length} } else { @@ -146,17 +143,59 @@ export default () => { } } - const [returnGoodsInfo, setReturnGoodsInfo] = useState<{title:string, list: any[]}>({title:'', list:[]}) + //退货选择弹窗 + const [showReason, setShowReason] = useState(false) + const closeReason = useCallback(() => setShowReason(false), []) + const onShowReason = (status) => { + if(status == returnStatus.return_reason) { + getReturnReason() + } else if (status == returnStatus.goods_status) { + getReturnGoodsStatus() + } else { + getReturnExplain() + } + setShowReason(true) + } + + //请求获取到的数据 + const [returnGoodsInfo, setReturnGoodsInfo] = useState<{title:string, list: any[], status: 1|2|3}>({title:'', list:[], status: returnStatus.goods_status}) //售后货物状况 const {fetchData: fetchDataGoodsStatus} = ReturnGoodsStatusApi() const getReturnGoodsStatus = async () => { let res = await fetchDataGoodsStatus() - setReturnGoodsInfo((e) => ({...e, title: '售后货物状况', list:res.data?.list||[]})) + setReturnGoodsInfo((e) => ({...e, title: '货物状况', list:res.data?.list||[], status:returnStatus.goods_status})) } - useEffect(() => { - getReturnGoodsStatus() - }, []) - + //退货原因 + const {fetchData: fetchDataReturnReason} = ReturnReasonApi() + const getReturnReason = async () => { + let res = await fetchDataReturnReason() + setReturnGoodsInfo((e) => ({...e, title: '退货原因', list:res.data?.list||[], status:returnStatus.return_reason})) + } + //售后退货说明 + const {fetchData: fetchDataReturnExplain} = ReturnExplainApi() + const getReturnExplain = async () => { + let res = await fetchDataReturnExplain() + setReturnGoodsInfo((e) => ({...e, title: '退货说明', list:res.data?.list||[], status:returnStatus.return_explain})) + } + //选择列表返回的数据 + const [returnObj, setReturnObj] = useState<{[val:number]:{name:string, id: number}}>({}) + const onReturnSelect = useCallback((val) => { + let {id, name} = val + if(returnGoodsInfo.status == returnStatus.goods_status) { + setSubmitData((e) => ({...e, goods_status:id})) + setReturnObj(e => ({...e, [returnStatus.goods_status]:{name, id}})) + } + if(returnGoodsInfo.status == returnStatus.return_explain) { + setSubmitData((e) => ({...e, return_explain:id})) + setReturnObj(e => ({...e, [returnStatus.return_explain]:{name, id}})) + } + if(returnGoodsInfo.status == returnStatus.return_reason) { + setSubmitData((e) => ({...e, return_reason:id})) + setReturnObj(e => ({...e, [returnStatus.return_reason]:{name, id}})) + } + setShowReason(false) + }, [returnGoodsInfo]) + return ( @@ -167,22 +206,22 @@ export default () => { 退货原因 - onShowReason(1)}> - 请选择 + onShowReason(returnStatus.return_reason)}> + {returnObj[returnStatus.return_reason]?.name||'请选择'} 货物状况 - onShowReason(2)}> - 请选择 + onShowReason(returnStatus.goods_status)}> + {returnObj[returnStatus.goods_status]?.name||'请选择'} 退货说明 - onShowReason(3)}> - 请选择 + onShowReason(returnStatus.return_explain)}> + {returnObj[returnStatus.return_explain]?.name||'请选择'} @@ -205,7 +244,7 @@ export default () => { onSubmit(2)}>确认 - + ) } \ No newline at end of file diff --git a/src/pages/order/components/payment/index.module.scss b/src/pages/order/components/payment/index.module.scss index 0f16e80..ade0ca3 100644 --- a/src/pages/order/components/payment/index.module.scss +++ b/src/pages/order/components/payment/index.module.scss @@ -96,9 +96,15 @@ $top:190px; } .miconfont{ font-size: 30px; - color: #FFC300; + color: #007AFF; padding-right: 10px; } + .advance_payment{ + color: #FFC300; + } + .account_period{ + color: #07C160; + } .payment_list_item_left_price{ font-size: $font_size_min; color: $color_font_two; diff --git a/src/pages/order/components/payment/index.tsx b/src/pages/order/components/payment/index.tsx index 303b62f..d8d2506 100644 --- a/src/pages/order/components/payment/index.tsx +++ b/src/pages/order/components/payment/index.tsx @@ -122,7 +122,7 @@ export default memo(({show = false, onClose, orderInfo, onSubmitSuccess}:Param) //是否显示七天账期 const show_account_payment = useMemo(() => { - console.log('orderInfo?.status::',orderInfo) + console.log('orderInfo?.status::123',orderInfo) //剪板合散剪不显示 if(orderInfo?.sale_mode != 0) return false //支付方式是账期支付,不显示 @@ -174,7 +174,7 @@ export default memo(({show = false, onClose, orderInfo, onSubmitSuccess}:Param) - + 预存款 {advance_payment} @@ -184,7 +184,7 @@ export default memo(({show = false, onClose, orderInfo, onSubmitSuccess}:Param) {show_account_payment&& - + {payInfo?.account_period}天账期 {account_peyment} @@ -194,7 +194,7 @@ export default memo(({show = false, onClose, orderInfo, onSubmitSuccess}:Param) - + 线下汇款 @@ -203,7 +203,7 @@ export default memo(({show = false, onClose, orderInfo, onSubmitSuccess}:Param) - + 扫码支付 diff --git a/src/pages/order/index.tsx b/src/pages/order/index.tsx index fae2191..4714383 100644 --- a/src/pages/order/index.tsx +++ b/src/pages/order/index.tsx @@ -127,11 +127,6 @@ import styles from './index.module.scss' setPayMentShow(true) } - //地址组件所需数据 - const addressInfoDetailData = useMemo(() => { - return {orderId:orderDetail?.id, shipment_mode:orderDetail?.shipment_mode, status: orderDetail?.status} - }, [orderDetail]) - //打开地址修改 const addressRef = useRef(null) diff --git a/src/pages/orderList/components/order/index.module.scss b/src/pages/orderList/components/order/index.module.scss index 63a4e0a..de34b8b 100644 --- a/src/pages/orderList/components/order/index.module.scss +++ b/src/pages/orderList/components/order/index.module.scss @@ -72,8 +72,7 @@ .image{ width: 126px; height: 126px; - background: #e5ad3a; - border-radius: 20px 20px 0px 0px; + border-radius: 20px; position: relative; image{ width: 100%; @@ -82,13 +81,13 @@ } .color_num { background: rgba(0,0,0, 0.5); - border-radius: 50px 0px 0px 0px; + border-radius: 50px 0px 20px 0px; font-size: $font_size_min; color: #fff; position: absolute; right:0; bottom:0; - padding: 5px 10px; + padding: 5px 10px 5px 20px; box-sizing: border-box; } } diff --git a/src/pages/orderList/components/order/index.tsx b/src/pages/orderList/components/order/index.tsx index 466bc5e..811e8ab 100644 --- a/src/pages/orderList/components/order/index.tsx +++ b/src/pages/orderList/components/order/index.tsx @@ -27,8 +27,8 @@ type Param = { texture_url: string, payment_method: number, //支付方式 actual_amount: number, //实付金额 - wait_pay_amount: number //待付金额 - should_collect_order_id: number //应付单id + wait_pay_amount: number, //待付金额 + should_collect_order_id: number, //应付单id }, onClickBtn?: (val:{status:number, orderInfo:Param['value']}) => void } @@ -59,6 +59,11 @@ export default memo(({value, onClickBtn}: Param) => { } }, [value]) + //总条数 + const numText = useMemo(() => { + return `${value?.total_fabrics}种面料,${value?.total_colors}种颜色,共${value?.total_number}${value?.sale_mode == 0? '条':'米'}` + }, [value]) + return ( goLink('/pages/order/index', {id: value?.id})}> @@ -89,7 +94,7 @@ export default memo(({value, onClickBtn}: Param) => { (index <= 1)&& {formatHashTag(itemColor.code, itemColor.name)} {standardPrice(itemColor.sale_price, value.sale_mode)} - ×{formatCount(itemColor, value.sale_mode)}条 + ×{formatCount(itemColor, value.sale_mode) + (value.sale_mode == 0?'条':'米')} ) }) @@ -101,7 +106,7 @@ export default memo(({value, onClickBtn}: Param) => { - {`${value?.total_fabrics}种面料,${value?.total_colors}种颜色,共${value?.total_number}条`} + {numText} diff --git a/src/pages/orderList/index.tsx b/src/pages/orderList/index.tsx index 982f9d2..0c9ad18 100644 --- a/src/pages/orderList/index.tsx +++ b/src/pages/orderList/index.tsx @@ -102,13 +102,7 @@ export default () => { getOrderList() } else if(status == 2) { //去支付 - console.log('orderInfo::',orderInfo) - setPayOrderInfo({ - should_collect_order_id: orderInfo.should_collect_order_id,//应付单id - pre_collect_order_id: orderInfo.pre_collect_order_id, //预付单id - status: orderInfo.status, //订单状态 - payment_method: orderInfo.payment_method //支付方式 - }) + setPayOrderInfo(() => orderInfo) toPay() } else if (status == 7) { //购买