项目创建

This commit is contained in:
浅念
2025-07-04 17:16:38 +08:00
parent ce47b39fa5
commit 719911918f
372 changed files with 105035 additions and 32 deletions
+2
View File
@@ -0,0 +1,2 @@
// API相关类型统一导出
export * from './request'
+48
View File
@@ -0,0 +1,48 @@
/**
* 请求相关类型定义
*/
// 错误消息模式
export type ErrorMessageMode = 'none' | 'modal' | 'message' | undefined
// 请求配置选项
export interface RequestOptions {
// 是否将参数拼接到URL
joinParamsToUrl?: boolean
// 是否格式化日期
formatDate?: boolean
// 是否转换响应数据
isTransformResponse?: boolean
// 是否返回原生响应
isReturnNativeResponse?: boolean
// 是否添加前缀
joinPrefix?: boolean
// API URL
apiUrl?: string
// 错误消息模式
errorMessageMode?: ErrorMessageMode
// 是否添加时间戳
joinTime?: boolean
// 是否忽略取消令牌
ignoreCancelToken?: boolean
// 是否携带token
withToken?: boolean
}
// 请求方法类型
export type RequestMethod = 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH'
// 请求头类型
export interface RequestHeaders {
[key: string]: string | number | boolean
}
// 基础请求配置
export interface BaseRequestConfig {
url: string
method?: RequestMethod
headers?: RequestHeaders
params?: Record<string, any>
data?: any
timeout?: number
}
+317
View File
@@ -0,0 +1,317 @@
/* eslint-disable */
/* prettier-ignore */
// @ts-nocheck
// noinspection JSUnusedGlobalSymbols
// Generated by unplugin-auto-import
// biome-ignore lint: disable
export {}
declare global {
const EffectScope: typeof import('vue')['EffectScope']
const ElButton: (typeof import('element-plus/es'))['ElButton']
const ElMessage: typeof import('element-plus/es')['ElMessage']
const ElMessageBox: (typeof import('element-plus/es'))['ElMessageBox']
const ElNotification: (typeof import('element-plus/es'))['ElNotification']
const ElPopconfirm: (typeof import('element-plus/es'))['ElPopconfirm']
const ElPopover: (typeof import('element-plus/es'))['ElPopover']
const ElTableColumn: (typeof import('element-plus/es'))['ElTableColumn']
const ElTag: typeof import('element-plus/es')['ElTag']
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']
const mapStores: typeof import('pinia')['mapStores']
const mapWritableState: typeof import('pinia')['mapWritableState']
const markRaw: typeof import('vue')['markRaw']
const nextTick: typeof import('vue')['nextTick']
const onActivated: typeof import('vue')['onActivated']
const onBeforeMount: typeof import('vue')['onBeforeMount']
const onBeforeRouteLeave: typeof import('vue-router')['onBeforeRouteLeave']
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 onWatcherCleanup: typeof import('vue')['onWatcherCleanup']
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 useId: typeof import('vue')['useId']
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 useModel: typeof import('vue')['useModel']
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 useTemplateRef: typeof import('vue')['useTemplateRef']
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 {
// @ts-ignore
export type { Component, ComponentPublicInstance, ComputedRef, DirectiveBinding, ExtractDefaultPropTypes, ExtractPropTypes, ExtractPublicPropTypes, InjectionKey, PropType, Ref, MaybeRef, MaybeRefOrGetter, VNode, WritableComputedRef } from 'vue'
import('vue')
}
+72
View File
@@ -0,0 +1,72 @@
/**
* 通用类型定义
*/
// 状态类型
export type Status = 0 | 1 // 0: 禁用, 1: 启用
// 性别类型
export type Gender = 'male' | 'female' | 'unknown'
// 排序方向
export type SortOrder = 'asc' | 'desc'
// 操作类型
export type ActionType = 'create' | 'update' | 'delete' | 'view'
// 可选的记录类型
export type Recordable<T = any> = Record<string, T>
// 键值对类型
export type KeyValue<T = any> = {
key: string
value: T
label?: string
}
// 选项类型
export interface Option {
label: string
value: string | number
disabled?: boolean
children?: Option[]
}
// 时间范围类型
export interface TimeRange {
startTime: string
endTime: string
}
// 文件类型
export interface FileInfo {
name: string
url: string
size: number
type: string
lastModified?: number
}
// 坐标类型
export interface Position {
x: number
y: number
}
// 尺寸类型
export interface Size {
width: number
height: number
}
// 响应式断点类型
export type Breakpoint = 'xs' | 'sm' | 'md' | 'lg' | 'xl'
// 主题类型
export type ThemeMode = 'light' | 'dark' | 'auto'
// 语言类型
export type Language = 'zh-CN' | 'en-US'
// 环境类型
export type Environment = 'development' | 'production' | 'test'
+135
View File
@@ -0,0 +1,135 @@
/**
* 组件相关类型定义
*/
import { Option } from '../common'
// 搜索组件类型
export type SearchComponentType =
| 'input'
| 'select'
| 'radio'
| 'checkbox'
| 'date'
| 'datetime'
| 'daterange'
| 'datetimerange'
| 'month'
| 'monthrange'
| 'year'
| 'yearrange'
| 'week'
| 'time'
| 'timerange'
// 搜索框值变化参数
export interface SearchChangeParams {
prop: string
val: unknown
}
// 搜索表单项
export interface SearchFormItem {
// 表单项标签
label: string
// 表单项属性名
prop: string
// 表单项类型
type: SearchComponentType
// 每列的宽度(基于 24 格布局)
elColSpan?: number
// select的选项
options?: Option[] | (() => Option[])
// 搜索框更改事件
onChange?: (changeParams: SearchChangeParams) => void
// 额外配置项
config?: Record<string, unknown>
// 默认值
defaultValue?: any
// 占位符
placeholder?: string
// 是否必填
required?: boolean
// 是否禁用
disabled?: boolean
}
// 表格列配置
export interface TableColumn {
// 列标题
label: string
// 列属性名
prop: string
// 列宽度
width?: number | string
// 最小宽度
minWidth?: number | string
// 是否可排序
sortable?: boolean
// 是否固定列
fixed?: boolean | 'left' | 'right'
// 列对齐方式
align?: 'left' | 'center' | 'right'
// 自定义渲染
formatter?: (row: any, column: any, cellValue: any, index: number) => string
// 是否显示
show?: boolean
// 列类型
type?: 'selection' | 'index' | 'expand'
}
// 分页配置
export interface PaginationConfig {
// 当前页
currentPage: number
// 每页条数
pageSize: number
// 总条数
total: number
// 每页显示个数选择器的选项
pageSizes?: number[]
// 组件布局
layout?: string
// 是否为小型分页
small?: boolean
}
// 表单规则
export interface FormRule {
// 是否必填
required?: boolean
// 错误提示信息
message?: string
// 触发方式
trigger?: string | string[]
// 最小长度
min?: number
// 最大长度
max?: number
// 正则表达式
pattern?: RegExp
// 自定义验证函数
validator?: (rule: any, value: any, callback: any) => void
}
// 对话框配置
export interface DialogConfig {
// 标题
title: string
// 是否显示
visible: boolean
// 宽度
width?: string | number
// 是否可以通过点击 modal 关闭
closeOnClickModal?: boolean
// 是否可以通过按下 ESC 关闭
closeOnPressEscape?: boolean
// 是否显示关闭按钮
showClose?: boolean
// 是否在 Dialog 出现时将 body 滚动锁定
lockScroll?: boolean
// 是否显示遮罩层
modal?: boolean
// 自定义类名
customClass?: string
}
+142
View File
@@ -0,0 +1,142 @@
/* eslint-disable */
// @ts-nocheck
// Generated by unplugin-vue-components
// Read more: https://github.com/vuejs/core/pull/3399
export {}
/* prettier-ignore */
declare module 'vue' {
export interface GlobalComponents {
ArtBackToTop: typeof import('./../components/core/base/art-back-to-top/index.vue')['default']
ArtBarChart: typeof import('./../components/core/charts/ArtBarChart.vue')['default']
ArtBarChartCard: typeof import('./../components/core/cards/art-bar-chart-card/index.vue')['default']
ArtBasicBanner: typeof import('./../components/core/banners/art-basic-banner/index.vue')['default']
ArtBreadcrumb: typeof import('./../components/core/layouts/art-breadcrumb/index.vue')['default']
ArtButtonMore: typeof import('./../components/core/forms/ArtButtonMore.vue')['default']
ArtButtonTable: typeof import('./../components/core/forms/ArtButtonTable.vue')['default']
ArtCardBanner: typeof import('./../components/core/banners/art-card-banner/index.vue')['default']
ArtChatWindow: typeof import('./../components/core/layouts/art-chat-window/index.vue')['default']
ArtCutterImg: typeof import('./../components/core/media/art-cutter-img/index.vue')['default']
ArtDataListCard: typeof import('./../components/core/cards/art-data-list-card/index.vue')['default']
ArtDonutChartCard: typeof import('./../components/core/cards/art-donut-chart-card/index.vue')['default']
ArtDragVerify: typeof import('./../components/core/forms/ArtDragVerify.vue')['default']
ArtDualBarCompareChart: typeof import('./../components/core/charts/ArtDualBarCompareChart.vue')['default']
ArtExcelExport: typeof import('./../components/core/forms/ArtExcelExport.vue')['default']
ArtExcelImport: typeof import('./../components/core/forms/ArtExcelImport.vue')['default']
ArtException: typeof import('./../components/core/views/exception/ArtException.vue')['default']
ArtFastEnter: typeof import('./../components/core/layouts/art-fast-enter/index.vue')['default']
ArtFestivalTextScroll: typeof import('./../components/core/text-effect/art-festival-text-scroll/index.vue')['default']
ArtFireworksEffect: typeof import('./../components/core/layouts/art-fireworks-effect/index.vue')['default']
ArtGlobalSearch: typeof import('./../components/core/layouts/art-global-search/index.vue')['default']
ArtHBarChart: typeof import('./../components/core/charts/ArtHBarChart.vue')['default']
ArtHeaderBar: typeof import('./../components/core/layouts/art-header-bar/index.vue')['default']
ArtHorizontalMenu: typeof import('./../components/core/layouts/art-menus/art-horizontal-menu/index.vue')['default']
ArtIconSelector: typeof import('./../components/core/base/art-icon-selector/index.vue')['default']
ArtImageCard: typeof import('./../components/core/cards/art-image-card/index.vue')['default']
ArtKLineChart: typeof import('./../components/core/charts/ArtKLineChart.vue')['default']
ArtLayouts: typeof import('./../components/core/layouts/art-layouts/index.vue')['default']
ArtLineChart: typeof import('./../components/core/charts/ArtLineChart.vue')['default']
ArtLineChartCard: typeof import('./../components/core/cards/art-line-chart-card/index.vue')['default']
ArtLogo: typeof import('./../components/core/base/art-logo/index.vue')['default']
ArtMapChart: typeof import('./../components/core/charts/ArtMapChart.vue')['default']
ArtMenuRight: typeof import('./../components/core/others/art-menu-right/index.vue')['default']
ArtMixedMenu: typeof import('./../components/core/layouts/art-menus/art-mixed-menu/index.vue')['default']
ArtNotification: typeof import('./../components/core/layouts/art-notification/index.vue')['default']
ArtPageContent: typeof import('./../components/core/layouts/art-page-content/index.vue')['default']
ArtProgressCard: typeof import('./../components/core/cards/art-progress-card/index.vue')['default']
ArtRadarChart: typeof import('./../components/core/charts/ArtRadarChart.vue')['default']
ArtResultPage: typeof import('./../components/core/views/result/ArtResultPage.vue')['default']
ArtRingChart: typeof import('./../components/core/charts/ArtRingChart.vue')['default']
ArtScatterChart: typeof import('./../components/core/charts/ArtScatterChart.vue')['default']
ArtScreenLock: typeof import('./../components/core/layouts/art-screen-lock/index.vue')['default']
ArtSearchBar: typeof import('./../components/core/forms/art-search-bar/index.vue')['default']
ArtSearchDate: typeof import('./../components/core/forms/art-search-bar/widget/art-search-date/index.vue')['default']
ArtSearchInput: typeof import('./../components/core/forms/art-search-bar/widget/art-search-input/index.vue')['default']
ArtSearchRadio: typeof import('./../components/core/forms/art-search-bar/widget/art-search-radio/index.vue')['default']
ArtSearchSelect: typeof import('./../components/core/forms/art-search-bar/widget/art-search-select/index.vue')['default']
ArtSettingsPanel: typeof import('./../components/core/layouts/art-settings-panel/index.vue')['default']
ArtSidebarMenu: typeof import('./../components/core/layouts/art-menus/art-sidebar-menu/index.vue')['default']
ArtStatsCard: typeof import('./../components/core/cards/art-stats-card/index.vue')['default']
ArtTable: typeof import('./../components/core/tables/ArtTable.vue')['default']
ArtTableFullScreen: typeof import('./../components/core/tables/ArtTableFullScreen.vue')['default']
ArtTableHeader: typeof import('./../components/core/tables/ArtTableHeader.vue')['default']
ArtTextScroll: typeof import('./../components/core/text-effect/art-text-scroll/index.vue')['default']
ArtTimelineListCard: typeof import('./../components/core/cards/art-timeline-list-card/index.vue')['default']
ArtVideoPlayer: typeof import('./../components/core/media/art-video-player/index.vue')['default']
ArtWangEditor: typeof import('./../components/core/forms/ArtWangEditor.vue')['default']
ArtWatermark: typeof import('./../components/core/others/art-watermark/index.vue')['default']
ArtWorkTab: typeof import('./../components/core/layouts/art-work-tab/index.vue')['default']
BasicSettings: typeof import('./../components/core/layouts/art-settings-panel/widget/BasicSettings.vue')['default']
BoxStyleSettings: typeof import('./../components/core/layouts/art-settings-panel/widget/BoxStyleSettings.vue')['default']
ColorSettings: typeof import('./../components/core/layouts/art-settings-panel/widget/ColorSettings.vue')['default']
CommentItem: typeof import('./../components/custom/comment-widget/widget/CommentItem.vue')['default']
CommentWidget: typeof import('./../components/custom/comment-widget/index.vue')['default']
ContainerSettings: typeof import('./../components/core/layouts/art-settings-panel/widget/ContainerSettings.vue')['default']
ElAvatar: typeof import('element-plus/es')['ElAvatar']
ElButton: typeof import('element-plus/es')['ElButton']
ElButtonGroup: typeof import('element-plus/es')['ElButtonGroup']
ElCalendar: typeof import('element-plus/es')['ElCalendar']
ElCard: typeof import('element-plus/es')['ElCard']
ElCheckbox: typeof import('element-plus/es')['ElCheckbox']
ElCol: typeof import('element-plus/es')['ElCol']
ElConfigProvider: typeof import('element-plus/es')['ElConfigProvider']
ElDatePicker: typeof import('element-plus/es')['ElDatePicker']
ElDescriptions: typeof import('element-plus/es')['ElDescriptions']
ElDescriptionsItem: typeof import('element-plus/es')['ElDescriptionsItem']
ElDialog: typeof import('element-plus/es')['ElDialog']
ElDrawer: typeof import('element-plus/es')['ElDrawer']
ElDropdown: typeof import('element-plus/es')['ElDropdown']
ElDropdownItem: typeof import('element-plus/es')['ElDropdownItem']
ElDropdownMenu: typeof import('element-plus/es')['ElDropdownMenu']
ElEmpty: typeof import('element-plus/es')['ElEmpty']
ElForm: typeof import('element-plus/es')['ElForm']
ElFormItem: typeof import('element-plus/es')['ElFormItem']
ElIcon: typeof import('element-plus/es')['ElIcon']
ElImage: typeof import('element-plus/es')['ElImage']
ElInput: typeof import('element-plus/es')['ElInput']
ElInputNumber: typeof import('element-plus/es')['ElInputNumber']
ElMenu: typeof import('element-plus/es')['ElMenu']
ElMenuItem: typeof import('element-plus/es')['ElMenuItem']
ElOption: typeof import('element-plus/es')['ElOption']
ElPagination: typeof import('element-plus/es')['ElPagination']
ElPopover: typeof import('element-plus/es')['ElPopover']
ElProgress: typeof import('element-plus/es')['ElProgress']
ElRadio: typeof import('element-plus/es')['ElRadio']
ElRadioButton: typeof import('element-plus/es')['ElRadioButton']
ElRadioGroup: typeof import('element-plus/es')['ElRadioGroup']
ElRow: typeof import('element-plus/es')['ElRow']
ElScrollbar: typeof import('element-plus/es')['ElScrollbar']
ElSegmented: typeof import('element-plus/es')['ElSegmented']
ElSelect: typeof import('element-plus/es')['ElSelect']
ElSkeleton: typeof import('element-plus/es')['ElSkeleton']
ElSkeletonItem: typeof import('element-plus/es')['ElSkeletonItem']
ElSubMenu: typeof import('element-plus/es')['ElSubMenu']
ElSwitch: typeof import('element-plus/es')['ElSwitch']
ElTable: typeof import('element-plus/es')['ElTable']
ElTableColumn: typeof import('element-plus/es')['ElTableColumn']
ElTabPane: typeof import('element-plus/es')['ElTabPane']
ElTabs: typeof import('element-plus/es')['ElTabs']
ElTag: typeof import('element-plus/es')['ElTag']
ElTimeline: typeof import('element-plus/es')['ElTimeline']
ElTimelineItem: typeof import('element-plus/es')['ElTimelineItem']
ElTooltip: typeof import('element-plus/es')['ElTooltip']
ElTree: typeof import('element-plus/es')['ElTree']
ElUpload: typeof import('element-plus/es')['ElUpload']
ElWatermark: typeof import('element-plus/es')['ElWatermark']
HorizontalSubmenu: typeof import('./../components/core/layouts/art-menus/art-horizontal-menu/widget/HorizontalSubmenu.vue')['default']
LoginLeftView: typeof import('./../components/core/views/login/LoginLeftView.vue')['default']
MenuLayoutSettings: typeof import('./../components/core/layouts/art-settings-panel/widget/MenuLayoutSettings.vue')['default']
MenuStyleSettings: typeof import('./../components/core/layouts/art-settings-panel/widget/MenuStyleSettings.vue')['default']
RouterLink: typeof import('vue-router')['RouterLink']
RouterView: typeof import('vue-router')['RouterView']
SectionTitle: typeof import('./../components/core/layouts/art-settings-panel/widget/SectionTitle.vue')['default']
SettingDrawer: typeof import('./../components/core/layouts/art-settings-panel/widget/SettingDrawer.vue')['default']
SettingHeader: typeof import('./../components/core/layouts/art-settings-panel/widget/SettingHeader.vue')['default']
SettingItem: typeof import('./../components/core/layouts/art-settings-panel/widget/SettingItem.vue')['default']
SidebarSubmenu: typeof import('./../components/core/layouts/art-menus/art-sidebar-menu/widget/SidebarSubmenu.vue')['default']
ThemeSettings: typeof import('./../components/core/layouts/art-settings-panel/widget/ThemeSettings.vue')['default']
}
export interface ComponentCustomProperties {
vLoading: typeof import('element-plus/es')['ElLoadingDirective']
}
}
+107
View File
@@ -0,0 +1,107 @@
/**
* 配置相关类型定义
*/
import { MenuTypeEnum, SystemThemeEnum } from '@/enums/appEnum'
import { MenuThemeType, SystemThemeTypes } from '@/types/store'
// 主题设置
export interface ThemeSetting {
name: string
theme: SystemThemeEnum
color: string[]
leftLineColor: string
rightLineColor: string
img: string
}
// 菜单布局
export interface MenuLayout {
name: string
value: MenuTypeEnum
img: string
description?: string
}
// 节日配置
export interface FestivalConfig {
date: string
name: string
image: string
scrollText: string
isActive?: boolean
}
// 系统基础配置
export interface SystemBasicConfig {
// 系统名称
name: string
// 系统描述
description?: string
// 系统logo
logo?: string
// 系统favicon
favicon?: string
// 版权信息
copyright?: string
}
// 系统配置
export interface SystemConfig {
// Element Plus 主题配置
elementPlusTheme: {
primary: string
}
// 系统基础信息
systemInfo: SystemBasicConfig
// 系统主题样式
systemThemeStyles: SystemThemeTypes
// 设置主题列表
settingThemeList: ThemeSetting[]
// 菜单布局列表
menuLayoutList: MenuLayout[]
// 主题列表
themeList: MenuThemeType[]
// 暗色菜单样式
darkMenuStyles: MenuThemeType[]
// 系统主色调
systemMainColor: readonly string[]
// 系统设置
systemSetting: {
defaultMenuWidth: number
defaultCustomRadius: string
defaultTabStyle: string
}
}
// 环境配置
export interface EnvConfig {
// 环境名称
NODE_ENV: string
// 应用版本
VITE_VERSION: string
// 应用端口
VITE_PORT: string
// 应用基础路径
VITE_BASE_URL: string
// API 地址
VITE_API_URL: string
// 是否开启 Mock
VITE_USE_MOCK?: string
// 是否开启压缩
VITE_USE_GZIP?: string
// 是否开启 CDN
VITE_USE_CDN?: string
}
// 应用配置
export interface AppConfig extends SystemConfig {
// 环境配置
env: EnvConfig
// 开发模式
isDev: boolean
// 生产模式
isProd: boolean
// 测试模式
isTest: boolean
}
+7
View File
@@ -0,0 +1,7 @@
// 统一导出所有类型定义
export * from './api'
export * from './common'
export * from './component'
export * from './store'
export * from './router'
export * from './config'
+48
View File
@@ -0,0 +1,48 @@
/**
* 路由相关类型定义
*/
import { RouteRecordRaw } from 'vue-router'
// 路由元数据
export interface RouteMeta extends Record<string | number | symbol, unknown> {
/** 路由标题 */
title: string
/** 路由图标 */
icon?: string
/** 是否显示徽章 */
showBadge?: boolean
/** 文本徽章 */
showTextBadge?: string
/** 是否在菜单中隐藏 */
isHide?: boolean
/** 是否在标签页中隐藏 */
isHideTab?: boolean
/** 外部链接 */
link?: string
/** 是否为iframe */
isIframe?: boolean
/** 是否缓存 */
keepAlive?: boolean
/** 操作权限 */
authList?: Array<{
title: string
auth_mark: string
}>
/** 是否为一级菜单 */
isFirstLevel?: boolean
/** 角色权限 */
roles?: string[]
/** 是否固定标签页 */
fixedTab?: boolean
/** 激活菜单路径 */
activePath?: string
}
// 扩展路由记录
export interface AppRouteRecord extends Omit<RouteRecordRaw, 'meta' | 'children' | 'component'> {
id?: number
meta: RouteMeta
children?: AppRouteRecord[]
component?: string | (() => Promise<any>)
}
+97
View File
@@ -0,0 +1,97 @@
/**
* Store相关类型定义
*/
import { MenuThemeEnum, SystemThemeEnum } from '@/enums/appEnum'
import { LocationQueryRaw } from 'vue-router'
// 系统主题样式(light | dark)
export interface SystemThemeType {
className: string
}
// 定义包含多个主题的类型
export type SystemThemeTypes = {
[key in Exclude<SystemThemeEnum, SystemThemeEnum.AUTO>]: SystemThemeType
}
// 菜单主题样式
export interface MenuThemeType {
theme: MenuThemeEnum
background: string
systemNameColor: string
textColor: string
textActiveColor: string
iconColor: string
iconActiveColor: string
tabBarBackground: string
systemBackground: string
leftLineColor: string
rightLineColor: string
img?: string
}
// 设置中心
export interface SettingState {
theme: string
uniqueOpened: boolean
menuButton: boolean
showRefreshButton: boolean
showCrumbs: boolean
autoClose: boolean
showWorkTab: boolean
showLanguage: boolean
showNprogress: boolean
themeModel: string
}
// 多标签
export interface WorkTab {
title: string
path: string
name: string
keepAlive: boolean
fixedTab?: boolean
params?: object
query?: LocationQueryRaw
icon?: string
isActive?: boolean
}
// 用户Store状态
export interface UserState {
userInfo: Api.User.UserInfo | null
token: string | null
roles: string[]
permissions: string[]
}
// 设置Store状态
export interface SettingStoreState extends SettingState {
// 额外的设置状态
collapsed: boolean
device: 'desktop' | 'mobile'
language: string
}
// 工作标签页Store状态
export interface WorkTabState {
tabs: WorkTab[]
activeTab: string
cachedTabs: string[]
}
// 菜单Store状态
export interface MenuState {
menuList: any[]
isLoaded: boolean
collapsed: boolean
}
// 根Store状态类型
export interface RootState {
user: UserState
setting: SettingStoreState
workTab: WorkTabState
menu: MenuState
}