From 76ffef36cd720b7c55bc5ff343041e8206f46347 Mon Sep 17 00:00:00 2001 From: wangxuefeng Date: Sat, 1 Mar 2025 18:14:09 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E7=89=A9=E6=96=99=E7=9A=84=20CRUD=20?= =?UTF-8?q?=E5=8A=9F=E8=83=BD=E5=AE=8C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 + apps/designer/src/io/file.ts | 39 ++++++++++++ apps/designer/src/io/materials.ts | 96 ++++++++++++++++++++++++++---- apps/designer/src/service/index.ts | 61 +++++++++++++------ 4 files changed, 169 insertions(+), 29 deletions(-) diff --git a/README.md b/README.md index 26ad3ae..3549f55 100644 --- a/README.md +++ b/README.md @@ -1 +1,3 @@ 低代码相关接口文档: https://developer.shiyuegame.com/showdoc/web/#/231?page_id=15660 + +密码:shiyuegame diff --git a/apps/designer/src/io/file.ts b/apps/designer/src/io/file.ts index daab59b..7b3ebf7 100644 --- a/apps/designer/src/io/file.ts +++ b/apps/designer/src/io/file.ts @@ -46,7 +46,46 @@ export const updateFile = async (id: string, data: LowCodeFileSchema) => { return response.data; }; +type PublishResponse = { + code: string; + data: object; + id?: string; + message: string; +}; + export const deleteFile = async (id: string) => { const response = await instance.delete(`/api/v1/files/${id}`); return response.data; }; + +/** + * 发布指定项目的所有文件 + * @param {number} projectId - 需要发布的项目ID + * @returns {Promise} 包含发布操作结果的Promise对象 + * @example + * // 发布项目ID为123的所有文件 + * await publishAllFile(123) + */ +export const publishAllFile = async ( + projectId: number +): Promise => { + const response = await instance.post('/api/v1/files/publish', { + project_id: projectId + }); + return response.data; +}; + +/** + * 发布单个文件 + * @param {string} fileId - 需要发布的文件ID + * @returns {Promise} 包含发布操作结果的Promise对象 + * @example + * // 发布文件ID为45tnbgeme的文件 + * await publishFile('45tnbgeme') + */ +export const publishFile = async (fileId: string): Promise => { + const response = await instance.post('/api/v1/files/publish-file', { + file_id: fileId + }); + return response.data; +}; diff --git a/apps/designer/src/io/materials.ts b/apps/designer/src/io/materials.ts index b571742..bd758ce 100644 --- a/apps/designer/src/io/materials.ts +++ b/apps/designer/src/io/materials.ts @@ -1,23 +1,99 @@ +import { type MaterialDescription } from '@vtj/core'; + import instance from './instance'; -export const getMaterialsList = async (data?: Record) => { - const response = await instance.get('/api/v1/materials', { - params: data - }); +// 定义响应类型 +interface MaterialResponse { + code: number; + data: MaterialData | MaterialData[]; + message: string; +} + +/** 创建物料请求参数 */ +interface CreateMaterialRequest { + project_id: number; + value: string; +} + +/** 创建物料响应类型 */ +interface CreateMaterialResponse { + code: number; + data: { id: string }; + message: string; +} + +/** 删除物料响应类型 */ +interface DeleteMaterialResponse { + code: number; + data: { id: string }; + message: string; +} + +/** + * 获取物料列表 + * @param params 查询参数 + * @returns 物料列表 + */ +export const getMaterialsList = async ( + params?: Record +): Promise => { + const response = await instance.get('/api/v1/materials', { params }); return response.data; }; -export const createMaterials = async (data: any) => { - const response = await instance.post('/api/v1/materials', data); +/** + * 根据ID获取单个物料 + * @param id 物料ID + * @returns 物料详情 + */ +export const getMaterials = async (id: number): Promise => { + const response = await instance.get(`/api/v1/materials/${id}`); return response.data; }; -export const updateMaterials = async (id: string, data: any) => { - const response = await instance.put(`/api/v1/materials/${id}`, data); +type MaterialData = { + project_id: number; + value: Record; + // 从原interface合并的字段 + id?: number; + name?: string; + created_at?: string; + updated_at?: string; +}; + +function transformMaterialData(data: MaterialData) { + return { + ...data, + value: JSON.stringify(data.value) + }; +} + +/** + * 创建新物料 + * @param data 物料数据(注意 value 需要是 JSON 字符串) + * @example + * postMaterials({ project_id: 1, value: '{"Authorization": "Bearer token"}' }) + */ +export const postMaterials = async ( + data: MaterialData +): Promise => { + const response = await instance.post( + '/api/v1/materials', + transformMaterialData(data) + ); return response.data; }; -export const deleteMaterials = async (id: string) => { - const response = await instance.delete(`/api/v1/materials/${id}`); +/** + * 删除指定物料 + * @param project_id 要删除的物料所属项目ID + * @returns 删除操作结果 + * @example + * deleteMaterial('123').then(() => console.log('删除成功')) + */ +export const deleteMaterials = async ( + project_id: number +): Promise => { + const response = await instance.delete(`/api/v1/materials/${project_id}`); return response.data; }; diff --git a/apps/designer/src/service/index.ts b/apps/designer/src/service/index.ts index 0f22dcc..dc4d41f 100644 --- a/apps/designer/src/service/index.ts +++ b/apps/designer/src/service/index.ts @@ -7,10 +7,11 @@ import { type ExtensionConfig, type PageFile, type BlockFile, + type NodeFromPlugin, ProjectModel, HistoryModel } from '@vtj/core'; -import { Storage, mapToObject } from '@vtj/utils'; +import { mapToObject, Storage } from '@vtj/utils'; import { BaseService } from '@vtj/renderer'; import { getProject, @@ -20,16 +21,18 @@ import { getFile as getLowCodeFile, deleteFile as deleteLowCodeFile, getHistory as getLowCodeHistory, - updateHistory as updateLowCodeHistory, deleteHistory as deleteLowCodeHistory, - getHistories as getLowCodeHistories, createHistory as createLowCodeHistory, - getHistories + getHistories as getLowCodeHistories, + publishFile as publishLowCodeFile, + publishAllFile as publishLowCodeAllFile, + getMaterials as getLowCodeMaterials, + postMaterials as postLowCodeMaterials, + deleteMaterials as deleteLowCodeMaterials } from '@/io'; const storage = new Storage({ type: 'local', expired: 0 - // prefix: '__VTJ_' }); const stringifyFields = [ @@ -46,7 +49,6 @@ export class LowCodeService extends BaseService { const remoteProject = await getProject('2'); const model = new ProjectModel(remoteProject); const dsl = model.toDsl(); - storage.save(`project_${model.id}`, dsl); return Promise.resolve(dsl); } @@ -56,7 +58,7 @@ export class LowCodeService extends BaseService { return Promise.resolve(extension as ExtensionConfig | undefined); } - public saveProject(project: ProjectSchema): Promise { + public async saveProject(project: ProjectSchema): Promise { const newProject = { ...project, ...Object.fromEntries( @@ -65,18 +67,34 @@ export class LowCodeService extends BaseService { .map(([key, value]) => [key, JSON.stringify(value)]) ) }; - updateProject('2', newProject); - const model = new ProjectModel(project); - storage.save(`project_${model.id}`, model.toDsl()); + await updateProject('2', newProject); return Promise.resolve(true); } - public saveMaterials( + public getPluginMaterial( + from: NodeFromPlugin + ): Promise { + return Promise.resolve(null); + } + + // TODO: 物料存储只有在发布为其他端 (比如 uinapp) 时才有用,当前版本时不需要的,暂且保留 + public async saveMaterials( project: ProjectSchema, materials: Map ): Promise { - storage.save(`materials_${project.id}`, mapToObject(materials)); - console.log('saveMaterials', materials); + const materialData = mapToObject(materials); + storage.save(`materials_${project.id}`, materialData); + console.log('saveMaterials', materialData); + // @ts-ignore + const existMaterials = await getLowCodeMaterials(project?.id); + console.log('existMaterials', existMaterials); + await postLowCodeMaterials({ + // @ts-ignore + project_id: project?.id, + value: materialData + }); + // @ts-ignore + await deleteLowCodeMaterials(project.id); return Promise.resolve(true); } @@ -132,7 +150,7 @@ export class LowCodeService extends BaseService { } public api = (type: string, data: any): Promise => { - console.log('api', type, data); + // console.log('api', type, data); return Promise.resolve(true); }; @@ -147,7 +165,7 @@ export class LowCodeService extends BaseService { } public async getHistory(fileId: string): Promise { - const histories = await getHistories({ + const histories = await getLowCodeHistories({ project_id: 2, file_id: fileId, per_page: 50 @@ -175,7 +193,7 @@ export class LowCodeService extends BaseService { fileId: string, historyItem: HistoryItem ): Promise { - const saveHistory = await createLowCodeHistory({ + await createLowCodeHistory({ project_id: 2, file_id: fileId, history_id: historyItem.id, @@ -189,8 +207,10 @@ export class LowCodeService extends BaseService { return Promise.resolve(true); } public publish(project: ProjectSchema): Promise { - console.log('整站发布 project', project); - return Promise.resolve(true); + return publishLowCodeAllFile(Number(project.id)).then((res) => { + console.log('整站发布', res); + return Promise.resolve(true); + }); } public publishFile( @@ -198,6 +218,9 @@ export class LowCodeService extends BaseService { file: PageFile | BlockFile ): Promise { console.log('发布页面', project, file); - return Promise.resolve(true); + return publishLowCodeFile(file.id).then((res) => { + console.log('发布页面', res); + return Promise.resolve(true); + }); } }