diff --git a/auto-import.d.ts b/auto-import.d.ts index 0ce0ca8..db76c43 100644 --- a/auto-import.d.ts +++ b/auto-import.d.ts @@ -7,23 +7,47 @@ export {} declare global { const EffectScope: typeof import('vue')['EffectScope'] const acceptHMRUpdate: typeof import('pinia')['acceptHMRUpdate'] + const asyncComputed: typeof import('@vueuse/core')['asyncComputed'] + const autoResetRef: typeof import('@vueuse/core')['autoResetRef'] const computed: typeof import('vue')['computed'] + const computedAsync: typeof import('@vueuse/core')['computedAsync'] + const computedEager: typeof import('@vueuse/core')['computedEager'] + const computedInject: typeof import('@vueuse/core')['computedInject'] + const computedWithControl: typeof import('@vueuse/core')['computedWithControl'] + const controlledComputed: typeof import('@vueuse/core')['controlledComputed'] + const controlledRef: typeof import('@vueuse/core')['controlledRef'] const createApp: typeof import('vue')['createApp'] + const createEventHook: typeof import('@vueuse/core')['createEventHook'] + const createGlobalState: typeof import('@vueuse/core')['createGlobalState'] + const createInjectionState: typeof import('@vueuse/core')['createInjectionState'] const createPinia: typeof import('pinia')['createPinia'] + const createReactiveFn: typeof import('@vueuse/core')['createReactiveFn'] + const createReusableTemplate: typeof import('@vueuse/core')['createReusableTemplate'] + const createSharedComposable: typeof import('@vueuse/core')['createSharedComposable'] + const createTemplatePromise: typeof import('@vueuse/core')['createTemplatePromise'] + const createUnrefFn: typeof import('@vueuse/core')['createUnrefFn'] const customRef: typeof import('vue')['customRef'] + const debouncedRef: typeof import('@vueuse/core')['debouncedRef'] + const debouncedWatch: typeof import('@vueuse/core')['debouncedWatch'] const defineAsyncComponent: typeof import('vue')['defineAsyncComponent'] const defineComponent: typeof import('vue')['defineComponent'] const defineStore: typeof import('pinia')['defineStore'] + const eagerComputed: typeof import('@vueuse/core')['eagerComputed'] const effectScope: typeof import('vue')['effectScope'] + const extendRef: typeof import('@vueuse/core')['extendRef'] const getActivePinia: typeof import('pinia')['getActivePinia'] const getCurrentInstance: typeof import('vue')['getCurrentInstance'] const getCurrentScope: typeof import('vue')['getCurrentScope'] const h: typeof import('vue')['h'] + const ignorableWatch: typeof import('@vueuse/core')['ignorableWatch'] const inject: typeof import('vue')['inject'] + const injectLocal: typeof import('@vueuse/core')['injectLocal'] + const isDefined: typeof import('@vueuse/core')['isDefined'] const isProxy: typeof import('vue')['isProxy'] const isReactive: typeof import('vue')['isReactive'] const isReadonly: typeof import('vue')['isReadonly'] const isRef: typeof import('vue')['isRef'] + const makeDestructurable: typeof import('@vueuse/core')['makeDestructurable'] const mapActions: typeof import('pinia')['mapActions'] const mapGetters: typeof import('pinia')['mapGetters'] const mapState: typeof import('pinia')['mapState'] @@ -37,43 +61,240 @@ declare global { const onBeforeRouteUpdate: typeof import('vue-router')['onBeforeRouteUpdate'] const onBeforeUnmount: typeof import('vue')['onBeforeUnmount'] const onBeforeUpdate: typeof import('vue')['onBeforeUpdate'] + const onClickOutside: typeof import('@vueuse/core')['onClickOutside'] const onDeactivated: typeof import('vue')['onDeactivated'] const onErrorCaptured: typeof import('vue')['onErrorCaptured'] + const onKeyStroke: typeof import('@vueuse/core')['onKeyStroke'] + const onLongPress: typeof import('@vueuse/core')['onLongPress'] const onMounted: typeof import('vue')['onMounted'] const onRenderTracked: typeof import('vue')['onRenderTracked'] const onRenderTriggered: typeof import('vue')['onRenderTriggered'] const onScopeDispose: typeof import('vue')['onScopeDispose'] const onServerPrefetch: typeof import('vue')['onServerPrefetch'] + const onStartTyping: typeof import('@vueuse/core')['onStartTyping'] const onUnmounted: typeof import('vue')['onUnmounted'] const onUpdated: typeof import('vue')['onUpdated'] + const pausableWatch: typeof import('@vueuse/core')['pausableWatch'] const provide: typeof import('vue')['provide'] + const provideLocal: typeof import('@vueuse/core')['provideLocal'] + const reactify: typeof import('@vueuse/core')['reactify'] + const reactifyObject: typeof import('@vueuse/core')['reactifyObject'] const reactive: typeof import('vue')['reactive'] + const reactiveComputed: typeof import('@vueuse/core')['reactiveComputed'] + const reactiveOmit: typeof import('@vueuse/core')['reactiveOmit'] + const reactivePick: typeof import('@vueuse/core')['reactivePick'] const readonly: typeof import('vue')['readonly'] const ref: typeof import('vue')['ref'] + const refAutoReset: typeof import('@vueuse/core')['refAutoReset'] + const refDebounced: typeof import('@vueuse/core')['refDebounced'] + const refDefault: typeof import('@vueuse/core')['refDefault'] + const refThrottled: typeof import('@vueuse/core')['refThrottled'] + const refWithControl: typeof import('@vueuse/core')['refWithControl'] const resolveComponent: typeof import('vue')['resolveComponent'] + const resolveRef: typeof import('@vueuse/core')['resolveRef'] + const resolveUnref: typeof import('@vueuse/core')['resolveUnref'] const setActivePinia: typeof import('pinia')['setActivePinia'] const setMapStoreSuffix: typeof import('pinia')['setMapStoreSuffix'] const shallowReactive: typeof import('vue')['shallowReactive'] const shallowReadonly: typeof import('vue')['shallowReadonly'] const shallowRef: typeof import('vue')['shallowRef'] const storeToRefs: typeof import('pinia')['storeToRefs'] + const syncRef: typeof import('@vueuse/core')['syncRef'] + const syncRefs: typeof import('@vueuse/core')['syncRefs'] + const templateRef: typeof import('@vueuse/core')['templateRef'] + const throttledRef: typeof import('@vueuse/core')['throttledRef'] + const throttledWatch: typeof import('@vueuse/core')['throttledWatch'] const toRaw: typeof import('vue')['toRaw'] + const toReactive: typeof import('@vueuse/core')['toReactive'] const toRef: typeof import('vue')['toRef'] const toRefs: typeof import('vue')['toRefs'] const toValue: typeof import('vue')['toValue'] const triggerRef: typeof import('vue')['triggerRef'] + const tryOnBeforeMount: typeof import('@vueuse/core')['tryOnBeforeMount'] + const tryOnBeforeUnmount: typeof import('@vueuse/core')['tryOnBeforeUnmount'] + const tryOnMounted: typeof import('@vueuse/core')['tryOnMounted'] + const tryOnScopeDispose: typeof import('@vueuse/core')['tryOnScopeDispose'] + const tryOnUnmounted: typeof import('@vueuse/core')['tryOnUnmounted'] const unref: typeof import('vue')['unref'] + const unrefElement: typeof import('@vueuse/core')['unrefElement'] + const until: typeof import('@vueuse/core')['until'] + const useActiveElement: typeof import('@vueuse/core')['useActiveElement'] + const useAnimate: typeof import('@vueuse/core')['useAnimate'] + const useArrayDifference: typeof import('@vueuse/core')['useArrayDifference'] + const useArrayEvery: typeof import('@vueuse/core')['useArrayEvery'] + const useArrayFilter: typeof import('@vueuse/core')['useArrayFilter'] + const useArrayFind: typeof import('@vueuse/core')['useArrayFind'] + const useArrayFindIndex: typeof import('@vueuse/core')['useArrayFindIndex'] + const useArrayFindLast: typeof import('@vueuse/core')['useArrayFindLast'] + const useArrayIncludes: typeof import('@vueuse/core')['useArrayIncludes'] + const useArrayJoin: typeof import('@vueuse/core')['useArrayJoin'] + const useArrayMap: typeof import('@vueuse/core')['useArrayMap'] + const useArrayReduce: typeof import('@vueuse/core')['useArrayReduce'] + const useArraySome: typeof import('@vueuse/core')['useArraySome'] + const useArrayUnique: typeof import('@vueuse/core')['useArrayUnique'] + const useAsyncQueue: typeof import('@vueuse/core')['useAsyncQueue'] + const useAsyncState: typeof import('@vueuse/core')['useAsyncState'] const useAttrs: typeof import('vue')['useAttrs'] + const useBase64: typeof import('@vueuse/core')['useBase64'] + const useBattery: typeof import('@vueuse/core')['useBattery'] + const useBluetooth: typeof import('@vueuse/core')['useBluetooth'] + const useBreakpoints: typeof import('@vueuse/core')['useBreakpoints'] + const useBroadcastChannel: typeof import('@vueuse/core')['useBroadcastChannel'] + const useBrowserLocation: typeof import('@vueuse/core')['useBrowserLocation'] + const useCached: typeof import('@vueuse/core')['useCached'] + const useClipboard: typeof import('@vueuse/core')['useClipboard'] + const useClipboardItems: typeof import('@vueuse/core')['useClipboardItems'] + const useCloned: typeof import('@vueuse/core')['useCloned'] + const useColorMode: typeof import('@vueuse/core')['useColorMode'] + const useConfirmDialog: typeof import('@vueuse/core')['useConfirmDialog'] + const useCounter: typeof import('@vueuse/core')['useCounter'] const useCssModule: typeof import('vue')['useCssModule'] + const useCssVar: typeof import('@vueuse/core')['useCssVar'] const useCssVars: typeof import('vue')['useCssVars'] + const useCurrentElement: typeof import('@vueuse/core')['useCurrentElement'] + const useCycleList: typeof import('@vueuse/core')['useCycleList'] + const useDark: typeof import('@vueuse/core')['useDark'] + const useDateFormat: typeof import('@vueuse/core')['useDateFormat'] + const useDebounce: typeof import('@vueuse/core')['useDebounce'] + const useDebounceFn: typeof import('@vueuse/core')['useDebounceFn'] + const useDebouncedRefHistory: typeof import('@vueuse/core')['useDebouncedRefHistory'] + const useDeviceMotion: typeof import('@vueuse/core')['useDeviceMotion'] + const useDeviceOrientation: typeof import('@vueuse/core')['useDeviceOrientation'] + const useDevicePixelRatio: typeof import('@vueuse/core')['useDevicePixelRatio'] + const useDevicesList: typeof import('@vueuse/core')['useDevicesList'] + const useDisplayMedia: typeof import('@vueuse/core')['useDisplayMedia'] + const useDocumentVisibility: typeof import('@vueuse/core')['useDocumentVisibility'] + const useDraggable: typeof import('@vueuse/core')['useDraggable'] + const useDropZone: typeof import('@vueuse/core')['useDropZone'] + const useElementBounding: typeof import('@vueuse/core')['useElementBounding'] + const useElementByPoint: typeof import('@vueuse/core')['useElementByPoint'] + const useElementHover: typeof import('@vueuse/core')['useElementHover'] + const useElementSize: typeof import('@vueuse/core')['useElementSize'] + const useElementVisibility: typeof import('@vueuse/core')['useElementVisibility'] + const useEventBus: typeof import('@vueuse/core')['useEventBus'] + const useEventListener: typeof import('@vueuse/core')['useEventListener'] + const useEventSource: typeof import('@vueuse/core')['useEventSource'] + const useEyeDropper: typeof import('@vueuse/core')['useEyeDropper'] + const useFavicon: typeof import('@vueuse/core')['useFavicon'] + const useFetch: typeof import('@vueuse/core')['useFetch'] + const useFileDialog: typeof import('@vueuse/core')['useFileDialog'] + const useFileSystemAccess: typeof import('@vueuse/core')['useFileSystemAccess'] + const useFocus: typeof import('@vueuse/core')['useFocus'] + const useFocusWithin: typeof import('@vueuse/core')['useFocusWithin'] + const useFps: typeof import('@vueuse/core')['useFps'] + const useFullscreen: typeof import('@vueuse/core')['useFullscreen'] + const useGamepad: typeof import('@vueuse/core')['useGamepad'] + const useGeolocation: typeof import('@vueuse/core')['useGeolocation'] + const useIdle: typeof import('@vueuse/core')['useIdle'] + const useImage: typeof import('@vueuse/core')['useImage'] + const useInfiniteScroll: typeof import('@vueuse/core')['useInfiniteScroll'] + const useIntersectionObserver: typeof import('@vueuse/core')['useIntersectionObserver'] + const useInterval: typeof import('@vueuse/core')['useInterval'] + const useIntervalFn: typeof import('@vueuse/core')['useIntervalFn'] + const useKeyModifier: typeof import('@vueuse/core')['useKeyModifier'] + const useLastChanged: typeof import('@vueuse/core')['useLastChanged'] const useLink: typeof import('vue-router')['useLink'] + const useLocalStorage: typeof import('@vueuse/core')['useLocalStorage'] + const useMagicKeys: typeof import('@vueuse/core')['useMagicKeys'] + const useManualRefHistory: typeof import('@vueuse/core')['useManualRefHistory'] + const useMediaControls: typeof import('@vueuse/core')['useMediaControls'] + const useMediaQuery: typeof import('@vueuse/core')['useMediaQuery'] + const useMemoize: typeof import('@vueuse/core')['useMemoize'] + const useMemory: typeof import('@vueuse/core')['useMemory'] + const useMounted: typeof import('@vueuse/core')['useMounted'] + const useMouse: typeof import('@vueuse/core')['useMouse'] + const useMouseInElement: typeof import('@vueuse/core')['useMouseInElement'] + const useMousePressed: typeof import('@vueuse/core')['useMousePressed'] + const useMutationObserver: typeof import('@vueuse/core')['useMutationObserver'] + const useNavigatorLanguage: typeof import('@vueuse/core')['useNavigatorLanguage'] + const useNetwork: typeof import('@vueuse/core')['useNetwork'] + const useNow: typeof import('@vueuse/core')['useNow'] + const useObjectUrl: typeof import('@vueuse/core')['useObjectUrl'] + const useOffsetPagination: typeof import('@vueuse/core')['useOffsetPagination'] + const useOnline: typeof import('@vueuse/core')['useOnline'] + const usePageLeave: typeof import('@vueuse/core')['usePageLeave'] + const useParallax: typeof import('@vueuse/core')['useParallax'] + const useParentElement: typeof import('@vueuse/core')['useParentElement'] + const usePerformanceObserver: typeof import('@vueuse/core')['usePerformanceObserver'] + const usePermission: typeof import('@vueuse/core')['usePermission'] + const usePointer: typeof import('@vueuse/core')['usePointer'] + const usePointerLock: typeof import('@vueuse/core')['usePointerLock'] + const usePointerSwipe: typeof import('@vueuse/core')['usePointerSwipe'] + const usePreferredColorScheme: typeof import('@vueuse/core')['usePreferredColorScheme'] + const usePreferredContrast: typeof import('@vueuse/core')['usePreferredContrast'] + const usePreferredDark: typeof import('@vueuse/core')['usePreferredDark'] + const usePreferredLanguages: typeof import('@vueuse/core')['usePreferredLanguages'] + const usePreferredReducedMotion: typeof import('@vueuse/core')['usePreferredReducedMotion'] + const usePrevious: typeof import('@vueuse/core')['usePrevious'] + const useRafFn: typeof import('@vueuse/core')['useRafFn'] + const useRefHistory: typeof import('@vueuse/core')['useRefHistory'] + const useResizeObserver: typeof import('@vueuse/core')['useResizeObserver'] const useRoute: typeof import('vue-router')['useRoute'] const useRouter: typeof import('vue-router')['useRouter'] + const useScreenOrientation: typeof import('@vueuse/core')['useScreenOrientation'] + const useScreenSafeArea: typeof import('@vueuse/core')['useScreenSafeArea'] + const useScriptTag: typeof import('@vueuse/core')['useScriptTag'] + const useScroll: typeof import('@vueuse/core')['useScroll'] + const useScrollLock: typeof import('@vueuse/core')['useScrollLock'] + const useSessionStorage: typeof import('@vueuse/core')['useSessionStorage'] + const useShare: typeof import('@vueuse/core')['useShare'] const useSlots: typeof import('vue')['useSlots'] + const useSorted: typeof import('@vueuse/core')['useSorted'] + const useSpeechRecognition: typeof import('@vueuse/core')['useSpeechRecognition'] + const useSpeechSynthesis: typeof import('@vueuse/core')['useSpeechSynthesis'] + const useStepper: typeof import('@vueuse/core')['useStepper'] + const useStorage: typeof import('@vueuse/core')['useStorage'] + const useStorageAsync: typeof import('@vueuse/core')['useStorageAsync'] + const useStyleTag: typeof import('@vueuse/core')['useStyleTag'] + const useSupported: typeof import('@vueuse/core')['useSupported'] + const useSwipe: typeof import('@vueuse/core')['useSwipe'] + const useTemplateRefsList: typeof import('@vueuse/core')['useTemplateRefsList'] + const useTextDirection: typeof import('@vueuse/core')['useTextDirection'] + const useTextSelection: typeof import('@vueuse/core')['useTextSelection'] + const useTextareaAutosize: typeof import('@vueuse/core')['useTextareaAutosize'] + const useThrottle: typeof import('@vueuse/core')['useThrottle'] + const useThrottleFn: typeof import('@vueuse/core')['useThrottleFn'] + const useThrottledRefHistory: typeof import('@vueuse/core')['useThrottledRefHistory'] + const useTimeAgo: typeof import('@vueuse/core')['useTimeAgo'] + const useTimeout: typeof import('@vueuse/core')['useTimeout'] + const useTimeoutFn: typeof import('@vueuse/core')['useTimeoutFn'] + const useTimeoutPoll: typeof import('@vueuse/core')['useTimeoutPoll'] + const useTimestamp: typeof import('@vueuse/core')['useTimestamp'] + const useTitle: typeof import('@vueuse/core')['useTitle'] + const useToNumber: typeof import('@vueuse/core')['useToNumber'] + const useToString: typeof import('@vueuse/core')['useToString'] + const useToggle: typeof import('@vueuse/core')['useToggle'] + const useTransition: typeof import('@vueuse/core')['useTransition'] + const useUrlSearchParams: typeof import('@vueuse/core')['useUrlSearchParams'] + const useUserMedia: typeof import('@vueuse/core')['useUserMedia'] + const useVModel: typeof import('@vueuse/core')['useVModel'] + const useVModels: typeof import('@vueuse/core')['useVModels'] + const useVibrate: typeof import('@vueuse/core')['useVibrate'] + const useVirtualList: typeof import('@vueuse/core')['useVirtualList'] + const useWakeLock: typeof import('@vueuse/core')['useWakeLock'] + const useWebNotification: typeof import('@vueuse/core')['useWebNotification'] + const useWebSocket: typeof import('@vueuse/core')['useWebSocket'] + const useWebWorker: typeof import('@vueuse/core')['useWebWorker'] + const useWebWorkerFn: typeof import('@vueuse/core')['useWebWorkerFn'] + const useWindowFocus: typeof import('@vueuse/core')['useWindowFocus'] + const useWindowScroll: typeof import('@vueuse/core')['useWindowScroll'] + const useWindowSize: typeof import('@vueuse/core')['useWindowSize'] const watch: typeof import('vue')['watch'] + const watchArray: typeof import('@vueuse/core')['watchArray'] + const watchAtMost: typeof import('@vueuse/core')['watchAtMost'] + const watchDebounced: typeof import('@vueuse/core')['watchDebounced'] + const watchDeep: typeof import('@vueuse/core')['watchDeep'] const watchEffect: typeof import('vue')['watchEffect'] + const watchIgnorable: typeof import('@vueuse/core')['watchIgnorable'] + const watchImmediate: typeof import('@vueuse/core')['watchImmediate'] + const watchOnce: typeof import('@vueuse/core')['watchOnce'] + const watchPausable: typeof import('@vueuse/core')['watchPausable'] const watchPostEffect: typeof import('vue')['watchPostEffect'] const watchSyncEffect: typeof import('vue')['watchSyncEffect'] + const watchThrottled: typeof import('@vueuse/core')['watchThrottled'] + const watchTriggerable: typeof import('@vueuse/core')['watchTriggerable'] + const watchWithFilter: typeof import('@vueuse/core')['watchWithFilter'] + const whenever: typeof import('@vueuse/core')['whenever'] } // for type re-export declare global { diff --git a/components.d.ts b/components.d.ts index bae23a2..2bb3b5f 100644 --- a/components.d.ts +++ b/components.d.ts @@ -7,7 +7,6 @@ export {} /* prettier-ignore */ declare module 'vue' { export interface GlobalComponents { - 3DCard: typeof import('./src/components/3DCard/3DCard.vue')['default'] AButton: typeof import('ant-design-vue/es')['Button'] AButtonGroup: typeof import('ant-design-vue/es')['ButtonGroup'] ACard: typeof import('ant-design-vue/es')['Card'] @@ -15,12 +14,16 @@ declare module 'vue' { AConfigProvider: typeof import('ant-design-vue/es')['ConfigProvider'] ADatePicker: typeof import('ant-design-vue/es')['DatePicker'] ADivider: typeof import('ant-design-vue/es')['Divider'] + ADropdown: typeof import('ant-design-vue/es')['Dropdown'] AFlex: typeof import('ant-design-vue/es')['Flex'] AForm: typeof import('ant-design-vue/es')['Form'] AFormItem: typeof import('ant-design-vue/es')['FormItem'] AInput: typeof import('ant-design-vue/es')['Input'] AInputPassword: typeof import('ant-design-vue/es')['InputPassword'] + AMenu: typeof import('ant-design-vue/es')['Menu'] + AMenuItem: typeof import('ant-design-vue/es')['MenuItem'] AQrcode: typeof import('ant-design-vue/es')['QRCode'] + ArrowRightOutlined: typeof import('@ant-design/icons-vue')['ArrowRightOutlined'] ASelect: typeof import('ant-design-vue/es')['Select'] ASelectOption: typeof import('ant-design-vue/es')['SelectOption'] ATabPane: typeof import('ant-design-vue/es')['TabPane'] @@ -28,15 +31,19 @@ declare module 'vue' { ATimePicker: typeof import('ant-design-vue/es')['TimePicker'] ATooltip: typeof import('ant-design-vue/es')['Tooltip'] BoxDog: typeof import('./src/components/BoxDog/BoxDog.vue')['default'] - Card3D: typeof import('./src/components/3DCard/Card3D.vue')['default'] + Card3D: typeof import('./src/components/Card3D/Card3D.vue')['default'] + Clouds: typeof import('./src/components/Clouds/Clouds.vue')['default'] + DownOutlined: typeof import('@ant-design/icons-vue')['DownOutlined'] DynamicTitle: typeof import('./src/components/DynamicTitle/DynamicTitle.vue')['default'] EffectsCard: typeof import('./src/components/EffectsCard/EffectsCard.vue')['default'] ForgetPage: typeof import('./src/views/Forget/ForgetPage.vue')['default'] + GithubOutlined: typeof import('@ant-design/icons-vue')['GithubOutlined'] LandingPage: typeof import('./src/views/Landing/LandingPage.vue')['default'] LockOutlined: typeof import('@ant-design/icons-vue')['LockOutlined'] LoginFooter: typeof import('./src/views/Login/LoginFooter.vue')['default'] LoginPage: typeof import('./src/views/Login/LoginPage.vue')['default'] NotFound: typeof import('./src/views/404/NotFound.vue')['default'] + QqOutlined: typeof import('@ant-design/icons-vue')['QqOutlined'] QRLogin: typeof import('./src/views/QRLogin/QRLogin.vue')['default'] QRLoginFooter: typeof import('./src/views/QRLogin/QRLoginFooter.vue')['default'] RouterLink: typeof import('vue-router')['RouterLink'] @@ -46,5 +53,6 @@ declare module 'vue' { TestI18n: typeof import('./src/views/TestI18n.vue')['default'] TestTheme: typeof import('./src/views/TestTheme.vue')['default'] UserOutlined: typeof import('@ant-design/icons-vue')['UserOutlined'] + WechatOutlined: typeof import('@ant-design/icons-vue')['WechatOutlined'] } } diff --git a/package.json b/package.json index 1f90899..1f76e0b 100644 --- a/package.json +++ b/package.json @@ -11,11 +11,14 @@ "dependencies": { "@alova/adapter-axios": "^2.0.5", "@ant-design/icons-vue": "^7.0.1", + "@types/animejs": "^3.1.12", "@types/crypto-js": "^4.2.2", "@types/json-stringify-safe": "^5.0.3", "@types/node": "^22.2.0", "@types/nprogress": "^0.2.3", + "@vueuse/core": "^11.0.1", "alova": "^3.0.6", + "animejs": "^3.2.2", "ant-design-vue": "^4.2.3", "axios": "^1.7.3", "crypto-js": "^4.2.0", diff --git a/src/assets/images/3dr_chihiro.png b/src/assets/images/3dr_chihiro.png new file mode 100644 index 0000000..50ad962 Binary files /dev/null and b/src/assets/images/3dr_chihiro.png differ diff --git a/src/assets/images/3dr_howlbg.jpg b/src/assets/images/3dr_howlbg.jpg new file mode 100644 index 0000000..001bdda Binary files /dev/null and b/src/assets/images/3dr_howlbg.jpg differ diff --git a/src/assets/images/3dr_howlcastle.png b/src/assets/images/3dr_howlcastle.png new file mode 100644 index 0000000..086345a Binary files /dev/null and b/src/assets/images/3dr_howlcastle.png differ diff --git a/src/assets/images/3dr_mono.png b/src/assets/images/3dr_mono.png new file mode 100644 index 0000000..2844c0c Binary files /dev/null and b/src/assets/images/3dr_mono.png differ diff --git a/src/assets/images/3dr_monobg.jpg b/src/assets/images/3dr_monobg.jpg new file mode 100644 index 0000000..497b0c2 Binary files /dev/null and b/src/assets/images/3dr_monobg.jpg differ diff --git a/src/assets/images/3dr_spirited.jpg b/src/assets/images/3dr_spirited.jpg new file mode 100644 index 0000000..8bab45d Binary files /dev/null and b/src/assets/images/3dr_spirited.jpg differ diff --git a/src/assets/images/cloud.png b/src/assets/images/cloud.png new file mode 100644 index 0000000..ad91859 Binary files /dev/null and b/src/assets/images/cloud.png differ diff --git a/src/assets/images/clouds.png b/src/assets/images/clouds.png new file mode 100644 index 0000000..8f7da58 Binary files /dev/null and b/src/assets/images/clouds.png differ diff --git a/src/assets/images/logo.png b/src/assets/images/logo.png new file mode 100644 index 0000000..419cd8a Binary files /dev/null and b/src/assets/images/logo.png differ diff --git a/src/assets/styles/global.scss b/src/assets/styles/global.scss index 32cd7c8..77816dc 100644 --- a/src/assets/styles/global.scss +++ b/src/assets/styles/global.scss @@ -1,18 +1,22 @@ @import "theme"; -body { +:root { + --background-color: #ffffff; + --text-color: #000000; +} + +[data-theme="dark"] { + --background-color: #121212; + --text-color: #ffffff; +} + +#app { position: relative; transition: background-color 0.3s, color 0.3s; width: 100vw; height: 100vh; - @include useTheme { - background-color: getModeVar('bgColor') !important; - color: getModeVar('infoColor') !important; - } -} - -#app { + overflow-x: hidden; @include useTheme { background-color: getModeVar('bgColor') !important; color: getModeVar('infoColor') !important; @@ -35,3 +39,5 @@ body { #nprogress .peg { box-shadow: 0 0 10px cyan, 0 0 5px cyan !important; } + + diff --git a/src/assets/styles/scroll-bar.scss b/src/assets/styles/scroll-bar.scss index 80dbdc4..f294e1b 100644 --- a/src/assets/styles/scroll-bar.scss +++ b/src/assets/styles/scroll-bar.scss @@ -1,7 +1,7 @@ ::-webkit-scrollbar { - width: 6px; - height: 8px; + width: 1px; + height: 1px; } ::-webkit-scrollbar-button { diff --git a/src/assets/styles/theme.scss b/src/assets/styles/theme.scss index a22dfe3..2e60f2b 100644 --- a/src/assets/styles/theme.scss +++ b/src/assets/styles/theme.scss @@ -1,16 +1,15 @@ @import "colors.module"; $modes: ( - light: ( - bgColor: #fff, + "light": ( + bgColor: transparent, infoColor: #000 ), - dark: ( + "dark": ( bgColor: #000, infoColor: #fff ) ); - $curMode: light; $curTheme: red; @mixin useTheme() { diff --git a/src/components/BoxDog/index.scss b/src/components/BoxDog/index.scss index b35adc9..bd45c81 100644 --- a/src/components/BoxDog/index.scss +++ b/src/components/BoxDog/index.scss @@ -1,4 +1,3 @@ - html, body { height: 100%; @@ -18,7 +17,7 @@ html { body { position: relative; - background: transparent; + background: transparent !important; padding: 0; margin: 0; } diff --git a/src/components/3DCard/Card3D.vue b/src/components/Card3D/Card3D.vue similarity index 81% rename from src/components/3DCard/Card3D.vue rename to src/components/Card3D/Card3D.vue index bb4f176..ee6c98f 100644 --- a/src/components/3DCard/Card3D.vue +++ b/src/components/Card3D/Card3D.vue @@ -4,7 +4,7 @@

Popular

-

Princess Mononoke

@@ -12,7 +12,7 @@
-

Spirited Away

@@ -20,7 +20,7 @@
-

Howl's Moving Castle

@@ -65,25 +65,7 @@ onMounted(() => { }); - diff --git a/src/layout/Landing/Content/Content.vue b/src/layout/Landing/Content/Content.vue index 41f272a..0ac35fb 100644 --- a/src/layout/Landing/Content/Content.vue +++ b/src/layout/Landing/Content/Content.vue @@ -1,12 +1,20 @@ - diff --git a/src/layout/Landing/Footer/Footer.vue b/src/layout/Landing/Footer/Footer.vue index f458972..3cb3e41 100644 --- a/src/layout/Landing/Footer/Footer.vue +++ b/src/layout/Landing/Footer/Footer.vue @@ -1,11 +1,41 @@ - diff --git a/src/layout/Landing/Footer/index.scss b/src/layout/Landing/Footer/index.scss new file mode 100644 index 0000000..e3f5698 --- /dev/null +++ b/src/layout/Landing/Footer/index.scss @@ -0,0 +1,67 @@ +.landing-footer { + width: 100%; + height: 200px; + background-color: #333; + color: #fff; + display: flex; + justify-content: center; + align-items: center; + + .landing-footer-content { + display: flex; + height: 100%; + max-width: 1200px; + min-width: 1200px; + width: 1200px; + + .landing-footer-content-left { + display: flex; + flex-direction: column; + align-items: center; + width: 800px; + + .landing-footer-content-left-top { + width: 100%; + height: 100px; + display: flex; + flex-direction: row; + align-items: flex-end; + justify-content: space-between; + font-size: 15px; + font-weight: bold; + + .landing-footer-content-a { + color: #fff !important; + + } + } + + + .landing-footer-content-left-bottom { + width: 100%; + height: 100px; + display: flex; + flex-direction: column; + align-items: flex-start; + justify-content: space-around; + color: #777777; + font-size: 15px; + + + } + } + + .landing-footer-content-right { + display: flex; + flex-direction: row; + align-items: center; + justify-content: center; + width: 400px; + + .landing-footer-content-icon { + font-size: 40px; + color: #777777; + } + } + } +} diff --git a/src/layout/Landing/Header/Header.vue b/src/layout/Landing/Header/Header.vue index a3853a5..9bc6a5e 100644 --- a/src/layout/Landing/Header/Header.vue +++ b/src/layout/Landing/Header/Header.vue @@ -1,23 +1,45 @@ diff --git a/src/locales/language/en.ts b/src/locales/language/en.ts index f090fad..83aa730 100644 --- a/src/locales/language/en.ts +++ b/src/locales/language/en.ts @@ -43,6 +43,21 @@ export default { resetPasswordError: "reset password failed!", }, + landing: { + immediately: 'Immediately', + english: 'English', + chinese: 'Chinese', + learnMore: 'Learn More', + title: 'Schisandra Cloud Album', + description: 'Schisandra Cloud Album is a cloud storage service that allows users to store and manage their digital assets in the cloud. It provides a simple and easy-to-use interface, and supports multiple file formats, including images, videos, documents, and audio files.', + userAgreement: 'user agreement', + privacyPolicy: 'privacy policy', + termsOfService: 'terms of service', + contactUs: 'contact us', + friends: 'friends', + helpCenter: 'help center', + copyright: '© 2021 Schisandra Cloud Album. All rights reserved.', + }, error: { networkError: 'Network error, please try again later', 400: 'request error (400)', diff --git a/src/locales/language/zh.ts b/src/locales/language/zh.ts index f337319..b1a075b 100644 --- a/src/locales/language/zh.ts +++ b/src/locales/language/zh.ts @@ -42,8 +42,21 @@ export default { resetPasswordSuccess: "密码重置成功!", resetPasswordError: "密码重置失败!", - - + }, + landing: { + immediately: '立即进入', + english: 'English', + chinese: '中文', + learnMore: '了解更多', + title: '五味子云相册', + description: '在这个瞬息万变的世界里,我们用镜头捕捉每一个精彩瞬间。五味子云相册,为您提供一个安全、便捷的云端空间,让您的照片随时随地触手可及。 无需担心存储空间不足,无需担心照片丢失。五味子云相册,让您的每一张照片都得到妥善保管,让美好的记忆永不褪色。', + userAgreement: '用户协议', + privacyPolicy: '隐私政策', + termsOfService: '服务条款', + contactUs: '联系我们', + friends: '友情链接', + helpCenter: '帮助中心', + copyright: '版权所有 © 2021 五味子云相册', }, error: { networkError: '网络连接失败!', diff --git a/src/store/modules/themeStore.ts b/src/store/modules/themeStore.ts index 5aeec3d..ecc4196 100644 --- a/src/store/modules/themeStore.ts +++ b/src/store/modules/themeStore.ts @@ -11,12 +11,9 @@ export const useThemeStore = defineStore( () => { const themeName = ref('green'); // 主题名称 const darkMode = ref('light'); // 颜色模式 - const darkModeComp = computed(() => { - document.documentElement.setAttribute('data-dark', darkMode.value); - return darkMode.value; - }); const themeConfig = computed(() => { document.documentElement.setAttribute('data-theme', themeName.value); + document.documentElement.setAttribute('data-dark', darkMode.value); // 主题配置 return { token: { @@ -35,9 +32,9 @@ export const useThemeStore = defineStore( themeName.value = value; }; const toggleDarkMode = () => { - darkMode.value = darkMode.value === 'light' ? 'dark' : 'light'; + darkMode.value = darkMode.value === "dark" ? "light" : "dark"; }; - return {themeName, themeConfig, darkMode, darkModeComp, setThemeName, toggleDarkMode}; + return {themeName, themeConfig, darkMode, setThemeName, toggleDarkMode}; }, { persist: { diff --git a/src/utils/alova/service.ts b/src/utils/alova/service.ts index ec081cd..56165f5 100644 --- a/src/utils/alova/service.ts +++ b/src/utils/alova/service.ts @@ -22,15 +22,22 @@ const {onAuthRequired, onResponseRefreshToken} = createServerTokenAuthentication // 当token过期时触发,在此函数中触发刷新token handler: async () => { - // 刷新token - const user = useStore().user; - const res: any = await refreshToken(user.user?.refreshToken || ''); - if (res.code === 0 && res.data) { - const {access_token, refresh_token, uid} = res.data; - user.user.accessToken = access_token; - user.user.refreshToken = refresh_token; - user.user.uid = uid; - } else { + try { + // 刷新token + const user = useStore().user; + const res: any = await refreshToken(user.user?.refreshToken || ''); + if (res.code === 0 && res.data) { + const {access_token, refresh_token, uid} = res.data; + user.user.accessToken = access_token; + user.user.refreshToken = refresh_token; + user.user.uid = uid; + } else { + message.error(i18n.global.t('error.loginExpired')); + localStorage.removeItem('user'); + await router.push('/login'); + } + } catch (error: any) { + console.error(error); message.error(i18n.global.t('error.loginExpired')); localStorage.removeItem('user'); await router.push('/login'); diff --git a/src/views/Login/LoginPage.vue b/src/views/Login/LoginPage.vue index e6323ba..423be73 100644 --- a/src/views/Login/LoginPage.vue +++ b/src/views/Login/LoginPage.vue @@ -4,7 +4,13 @@
+ +
+
    +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
+
- diff --git a/src/views/Login/index.scss b/src/views/Login/index.scss index 54f17b6..7fd7026 100644 --- a/src/views/Login/index.scss +++ b/src/views/Login/index.scss @@ -4,17 +4,19 @@ width: 100vw; height: 100vh; /* 加载背景图 */ - background-image: url("@/assets/images/background.png"); + //@include useLoginTheme; + //background-image: url("@/assets/images/background.png"); /* 背景图垂直、水平均居中 */ - background-position: center center; - /* 背景图不平铺 */ - background-repeat: no-repeat; - /* 当内容高度大于图片高度时,背景图像的位置相对于viewport固定 */ - background-attachment: fixed; - /* 让背景图基于容器大小伸缩 */ - background-size: cover; + //background-position: center center; + ///* 背景图不平铺 */ + //background-repeat: no-repeat; + ///* 当内容高度大于图片高度时,背景图像的位置相对于viewport固定 */ + //background-attachment: fixed; + ///* 让背景图基于容器大小伸缩 */ + //background-size: cover; z-index: -1; + .login-left { width: 50%; } @@ -102,4 +104,131 @@ right: 0; background-color: rgba(0, 0, 0, 0.5); } + + + .area { + background: #b9f187; + background: -webkit-linear-gradient(to left, #b9f187, #90d952, #70c13a, #52a82e) !important; + width: 100%; + height: 100vh; + z-index: -1; + overflow: hidden; + position: fixed; + top: 0; + left: 0; + } + + .circles { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + overflow: hidden; + } + + .circles li { + position: absolute; + display: block; + list-style: none; + width: 20px; + height: 20px; + background: rgba(255, 255, 255, 0.5); + animation: animate 25s linear infinite; + bottom: -150px; + + } + + .circles li:nth-child(1) { + left: 25%; + width: 80px; + height: 80px; + animation-delay: 0s; + } + + + .circles li:nth-child(2) { + left: 10%; + width: 20px; + height: 20px; + animation-delay: 2s; + animation-duration: 12s; + } + + .circles li:nth-child(3) { + left: 70%; + width: 20px; + height: 20px; + animation-delay: 4s; + } + + .circles li:nth-child(4) { + left: 40%; + width: 60px; + height: 60px; + animation-delay: 0s; + animation-duration: 18s; + } + + .circles li:nth-child(5) { + left: 65%; + width: 20px; + height: 20px; + animation-delay: 0s; + } + + .circles li:nth-child(6) { + left: 75%; + width: 110px; + height: 110px; + animation-delay: 3s; + } + + .circles li:nth-child(7) { + left: 35%; + width: 150px; + height: 150px; + animation-delay: 7s; + } + + .circles li:nth-child(8) { + left: 50%; + width: 25px; + height: 25px; + animation-delay: 15s; + animation-duration: 45s; + } + + .circles li:nth-child(9) { + left: 20%; + width: 15px; + height: 15px; + animation-delay: 2s; + animation-duration: 35s; + } + + .circles li:nth-child(10) { + left: 85%; + width: 150px; + height: 150px; + animation-delay: 0s; + animation-duration: 11s; + } + + + @keyframes animate { + + 0% { + transform: translateY(0) rotate(0deg); + opacity: 1; + border-radius: 0; + } + + 100% { + transform: translateY(-1000px) rotate(720deg); + opacity: 0; + border-radius: 50%; + } + + } } diff --git a/src/views/QRLogin/QRLogin.vue b/src/views/QRLogin/QRLogin.vue index 7cec31b..8c9e3f4 100644 --- a/src/views/QRLogin/QRLogin.vue +++ b/src/views/QRLogin/QRLogin.vue @@ -36,6 +36,20 @@
+
+
    +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
+