From 5c4aa42ecf3480050709c0c721a1400b149a5da2 Mon Sep 17 00:00:00 2001 From: wangxuefeng Date: Sat, 1 Mar 2025 13:54:58 +0800 Subject: [PATCH] =?UTF-8?q?chore:=20=E6=B8=B2=E6=9F=93=E7=AB=AF=E9=80=9A?= =?UTF-8?q?=E8=BF=87=20api=20=E8=8E=B7=E5=8F=96=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/designer/src/io/history.ts | 33 +++- apps/designer/src/io/index.ts | 1 + apps/designer/src/service/index.ts | 105 +++++------ apps/renderer/package.json | 1 + apps/renderer/src/App.vue | 293 +++-------------------------- apps/renderer/src/index.ts | 7 +- apps/renderer/src/io/file.ts | 16 ++ apps/renderer/src/io/index.ts | 1 + apps/renderer/src/io/instance.ts | 30 +++ apps/renderer/tsconfig.json | 2 + pnpm-lock.yaml | 11 ++ 11 files changed, 176 insertions(+), 324 deletions(-) create mode 100644 apps/renderer/src/io/file.ts create mode 100644 apps/renderer/src/io/index.ts create mode 100644 apps/renderer/src/io/instance.ts diff --git a/apps/designer/src/io/history.ts b/apps/designer/src/io/history.ts index 881fe3f..89b9be6 100644 --- a/apps/designer/src/io/history.ts +++ b/apps/designer/src/io/history.ts @@ -1,21 +1,44 @@ import instance from './instance'; +import { type HistorySchema } from '@vtj/core'; -export const getMaterialsList = async () => { +export type LowCodeHistorySchema = { + project_id: string; + id: string; + page_id?: string; + block_id?: string; + dsl?: HistorySchema; +}; + +function transformHistoryData(data: LowCodeHistorySchema) { + return { + ...data, + dsl: JSON.stringify(data.dsl || {}) + }; +} +export const getHistories = async () => { const response = await instance.get('/api/v1/histories'); return response.data; }; -export const createMaterials = async (data: any) => { - const response = await instance.post('/api/v1/histories', data); +export const getHistory = async (id: string) => { + const response = await instance.get(`/api/v1/histories/${id}`); return response.data; }; -export const updateMaterials = async (id: string, data: any) => { +export const createHistory = async (data: LowCodeHistorySchema) => { + const response = await instance.post( + '/api/v1/histories', + transformHistoryData(data) + ); + return response.data; +}; + +export const updateHistory = async (id: string, data: any) => { const response = await instance.put(`/api/v1/histories/${id}`, data); return response.data; }; -export const deleteMaterials = async (id: string) => { +export const deleteHistory = async (id: string) => { const response = await instance.delete(`/api/v1/histories/${id}`); return response.data; }; diff --git a/apps/designer/src/io/index.ts b/apps/designer/src/io/index.ts index 800e1ec..47b8c53 100644 --- a/apps/designer/src/io/index.ts +++ b/apps/designer/src/io/index.ts @@ -4,3 +4,4 @@ export * from './file'; export * from './materials'; export * from './project'; export * from './application'; +export * from './history'; diff --git a/apps/designer/src/service/index.ts b/apps/designer/src/service/index.ts index a77f650..1195d64 100644 --- a/apps/designer/src/service/index.ts +++ b/apps/designer/src/service/index.ts @@ -19,7 +19,11 @@ import { updateFile as updateLowCodeFile, getFile as getLowCodeFile, deleteFile as deleteLowCodeFile, - type LowCodeFileSchema + getHistory as getLowCodeHistory, + updateHistory as updateLowCodeHistory, + deleteHistory as deleteLowCodeHistory, + getHistories as getLowCodeHistories, + createHistory as createLowCodeHistory } from '@/io'; import { isNumeric } from 'licia-es'; const storage = new Storage({ @@ -39,20 +43,9 @@ const stringifyFields = [ export class StorageService extends BaseService { public async init(project: ProjectSchema): Promise { - // console.log('init-project', project); - // const model = new ProjectModel(project); - // // console.log('init-project-model', model); - // const match = storage.get(`project_${model.id}`); - // console.log('init-project-match', match); - // const dsl = Object.assign(model.toDsl(), match || {}); - // console.log('init-project-dsl', dsl); - // storage.save(`project_${model.id}`, dsl); - // return Promise.resolve(dsl); const remoteProject = await getProject('2'); - console.log('remoteProject', remoteProject); const model = new ProjectModel(remoteProject); const dsl = model.toDsl(); - console.log('dsl', dsl); storage.save(`project_${model.id}`, dsl); return Promise.resolve(dsl); } @@ -64,7 +57,6 @@ export class StorageService extends BaseService { } public saveProject(project: ProjectSchema): Promise { - console.log('saveProject', project); const newProject = { ...project, ...Object.fromEntries( @@ -73,7 +65,6 @@ export class StorageService extends BaseService { .map(([key, value]) => [key, JSON.stringify(value)]) ) }; - console.log('newProject', newProject); updateProject('2', newProject); const model = new ProjectModel(project); storage.save(`project_${model.id}`, model.toDsl()); @@ -93,51 +84,60 @@ export class StorageService extends BaseService { console.log('saveFile', file); if (file.id) { const existFile = await getLowCodeFile(file.id); - console.log('existFile', existFile); if (existFile.file_id) { - console.log('updateFile', file, existFile); - await updateLowCodeFile(file.id, { + return updateLowCodeFile(file.id, { ...existFile, dsl: file - }); + }) + .then(() => { + return Promise.resolve(true); + }) + .catch((err) => { + return Promise.reject(err); + }); } else { - console.log('createFile', file); - await createFile({ + return createFile({ project_id: 2, publish: false, active: true, dsl: file, file_id: file.id - }); + }) + .then(() => { + return Promise.resolve(true); + }) + .catch((err) => { + return Promise.reject(err); + }); } } - return Promise.resolve(true); + return Promise.resolve(false); } public async getFile(id: string): Promise { - const dsl = storage.get(`file_${id}`); - const lowCodeFile = await getLowCodeFile(id); - console.log('getFile', lowCodeFile); - if (lowCodeFile.dsl) { - return Promise.resolve(lowCodeFile.dsl as BlockSchema); - } else { - return Promise.reject(null); - } - } - - public async removeFile(id: string): Promise { - storage.remove(`file_${id}`); - console.log('removeFile', id); - // return Promise.resolve(true); - return deleteLowCodeFile(id).then((res) => { - console.log('removeFile-res', res); - return Promise.resolve(true); + console.log('getFile', id); + return getLowCodeFile(id).then((lowCodeFile) => { + if (lowCodeFile.dsl) { + return Promise.resolve(lowCodeFile.dsl as BlockSchema); + } else { + return Promise.reject(null); + } }); } - public saveHistory(history: HistorySchema): Promise { + public async removeFile(id: string): Promise { + return deleteLowCodeFile(id).then(() => Promise.resolve(true)); + } + + public async saveHistory(history: HistorySchema): Promise { + console.log('saveHistory', history); + // const existHistory = await getLowCodeHistory(history.id); + // if (existHistory.history_id) { + // await updateLowCodeHistory(history.id, history); + // } else { + // await createLowCodeHistory(history); + // } storage.save(`history_${history.id}`, history); - // console.log('saveHistory', history); return Promise.resolve(true); } @@ -152,23 +152,18 @@ export class StorageService extends BaseService { }; public removeHistory(id: string): Promise { - const history = storage.get(`history_${id}`) as HistorySchema; - if (history) { - const items = history.items || []; - const ids = items.map((item) => item.id); - this.removeHistoryItem(id, ids); - storage.remove(`history_${id}`); - console.log('removeHistory', history); - } - - return Promise.resolve(true); + return deleteLowCodeHistory(id).then((res) => { + console.log('removeHistory', res); + return Promise.resolve(true); + }); } - public getHistory(id: string): Promise { + public async getHistory(id: string): Promise { const dsl = storage.get(`history_${id}`); console.log('getHistoryDSL', dsl); const history = new HistoryModel(dsl || { id }); console.log('getHistory', dsl, id, history); + // const histories = await getLowCodeHistories(id); return Promise.resolve(history.toDsl()); } @@ -178,9 +173,9 @@ export class StorageService extends BaseService { return Promise.resolve(item); } - public saveHistoryItem(fId: string, item: HistoryItem): Promise { - console.log('saveHistoryItem', fId, item); - storage.save(`history_${fId}_${item.id}`, item); + public saveHistoryItem(fileId: string, item: HistoryItem): Promise { + console.log('saveHistoryItem', fileId, item); + storage.save(`history_${fileId}_${item.id}`, item); return Promise.resolve(true); } diff --git a/apps/renderer/package.json b/apps/renderer/package.json index e41ff38..6eca448 100644 --- a/apps/renderer/package.json +++ b/apps/renderer/package.json @@ -16,6 +16,7 @@ "@iframe-resizer/child": "^5.3.3", "@sy/low-code-shared": "workspace:*", "@sy/web-vitals": "workspace:*", + "@tanstack/vue-query": "^5.66.9", "@vtj/core": "^0.10.6", "@vtj/icons": "0.10.6", "@vtj/materials": "^0.10.6", diff --git a/apps/renderer/src/App.vue b/apps/renderer/src/App.vue index af2f283..448a7ba 100644 --- a/apps/renderer/src/App.vue +++ b/apps/renderer/src/App.vue @@ -1,267 +1,11 @@ diff --git a/apps/renderer/src/index.ts b/apps/renderer/src/index.ts index 7c0cec1..b54e0ff 100644 --- a/apps/renderer/src/index.ts +++ b/apps/renderer/src/index.ts @@ -1,10 +1,15 @@ import { createApp } from "vue"; import "@sy/web-vitals"; import { IconsPlugin } from "@vtj/icons"; +import { VueQueryPlugin } from "@tanstack/vue-query"; // import "@sy/low-code-shared/styles/reset.css"; import App from "./App.vue"; import ElementPlus from "element-plus"; import "element-plus/dist/index.css"; -createApp(App).use(ElementPlus).use(IconsPlugin).mount("#low-code-renderer"); +createApp(App) + .use(ElementPlus) + .use(IconsPlugin) + .use(VueQueryPlugin) + .mount("#low-code-renderer"); diff --git a/apps/renderer/src/io/file.ts b/apps/renderer/src/io/file.ts new file mode 100644 index 0000000..6d48ed9 --- /dev/null +++ b/apps/renderer/src/io/file.ts @@ -0,0 +1,16 @@ +import { BlockSchema } from "@vtj/core"; +import instance from "./instance"; + +export type LowCodeFileSchema = { + project_id: number; + publish: boolean; + active: boolean; + dsl: BlockSchema; + file_path?: string; + file_id?: string; +}; + +export const getFile = async (id: string): Promise => { + const response = await instance.get(`/api/v1/files/${id}`); + return response.data; +}; diff --git a/apps/renderer/src/io/index.ts b/apps/renderer/src/io/index.ts new file mode 100644 index 0000000..375123f --- /dev/null +++ b/apps/renderer/src/io/index.ts @@ -0,0 +1 @@ +export * from "./file"; diff --git a/apps/renderer/src/io/instance.ts b/apps/renderer/src/io/instance.ts new file mode 100644 index 0000000..73ae809 --- /dev/null +++ b/apps/renderer/src/io/instance.ts @@ -0,0 +1,30 @@ +import axios from "axios"; + +const baseApiUrl = "https://custom-chart-pre-api.shiyue.com/"; + +// 创建独立实例 +const instance = axios.create({ + baseURL: baseApiUrl, // 基础URL直接放在实例配置中 +}); + +// 请求拦截器改为使用实例 +instance.interceptors.request.use( + (config) => { + // 可在此处添加统一请求头等配置 + return config; + }, + (error) => { + return Promise.reject(error); + } +); + +instance.interceptors.response.use( + (response) => { + return response.data; + }, + (error) => { + return Promise.reject(error); + } +); +// 导出实例 +export default instance; diff --git a/apps/renderer/tsconfig.json b/apps/renderer/tsconfig.json index 11e5c4e..3cbde24 100644 --- a/apps/renderer/tsconfig.json +++ b/apps/renderer/tsconfig.json @@ -1,5 +1,7 @@ { + "extends": "./node_modules/@vtj/cli/config/tsconfig.web.json", "compilerOptions": { + "lib": ["es2015", "dom"], "noUnusedLocals": false, "noUnusedParameters": false, "baseUrl": "./", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 1433296..7040b8d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -433,6 +433,9 @@ importers: '@sy/web-vitals': specifier: workspace:* version: link:../../packages/web-vitals + '@tanstack/vue-query': + specifier: ^5.66.9 + version: 5.66.9(vue@3.5.13(typescript@5.7.3)) '@vtj/core': specifier: ^0.10.6 version: 0.10.6 @@ -13316,6 +13319,14 @@ snapshots: vue: 3.5.13(typescript@5.6.3) vue-demi: 0.14.10(vue@3.5.13(typescript@5.6.3)) + '@tanstack/vue-query@5.66.9(vue@3.5.13(typescript@5.7.3))': + dependencies: + '@tanstack/match-sorter-utils': 8.19.4 + '@tanstack/query-core': 5.66.4 + '@vue/devtools-api': 6.6.4 + vue: 3.5.13(typescript@5.7.3) + vue-demi: 0.14.10(vue@3.5.13(typescript@5.7.3)) + '@trysound/sax@0.2.0': {} '@tsconfig/node20@20.1.4': {}