From 1fa117b8f2f116b9264950f927726c76bcce3bab Mon Sep 17 00:00:00 2001 From: caiyuchao Date: Mon, 4 Aug 2025 10:22:21 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E9=87=8D=E6=96=B0=E7=94=B3=E8=AF=B7lic?= =?UTF-8?q?ense?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../license/license/components/detail.vue | 172 ++++++++++-------- .../src/views/license/license/data.ts | 9 +- .../views/license/license/generate/index.vue | 2 +- 3 files changed, 104 insertions(+), 79 deletions(-) diff --git a/apps/web-antd/src/views/license/license/components/detail.vue b/apps/web-antd/src/views/license/license/components/detail.vue index e576071..132ade0 100644 --- a/apps/web-antd/src/views/license/license/components/detail.vue +++ b/apps/web-antd/src/views/license/license/components/detail.vue @@ -64,7 +64,7 @@ const columns = [ title: '激活码', dataIndex: 'activationCodeMap', key: 'activationCodeMap', - customRender: (data) => { + customRender: (data: any) => { if (data.value.new) { const after = h( 'span', @@ -82,117 +82,137 @@ const columns = [ }, { title: 'License文件', - dataIndex: 'fileUrlList', - key: 'fileUrlList', + dataIndex: 'fileUrlListMap', + key: 'fileUrlListMap', customRender: (data: any) => { - if (!data.value) { - return; - } - if (!data.value[0]) { - return; - } - const fileName = `${data.value[0]?.slice( - Math.max(0, data.value[0].lastIndexOf('/') + 1), - data.value[0].lastIndexOf('_'), - )}.ini`; - // 创建下载链接 - const link = h( - 'span', - { - style: { - marginRight: '15px', - }, - }, - fileName, - ); - - // 创建下载按钮 - const button = h( - Button, - { - onClick: async () => { - const res = await fetch(data.value[0]); - if (!res.ok) { - message.error($t('license.downloadFailed')); - return; - } - const blob = await res.blob(); - - downloadFileFromBlobPart({ fileName, source: blob }); - }, - type: 'primary', - }, - () => $t('license.download'), - ); - - const file = h( - 'div', - { - style: { - display: 'flex', - alignItems: 'center', - }, - }, - [link, button], - ); - - let file1; - if (data.value[1]) { - const fileName1 = `${data.value[1]?.slice( - Math.max(0, data.value[1].lastIndexOf('/') + 1), - data.value[1].lastIndexOf('_'), + const getFile = (dataValue: any) => { + if (!dataValue) { + return; + } + if (!dataValue[0]) { + return; + } + const fileName = `${dataValue[0]?.slice( + Math.max(0, dataValue[0].lastIndexOf('/') + 1), + dataValue[0].lastIndexOf('_'), )}.ini`; // 创建下载链接 - const link1 = h( + const link = h( 'span', { style: { marginRight: '15px', }, }, - fileName1, + fileName, ); // 创建下载按钮 - const button1 = h( + const button = h( Button, { onClick: async () => { - const res = await fetch(data.value[1]); + const res = await fetch(dataValue[0]); if (!res.ok) { message.error($t('license.downloadFailed')); return; } - const blob1 = await res.blob(); + const blob = await res.blob(); - downloadFileFromBlobPart({ fileName: fileName1, source: blob1 }); + downloadFileFromBlobPart({ fileName, source: blob }); }, type: 'primary', }, () => $t('license.download'), ); - file1 = h( + const file = h( 'div', { style: { display: 'flex', alignItems: 'center', - margin: '8px 0 0 0', }, }, - [link1, button1], + [link, button], ); - } + + let file1; + if (dataValue[1]) { + const fileName1 = `${dataValue[1]?.slice( + Math.max(0, dataValue[1].lastIndexOf('/') + 1), + dataValue[1].lastIndexOf('_'), + )}.ini`; + // 创建下载链接 + const link1 = h( + 'span', + { + style: { + marginRight: '15px', + }, + }, + fileName1, + ); + + // 创建下载按钮 + const button1 = h( + Button, + { + onClick: async () => { + const res = await fetch(dataValue[1]); + if (!res.ok) { + message.error($t('license.downloadFailed')); + return; + } + const blob1 = await res.blob(); + + downloadFileFromBlobPart({ + fileName: fileName1, + source: blob1, + }); + }, + type: 'primary', + }, + () => $t('license.download'), + ); + + file1 = h( + 'div', + { + style: { + display: 'flex', + alignItems: 'center', + margin: '8px 0 0 0', + }, + }, + [link1, button1], + ); + } + return h( + 'div', + { + style: {}, + }, + [file, file1], + ); + }; // 包裹容器 - return h( - 'div', - { - style: {}, - }, - [file, file1], - ); + // return getFile(data.value); + + if (data.value.new) { + const after = h( + 'span', + { + style: { + color: 'red', + }, + }, + [` → `, getFile(data.value.new)], + ); + return h('div', {}, [getFile(data.value.old), after]); + } + return getFile(data.value.old); }, }, ]; diff --git a/apps/web-antd/src/views/license/license/data.ts b/apps/web-antd/src/views/license/license/data.ts index e32d44e..01385aa 100644 --- a/apps/web-antd/src/views/license/license/data.ts +++ b/apps/web-antd/src/views/license/license/data.ts @@ -388,7 +388,12 @@ export function useGridColumns( { code: 'reapply', text: $t('license.reapply'), - show: hasAccessByCodes(['license:license:apply']), + show: (values: LicenseApi.License) => { + return ( + hasAccessByCodes(['license:license:apply']) && + values.status === 3 + ); + }, }, { code: 'generate', @@ -396,7 +401,7 @@ export function useGridColumns( show: (values: LicenseApi.License) => { return ( hasAccessByCodes(['license:license:generate']) && - values.status === 1 + (values.status === 1 || values.status === 4) ); }, }, diff --git a/apps/web-antd/src/views/license/license/generate/index.vue b/apps/web-antd/src/views/license/license/generate/index.vue index deafccd..287543e 100644 --- a/apps/web-antd/src/views/license/license/generate/index.vue +++ b/apps/web-antd/src/views/license/license/generate/index.vue @@ -136,7 +136,7 @@ getDetail(route.query.id);