From c2ca1ea1e553470f16128791b2bc450330afae73 Mon Sep 17 00:00:00 2001 From: xiaojunnuo Date: Fri, 11 Apr 2025 14:00:28 +0800 Subject: [PATCH] =?UTF-8?q?chore:=20=E6=96=B0=E5=A2=9E=E6=8F=92=E4=BB=B6?= =?UTF-8?q?=E9=A2=9D=E5=A4=96=E9=85=8D=E7=BD=AE=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在插件管理中添加 extra 字段,用于存储额外配置信息 - 实现插件编辑页面的额外配置编辑功能 - 更新数据库结构,增加 extra 列 - 优化代码编辑器的导入方式 - 更新 fast-crud 相关包版本 --- packages/ui/certd-client/package.json | 8 ++-- .../components/code-editor/import-works.ts | 7 --- .../src/views/sys/plugin/crud.tsx | 14 +++++- .../src/views/sys/plugin/edit.vue | 44 ++++++++++++------ .../src/views/sys/plugin/index.vue | 5 +- .../db/migration/v10021__plugin.sql | 1 + .../src/modules/plugin/entity/plugin.ts | 3 ++ pnpm-lock.yaml | 46 +++++++++---------- 8 files changed, 79 insertions(+), 49 deletions(-) diff --git a/packages/ui/certd-client/package.json b/packages/ui/certd-client/package.json index a3930e1f..c2550aa5 100644 --- a/packages/ui/certd-client/package.json +++ b/packages/ui/certd-client/package.json @@ -29,10 +29,10 @@ "@aws-sdk/client-s3": "^3.535.0", "@aws-sdk/s3-request-presigner": "^3.535.0", "@ctrl/tinycolor": "^4.1.0", - "@fast-crud/fast-crud": "^1.25.7", - "@fast-crud/fast-extends": "^1.25.7", - "@fast-crud/ui-antdv4": "^1.25.7", - "@fast-crud/ui-interface": "^1.25.7", + "@fast-crud/fast-crud": "^1.25.8", + "@fast-crud/fast-extends": "^1.25.8", + "@fast-crud/ui-antdv4": "^1.25.8", + "@fast-crud/ui-interface": "^1.25.8", "@iconify/tailwind": "^1.2.0", "@iconify/vue": "^4.1.1", "@manypkg/get-packages": "^2.2.2", diff --git a/packages/ui/certd-client/src/components/code-editor/import-works.ts b/packages/ui/certd-client/src/components/code-editor/import-works.ts index 8b67ff01..e65ec2a9 100644 --- a/packages/ui/certd-client/src/components/code-editor/import-works.ts +++ b/packages/ui/certd-client/src/components/code-editor/import-works.ts @@ -1,10 +1,3 @@ -// const editorWorker = await import("monaco-editor/esm/vs/editor/editor.worker?worker"); -// const jsonWorker = await import("monaco-editor/esm/vs/language/json/json.worker?worker"); -// const cssWorker = await import("monaco-editor/esm/vs/language/css/css.worker?worker"); -// const htmlWorker = await import("monaco-editor/esm/vs/language/html/html.worker?worker"); -// const tsWorker = await import("monaco-editor/esm/vs/language/typescript/ts.worker?worker"); -// const yamlWorker = await import("monaco-yaml/yaml.worker.js?worker"); - import editorWorker from "monaco-editor/esm/vs/editor/editor.worker?worker"; import jsonWorker from "monaco-editor/esm/vs/language/json/json.worker?worker"; import cssWorker from "monaco-editor/esm/vs/language/css/css.worker?worker"; diff --git a/packages/ui/certd-client/src/views/sys/plugin/crud.tsx b/packages/ui/certd-client/src/views/sys/plugin/crud.tsx index 0570eb8d..98ee8f79 100644 --- a/packages/ui/certd-client/src/views/sys/plugin/crud.tsx +++ b/packages/ui/certd-client/src/views/sys/plugin/crud.tsx @@ -6,6 +6,8 @@ import { AddReq, compute, CreateCrudOptionsProps, CreateCrudOptionsRet, DelReq, import { useUserStore } from "/src/store/modules/user"; import { useSettingStore } from "/src/store/modules/settings"; import { Modal } from "ant-design-vue"; +//@ts-ignore +import yaml from "js-yaml"; export default function ({ crudExpose, context }: CreateCrudOptionsProps): CreateCrudOptionsRet { const router = useRouter(); @@ -277,7 +279,7 @@ export default function ({ crudExpose, context }: CreateCrudOptionsProps): Creat }, }, }, - "default.strategy.runStrategy": { + "extra.default.strategy.runStrategy": { title: "运行策略", type: "dict-select", @@ -299,6 +301,16 @@ export default function ({ crudExpose, context }: CreateCrudOptionsProps): Creat color: "auto", }, }, + valueBuilder({ row }) { + if (row.extra) { + row.extra = yaml.load(row.extra); + } + }, + valueResolve({ row }) { + if (row.extra) { + row.extra = yaml.dump(row.extra); + } + }, }, disabled: { title: "点击禁用/启用", diff --git a/packages/ui/certd-client/src/views/sys/plugin/edit.vue b/packages/ui/certd-client/src/views/sys/plugin/edit.vue index ee160c7e..d77c6434 100644 --- a/packages/ui/certd-client/src/views/sys/plugin/edit.vue +++ b/packages/ui/certd-client/src/views/sys/plugin/edit.vue @@ -33,7 +33,9 @@ - +
+ +
@@ -42,10 +44,10 @@ import { onMounted, provide, ref, Ref } from "vue"; import { useRoute } from "vue-router"; import * as api from "./api"; -import yaml from "js-yaml"; import { notification } from "ant-design-vue"; import createCrudOptions from "./crud"; import { useColumns } from "@fast-crud/fast-crud"; +import yaml from "js-yaml"; const CertApplyPluginNames = ["CertApply", "CertApplyLego", "CertApplyUpload"]; defineOptions({ @@ -81,19 +83,14 @@ initFormOptions(); async function getPlugin() { const id = route.query.id; const pluginObj = await api.GetObj(id); - if (pluginObj.metadata) { - const metadata = yaml.load(pluginObj.metadata); - pluginObj.default = metadata.default || {}; - delete metadata.default; - pluginObj.metadata = yaml.dump(metadata, { - indent: 2, - }); - } plugin.value = pluginObj; const baseFrom = { ...pluginObj, }; + if (baseFrom.extra) { + baseFrom.extra = yaml.load(baseFrom.extra); + } delete baseFrom.metadata; delete baseFrom.content; baseFormRef.value.setFormData(baseFrom); @@ -107,17 +104,31 @@ provide("get:plugin", () => { return plugin; }); +function validate() { + try { + yaml.load(plugin.value.metadata); + } catch (e: any) { + const message = `元数据校验失败:${e.message}`; + notification.error({ + message, + }); + + throw new Error(message); + } +} + const saveLoading = ref(false); async function doSave() { + validate(); saveLoading.value = true; const baseForm = baseFormRef.value.getFormData(); - const metadata = yaml.load(plugin.value.metadata); - metadata.default = baseForm.default; const form = { ...plugin.value, ...baseForm, - metadata: yaml.dump(metadata, { indent: 2 }), }; + if (form.extra) { + form.extra = yaml.dump(form.extra); + } try { await api.UpdateObj(form); notification.success({ @@ -161,6 +172,10 @@ async function doTest() { display: flex; flex-direction: column; height: 100%; + .base-body { + flex: 1; + overflow: auto; + } } .metadata { @@ -191,6 +206,9 @@ async function doTest() { display: flex; flex-direction: column; height: 100%; + .script-body { + flex: 1; + } } } } diff --git a/packages/ui/certd-client/src/views/sys/plugin/index.vue b/packages/ui/certd-client/src/views/sys/plugin/index.vue index c4f1b188..80e0c21c 100644 --- a/packages/ui/certd-client/src/views/sys/plugin/index.vue +++ b/packages/ui/certd-client/src/views/sys/plugin/index.vue @@ -1,7 +1,10 @@