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 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.
|
||||||
|
|||||||
Reference in New Issue
Block a user