diff --git a/apps/web-ele/src/components/cron-tab/cron-tab.vue b/apps/web-ele/src/components/cron-tab/cron-tab.vue new file mode 100644 index 0000000000000000000000000000000000000000..6aacf850331d9fc78b04358f45f85d94b059c2dd --- /dev/null +++ b/apps/web-ele/src/components/cron-tab/cron-tab.vue @@ -0,0 +1,1152 @@ + + + + diff --git a/apps/web-ele/src/components/cron-tab/index.ts b/apps/web-ele/src/components/cron-tab/index.ts new file mode 100644 index 0000000000000000000000000000000000000000..8f4baae590c7d7a8fee9bf51a72119740a3f8b2f --- /dev/null +++ b/apps/web-ele/src/components/cron-tab/index.ts @@ -0,0 +1 @@ +export { default as CronTab } from './cron-tab.vue'; diff --git a/apps/web-ele/src/components/upload/file-upload.vue b/apps/web-ele/src/components/upload/file-upload.vue index 39b6d529d84321ecb14603896b38a5b1a7afcbc8..43bee52d72f89729da79222c6e3f7a441db15466 100644 --- a/apps/web-ele/src/components/upload/file-upload.vue +++ b/apps/web-ele/src/components/upload/file-upload.vue @@ -1,261 +1,282 @@ - + diff --git a/apps/web-ele/src/components/upload/use-upload.ts b/apps/web-ele/src/components/upload/use-upload.ts index 52f723be865bcdf90324d66e8bc10e67889845bb..2f46f9e982a8d34b5d491b65f4553f00d733bd2b 100644 --- a/apps/web-ele/src/components/upload/use-upload.ts +++ b/apps/web-ele/src/components/upload/use-upload.ts @@ -79,17 +79,17 @@ export function useUploadType({ } // TODO @芋艿:目前保持和 admin-vue3 一致,后续可能重构 -export const useUpload = (directory?: string) => { +export function useUpload(directory?: string) { // 后端上传地址 const uploadUrl = getUploadUrl(); // 是否使用前端直连上传 const isClientUpload = UPLOAD_TYPE.CLIENT === import.meta.env.VITE_UPLOAD_TYPE; // 重写ElUpload上传方法 - const httpRequest = async ( + async function httpRequest( file: File, onUploadProgress?: AxiosProgressEvent, - ) => { + ) { // 模式一:前端上传 if (isClientUpload) { // 1.1 生成文件名称 @@ -113,20 +113,20 @@ export const useUpload = (directory?: string) => { // 模式二:后端上传 return uploadFile({ file, directory }, onUploadProgress); } - }; + } return { uploadUrl, httpRequest, }; -}; +} /** * 获得上传 URL */ -export const getUploadUrl = (): string => { +export function getUploadUrl(): string { return `${apiURL}/infra/file/upload`; -}; +} /** * 创建文件信息 @@ -134,7 +134,10 @@ export const getUploadUrl = (): string => { * @param vo 文件预签名信息 * @param file 文件 */ -function createFile0(vo: InfraFileApi.FilePresignedUrlRespVO, file: File) { +function createFile0( + vo: InfraFileApi.FilePresignedUrlRespVO, + file: File, +): InfraFileApi.File { const fileVO = { configId: vo.configId, url: vo.url, @@ -148,10 +151,18 @@ function createFile0(vo: InfraFileApi.FilePresignedUrlRespVO, file: File) { } /** - * 生成文件名称 + * 生成文件名称(使用算法SHA256) * * @param file 要上传的文件 */ async function generateFileName(file: File) { + // // 读取文件内容 + // const data = await file.arrayBuffer(); + // const wordArray = CryptoJS.lib.WordArray.create(data); + // // 计算SHA256 + // const sha256 = CryptoJS.SHA256(wordArray).toString(); + // // 拼接后缀 + // const ext = file.name.slice(Math.max(0, file.name.lastIndexOf('.'))); + // return `${sha256}${ext}`; return file.name; } diff --git a/apps/web-ele/src/views/infra/codegen/modules/preview-code.vue b/apps/web-ele/src/views/infra/codegen/modules/preview-code.vue index de4486fc16f09052bfc6afd93d7895111f6086f9..f9e3df646872ec04a28637e5a50ce01eca88173f 100644 --- a/apps/web-ele/src/views/infra/codegen/modules/preview-code.vue +++ b/apps/web-ele/src/views/infra/codegen/modules/preview-code.vue @@ -7,7 +7,7 @@ import type { InfraCodegenApi } from '#/api/infra/codegen'; import { ref } from 'vue'; import { useVbenModal } from '@vben/common-ui'; -import { Copy } from '@vben/icons'; +import { IconifyIcon } from '@vben/icons'; import { useClipboard } from '@vueuse/core'; import { ElMessage, ElTabPane, ElTabs, ElTree } from 'element-plus'; @@ -291,8 +291,7 @@ const [Modal, modalApi] = useVbenModal({ diff --git a/apps/web-ele/src/views/infra/file/data.ts b/apps/web-ele/src/views/infra/file/data.ts index 56d583134924edef705c425bfd93c3e93e3d164c..3e97d47fd7e412a581b0177cba9330f2008dd030 100644 --- a/apps/web-ele/src/views/infra/file/data.ts +++ b/apps/web-ele/src/views/infra/file/data.ts @@ -9,7 +9,7 @@ export function useFormSchema(): VbenFormSchema[] { { fieldName: 'file', label: '文件上传', - component: 'Upload', + component: 'FileUpload', componentProps: { placeholder: '请选择要上传的文件', }, diff --git a/apps/web-ele/src/views/infra/file/modules/form.vue b/apps/web-ele/src/views/infra/file/modules/form.vue index 558c8ae4d9b99db4589b3886c1a8783a7437b834..1135c4ad7662bbcc832a3bb6ab88c417eaffaee6 100644 --- a/apps/web-ele/src/views/infra/file/modules/form.vue +++ b/apps/web-ele/src/views/infra/file/modules/form.vue @@ -1,19 +1,19 @@ diff --git a/apps/web-ele/src/views/infra/job/data.ts b/apps/web-ele/src/views/infra/job/data.ts index 78b3b187ed12a2c380d48692a5fc6f8973a07834..e2acb01aa922a4fc576f93ae51723666bcbc70dc 100644 --- a/apps/web-ele/src/views/infra/job/data.ts +++ b/apps/web-ele/src/views/infra/job/data.ts @@ -3,7 +3,7 @@ import type { VxeTableGridOptions } from '#/adapter/vxe-table'; import type { InfraJobApi } from '#/api/infra/job'; import type { DescriptionItemSchema } from '#/components/description'; -import { h } from 'vue'; +import { h, markRaw } from 'vue'; import { DICT_TYPE } from '@vben/constants'; import { getDictOptions } from '@vben/hooks'; @@ -11,6 +11,7 @@ import { formatDateTime } from '@vben/utils'; import { ElTimeline, ElTimelineItem } from 'element-plus'; +import { CronTab } from '#/components/cron-tab'; import { DictTag } from '#/components/dict-tag'; /** 新增/修改的表单 */ @@ -57,12 +58,11 @@ export function useFormSchema(): VbenFormSchema[] { { fieldName: 'cronExpression', label: 'CRON 表达式', - component: 'Input', + component: markRaw(CronTab), componentProps: { placeholder: '请输入 CRON 表达式', }, rules: 'required', - // TODO @芋艿:未来支持动态的 CRON 表达式选择 }, { fieldName: 'retryCount', @@ -71,6 +71,8 @@ export function useFormSchema(): VbenFormSchema[] { componentProps: { placeholder: '请输入重试次数。设置为 0 时,不进行重试', min: 0, + controlsPosition: 'right', + class: '!w-full', }, rules: 'required', }, @@ -81,6 +83,8 @@ export function useFormSchema(): VbenFormSchema[] { componentProps: { placeholder: '请输入重试间隔,单位:毫秒。设置为 0 时,无需间隔', min: 0, + controlsPosition: 'right', + class: '!w-full', }, rules: 'required', }, @@ -91,6 +95,8 @@ export function useFormSchema(): VbenFormSchema[] { componentProps: { placeholder: '请输入监控超时时间,单位:毫秒', min: 0, + controlsPosition: 'right', + class: '!w-full', }, }, ];