1ff4dfffb9
发票由一站式平台开具后推给后端(官方网不开票,见工作区根目录 docs/adr/0006), 订单响应里新增 invoices;文件是本平台副本,下载走与附件同一条链路(点击时取票)。 - 抽出 composable useAttachmentDownload:把「先换票据、再取文件」的逻辑从 HjcTenderFiles 里提出来,附件与发票共用(各写一份必然分叉);同时把资源标识解析 扩到 orderNo/projectNo/invoiceId 三种。 - 新增 HjcInvoiceFiles.vue:发票号/类型/开票日期/金额 + 下载;作废(红冲)的也列出来 且仍可下载——它是留档凭证。 - HjcTenderFiles.vue 改用 composable,行为不变。 - 订单详情加发票区块,订单列表加「已开票」标记与发票列表。 - 不判"是否已支付":有没有发票取决于甲方开没开票,与订单当前状态无关。 校验:npm run build 通过。
178 lines
5.7 KiB
TypeScript
178 lines
5.7 KiB
TypeScript
/** 汇吉采标书项目(前端视图模型,与 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
|
||
}
|