/** 汇吉采标书项目(前端视图模型,与 mp-java HjcBidProject 对齐) */ export interface Tender { id: number /** 项目编号 */ projectNo: string /** 项目名称 */ projectName: string /** 分类:服务类/工程类/货物类 */ category?: string /** 发布时间 */ publishTime?: string /** 投标截止时间 */ deadlineTime?: string /** 招标人 */ tenderer?: string /** 中标公司 */ winnerSupplier?: string /** 中标金额 */ bidAmount?: number /** 公告标题 */ bulletinTitle?: string /** 公告正文 */ bulletinContent?: string /** 公告附件(JSON字符串,一站式推送的原始值) */ bulletinFileList?: string /** * 公告附件(后端解析好的可下载列表)。 * * **门槛与 `tenderFiles` 不同**:公告附件是公开资料(公告正文本来就公开下发), * 匿名也能拿到——不判登录、不判资质、不判购买;`tenderFiles`(标书附件)才是付费内容、 * 只在已支付订单上出现。 * * **唯一没有的情况是项目已下架**:后端对 `status != 1` 的项目不下发本字段(前端不自己判)。 */ bulletinFiles?: HjcTenderFile[] | null /** 标书价格(信息服务费) */ tenderPrice?: number /** 标书附件(JSON字符串) */ tenderFile?: string /** 开售时间 */ onsaleTime?: string /** 停售时间 */ offsaleTime?: string /** 售卖方式:1公司财务 2公众号 3交易中心 4政采云 */ sellingMethod?: number /** 是否卖标书 */ needSell?: number /** 状态:1上架 0停售 */ status?: number /** 来源 */ dataSource?: string /** 已售数量(下单即加、从不回退;当前已无展示用途,历史字段) */ saleCount?: number /** * 购买人数:后端实时统计的**已付款订单数**(`COUNT(*) WHERE pay_status=1`)。 * 口径与「人数」字面有偏差(同一企业买 2 单计 2),这是明确拍定的取值。 */ buyerCount?: number /** * 当前登录企业是否已收藏本项目(后端**内联**在详情响应里的非表字段)。 * 未登录恒为 `false` —— 详情是公开接口,不因为没登录而报错。 */ favorited?: boolean } /** 「我的收藏」单条(对应 mp-java HjcFavoriteVo) */ export interface HjcFavorite { /** 收藏行 id(排查用,不是项目 id) */ id: number /** 标书项目 id(进详情要用它,不是 id) */ projectId: number /** 收藏时间 */ createTime?: string /** 项目已被物理删除时为 null */ projectName?: string projectNo?: string category?: string tenderPrice?: number deadlineTime?: string offsaleTime?: string /** * 售卖状态,由**后端**算好(口径只有一份):`onsale` 在售 / `ended` 已结束 / `removed` 已下架。 * 前端只渲染文案,不要自己比 status 或算时间。 */ saleState?: 'onsale' | 'ended' | 'removed' /** * 本企业是否已购买该项目(已付款订单口径,与详情页「购买人数」同一口径)。 * 已购**不会**从收藏夹移除——收藏是存档,不是购物车。 */ purchased?: boolean } /** 分页返回结构 */ export interface TenderPage { list: Tender[] count: number } /** * 标书附件(对应 mp-java `HjcTenderFileVo`)。 * * 由**后端**把项目的 `tender_file`(JSON 数组或逗号分隔)解析成结构化列表, * 前端只渲染、不解析也不判权限。 */ export interface HjcTenderFile { /** 展示名;后端取不到时会兜底成「标书附件」 */ name?: string /** 可下载地址 */ url: string } /** * 订单(对应 mp-java `HjcOrder`,只列页面用得到的字段)。 * * `tenderFiles` 是**付费内容**:只有 `payStatus === 1`(已支付)的订单,后端才会下发; * 待支付 / 支付失败 / 已退款一律为 `null`(空数组表示已支付但项目没有附件)。 * 前端**不根据 payStatus 自己拼地址**——地址没下发就是拿不到。 */ export interface HjcOrder { id: number orderNo: string projectId?: number projectNo?: string projectName?: string enterpriseName?: string contactName?: string contactPhone?: string contactEmail?: string quantity?: number unitPrice?: number totalAmount?: number payMethod?: string payTime?: string payStatus?: number orderStatus?: number createTime?: string /** 仅已支付订单由后端下发 */ tenderFiles?: HjcTenderFile[] | null /** * 电子发票:**有才有**(甲方开票后推送过来才会有这条记录)。 * 作废(红冲)的也在列表里(仍可下载原件),靠 `status` 区分。 */ invoices?: HjcInvoiceFile[] | null } /** * 电子发票(对应后端 `HjcInvoiceVo`)。 * * 由**一站式平台开具后推给我们的**(官方网不开票,见 ADR 0006);文件留的是本平台副本, * 下载地址同样是资源地址——点击时先换票据(见 `useAttachmentDownload`)。 */ export interface HjcInvoiceFile { /** 发票号码 */ invoiceNo?: string /** VAT_NORMAL 电子普票 / VAT_SPECIAL 电子专票 */ invoiceType?: string /** 开票日期 yyyy-MM-dd */ invoiceDate?: string /** 发票金额(含税) */ amount?: number /** ISSUED 已开票 / CANCELLED 已作废(红冲) */ status?: string /** 展示名(下载时用作文件名) */ name?: string /** 可下载地址(本平台资源地址,点击时先换票据) */ url: string } /** 登录用户(对应后端 common.system.User 关键字段) */ export interface HjcUser { userId: number username: string nickname?: string phone?: string tenantId?: number [key: string]: any }