Commit 2f37f99b by 姜雷

改造我的订单

parent f12d52d1
...@@ -156,13 +156,9 @@ export type RechargeOrderItem = { ...@@ -156,13 +156,9 @@ export type RechargeOrderItem = {
sortNum: number; sortNum: number;
}; };
type RechageResponse = {
data: RechargeOrderItem[];
};
export const fetchRechargeOrders = ( export const fetchRechargeOrders = (
data: RechargeParams, data: RechargeParams,
): Promise<ResponseDataEntity<RechageResponse>> => ): Promise<ResponseDataEntity<RechargeOrderItem[]>> =>
customerFetch({ customerFetch({
url: '/dcxy/app/rechargeOrder/pageAllListRecharge', url: '/dcxy/app/rechargeOrder/pageAllListRecharge',
data, data,
......
...@@ -8,8 +8,8 @@ enum FirstRechargeState { ...@@ -8,8 +8,8 @@ enum FirstRechargeState {
} }
type RechargePayState = { type RechargePayState = {
paywayList: PayConfig[]; paywayList: PayTypeVo[];
payConfigList: PayTypeVo[]; payConfigList: PayConfig[];
isFirstRecharge: FirstRechargeState; isFirstRecharge: FirstRechargeState;
}; };
...@@ -22,7 +22,10 @@ const reducer = (state: RechargePayState, action: Actions) => { ...@@ -22,7 +22,10 @@ const reducer = (state: RechargePayState, action: Actions) => {
} }
}; };
const usePaywayList = (areaId: number, customerId: number) => { const usePaywayList = (
areaId: number,
customerId: number,
): RechargePayState => {
const [state, dispatch] = useReducer(reducer, { const [state, dispatch] = useReducer(reducer, {
paywayList: [], paywayList: [],
payConfigList: [], payConfigList: [],
......
import { ComponentClass } from 'react'; import Taro from '@tarojs/taro';
import Taro, { Component, Config } from '@tarojs/taro';
import { View, Text } from '@tarojs/components'; import { View, Text } from '@tarojs/components';
import OrderTitle from '../components/OrderTitle/OrderTitle'; import OrderTitle from '../components/OrderTitle/OrderTitle';
import OrderInfo from '../components/OrderInfo/OrderInfo'; import OrderInfo from '../components/OrderInfo/OrderInfo';
import './OrderDetail.scss'; import './OrderDetail.scss';
import { fetchOrderDetailAndPay } from '../../../api/order'; import { getPayType } from '../../../utils/payType';
import { PayType, getPayType } from '../../../utils/payType';
import { shareHandle } from '@/common/shareMethod'; import { shareHandle } from '@/common/shareMethod';
import { useSelector } from '@tarojs/redux';
import { OrderStoreState } from '../OrderList/store';
type pageProps = {}; const OrderDetail = () => {
type PageState = {
actualMoney: number;
areaId: number;
areaName: string;
consumeType: string;
createAt: string;
customerCellphone: string;
customerId: number;
customerName: string;
deductionBean: number;
deductionMoney: number;
equipmentNum: string;
equipmentPosition: string;
id: number;
operateId: number;
operateName: string;
operationMode: string;
orderName: string;
orderNumber: string;
orderState: string;
outTradeNo: string;
payType: PayType;
payableMoney: number;
serviceId: number;
serviceName: string;
thirdDiscountMoney: number;
thirdTradeNumber: string;
updateDate: string;
};
interface OrderDetail {
props: pageProps;
state: PageState;
}
class OrderDetail extends Component {
config: Config = {
navigationBarTitleText: '订单详情',
};
constructor(props) {
super(props);
this.state = {
actualMoney: 0,
areaId: 0,
areaName: '',
consumeType: '',
createAt: '',
customerCellphone: '',
customerId: 0,
customerName: '',
deductionBean: 0,
deductionMoney: 0,
equipmentNum: '',
equipmentPosition: '',
id: 0,
operateId: 0,
operateName: '',
operationMode: '',
orderName: '',
orderNumber: '',
orderState: '',
outTradeNo: '',
payType: '',
payableMoney: 0,
serviceId: 0,
serviceName: '',
thirdDiscountMoney: 0,
thirdTradeNumber: '',
updateDate: '',
};
}
onShareAppMessage = shareHandle;
componentWillMount() {
console.log('preload: ', this.$router.preload);
const data = this.$router.preload;
this.setState({
...data,
});
// this.getDetailInfo(id);
}
getDetailInfo(id: number) {
return fetchOrderDetailAndPay({
id: id,
})
.then(res => {
this.setState({
...res.data,
});
console.log(res);
})
.catch(err => {
console.log(err);
});
}
render() {
const { const {
actualMoney, actualMoney,
payableMoney, payableMoney,
...@@ -121,8 +25,12 @@ class OrderDetail extends Component { ...@@ -121,8 +25,12 @@ class OrderDetail extends Component {
equipmentPosition, equipmentPosition,
deductionMoney, deductionMoney,
thirdDiscountMoney, thirdDiscountMoney,
} = this.state; } = useSelector(
(state: { OrderList: OrderStoreState }) => state.OrderList.selectedOrder,
);
const payTypeName = getPayType(payType); const payTypeName = getPayType(payType);
return ( return (
<View className='OrderDetail'> <View className='OrderDetail'>
<OrderTitle price={payableMoney} /> <OrderTitle price={payableMoney} />
...@@ -176,7 +84,10 @@ class OrderDetail extends Component { ...@@ -176,7 +84,10 @@ class OrderDetail extends Component {
) : null} ) : null}
</View> </View>
); );
} };
} OrderDetail.config = {
navigationBarTitleText: '订单详情',
};
OrderDetail.onShareAppMessage = shareHandle;
export default OrderDetail as ComponentClass<pageProps, PageState>; export default OrderDetail;
import { ComponentClass } from 'react'; import { ComponentClass } from 'react';
import Taro, { Component, Config, useState } from '@tarojs/taro'; import Taro, { Component, Config, useState, useEffect } from '@tarojs/taro';
import { View, Text, ScrollView } from '@tarojs/components'; import { View, Text, ScrollView } from '@tarojs/components';
import { connect, useSelector } from '@tarojs/redux'; import { connect, useSelector, useDispatch } from '@tarojs/redux';
import OrderItem from '../components/OrderItem/OrderItem'; import OrderItem from '../components/OrderItem/OrderItem';
import './OrderList.scss'; import './OrderList.scss';
import { fetchAllOrder } from '../../../api/order'; import { fetchAllOrder, RechargeOrderItem } from '../../../api/order';
import { Customer } from '@/types/Customer/Customer'; import { Customer } from '@/types/Customer/Customer';
import { shareHandle } from '@/common/shareMethod'; import { shareHandle } from '@/common/shareMethod';
import RechargeItem from '../components/RechargeItem/RechargeItem'; import RechargeItem from '../components/RechargeItem/RechargeItem';
import useRechargeOrders from './useRechargeOrders'; import useRechargeOrders from './useRechargeOrders';
import useConsumeOrders from './useConsumeOrders'; import useConsumeOrders from './useConsumeOrders';
import Order, { AllOrderItem } from '@/types/Order/Order';
import { selectOrder } from './actions';
type PageOwnProps = {}; type PageOwnProps = {};
...@@ -45,62 +47,54 @@ const OrderList = () => { ...@@ -45,62 +47,54 @@ const OrderList = () => {
// } // }
// } // }
const onPullDownRefresh = () => { // const onPullDownRefresh = () => {
console.log('in onPullDownRefresh'); // console.log('in onPullDownRefresh');
this.getAllOrderHandle().then(() => { // this.getAllOrderHandle().then(() => {
Taro.stopPullDownRefresh(); // Taro.stopPullDownRefresh();
});
};
const goPayPage = data => {
// this.setState({
// needRefresh: true,
// }); // });
this.$preload({ id: data.id }); // };
const dispatch = useDispatch();
const userinfo = useSelector(
(state: { userinfo: Customer }) => state.userinfo,
);
const [orderType, setOrderType] = useState(0); // 0 消费,1 充值
const [needRefresh, setNeedRefresh] = useState(false);
const [
consumeOrders,
fetchMoreConsumeOrders,
resetConsumeOrders,
] = useConsumeOrders(userinfo.customerId, 10);
const [
rechargeOrders,
fetchMoreRechargeOrders,
resetRechargeOrders,
] = useRechargeOrders(userinfo.customerId, 10);
console.log(consumeOrders, rechargeOrders);
const goPayPage = (data: Order) => {
dispatch(selectOrder(data));
setNeedRefresh(true);
// this.$preload({ id: data.id });
Taro.navigateTo({ Taro.navigateTo({
url: '/pages/Order/OrderPay/OrderPay', url: `/pages/Order/OrderPay/OrderPay?id=${data.id}`,
}); });
}; };
const goDetail = data => { const goDetail = (data: Order) => {
dispatch(selectOrder(data));
setNeedRefresh(false);
// this.setState({ // this.setState({
// needRefresh: false, // needRefresh: false,
// }); // });
this.$preload(data); // this.$preload(data);
Taro.navigateTo({ Taro.navigateTo({
url: '/pages/Order/OrderDetail/OrderDetail', url: '/pages/Order/OrderDetail/OrderDetail',
}); });
}; };
useEffect(() => {
// const { allList } = useSelector( if (needRefresh) {
// (state: { OrderList: OrderStoreState }) => state.OrderList, console.log('刷新');
// ); }
const userinfo = useSelector( }, [needRefresh]);
(state: { userinfo: Customer }) => state.userinfo,
);
const [orderType, setOrderType] = useState(0); // 0 消费,1 充值
const [consumenLastId, setConsumenLastId] = useState(0);
const consumeOrders = useConsumeOrders(
userinfo.customerId,
consumenLastId,
10,
);
const fetchMoreConsumeOrders = () => {
const itemIdx = consumeOrders.length - 1;
const orderIdx = consumeOrders[itemIdx].data.length - 1;
setConsumenLastId(consumeOrders[itemIdx].data[orderIdx].id);
};
const [rechargeLastId, setRechargeLastId] = useState(0);
const rechargeOrders = useRechargeOrders(
userinfo.customerId,
rechargeLastId,
10,
);
const fetchMoreRechargeOrders = () => {
const itemIdx = rechargeOrders.length - 1;
const orderIdx = rechargeOrders[itemIdx].data.length - 1;
setRechargeLastId(rechargeOrders[itemIdx].data[orderIdx].id);
};
return ( return (
<View className='OrderList'> <View className='OrderList'>
...@@ -120,8 +114,8 @@ const OrderList = () => { ...@@ -120,8 +114,8 @@ const OrderList = () => {
<ScrollView <ScrollView
className='OrderList-Content' className='OrderList-Content'
scrollY scrollY
onScrollToUpper={() => setConsumenLastId(0)} onScrollToUpper={() => resetConsumeOrders()}
onScrollToLower={fetchMoreConsumeOrders} onScrollToLower={() => fetchMoreConsumeOrders()}
upperThreshold={-100} upperThreshold={-100}
lowerThreshold={70} lowerThreshold={70}
scrollWithAnimation scrollWithAnimation
...@@ -147,8 +141,8 @@ const OrderList = () => { ...@@ -147,8 +141,8 @@ const OrderList = () => {
<ScrollView <ScrollView
className='OrderList-Content' className='OrderList-Content'
scrollY scrollY
onScrollToUpper={() => setRechargeLastId(0)} onScrollToUpper={() => resetRechargeOrders()}
onScrollToLower={fetchMoreRechargeOrders} onScrollToLower={() => fetchMoreRechargeOrders()}
upperThreshold={-100} upperThreshold={-100}
lowerThreshold={70} lowerThreshold={70}
scrollWithAnimation scrollWithAnimation
......
import Actions from '../../../types/Store/Actions'; import Actions from '../../../types/Store/Actions';
import Order, { AllOrderItem } from '../../../types/Order/Order'; import Order, { AllOrderItem } from '../../../types/Order/Order';
export const TOGGLE_ORDER_STATE = 'TOGGLE_ORDER_STATE'; import { RechargeOrderItem } from '@/api/order';
export const UPDATE_PAY_LIST = 'UPDATE_PAY_LIST'; export const SELECT_ORDER = 'SELECT_ORDER';
export const UPDATE_ALL_LIST = 'UPDATE_ALL_LIST'; export const UPDATE_CONSUME_ORDERS = 'UPDATE_CONSUME_ORDERS';
export const APPEND_CONSUME_ORDERS = 'APPEND_CONSUME_ORDERS';
export const UPDATE_CONSUME_LASTID = 'UPDATE_CONSUME_LASTID';
export const UPDATE_RECHARGE_ORDERS = 'UPDATE_RECHARGE_ORDERS';
export const APPEND_RECHARGE_ORDERS = 'APPEND_RECHARGE_ORDERS';
export const UPDATE_RECHARGE_LASTID = 'UPDATE_RECHARGE_LASTID';
export type UpdateOrderParams<T> = { export type UpdateOrderParams<T> = {
lastOrderId?: number; lastOrderId?: number;
list: T[]; list: T[];
}; };
export const toggleOrderState = (state: String): Actions => ({ export const selectOrder = (state: Order): Actions => ({
type: TOGGLE_ORDER_STATE, type: SELECT_ORDER,
payload: state, payload: state,
}); });
export const updatePayOrderList = ( export const updateConsumeOrders = (state: AllOrderItem[]): Actions => ({
state: UpdateOrderParams<Order> type: UPDATE_CONSUME_ORDERS,
): Actions => ({
type: UPDATE_PAY_LIST,
payload: state, payload: state,
}); });
export const updateAllOrderList = ( export const appendConsumeOrders = (state: AllOrderItem[]): Actions => ({
state: UpdateOrderParams<AllOrderItem> type: APPEND_CONSUME_ORDERS,
): Actions => ({
type: UPDATE_ALL_LIST,
payload: state, payload: state,
}); });
export const updateConsumeLastId = (data: number): Actions => ({
type: UPDATE_CONSUME_LASTID,
payload: data,
});
export const updateRechargeOrders = (state: RechargeOrderItem[]): Actions => ({
type: UPDATE_RECHARGE_ORDERS,
payload: state,
});
export const appendRechargeOrders = (state: RechargeOrderItem[]): Actions => ({
type: APPEND_RECHARGE_ORDERS,
payload: state,
});
export const updateRechargeLastId = (data: number): Actions => ({
type: UPDATE_RECHARGE_LASTID,
payload: data,
});
import Actions from '../../../types/Store/Actions'; import Actions from '../../../types/Store/Actions';
import Order, { AllOrderItem } from '../../../types/Order/Order'; import Order, { AllOrderItem } from '../../../types/Order/Order';
import { import {
TOGGLE_ORDER_STATE, SELECT_ORDER,
UPDATE_PAY_LIST, UPDATE_CONSUME_ORDERS,
UPDATE_ALL_LIST, APPEND_CONSUME_ORDERS,
UPDATE_RECHARGE_ORDERS,
APPEND_RECHARGE_ORDERS,
UPDATE_CONSUME_LASTID,
UPDATE_RECHARGE_LASTID,
} from './actions'; } from './actions';
import { RechargeOrderItem } from '@/api/order';
export interface OrderStoreState { export interface OrderStoreState {
orderState: String; selectedOrder: Order;
payList: Order[]; consume: {
allList: AllOrderItem[]; consumeOrders: AllOrderItem[];
lastOrderId: number;
};
recharge: {
rechargeOrders: RechargeOrderItem[];
lastOrderId: number;
};
} }
const initOrder = () => ({
actualMoney: 0,
areaId: 0,
areaName: '',
consumeType: '',
createAt: '',
customerCellphone: '',
customerId: 0,
customerName: '',
deductionBean: 0,
deductionMoney: 0,
equipmentNum: '',
equipmentPosition: '',
id: 0,
operateId: 0,
operateName: '',
operationMode: '',
orderName: '',
orderNumber: '',
orderState: '',
outTradeNo: '',
payType: '',
payableMoney: 0,
serviceId: 0,
serviceName: '',
thirdDiscountMoney: 0,
thirdTradeNumber: '',
updateDate: '',
});
const INITIAL_STATE = { const INITIAL_STATE = {
orderState: 'all', selectedOrder: initOrder(),
payList: [], consume: {
allList: [], consumeOrders: [],
lastOrderId: 0,
},
recharge: {
rechargeOrders: [],
lastOrderId: 0,
},
}; };
export default function OrderList( export default function OrderList(
...@@ -23,55 +69,61 @@ export default function OrderList( ...@@ -23,55 +69,61 @@ export default function OrderList(
actions: Actions, actions: Actions,
) { ) {
switch (actions.type) { switch (actions.type) {
case TOGGLE_ORDER_STATE: case SELECT_ORDER:
return { return {
...state, ...state,
orderState: actions.payload, selectedOrder: actions.payload,
}; };
case UPDATE_PAY_LIST: case UPDATE_CONSUME_ORDERS:
if (actions.payload.lastOrderId) {
return { return {
...state, ...state,
payList: [...state.payList, ...actions.payload.list], consume: {
...state.consume,
consumeOrders: actions.payload,
},
}; };
} else { case APPEND_CONSUME_ORDERS:
return { return {
...state, ...state,
payList: actions.payload.list, consume: {
...state.consume,
consumeOrders: [...state.consume.consumeOrders, ...actions.payload],
},
}; };
} case UPDATE_CONSUME_LASTID:
case UPDATE_ALL_LIST:
if (actions.payload.lastOrderId) {
if (actions.payload.list.length) {
let key = actions.payload.list[0].groupName;
let index = state.allList.findIndex(item => item.groupName == key);
if (index > -1) {
return { return {
...state, ...state,
allList: [ consume: {
...state.allList.slice(0, index), ...state.consume,
{ lastOrderId: actions.payload,
groupName: state.allList[index].groupName,
data: [
...state.allList[index].data,
...actions.payload.list[0].data,
],
}, },
...actions.payload.list.slice(1),
],
}; };
} case UPDATE_RECHARGE_ORDERS:
return { return {
...state, ...state,
allList: [...state.allList, ...actions.payload.list], recharge: {
...state.recharge,
rechargeOrders: actions.payload,
},
}; };
} case APPEND_RECHARGE_ORDERS:
return state; return {
} ...state,
recharge: {
...state.recharge,
rechargeOrders: [
...state.recharge.rechargeOrders,
...actions.payload,
],
},
};
case UPDATE_RECHARGE_LASTID:
return { return {
...state, ...state,
allList: actions.payload.list, recharge: {
...state.recharge,
lastOrderId: actions.payload,
},
}; };
default: default:
return state; return state;
......
import { useEffect, useReducer } from '@tarojs/taro'; import { useEffect } from '@tarojs/taro';
import { fetchAllOrder } from '@/api/order'; import { fetchAllOrder } from '@/api/order';
import Actions from '@/types/Store/Actions';
import { AllOrderItem } from '@/types/Order/Order'; import { AllOrderItem } from '@/types/Order/Order';
import { useSelector, useDispatch } from '@tarojs/redux';
import { OrderStoreState } from './store';
import {
appendConsumeOrders,
updateConsumeOrders,
updateConsumeLastId,
} from './actions';
const reducer = (state: AllOrderItem[], action: Actions) => {
switch (action.type) {
case 'updateConsumeOrders':
return action.payload;
case 'appendConsumeOrders':
return [...state, ...action.payload];
default:
return state;
}
};
const useConsumeOrders = ( const useConsumeOrders = (
customerId: number, customerId: number,
lastOrderId: number,
pageSize: number, pageSize: number,
): AllOrderItem[] => { ): [AllOrderItem[], () => void, () => void] => {
const [state, dispatch] = useReducer(reducer, []); const state = useSelector(
(state: { OrderList: OrderStoreState }) => state.OrderList.consume,
);
const dispatch = useDispatch();
const fetchData = ( const fetchData = (
customerId: number, customerId: number,
lastOrderId: number, lastOrderId: number,
...@@ -31,21 +30,34 @@ const useConsumeOrders = ( ...@@ -31,21 +30,34 @@ const useConsumeOrders = (
}) })
.then(res => { .then(res => {
lastOrderId lastOrderId
? dispatch({ type: 'appendConsumeOrders', payload: res.data }) ? dispatch(appendConsumeOrders(res.data))
: dispatch({ type: 'updateConsumeOrders', payload: res.data }); : dispatch(updateConsumeOrders(res.data));
return res.data; return res.data;
}) })
.catch(err => { .catch(err => {
console.log(err); console.log(err);
}); });
const fetchMore = () => {
let arr = state.consumeOrders;
const itemIdx = arr.length - 1;
if (itemIdx >= 0) {
const orderIdx = arr[itemIdx].data.length - 1;
if (orderIdx >= 0) {
dispatch(updateConsumeLastId(arr[itemIdx].data[orderIdx].id));
return;
}
}
dispatch(updateConsumeLastId(0));
};
const resetOrders = () => {
dispatch(updateConsumeLastId(0));
};
useEffect(() => { useEffect(() => {
console.log('in fetch'); fetchData(customerId, state.lastOrderId, pageSize);
}, [customerId, state.lastOrderId, pageSize]);
fetchData(customerId, lastOrderId, pageSize);
}, [customerId, lastOrderId, pageSize]);
return state; return [state.consumeOrders, fetchMore, resetOrders];
}; };
export default useConsumeOrders; export default useConsumeOrders;
import { useEffect, useReducer } from '@tarojs/taro'; import { useEffect, useReducer } from '@tarojs/taro';
import { fetchRechargeOrders, RechargeOrderItem } from '@/api/order'; import { fetchRechargeOrders, RechargeOrderItem } from '@/api/order';
import Actions from '@/types/Store/Actions'; import { useSelector, useDispatch } from '@tarojs/redux';
import { OrderStoreState } from './store';
import {
updateRechargeLastId,
appendRechargeOrders,
updateRechargeOrders,
} from './actions';
const reducer = (state: RechargeOrderItem[], action: Actions) => {
switch (action.type) {
case 'updateRechargeOrders':
return action.payload;
case 'appendRechargeOrders':
return [...state, ...action.payload];
default:
return state;
}
};
const useRechargeOrders = ( const useRechargeOrders = (
customerId: number, customerId: number,
lastOrderId: number,
pageSize: number, pageSize: number,
): RechargeOrderItem[] => { ): [RechargeOrderItem[], () => void, () => void] => {
const [state, dispatch] = useReducer(reducer, []); const state = useSelector(
(state: { OrderList: OrderStoreState }) => state.OrderList.recharge,
);
const dispatch = useDispatch();
const fetchData = ( const fetchData = (
customerId: number, customerId: number,
lastOrderId: number, lastOrderId: number,
...@@ -30,19 +28,34 @@ const useRechargeOrders = ( ...@@ -30,19 +28,34 @@ const useRechargeOrders = (
}) })
.then(res => { .then(res => {
lastOrderId lastOrderId
? dispatch({ type: 'appendRechargeOrders', payload: res.data }) ? dispatch(appendRechargeOrders(res.data))
: dispatch({ type: 'updateRechargeOrders', payload: res.data }); : dispatch(updateRechargeOrders(res.data));
return res.data; return res.data;
}) })
.catch(err => { .catch(err => {
console.log(err); console.log(err);
}); });
const fetchMore = () => {
let arr = state.rechargeOrders;
const itemIdx = arr.length - 1;
if (itemIdx >= 0) {
const orderIdx = arr[itemIdx].data.length - 1;
if (orderIdx >= 0) {
dispatch(updateRechargeLastId(arr[itemIdx].data[orderIdx].id));
return;
}
}
dispatch(updateRechargeLastId(0));
};
const resetOrders = () => {
dispatch(updateRechargeLastId(0));
};
useEffect(() => { useEffect(() => {
fetchData(customerId, lastOrderId, pageSize); fetchData(customerId, state.lastOrderId, pageSize);
}, [customerId, lastOrderId, pageSize]); }, [customerId, state.lastOrderId, pageSize]);
return state; return [state.rechargeOrders, fetchMore, resetOrders];
}; };
export default useRechargeOrders; export default useRechargeOrders;
...@@ -86,8 +86,8 @@ class OrderPay extends Component { ...@@ -86,8 +86,8 @@ class OrderPay extends Component {
onShareAppMessage = shareHandle; onShareAppMessage = shareHandle;
componentWillMount() { componentWillMount() {
const data = this.$router.preload; const data = this.$router.params;
if (data) { if (data && data.id) {
this.fetchOrder(data.id); this.fetchOrder(data.id);
} }
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment