Merge remote-tracking branch 'origin/v2-plugin' into v2-plugin

pull/370/head
xiaojunnuo 2025-04-11 22:38:16 +08:00
commit 420b0394a7
8 changed files with 79 additions and 49 deletions

View File

@ -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",

View File

@ -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";

View File

@ -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: "点击禁用/启用",

View File

@ -33,7 +33,9 @@
<a-tabs type="card">
<a-tab-pane key="script" tab="脚本"> </a-tab-pane>
</a-tabs>
<code-editor id="content" v-model:model-value="plugin.content" language="javascript" @save="doSave"></code-editor>
<div class="script-body">
<code-editor id="content" v-model:model-value="plugin.content" language="javascript" @save="doSave"></code-editor>
</div>
</div>
</div>
</fs-page>
@ -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;
}
}
}
}

View File

@ -1,7 +1,10 @@
<template>
<fs-page class="page-cert">
<template #header>
<div class="title">插件管理</div>
<div class="title">
插件管理
<span class="sub">自定义插件处于BETA测试版后续可能会有破坏性变更</span>
</div>
</template>
<fs-crud ref="crudRef" v-bind="crudBinding">
<!-- <template #pagination-left>-->

View File

@ -1,6 +1,7 @@
ALTER TABLE pi_plugin ADD COLUMN "pluginType" varchar(100);
ALTER TABLE pi_plugin ADD COLUMN "metadata" varchar(40960);
ALTER TABLE pi_plugin ADD COLUMN "author" varchar(100);
ALTER TABLE pi_plugin ADD COLUMN "extra" varchar(40960);

View File

