昨天 35722562e9e13f0504acc15b740d042ecb810199
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
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}`);
}