diff --git a/src/views/system-view/components/ExceptionBase.vue b/src/components/common/ExceptionBase.vue similarity index 100% rename from src/views/system-view/components/ExceptionBase.vue rename to src/components/common/ExceptionBase.vue diff --git a/src/composables/layout.ts b/src/composables/layout.ts index 602ad5d5..27cfc53f 100644 --- a/src/composables/layout.ts +++ b/src/composables/layout.ts @@ -1,13 +1,13 @@ import { computed } from 'vue'; import { useAppStore, useThemeStore } from '@/store'; +type LayoutMode = 'vertical' | 'horizontal'; type LayoutHeaderProps = Record; export function useBasicLayout() { const app = useAppStore(); const theme = useThemeStore(); - type LayoutMode = 'vertical' | 'horizontal'; const mode = computed(() => { const vertical: LayoutMode = 'vertical'; const horizontal: LayoutMode = 'horizontal'; diff --git a/src/enum/business.ts b/src/enum/business.ts index 9d58a183..b479cf5d 100644 --- a/src/enum/business.ts +++ b/src/enum/business.ts @@ -3,7 +3,6 @@ export enum EnumUserRole { super = '超级管理员', admin = '管理员', user = '普通用户' - // custom = '自定义角色' } /** 登录模块 */ diff --git a/src/enum/common.ts b/src/enum/common.ts index e6b787b1..1ecb8666 100644 --- a/src/enum/common.ts +++ b/src/enum/common.ts @@ -31,5 +31,6 @@ export enum EnumDataType { date = '[object Date]', regexp = '[object RegExp]', set = '[object Set]', - map = '[object Map]' + map = '[object Map]', + file = '[object File]' } diff --git a/src/hooks/business/useImageVerify.ts b/src/hooks/business/useImageVerify.ts index 3978ead5..105a9ed3 100644 --- a/src/hooks/business/useImageVerify.ts +++ b/src/hooks/business/useImageVerify.ts @@ -52,6 +52,7 @@ function draw(dom: HTMLCanvasElement, width: number, height: number) { ctx.fillStyle = randomColor(180, 230); ctx.fillRect(0, 0, width, height); + for (let i = 0; i < 4; i += 1) { const text = NUMBER_STRING[randomNum(0, NUMBER_STRING.length)]; imgCode += text; @@ -81,5 +82,6 @@ function draw(dom: HTMLCanvasElement, width: number, height: number) { ctx.fillStyle = randomColor(150, 200); ctx.fill(); } + return imgCode; } diff --git a/src/hooks/business/useSmsCode.ts b/src/hooks/business/useSmsCode.ts index f1478589..419854bb 100644 --- a/src/hooks/business/useSmsCode.ts +++ b/src/hooks/business/useSmsCode.ts @@ -7,6 +7,7 @@ import useCountDown from './useCountDown'; export default function useSmsCode() { const { loading, startLoading, endLoading } = useLoading(); const { counts, start, isCounting } = useCountDown(60); + const initLabel = '获取验证码'; const countingLabel = (second: number) => `${second}秒后重新获取`; const label = computed(() => { @@ -40,6 +41,7 @@ export default function useSmsCode() { async function getSmsCode(phone: string) { const valid = isPhoneValid(phone); if (!valid || loading.value) return; + startLoading(); const { data } = await fetchSmsCode(phone); if (data) { diff --git a/src/hooks/common/useReload.ts b/src/hooks/common/useReload.ts index d5111779..714dd4d1 100644 --- a/src/hooks/common/useReload.ts +++ b/src/hooks/common/useReload.ts @@ -13,9 +13,12 @@ export default function useReload() { async function handleReload(duration = 0) { setFalse(); await nextTick(); - setTimeout(() => { - setTrue(); - }, duration); + + if (duration > 0) { + setTimeout(() => { + setTrue(); + }, duration); + } } return { diff --git a/src/utils/common/typeof.ts b/src/utils/common/typeof.ts index a8542cef..6eb957d8 100644 --- a/src/utils/common/typeof.ts +++ b/src/utils/common/typeof.ts @@ -33,3 +33,6 @@ export function isSet(data: unknown) { export function isMap(data: unknown) { return Object.prototype.toString.call(data) === EnumDataType.map; } +export function isFile(data: unknown) { + return Object.prototype.toString.call(data) === EnumDataType.file; +} diff --git a/src/utils/service/transform.ts b/src/utils/service/transform.ts index 65f76352..d40b9702 100644 --- a/src/utils/service/transform.ts +++ b/src/utils/service/transform.ts @@ -1,7 +1,7 @@ import qs from 'qs'; import FormData from 'form-data'; import { EnumContentType } from '@/enum'; -import { isArray } from '../common'; +import { isArray, isFile } from '../common'; /** * 请求数据的转换 @@ -17,20 +17,35 @@ export async function transformRequestData(requestData: any, contentType?: strin } // form-data类型转换 if (contentType === EnumContentType.formData) { - const key = Object.keys(requestData)[0]; - const file = requestData.data[key]; - data = await transformFile(file, key); + data = await handleFormData(requestData); } + return data; } +async function handleFormData(data: Record) { + const formData = new FormData(); + const entries = Object.entries(data); + + entries.forEach(async ([key, value]) => { + const isFileType = isFile(value) || (isArray(value) && value.length && isFile(value[0])); + + if (isFileType) { + await transformFile(formData, key, value); + } else { + formData.append(key, value); + } + }); + + return formData; +} + /** * 接口为上传文件的类型时数据转换 - * @param file - 单文件或多文件 * @param key - 文件的属性名 + * @param file - 单文件或多文件 */ -async function transformFile(file: File[] | File, key: string) { - const formData = new FormData(); +async function transformFile(formData: FormData, key: string, file: File[] | File) { if (isArray(file)) { // 多文件 await Promise.all( @@ -43,5 +58,4 @@ async function transformFile(file: File[] | File, key: string) { // 单文件 await formData.append(key, file); } - return formData; } diff --git a/src/views/exception/403/index.vue b/src/views/exception/403/index.vue index 985daf76..871020a8 100644 --- a/src/views/exception/403/index.vue +++ b/src/views/exception/403/index.vue @@ -2,8 +2,6 @@ - + diff --git a/src/views/exception/404/index.vue b/src/views/exception/404/index.vue index 1214de45..ebc953f6 100644 --- a/src/views/exception/404/index.vue +++ b/src/views/exception/404/index.vue @@ -2,8 +2,6 @@ - + diff --git a/src/views/exception/500/index.vue b/src/views/exception/500/index.vue index 6ba75ebf..74ed5386 100644 --- a/src/views/exception/500/index.vue +++ b/src/views/exception/500/index.vue @@ -2,8 +2,6 @@ - + diff --git a/src/views/system-view/components/index.ts b/src/views/system-view/components/index.ts deleted file mode 100644 index d8b1dedf..00000000 --- a/src/views/system-view/components/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -import ExceptionBase from './ExceptionBase.vue'; - -export { ExceptionBase }; diff --git a/src/views/system-view/no-permission/index.vue b/src/views/system-view/no-permission/index.vue index ef4e3d74..871020a8 100644 --- a/src/views/system-view/no-permission/index.vue +++ b/src/views/system-view/no-permission/index.vue @@ -2,8 +2,6 @@ - + diff --git a/src/views/system-view/not-found-page/index.vue b/src/views/system-view/not-found-page/index.vue index a0c6138d..ebc953f6 100644 --- a/src/views/system-view/not-found-page/index.vue +++ b/src/views/system-view/not-found-page/index.vue @@ -2,8 +2,6 @@ - + diff --git a/src/views/system-view/not-found/index.vue b/src/views/system-view/not-found/index.vue index a0c6138d..ebc953f6 100644 --- a/src/views/system-view/not-found/index.vue +++ b/src/views/system-view/not-found/index.vue @@ -2,8 +2,6 @@ - + diff --git a/src/views/system-view/service-error/index.vue b/src/views/system-view/service-error/index.vue index 51b1a062..74ed5386 100644 --- a/src/views/system-view/service-error/index.vue +++ b/src/views/system-view/service-error/index.vue @@ -2,8 +2,6 @@ - +