feat(components): 新增 GiftCard礼品卡组件

- 新增 GiftCard 组件,支持多种类型礼品卡的展示和交互
- 组件包含商品信息、价格、折扣、使用指南等丰富功能- 优化图像展示,支持单
This commit is contained in:
2025-08-17 00:06:03 +08:00
parent 1b24a611a8
commit ecb5d9059a
22 changed files with 2788 additions and 191 deletions

View File

@@ -17,10 +17,10 @@ interface OrderExampleProps {
quantity?: number;
}
const OrderExample: React.FC<OrderExampleProps> = ({
goods,
address,
quantity = 1
const OrderExample: React.FC<OrderExampleProps> = ({
goods,
address,
quantity = 1
}) => {
const [loading, setLoading] = useState(false);
@@ -37,7 +37,7 @@ const OrderExample: React.FC<OrderExampleProps> = ({
}
setLoading(true);
try {
// 1. 构建订单请求数据
const orderData: OrderCreateRequest = {
@@ -57,7 +57,7 @@ const OrderExample: React.FC<OrderExampleProps> = ({
// 2. 调用创建订单API
const result = await createOrder(orderData);
if (result && result.prepayId) {
// 3. 调用微信支付
await Taro.requestPayment({
@@ -67,15 +67,15 @@ const OrderExample: React.FC<OrderExampleProps> = ({
signType: result.signType,
paySign: result.paySign,
});
// 4. 支付成功处理
Taro.showToast({
title: '支付成功',
icon: 'success'
});
setTimeout(() => {
Taro.switchTab({url: '/pages/order/order'});
Taro.navigateTo({url: '/pages/order/order'});
}, 2000);
}
} catch (error: any) {
@@ -110,7 +110,7 @@ const OrderExample: React.FC<OrderExampleProps> = ({
}
setLoading(true);
try {
// 1. 构建订单商品列表
const goodsItems: OrderGoodsItem[] = cartItems.map(item => ({
@@ -134,7 +134,7 @@ const OrderExample: React.FC<OrderExampleProps> = ({
// 4. 调用创建订单API
const result = await createOrder(orderData);
if (result && result.prepayId) {
// 5. 调用微信支付
await Taro.requestPayment({
@@ -144,18 +144,18 @@ const OrderExample: React.FC<OrderExampleProps> = ({
signType: result.signType,
paySign: result.paySign,
});
// 6. 支付成功处理
Taro.showToast({
title: '支付成功',
icon: 'success'
});
// 7. 清空购物车(可选)
// clearCart();
setTimeout(() => {
Taro.switchTab({url: '/pages/order/order'});
Taro.navigateTo({url: '/pages/order/order'});
}, 2000);
}
} catch (error: any) {
@@ -174,7 +174,7 @@ const OrderExample: React.FC<OrderExampleProps> = ({
*/
const handleSelfPickupOrder = async (merchantId: number) => {
setLoading(true);
try {
const orderData: OrderCreateRequest = {
goodsItems: [
@@ -192,7 +192,7 @@ const OrderExample: React.FC<OrderExampleProps> = ({
};
const result = await createOrder(orderData);
if (result && result.prepayId) {
await Taro.requestPayment({
timeStamp: result.timeStamp,
@@ -201,14 +201,14 @@ const OrderExample: React.FC<OrderExampleProps> = ({
signType: result.signType,
paySign: result.paySign,
});
Taro.showToast({
title: '下单成功,请到店自提',
icon: 'success'
});
setTimeout(() => {
Taro.switchTab({url: '/pages/order/order'});
Taro.navigateTo({url: '/pages/order/order'});
}, 2000);
}
} catch (error: any) {
@@ -227,7 +227,7 @@ const OrderExample: React.FC<OrderExampleProps> = ({
*/
const handleOrderWithCoupon = async (couponId: number) => {
setLoading(true);
try {
const orderData: OrderCreateRequest = {
goodsItems: [
@@ -245,7 +245,7 @@ const OrderExample: React.FC<OrderExampleProps> = ({
};
const result = await createOrder(orderData);
if (result && result.prepayId) {
await Taro.requestPayment({
timeStamp: result.timeStamp,
@@ -254,14 +254,14 @@ const OrderExample: React.FC<OrderExampleProps> = ({
signType: result.signType,
paySign: result.paySign,
});
Taro.showToast({
title: '支付成功',
icon: 'success'
});
setTimeout(() => {
Taro.switchTab({url: '/pages/order/order'});
Taro.navigateTo({url: '/pages/order/order'});
}, 2000);
}
} catch (error: any) {
@@ -277,16 +277,16 @@ const OrderExample: React.FC<OrderExampleProps> = ({
return (
<div>
<Button
type="primary"
<Button
type="primary"
loading={loading}
onClick={handleSingleGoodsOrder}
>
</Button>
<Button
type="success"
<Button
type="success"
loading={loading}
onClick={() => handleCartOrder([
{goodsId: goods.goodsId!, quantity: 1, goodsName: goods.name!}
@@ -294,17 +294,17 @@ const OrderExample: React.FC<OrderExampleProps> = ({
>
</Button>
<Button
type="warning"
<Button
type="warning"
loading={loading}
onClick={() => handleSelfPickupOrder(1)}
>
</Button>
<Button
type="info"
<Button
type="info"
loading={loading}
onClick={() => handleOrderWithCoupon(123)}
>