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-detail?id=16 * 代理到 mp-api /api/hjc/order/{id};需登录态 + 订单归属(后端按 401/403 区分)。 * * 为什么要这个代理:`/hjc/order/{id}` 会带上 `project`,且对**已支付**订单附带 * `tenderFiles`(后端解析好的标书附件列表)——标书下载就靠它。未支付订单两张表都不给, * 所以页面上「没有附件」不是前端藏起来的,而是后端压根没下发地址。 * * 约定:原样透传 ApiResult{code,message,data}。HTTP 状态码恒为 200, * 「未登录/token 失效」是 code=401、「无权查看该订单」是 code=403,前端必须按 code 判定; * 故这里**不能**只取 data,否则登录态失败会被当成「订单不存在」。 */ export default defineEventHandler(async (event) => { const config = useRuntimeConfig() const ctx = getTenantFromContext(event, config) const { id } = getQuery(event) const cookieToken = getCookie(event, 'hjc_token') const auth = getHeader(event, 'authorization') || (cookieToken ? `Bearer ${cookieToken}` : null) try { return await $fetch(`/hjc/order/${encodeURIComponent(String(id ?? ''))}`, { 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 detail' }) } })