feat(ticket): 添加水票立即送水功能
- 引入 ensureLoggedIn 工具函数用于登录验证 - 实现 goSendWater 函数处理送水逻辑 - 添加水票状态和可用次数校验 - 在水票列表项中添加立即送水按钮 - 设置按钮禁用状态根据水票可用性 - 防止卡片点击事件冒泡冲突
This commit is contained in:
@@ -20,6 +20,7 @@ import { pageGltTicketOrder, removeGltTicketOrder, updateGltTicketOrder } from '
|
||||
import type { GltTicketOrder } from '@/api/glt/gltTicketOrder/model';
|
||||
import { BaseUrl } from '@/config/app';
|
||||
import dayjs from "dayjs";
|
||||
import { ensureLoggedIn } from '@/utils/auth';
|
||||
|
||||
const PAGE_SIZE = 10;
|
||||
|
||||
@@ -94,6 +95,27 @@ const UserTicketList = () => {
|
||||
setQrVisible(true);
|
||||
};
|
||||
|
||||
const goSendWater = async (ticket: GltUserTicket) => {
|
||||
if (!ticket?.id) {
|
||||
Taro.showToast({ title: '水票信息不完整', icon: 'none' });
|
||||
return;
|
||||
}
|
||||
if (Number(ticket.status) === 1) {
|
||||
Taro.showToast({ title: '该水票已冻结,无法下单', icon: 'none' });
|
||||
return;
|
||||
}
|
||||
const avail = Number(ticket.availableQty ?? 0);
|
||||
if (!Number.isFinite(avail) || avail <= 0) {
|
||||
Taro.showToast({ title: '可用次数不足', icon: 'none' });
|
||||
return;
|
||||
}
|
||||
const gid = Number(ticket.goodsId);
|
||||
const url =
|
||||
Number.isFinite(gid) && gid > 0 ? `/user/ticket/use?goodsId=${gid}` : '/user/ticket/use';
|
||||
if (!ensureLoggedIn(url)) return;
|
||||
await Taro.navigateTo({ url });
|
||||
};
|
||||
|
||||
const showTicketDetail = (ticket: GltUserTicket) => {
|
||||
const lines: string[] = [];
|
||||
if (ticket.templateName) lines.push(`水票:${ticket.templateName}`);
|
||||
@@ -555,13 +577,25 @@ const UserTicketList = () => {
|
||||
</View>
|
||||
)}
|
||||
</View>
|
||||
<View className="flex flex-col items-end gap-2 hidden">
|
||||
<View className="flex flex-col items-end gap-2">
|
||||
<Button
|
||||
size="small"
|
||||
type="primary"
|
||||
disabled={(item.availableQty ?? 0) <= 0 || item.status === 1}
|
||||
onClick={(e) => {
|
||||
e.stopPropagation();
|
||||
void goSendWater(item);
|
||||
}}
|
||||
>
|
||||
立即送水
|
||||
</Button>
|
||||
{/*<Tag type={item.status === 1 ? 'danger' : 'success'}>*/}
|
||||
{/* {item.status === 1 ? '冻结' : '正常'}*/}
|
||||
{/*</Tag>*/}
|
||||
<Button
|
||||
size="small"
|
||||
type="primary"
|
||||
style={{ display: 'none'}}
|
||||
disabled={(item.availableQty ?? 0) <= 0 || item.status === 1}
|
||||
onClick={(e) => {
|
||||
// Avoid triggering card click.
|
||||
|
||||
Reference in New Issue
Block a user