@ -44,6 +44,9 @@ export class PluginEntity {
@Column({ comment: '元数据', length: 40960, nullable: true })
metadata: string;
@Column({ comment: '额外配置', length: 40960, nullable: true })
extra: string;
@Column({ comment: '作者', length: 100, nullable: true })
author: string;

View File

@ -1059,17 +1059,17 @@ importers:
specifier: ^4.1.0
version: 4.1.0
'@fast-crud/fast-crud':
specifier: ^1.25.7
version: 1.25.7(vue@3.5.13(typescript@5.8.2))
specifier: ^1.25.8
version: 1.25.8(vue@3.5.13(typescript@5.8.2))
'@fast-crud/fast-extends':
specifier: ^1.25.7
version: 1.25.7(aws-crt@1.25.3)(vue@3.5.13(typescript@5.8.2))
specifier: ^1.25.8
version: 1.25.8(aws-crt@1.25.3)(vue@3.5.13(typescript@5.8.2))
'@fast-crud/ui-antdv4':
specifier: ^1.25.7
version: 1.25.7
specifier: ^1.25.8
version: 1.25.8
'@fast-crud/ui-interface':
specifier: ^1.25.7
version: 1.25.7
specifier: ^1.25.8
version: 1.25.8
'@iconify/tailwind':
specifier: ^1.2.0
version: 1.2.0
@ -3250,17 +3250,17 @@ packages:
resolution: {integrity: sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
'@fast-crud/fast-crud@1.25.7':
resolution: {integrity: sha512-dq5ijw6PU/FQBTP+ZwBezMHqAEZDbAoShHGNIkCK9a0vOqL5MhBnOzq5DPRz6yFUNnJEFX8kYB7N7A00Qnw5Zg==}
'@fast-crud/fast-crud@1.25.8':
resolution: {integrity: sha512-ftIhCJwDwNdHTgCYeuSwheD9c/Vvf/5ef9hu7ZwDQ22qD9dJmSUxrAYv6UWuJ4r4zcbNCk8BaBcaKwqSltd3Dg==}
'@fast-crud/fast-extends@1.25.7':
resolution: {integrity: sha512-vZu6CGXvacgnZI4d78qEc0X1xrdylJjABapU1O60xwwDx+CIcJfH6N+Q4ku/12YdTTeJAsYDnsSFzNEDtzQpwQ==}
'@fast-crud/fast-extends@1.25.8':
resolution: {integrity: sha512-aw/8SLJJvBtwQOwafaG87r0IWIncZK7BOiJRl7MZiv3Cp+G4naLam7WjtIQIZIT9zfLZqb+z3zy+x00cbUMRkw==}
'@fast-crud/ui-antdv4@1.25.7':
resolution: {integrity: sha512-T95LiMO2WV6XcnLyALLRB59xmi43eWHxIeABeZBeDD5Y2nmXR3ceQj63VBo4SJMDNEu49MKabQpOa/A2X6Rmwg==}
'@fast-crud/ui-antdv4@1.25.8':
resolution: {integrity: sha512-lRehabbucwKV2OM0bfVHt0BI8BYu+sb4z9l+9EkIvTDQurowfxZO+WFk/KIe3BhuKHtKlmmwEa73cefMMVzvjA==}
'@fast-crud/ui-interface@1.25.7':
resolution: {integrity: sha512-JrP2/dm1Sco0UdSYhIMkf9tdynYURHlO1qyDHmssF1lqo9+PrU1kwuizaK1soG+myHiYznbBiXo1+GIly/MU+A==}
'@fast-crud/ui-interface@1.25.8':
resolution: {integrity: sha512-UUoXce20z+BlPu/KKNfdHb6qpX1OdrrkMuIO2KdaI4FENVa9IW83AsttmNSHNkZkvG7zeVacxd03Y0xmdGeioA==}
'@fidm/asn1@1.0.4':
resolution: {integrity: sha512-esd1jyNvRb2HVaQGq2Gg8Z0kbQPXzV9Tq5Z14KNIov6KfFD6PTaRIO8UpcsYiTNzOqJpmyzWgVTrUwFV3UF4TQ==}
@ -15297,7 +15297,7 @@ snapshots:
'@eslint/js@8.57.0': {}
'@fast-crud/fast-crud@1.25.7(vue@3.5.13(typescript@5.8.2))':
'@fast-crud/fast-crud@1.25.8(vue@3.5.13(typescript@5.8.2))':
dependencies:
'@iconify/types': 2.0.0
file-saver: 2.0.5
@ -15307,7 +15307,7 @@ snapshots:
transitivePeerDependencies:
- vue
'@fast-crud/fast-extends@1.25.7(aws-crt@1.25.3)(vue@3.5.13(typescript@5.8.2))':
'@fast-crud/fast-extends@1.25.8(aws-crt@1.25.3)(vue@3.5.13(typescript@5.8.2))':
dependencies:
'@aws-sdk/client-s3': 3.758.0(aws-crt@1.25.3)
'@aws-sdk/s3-request-presigner': 3.758.0
@ -15339,9 +15339,9 @@ snapshots:
- utf-8-validate
- vue
'@fast-crud/ui-antdv4@1.25.7': {}
'@fast-crud/ui-antdv4@1.25.8': {}
'@fast-crud/ui-interface@1.25.7':
'@fast-crud/ui-interface@1.25.8':
dependencies:
lodash-es: 4.17.21
@ -20616,13 +20616,13 @@ snapshots:
resolve: 1.22.10
semver: 6.3.1
eslint-plugin-prettier@3.4.1(eslint-config-prettier@8.10.0(eslint@7.32.0))(eslint@7.32.0)(prettier@2.8.8):
eslint-plugin-prettier@3.4.1(eslint-config-prettier@8.10.0(eslint@8.57.0))(eslint@7.32.0)(prettier@2.8.8):
dependencies:
eslint: 7.32.0
prettier: 2.8.8
prettier-linter-helpers: 1.0.0
optionalDependencies:
eslint-config-prettier: 8.10.0(eslint@7.32.0)
eslint-config-prettier: 8.10.0(eslint@8.57.0)
eslint-plugin-prettier@4.2.1(eslint-config-prettier@8.10.0(eslint@8.57.0))(eslint@8.57.0)(prettier@2.8.8):
dependencies:
@ -23336,7 +23336,7 @@ snapshots:
eslint: 7.32.0
eslint-config-prettier: 8.10.0(eslint@7.32.0)
eslint-plugin-node: 11.1.0(eslint@7.32.0)
eslint-plugin-prettier: 3.4.1(eslint-config-prettier@8.10.0(eslint@7.32.0))(eslint@7.32.0)(prettier@2.8.8)
eslint-plugin-prettier: 3.4.1(eslint-config-prettier@8.10.0(eslint@8.57.0))(eslint@7.32.0)(prettier@2.8.8)
execa: 5.1.1
inquirer: 7.3.3
json5: 2.2.3