import type { PageParam, PageResult } from '@vben/request';
|
|
import { requestClient } from '#/api/request';
|
|
export namespace QcReportVersionApi {
|
/** 纸张页边距,单位 mm */
|
export interface SchemaMargin {
|
top?: number;
|
right?: number;
|
bottom?: number;
|
left?: number;
|
}
|
|
/** 纸张配置 */
|
export interface SchemaPage {
|
size?: string; // A3 / A4 / A5 / Letter
|
orientation?: string; // portrait / landscape
|
margin?: SchemaMargin;
|
}
|
|
/**
|
* 画布上的一个质量组件节点,只记「是谁、在哪、什么属性」
|
* 嵌套结构以 grapes 为准,这里不再存一份树,避免两个真相来源对不上
|
*/
|
export interface QualityComponentNode {
|
/** 画布内组件 id */
|
id?: string;
|
/** 组件在文档中的顺序,供绑定与定位使用 */
|
index?: number;
|
/** 组件类型,即画布节点上的 data-quality-type */
|
qualityType?: string;
|
/** 组件的业务属性,取值是 data-qc-* / data-quality-type 这类属性 */
|
attributes?: Record<string, unknown>;
|
}
|
|
/** 判定规则:scope 为 item 时逐项判定,为 report 时决定整份报告的结论 */
|
export interface SchemaRule {
|
id?: string;
|
name?: string;
|
scope?: 'item' | 'report';
|
expression?: string;
|
enabled?: boolean;
|
}
|
|
/**
|
* 模板 Schema —— 设计器产物,也是报告出件的唯一输入
|
*
|
* 字段分工:grapes 是 GrapesJS 原始项目数据(设计器还原画布用,渲染引擎也读它,
|
* 正文结构在这里);components 是质量组件业务语义清单(渲染不读);rules 是判定规则。
|
*
|
* 契约版本 1.1:删除了 1.0 时期的 dataSources / bindings / styles —— 它们始终是空数组,
|
* 既无人写入也无人读取。后端 ReportTemplateSchema 已同步删除,两端必须一起改。
|
*/
|
export interface ReportTemplateSchema {
|
schemaVersion?: string;
|
page?: SchemaPage;
|
grapes?: Record<string, unknown>;
|
components?: QualityComponentNode[];
|
rules?: SchemaRule[];
|
}
|
|
/** 模板版本 */
|
export interface Version {
|
id?: number;
|
templateId?: number;
|
version?: string;
|
schema?: ReportTemplateSchema;
|
status?: number; // 0草稿 1已发布 2已停用
|
description?: string;
|
creator?: string;
|
createTime?: Date;
|
updateTime?: Date;
|
}
|
|
/** 创建版本入参:version 留空由后端按最新版本自增 */
|
export interface VersionCreateReq {
|
templateId: number;
|
version?: string;
|
schema?: ReportTemplateSchema;
|
description?: string;
|
}
|
|
/** 更新版本入参:仅允许改设计内容与说明 */
|
export interface VersionUpdateReq {
|
id: number;
|
schema?: ReportTemplateSchema;
|
description?: string;
|
}
|
}
|
|
/** 查询模板版本分页 */
|
export function getVersionPage(params: PageParam) {
|
return requestClient.get<PageResult<QcReportVersionApi.Version>>(
|
'/qc-report/template-version/page',
|
{ params },
|
);
|
}
|
|
/** 查询模板版本详情 */
|
export function getVersion(id: number) {
|
return requestClient.get<QcReportVersionApi.Version>(
|
`/qc-report/template-version/get?id=${id}`,
|
);
|
}
|
|
/** 查询模板的所有版本 */
|
export function getVersionListByTemplate(templateId: number) {
|
return requestClient.get<QcReportVersionApi.Version[]>(
|
`/qc-report/template-version/list-by-template?templateId=${templateId}`,
|
);
|
}
|
|
/** 创建模板版本,返回版本编号 */
|
export function createVersion(data: QcReportVersionApi.VersionCreateReq) {
|
return requestClient.post<number>('/qc-report/template-version/create', data);
|
}
|
|
/** 更新模板版本 */
|
export function updateVersion(data: QcReportVersionApi.VersionUpdateReq) {
|
return requestClient.put('/qc-report/template-version/update', data);
|
}
|
|
/** 删除模板版本(仅草稿) */
|
export function deleteVersion(id: number) {
|
return requestClient.delete(`/qc-report/template-version/delete?id=${id}`);
|
}
|
|
/** 发布模板版本 */
|
export function publishVersion(id: number) {
|
return requestClient.post(`/qc-report/template-version/publish?id=${id}`);
|
}
|
|
/** 回滚到指定历史版本 */
|
export function rollbackVersion(id: number) {
|
return requestClient.post(`/qc-report/template-version/rollback?id=${id}`);
|
}
|
|
/** 停用模板版本 */
|
export function disableVersion(id: number) {
|
return requestClient.post(`/qc-report/template-version/disable?id=${id}`);
|
}
|