feat:物料的 CRUD 功能完成
This commit is contained in:
parent
e052752694
commit
76ffef36cd
@ -1 +1,3 @@
|
||||
低代码相关接口文档: https://developer.shiyuegame.com/showdoc/web/#/231?page_id=15660
|
||||
|
||||
密码:shiyuegame
|
||||
|
@ -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<any>} 包含发布操作结果的Promise对象
|
||||
* @example
|
||||
* // 发布项目ID为123的所有文件
|
||||
* await publishAllFile(123)
|
||||
*/
|
||||
export const publishAllFile = async (
|
||||
projectId: number
|
||||
): Promise<PublishResponse> => {
|
||||
const response = await instance.post('/api/v1/files/publish', {
|
||||
project_id: projectId
|
||||
});
|
||||
return response.data;
|
||||
};
|
||||
|
||||
/**
|
||||
* 发布单个文件
|
||||
* @param {string} fileId - 需要发布的文件ID
|
||||
* @returns {Promise<any>} 包含发布操作结果的Promise对象
|
||||
* @example
|
||||
* // 发布文件ID为45tnbgeme的文件
|
||||
* await publishFile('45tnbgeme')
|
||||
*/
|
||||
export const publishFile = async (fileId: string): Promise<PublishResponse> => {
|
||||
const response = await instance.post('/api/v1/files/publish-file', {
|
||||
file_id: fileId
|
||||
});
|
||||
return response.data;
|
||||
};
|
||||
|
@ -1,23 +1,99 @@
|
||||
import { type MaterialDescription } from '@vtj/core';
|
||||
|
||||
import instance from './instance';
|
||||
|
||||
export const getMaterialsList = async (data?: Record<string, any>) => {
|
||||
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<string, any>
|
||||
): Promise<MaterialResponse> => {
|
||||
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<MaterialResponse> => {
|
||||
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<string, MaterialDescription>;
|
||||
// 从原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<CreateMaterialResponse> => {
|
||||
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<DeleteMaterialResponse> => {
|
||||
const response = await instance.delete(`/api/v1/materials/${project_id}`);
|
||||
return response.data;
|
||||
};
|
||||
|
@ -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<boolean> {
|
||||
public async saveProject(project: ProjectSchema): Promise<boolean> {
|
||||
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<MaterialDescription | null> {
|
||||
return Promise.resolve(null);
|
||||
}
|
||||
|
||||
// TODO: 物料存储只有在发布为其他端 (比如 uinapp) 时才有用,当前版本时不需要的,暂且保留
|
||||
public async saveMaterials(
|
||||
project: ProjectSchema,
|
||||
materials: Map<string, MaterialDescription>
|
||||
): Promise<boolean> {
|
||||
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<any> => {
|
||||
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<HistorySchema> {
|
||||
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<boolean> {
|
||||
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<boolean> {
|
||||
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<boolean> {
|
||||
console.log('发布页面', project, file);
|
||||
return Promise.resolve(true);
|
||||
return publishLowCodeFile(file.id).then((res) => {
|
||||
console.log('发布页面', res);
|
||||
return Promise.resolve(true);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user