feat(ticket): 添加水票立即送水功能

- 引入 ensureLoggedIn 工具函数用于登录验证
- 实现 goSendWater 函数处理送水逻辑
- 添加水票状态和可用次数校验
- 在水票列表项中添加立即送水按钮
- 设置按钮禁用状态根据水票可用性
- 防止卡片点击事件冒泡冲突
This commit is contained in:
2026-03-10 13:56:02 +08:00
parent ef6a55112f
commit 1cdb6404ad

View File

@@ -20,6 +20,7 @@ import { pageGltTicketOrder, removeGltTicketOrder, updateGltTicketOrder } from '
import type { GltTicketOrder } from '@/api/glt/gltTicketOrder/model'; import type { GltTicketOrder } from '@/api/glt/gltTicketOrder/model';
import { BaseUrl } from '@/config/app'; import { BaseUrl } from '@/config/app';
import dayjs from "dayjs"; import dayjs from "dayjs";
import { ensureLoggedIn } from '@/utils/auth';
const PAGE_SIZE = 10; const PAGE_SIZE = 10;
@@ -94,6 +95,27 @@ const UserTicketList = () => {
setQrVisible(true); 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 showTicketDetail = (ticket: GltUserTicket) => {
const lines: string[] = []; const lines: string[] = [];
if (ticket.templateName) lines.push(`水票:${ticket.templateName}`); if (ticket.templateName) lines.push(`水票:${ticket.templateName}`);
@@ -555,13 +577,25 @@ const UserTicketList = () => {
</View> </View>
)} )}
</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'}>*/} {/*<Tag type={item.status === 1 ? 'danger' : 'success'}>*/}
{/* {item.status === 1 ? '冻结' : '正常'}*/} {/* {item.status === 1 ? '冻结' : '正常'}*/}
{/*</Tag>*/} {/*</Tag>*/}
<Button <Button
size="small" size="small"
type="primary" type="primary"
style={{ display: 'none'}}
disabled={(item.availableQty ?? 0) <= 0 || item.status === 1} disabled={(item.availableQty ?? 0) <= 0 || item.status === 1}
onClick={(e) => { onClick={(e) => {
// Avoid triggering card click. // Avoid triggering card click.