feat: 支持下载tar包
This commit is contained in:
@@ -95,6 +95,11 @@ export function importLicense(file: File, updateSupport: boolean) {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** 下载生成代码 */
|
||||||
|
export function downloadLicense(id: number) {
|
||||||
|
return requestClient.download(`/license/license/download?id=${id}`);
|
||||||
|
}
|
||||||
|
|
||||||
/** 重新License */
|
/** 重新License */
|
||||||
export function reapplyLicense(data: LicenseApi.License) {
|
export function reapplyLicense(data: LicenseApi.License) {
|
||||||
return requestClient.put('/license/license/reapply', data);
|
return requestClient.put('/license/license/reapply', data);
|
||||||
|
|||||||
@@ -61,12 +61,12 @@ export function useFormSchema(): VbenFormSchema[] {
|
|||||||
message: $t('ui.formRules.required', [$t('customer.customerSn')]),
|
message: $t('ui.formRules.required', [$t('customer.customerSn')]),
|
||||||
})
|
})
|
||||||
.min(
|
.min(
|
||||||
2000,
|
1000,
|
||||||
$t('ui.formRules.range', [$t('customer.customerSn'), 2000, 9999]),
|
$t('ui.formRules.range', [$t('customer.customerSn'), 1000, 9999]),
|
||||||
)
|
)
|
||||||
.max(
|
.max(
|
||||||
9999,
|
9999,
|
||||||
$t('ui.formRules.range', [$t('customer.customerSn'), 2000, 9999]),
|
$t('ui.formRules.range', [$t('customer.customerSn'), 1000, 9999]),
|
||||||
)
|
)
|
||||||
.refine(
|
.refine(
|
||||||
async (value: number) => {
|
async (value: number) => {
|
||||||
|
|||||||
@@ -7,11 +7,14 @@ import { useRoute, useRouter } from 'vue-router';
|
|||||||
import { useAccess } from '@vben/access';
|
import { useAccess } from '@vben/access';
|
||||||
import { Page } from '@vben/common-ui';
|
import { Page } from '@vben/common-ui';
|
||||||
import { useTabs } from '@vben/hooks';
|
import { useTabs } from '@vben/hooks';
|
||||||
import { downloadFileFromBlobPart } from '@vben/utils';
|
|
||||||
|
|
||||||
import { Button, message } from 'ant-design-vue';
|
import { Button, message } from 'ant-design-vue';
|
||||||
|
|
||||||
import { generateLicense, getLicense } from '#/api/license/license';
|
import {
|
||||||
|
downloadLicense,
|
||||||
|
generateLicense,
|
||||||
|
getLicense,
|
||||||
|
} from '#/api/license/license';
|
||||||
import { $t } from '#/locales';
|
import { $t } from '#/locales';
|
||||||
|
|
||||||
import Detail from '../components/detail.vue';
|
import Detail from '../components/detail.vue';
|
||||||
@@ -106,15 +109,24 @@ async function onDownload() {
|
|||||||
const fileName = `${formData.value.fileUrl?.slice(
|
const fileName = `${formData.value.fileUrl?.slice(
|
||||||
Math.max(0, formData.value.fileUrl.lastIndexOf('/') + 1),
|
Math.max(0, formData.value.fileUrl.lastIndexOf('/') + 1),
|
||||||
formData.value.fileUrl.lastIndexOf('_'),
|
formData.value.fileUrl.lastIndexOf('_'),
|
||||||
)}.zip`;
|
)}.tar`;
|
||||||
const res = await fetch(formData.value.fileUrl);
|
|
||||||
if (!res.ok) {
|
|
||||||
message.error($t('license.downloadFailed'));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
const blob = await res.blob();
|
|
||||||
|
|
||||||
downloadFileFromBlobPart({ fileName, source: blob });
|
const hideLoading = message.loading({
|
||||||
|
content: '下载中...',
|
||||||
|
key: 'action_key_msg',
|
||||||
|
});
|
||||||
|
try {
|
||||||
|
const res = await downloadLicense(formData.value.id);
|
||||||
|
const blob = new Blob([res], { type: 'application/tar' });
|
||||||
|
const url = window.URL.createObjectURL(blob);
|
||||||
|
const link = document.createElement('a');
|
||||||
|
link.href = url;
|
||||||
|
link.download = fileName;
|
||||||
|
link.click();
|
||||||
|
window.URL.revokeObjectURL(url);
|
||||||
|
} finally {
|
||||||
|
hideLoading();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 组件卸载前清理
|
// 组件卸载前清理
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ import { message } from 'ant-design-vue';
|
|||||||
import { ACTION_ICON, TableAction, useVbenVxeGrid } from '#/adapter/vxe-table';
|
import { ACTION_ICON, TableAction, useVbenVxeGrid } from '#/adapter/vxe-table';
|
||||||
import {
|
import {
|
||||||
deleteLicense,
|
deleteLicense,
|
||||||
|
downloadLicense,
|
||||||
exportLicense,
|
exportLicense,
|
||||||
getLicensePage,
|
getLicensePage,
|
||||||
} from '#/api/license/license';
|
} from '#/api/license/license';
|
||||||
@@ -75,15 +76,24 @@ async function onDownload(row: LicenseApi.License) {
|
|||||||
const fileName = `${row.fileUrl?.slice(
|
const fileName = `${row.fileUrl?.slice(
|
||||||
Math.max(0, row.fileUrl.lastIndexOf('/') + 1),
|
Math.max(0, row.fileUrl.lastIndexOf('/') + 1),
|
||||||
row.fileUrl.lastIndexOf('_'),
|
row.fileUrl.lastIndexOf('_'),
|
||||||
)}.zip`;
|
)}.tar`;
|
||||||
const res = await fetch(row.fileUrl);
|
|
||||||
if (!res.ok) {
|
|
||||||
message.error($t('license.downloadFailed'));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
const blob = await res.blob();
|
|
||||||
|
|
||||||
downloadFileFromBlobPart({ fileName, source: blob });
|
const hideLoading = message.loading({
|
||||||
|
content: '下载中...',
|
||||||
|
key: 'action_key_msg',
|
||||||
|
});
|
||||||
|
try {
|
||||||
|
const res = await downloadLicense(row.id);
|
||||||
|
const blob = new Blob([res], { type: 'application/tar' });
|
||||||
|
const url = window.URL.createObjectURL(blob);
|
||||||
|
const link = document.createElement('a');
|
||||||
|
link.href = url;
|
||||||
|
link.download = fileName;
|
||||||
|
link.click();
|
||||||
|
window.URL.revokeObjectURL(url);
|
||||||
|
} finally {
|
||||||
|
hideLoading();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 重新申请License */
|
/** 重新申请License */
|
||||||
|
|||||||
@@ -67,7 +67,7 @@ export function useFormSchema(): VbenFormSchema[] {
|
|||||||
rules: z
|
rules: z
|
||||||
.number({ message: $t('ui.formRules.required', [$t('project.code')]) })
|
.number({ message: $t('ui.formRules.required', [$t('project.code')]) })
|
||||||
.min(1000, $t('ui.formRules.range', [$t('project.code'), 1000, 9999]))
|
.min(1000, $t('ui.formRules.range', [$t('project.code'), 1000, 9999]))
|
||||||
.max(9999, $t('ui.formRules.range', [$t('project.code'), 2000, 9999]))
|
.max(9999, $t('ui.formRules.range', [$t('project.code'), 1000, 9999]))
|
||||||
.refine(
|
.refine(
|
||||||
async (value: number) => {
|
async (value: number) => {
|
||||||
return await isProjectCodeUnique(value, formData.value?.id);
|
return await isProjectCodeUnique(value, formData.value?.id);
|
||||||
|
|||||||
Reference in New Issue
Block a user