From c407261bd7c0cf07bf03d84736005d3a9db0bf88 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=85=AD=E5=A6=82?= <8775@163.com> Date: Tue, 3 Dec 2024 22:58:44 +0800 Subject: [PATCH] 5.0 --- .../service/isv/IsvInfoService.java | 12 +++++-- .../service/isv/dto/IsvKeysDTO.java | 2 ++ .../sop-admin-frontend/src/utils/file.ts | 21 +++++++++++++ .../src/views/isv/list/index.vue | 5 +++ .../src/views/isv/list/showKeys.ts | 31 +++++++++++++++++++ .../src/views/doc/api/index.ts | 12 +++++++ .../src/views/doc/api/index.vue | 7 ++++- 7 files changed, 86 insertions(+), 4 deletions(-) create mode 100644 sop-admin/sop-admin-frontend/src/utils/file.ts diff --git a/sop-admin/sop-admin-backend/backend-service/src/main/java/com/gitee/sop/adminbackend/service/isv/IsvInfoService.java b/sop-admin/sop-admin-backend/backend-service/src/main/java/com/gitee/sop/adminbackend/service/isv/IsvInfoService.java index 66514111..733f54eb 100644 --- a/sop-admin/sop-admin-backend/backend-service/src/main/java/com/gitee/sop/adminbackend/service/isv/IsvInfoService.java +++ b/sop-admin/sop-admin-backend/backend-service/src/main/java/com/gitee/sop/adminbackend/service/isv/IsvInfoService.java @@ -122,17 +122,23 @@ public class IsvInfoService implements LambdaService { public IsvKeysDTO getKeys(Long isvId) { IsvKeys isvKeys = isvKeysService.get(IsvKeys::getIsvId, isvId); + IsvKeysDTO isvKeysDTO; if (isvKeys == null) { - IsvKeysDTO isvKeysDTO = new IsvKeysDTO(); + isvKeysDTO = new IsvKeysDTO(); isvKeysDTO.setIsvId(isvId); isvKeysDTO.setKeyFormat(RSATool.KeyFormat.PKCS8.getValue()); isvKeysDTO.setPublicKeyIsv(""); isvKeysDTO.setPrivateKeyIsv(""); isvKeysDTO.setPublicKeyPlatform(""); isvKeysDTO.setPrivateKeyPlatform(""); - return isvKeysDTO; + } else { + isvKeysDTO = CopyUtil.copyBean(isvKeys, IsvKeysDTO::new); } - return CopyUtil.copyBean(isvKeys, IsvKeysDTO::new); + + IsvInfo isvInfo = this.getById(isvId); + isvKeysDTO.setAppId(isvInfo.getAppId()); + + return isvKeysDTO; } /** diff --git a/sop-admin/sop-admin-backend/backend-service/src/main/java/com/gitee/sop/adminbackend/service/isv/dto/IsvKeysDTO.java b/sop-admin/sop-admin-backend/backend-service/src/main/java/com/gitee/sop/adminbackend/service/isv/dto/IsvKeysDTO.java index d8d1f490..fed12f01 100644 --- a/sop-admin/sop-admin-backend/backend-service/src/main/java/com/gitee/sop/adminbackend/service/isv/dto/IsvKeysDTO.java +++ b/sop-admin/sop-admin-backend/backend-service/src/main/java/com/gitee/sop/adminbackend/service/isv/dto/IsvKeysDTO.java @@ -8,6 +8,8 @@ import lombok.Data; @Data public class IsvKeysDTO { + private String appId; + private Long isvId; /** diff --git a/sop-admin/sop-admin-frontend/src/utils/file.ts b/sop-admin/sop-admin-frontend/src/utils/file.ts new file mode 100644 index 00000000..80bc4329 --- /dev/null +++ b/sop-admin/sop-admin-frontend/src/utils/file.ts @@ -0,0 +1,21 @@ +/** + * 下载文件 + * + * @param filename 文件名称,带后缀,如:aa.txt + * @param text 文件内容 + */ +export function downloadText(filename, text) { + const element = document.createElement("a"); + element.setAttribute( + "href", + "data:text/plain;charset=utf-8," + encodeURIComponent(text) + ); + element.setAttribute("download", filename); + + element.style.display = "none"; + document.body.appendChild(element); + + element.click(); + + document.body.removeChild(element); +} diff --git a/sop-admin/sop-admin-frontend/src/views/isv/list/index.vue b/sop-admin/sop-admin-frontend/src/views/isv/list/index.vue index 4a0a662f..ae62c529 100644 --- a/sop-admin/sop-admin-frontend/src/views/isv/list/index.vue +++ b/sop-admin/sop-admin-frontend/src/views/isv/list/index.vue @@ -21,6 +21,7 @@ import { dlgKeysShow, showKeysFormColumns, showKeysFormData, + downloadIsvKey, viewKeys } from "./showKeys"; import { @@ -98,8 +99,12 @@ import { v-model="showKeysFormData" :dialog="{ title: '秘钥 - 标识☆分配给开发者' }" :form="{ group: showKeysFormColumns, labelPosition: 'right' }" + @confirm="downloadIsvKey" > diff --git a/sop-admin/sop-admin-frontend/src/views/isv/list/showKeys.ts b/sop-admin/sop-admin-frontend/src/views/isv/list/showKeys.ts index df305ba8..5cf86ff9 100644 --- a/sop-admin/sop-admin-frontend/src/views/isv/list/showKeys.ts +++ b/sop-admin/sop-admin-frontend/src/views/isv/list/showKeys.ts @@ -2,10 +2,12 @@ import { ref } from "vue"; import type { PlusFormGroupRow } from "plus-pro-components"; import { api } from "@/api/isvList"; import { KeyFormatEnum } from "@/model/enums"; +import { downloadText } from "@/utils/file"; // 弹窗显示 export const dlgKeysShow = ref(false); export const showKeysFormData = ref({ + appId: "", keyFormat: KeyFormatEnum.PKCS8, publicKeyIsv: "", privateKeyIsv: "", @@ -17,6 +19,15 @@ export const showKeysFormColumns: PlusFormGroupRow[] = [ { title: "基本信息", columns: [ + { + label: "AppId", + prop: "appId", + labelWidth: 100, + valueType: "text", + fieldProps: { + disabled: true + } + }, { label: "秘钥格式", prop: "keyFormat", @@ -107,3 +118,23 @@ export const viewKeys = (row: any) => { dlgKeysShow.value = true; }); }; + +const downloadTemplate = `AppID: +{appId} + +开发者私钥: +{privateKeyIsv} + +平台公钥: +{publicKeyPlatform} + +`; + +export const downloadIsvKey = () => { + let text = downloadTemplate + .replace("{appId}", showKeysFormData.value.appId) + .replace("{privateKeyIsv}", showKeysFormData.value.privateKeyIsv) + .replace("{publicKeyPlatform}", showKeysFormData.value.publicKeyPlatform); + + downloadText(`key_${new Date().getTime()}.txt`, text); +}; diff --git a/sop-website/sop-website-frontend/src/views/doc/api/index.ts b/sop-website/sop-website-frontend/src/views/doc/api/index.ts index 97030dd2..7ca9b57c 100644 --- a/sop-website/sop-website-frontend/src/views/doc/api/index.ts +++ b/sop-website/sop-website-frontend/src/views/doc/api/index.ts @@ -11,6 +11,8 @@ export const apiModules = ref([]); export const dataNodeType = ref("Object"); export const requestParamsExample = ref({}); export const responseParamsExample = ref({}); +export const defaultExpandedKeys = ref([]); +export const currentNodeKey = ref(0); export const docAppId = ref(0); export const docAppList = ref([]); @@ -234,6 +236,16 @@ function loadDocTree(id) { }; docApi.listDocTree(params).then(resp => { docTree.value = resp.data; + // 默认展开并选中第一个 + if (docTree.value?.length > 0) { + defaultExpandedKeys.value.push(docTree.value[0].docId); + const children = docTree.value[0]?.children; + if (children && children.length > 0) { + const firstNode = children[0]; + currentNodeKey.value = firstNode.docId; + handleNodeClick(firstNode); + } + } }); } diff --git a/sop-website/sop-website-frontend/src/views/doc/api/index.vue b/sop-website/sop-website-frontend/src/views/doc/api/index.vue index a685c99a..82c72eb2 100644 --- a/sop-website/sop-website-frontend/src/views/doc/api/index.vue +++ b/sop-website/sop-website-frontend/src/views/doc/api/index.vue @@ -15,7 +15,9 @@ import { showUrl, showProdUrl, showSandBoxUrl, - showDoc + showDoc, + defaultExpandedKeys, + currentNodeKey } from "./index"; import { ApiParamTable } from "@/components/ApiParamTable"; import { useRouter } from "vue-router"; @@ -45,6 +47,9 @@ const defaultProps = {