import { $fetch } from 'ofetch' import { createError, defineEventHandler, getHeader, getCookie, getQuery } from 'h3' import { useRuntimeConfig } from '#imports' import { getTenantFromContext } from '../../utils/tenant' /** * 按订单号取订单(收银台用:它手上只有订单号,靠这个拿应付金额与当前状态) * GET /api/tender/order-by-no?orderNo=xxx * 代理到 mp-api /api/hjc/order/by-no/{orderNo};需登录态。 * * 为什么金额不跟 URL 传:收银台可能被刷新、也可能在网页授权回跳后重新进入; * 钱数从 URL 来意味着展示值可被改(扣款仍以服务端为准,但纯展示也不该给假数)。 * 后端 `GET /api/hjc/order/by-no/{orderNo}` 的注释就写着「收银台只有订单号,用它取应付金额」。 * * 约定:原样透传 ApiResult{code,message,data}。HTTP 状态码恒为 200, * 「未登录/token 失效」是 code=401、「无权限」是 code=403,前端必须按 code 判定。 */ export default defineEventHandler(async (event) => { const config = useRuntimeConfig() const ctx = getTenantFromContext(event, config) const { orderNo } = getQuery(event) const cookieToken = getCookie(event, 'hjc_token') const auth = getHeader(event, 'authorization') || (cookieToken ? `Bearer ${cookieToken}` : null) try { return await $fetch(`/hjc/order/by-no/${encodeURIComponent(String(orderNo ?? ''))}`, { baseURL: config.public.modulesApiBase, method: 'GET', headers: { TenantId: ctx.tenantId, ...(auth ? { Authorization: auth } : {}) }, query: { TenantId: ctx.tenantId } }) } catch (error: any) { throw createError({ statusCode: error?.statusCode || error?.response?.status || 502, statusMessage: error?.statusMessage || 'Failed to fetch order by orderNo' }) } })