Merge remote-tracking branch 'origin/huangzhenbao-admin'
This commit is contained in:
@@ -41,6 +41,54 @@ export async function fetchReportRows(reportId: string, params: any): Promise<Ar
|
||||
return Array.isArray(anyData) ? (anyData as Array<UTSJSONObject>) : ([] as Array<UTSJSONObject>)
|
||||
}
|
||||
|
||||
// 供 data-detail.uvue 使用:包含 period 字段的报表信息
|
||||
export type DataDetailReportInfo = {
|
||||
id: string
|
||||
title: string
|
||||
description: string
|
||||
definition: any
|
||||
updated_at: string
|
||||
period: string
|
||||
}
|
||||
|
||||
export async function fetchDataDetailReportInfo(reportId: string): Promise<DataDetailReportInfo | null> {
|
||||
const row = await rpcOrNull('rpc_data_detail_report_info', {
|
||||
p_report_id: reportId
|
||||
} as any)
|
||||
|
||||
if (row == null) return null
|
||||
|
||||
return {
|
||||
id: safeString(row.getAny?.('id')),
|
||||
title: safeString(row.getAny?.('title')),
|
||||
description: safeString(row.getAny?.('description')),
|
||||
definition: row.getAny?.('definition'),
|
||||
updated_at: safeString(row.getAny?.('updated_at')),
|
||||
period: safeString(row.getAny?.('period'))
|
||||
}
|
||||
}
|
||||
|
||||
// 供 data-detail.uvue 使用:支持排序和分页参数
|
||||
export async function fetchDataDetailRows(
|
||||
reportId: string,
|
||||
sortKey: string,
|
||||
sortDir: string,
|
||||
limit: number,
|
||||
offset: number
|
||||
): Promise<Array<UTSJSONObject>> {
|
||||
const result = await rpcOrNull('rpc_data_detail_rows', {
|
||||
p_report_id: reportId,
|
||||
p_sort_key: sortKey,
|
||||
p_sort_dir: sortDir,
|
||||
p_limit: limit,
|
||||
p_offset: offset
|
||||
} as any)
|
||||
|
||||
if (result == null) return []
|
||||
const anyData = result as any
|
||||
return Array.isArray(anyData) ? (anyData as Array<UTSJSONObject>) : ([] as Array<UTSJSONObject>)
|
||||
}
|
||||
|
||||
// 保留调用,但 RPC 是模拟数据
|
||||
export async function fetchDrilldown(reportId: string, itemId: string): Promise<Array<UTSJSONObject>> {
|
||||
return await rpcOrEmptyArray('rpc_data_detail_drill_items', {
|
||||
|
||||
42
services/api.js
Normal file
42
services/api.js
Normal file
@@ -0,0 +1,42 @@
|
||||
// ⚠ Mock 数据,后续请替换成真实接口。
|
||||
import mockStore from "../stores/useMockData.js";
|
||||
|
||||
// 模拟网络延迟
|
||||
const delay = (ms = 500) => new Promise((resolve) => setTimeout(resolve, ms));
|
||||
|
||||
export const api = {
|
||||
// 文章分类接口
|
||||
async getCategories() {
|
||||
await delay();
|
||||
return { code: 200, data: mockStore.mockCategories, msg: "success" };
|
||||
},
|
||||
async addCategory(data) {
|
||||
await delay();
|
||||
mockStore.addCategory(data);
|
||||
return { code: 200, data: null, msg: "success" };
|
||||
},
|
||||
async updateCategory(id, data) {
|
||||
await delay();
|
||||
mockStore.updateCategory(id, data);
|
||||
return { code: 200, data: null, msg: "success" };
|
||||
},
|
||||
|
||||
// 文章接口
|
||||
async getArticles(page = 1, pageSize = 10) {
|
||||
await delay();
|
||||
const total = mockStore.mockArticles.length;
|
||||
const start = (page - 1) * pageSize;
|
||||
const data = mockStore.mockArticles.slice(start, start + pageSize);
|
||||
return { code: 200, data: { list: data, total }, msg: "success" };
|
||||
},
|
||||
async addArticle(data) {
|
||||
await delay();
|
||||
mockStore.addArticle(data);
|
||||
return { code: 200, data: null, msg: "success" };
|
||||
},
|
||||
async updateArticle(id, data) {
|
||||
await delay();
|
||||
mockStore.updateArticle(id, data);
|
||||
return { code: 200, data: null, msg: "success" };
|
||||
},
|
||||
};
|
||||
Reference in New Issue
Block a user