diff --git a/.eslintrc-auto-import.json b/.eslintrc-auto-import.json index a6661b6..98226d9 100644 --- a/.eslintrc-auto-import.json +++ b/.eslintrc-auto-import.json @@ -1,46 +1,25 @@ { "globals": { - "ComponentInternalInstance": true, - "TransferKey": true, - "ElFormRules": true, - "CheckboxValueType": true, - "PropType": true, - "DateModelType": true, - "UploadFile": true, - "ElFormInstance": true, - "ElTableInstance": true, - "ElTreeInstance": true, - "ElTreeSelectInstance": true, - "ElSelectInstance": true, - "ElUploadInstance": true, - "ElCardInstance": true, - "ElDialogInstance": true, - "ElInputInstance": true, - "ElInputNumberInstance": true, - "ElRadioInstance": true, - "ElRadioGroupInstance": true, - "ElRadioButtonInstance": true, - "ElCheckboxInstance": true, - "ElCheckboxGroupInstance": true, - "ElSwitchInstance": true, - "ElDatePickerInstance": true, - "ElTimePickerInstance": true, - "ElTimeSelectInstance": true, - "ElScrollbarInstance": true, - "ElCascaderInstance": true, - "ElColorPickerInstance": true, - "ElRateInstance": true, - "ElSliderInstance": true, - "useRouter": true, - "useRoute": true, + "Component": true, + "ComponentPublicInstance": true, + "ComputedRef": true, + "DirectiveBinding": true, "EffectScope": true, - "ElTable": true, - "ElSelect": true, - "ElUpload": true, - "ElForm": true, - "ElTree": true, + "ElLoading": true, "ElMessage": true, "ElMessageBox": true, + "ElNotification": true, + "ExtractDefaultPropTypes": true, + "ExtractPropTypes": true, + "ExtractPublicPropTypes": true, + "InjectionKey": true, + "MaybeRef": true, + "MaybeRefOrGetter": true, + "PropType": true, + "Ref": true, + "VNode": true, + "WritableComputedRef": true, + "acceptHMRUpdate": true, "asyncComputed": true, "autoResetRef": true, "computed": true, @@ -54,36 +33,50 @@ "createEventHook": true, "createGlobalState": true, "createInjectionState": true, + "createPinia": true, "createReactiveFn": true, + "createReusableTemplate": true, "createSharedComposable": true, + "createTemplatePromise": true, "createUnrefFn": true, "customRef": true, "debouncedRef": true, "debouncedWatch": true, "defineAsyncComponent": true, "defineComponent": true, + "defineStore": true, "eagerComputed": true, "effectScope": true, "extendRef": true, + "getActivePinia": true, "getCurrentInstance": true, "getCurrentScope": true, "h": true, "ignorableWatch": true, "inject": true, + "injectLocal": true, "isDefined": true, "isProxy": true, "isReactive": true, "isReadonly": true, "isRef": true, "makeDestructurable": true, + "mapActions": true, + "mapGetters": true, + "mapState": true, + "mapStores": true, + "mapWritableState": true, "markRaw": true, "nextTick": true, "onActivated": true, "onBeforeMount": true, + "onBeforeRouteLeave": true, + "onBeforeRouteUpdate": true, "onBeforeUnmount": true, "onBeforeUpdate": true, "onClickOutside": true, "onDeactivated": true, + "onElementRemoval": true, "onErrorCaptured": true, "onKeyStroke": true, "onLongPress": true, @@ -95,8 +88,10 @@ "onStartTyping": true, "onUnmounted": true, "onUpdated": true, + "onWatcherCleanup": true, "pausableWatch": true, "provide": true, + "provideLocal": true, "reactify": true, "reactifyObject": true, "reactive": true, @@ -111,12 +106,14 @@ "refThrottled": true, "refWithControl": true, "resolveComponent": true, - "resolveDirective": true, "resolveRef": true, "resolveUnref": true, + "setActivePinia": true, + "setMapStoreSuffix": true, "shallowReactive": true, "shallowReadonly": true, "shallowRef": true, + "storeToRefs": true, "syncRef": true, "syncRefs": true, "templateRef": true, @@ -126,6 +123,7 @@ "toReactive": true, "toRef": true, "toRefs": true, + "toValue": true, "triggerRef": true, "tryOnBeforeMount": true, "tryOnBeforeUnmount": true, @@ -136,11 +134,14 @@ "unrefElement": true, "until": true, "useActiveElement": true, + "useAnimate": true, + "useArrayDifference": true, "useArrayEvery": true, "useArrayFilter": true, "useArrayFind": true, "useArrayFindIndex": true, "useArrayFindLast": true, + "useArrayIncludes": true, "useArrayJoin": true, "useArrayMap": true, "useArrayReduce": true, @@ -157,9 +158,11 @@ "useBrowserLocation": true, "useCached": true, "useClipboard": true, + "useClipboardItems": true, "useCloned": true, "useColorMode": true, "useConfirmDialog": true, + "useCountdown": true, "useCounter": true, "useCssModule": true, "useCssVar": true, @@ -198,6 +201,7 @@ "useFullscreen": true, "useGamepad": true, "useGeolocation": true, + "useId": true, "useIdle": true, "useImage": true, "useInfiniteScroll": true, @@ -206,6 +210,7 @@ "useIntervalFn": true, "useKeyModifier": true, "useLastChanged": true, + "useLink": true, "useLocalStorage": true, "useMagicKeys": true, "useManualRefHistory": true, @@ -213,6 +218,7 @@ "useMediaQuery": true, "useMemoize": true, "useMemory": true, + "useModel": true, "useMounted": true, "useMouse": true, "useMouseInElement": true, @@ -226,6 +232,8 @@ "useOnline": true, "usePageLeave": true, "useParallax": true, + "useParentElement": true, + "usePerformanceObserver": true, "usePermission": true, "usePointer": true, "usePointerLock": true, @@ -235,10 +243,14 @@ "usePreferredDark": true, "usePreferredLanguages": true, "usePreferredReducedMotion": true, + "usePreferredReducedTransparency": true, "usePrevious": true, "useRafFn": true, "useRefHistory": true, "useResizeObserver": true, + "useRoute": true, + "useRouter": true, + "useSSRWidth": true, "useScreenOrientation": true, "useScreenSafeArea": true, "useScriptTag": true, @@ -256,6 +268,7 @@ "useStyleTag": true, "useSupported": true, "useSwipe": true, + "useTemplateRef": true, "useTemplateRefsList": true, "useTextDirection": true, "useTextSelection": true, @@ -291,8 +304,10 @@ "watchArray": true, "watchAtMost": true, "watchDebounced": true, + "watchDeep": true, "watchEffect": true, "watchIgnorable": true, + "watchImmediate": true, "watchOnce": true, "watchPausable": true, "watchPostEffect": true, @@ -300,13 +315,6 @@ "watchThrottled": true, "watchTriggerable": true, "watchWithFilter": true, - "whenever": true, - "ImportOption": true, - "TreeType": true, - "FieldOption": true, - "PageData": true, - "storeToRefs": true, - "DictDataOption": true, - "UploadOption": true + "whenever": true } } diff --git a/eslint.config.js b/eslint.config.js deleted file mode 100644 index 8b67e9e..0000000 --- a/eslint.config.js +++ /dev/null @@ -1,86 +0,0 @@ -import globals from 'globals'; -import pluginJs from '@eslint/js'; -import tseslint from 'typescript-eslint'; -import pluginVue from 'eslint-plugin-vue'; -import { readFile } from 'node:fs/promises'; -import prettier from 'eslint-plugin-prettier'; - -/** - * https://blog.csdn.net/sayUonly/article/details/123482912 - * 自动导入的配置 - */ -const autoImportFile = new URL('./.eslintrc-auto-import.json', import.meta.url); -const autoImportGlobals = JSON.parse(await readFile(autoImportFile, 'utf8')); - -/** @type {import('eslint').Linter.Config[]} */ -export default [ - { - /** - * 不需要.eslintignore文件 而是在这里配置 - */ - ignores: [ - '*.sh', - 'node_modules', - '*.md', - '*.woff', - '*.ttf', - '.vscode', - '.idea', - 'dist', - '/public', - '/docs', - '.husky', - '.local', - '/bin', - '.eslintrc.cjs', - 'prettier.config.js', - 'src/assets', - 'tailwind.config.js' - ] - }, - { files: ['**/*.{js,mjs,cjs,ts,vue}'] }, - { - languageOptions: { - globals: globals.browser - } - }, - pluginJs.configs.recommended, - ...tseslint.configs.recommended, - ...pluginVue.configs['flat/essential'], - { - files: ['**/*.vue'], - languageOptions: { - parserOptions: { - parser: tseslint.parser - } - } - }, - { - languageOptions: { - globals: { - // 自动导入的配置 undef - ...autoImportGlobals.globals, - DialogOption: 'readonly', - LayoutSetting: 'readonly' - } - }, - plugins: { prettier }, - rules: { - '@typescript-eslint/no-empty-function': 'off', - '@typescript-eslint/no-explicit-any': 'off', - '@typescript-eslint/no-unused-vars': 'off', - '@typescript-eslint/no-this-alias': 'off', - - // vue - 'vue/multi-word-component-names': 'off', - 'vue/valid-define-props': 'off', - 'vue/no-v-model-argument': 'off', - 'prefer-rest-params': 'off', - // prettier - 'prettier/prettier': 'error', - // 允许使用空Object类型 {} - '@typescript-eslint/no-empty-object-type': 'off', - '@typescript-eslint/no-unused-expressions': 'off' - } - } -]; diff --git a/eslint.config.ts b/eslint.config.ts new file mode 100644 index 0000000..50458d1 --- /dev/null +++ b/eslint.config.ts @@ -0,0 +1,44 @@ +import pluginVue from 'eslint-plugin-vue'; +import globals from 'globals'; +import prettier from 'eslint-plugin-prettier'; +import { defineConfigWithVueTs, vueTsConfigs } from '@vue/eslint-config-typescript'; +import skipFormatting from '@vue/eslint-config-prettier/skip-formatting'; + +export default defineConfigWithVueTs( + { + name: 'app/files-to-lint', + files: ['**/*.{js,cjs,ts,mts,tsx,vue}'] + }, + + { + name: 'app/files-to-ignore', + ignores: ['**/dist/**', '**/dist-ssr/**', '**/coverage/**'] + }, + { + languageOptions: { + globals: globals.browser + } + }, + pluginVue.configs['flat/essential'], + vueTsConfigs.recommended, + skipFormatting, + { + plugins: { prettier }, + rules: { + '@typescript-eslint/no-empty-function': 'off', + '@typescript-eslint/no-explicit-any': 'off', + '@typescript-eslint/no-unused-vars': 'off', + '@typescript-eslint/no-this-alias': 'off', + // vue + 'vue/multi-word-component-names': 'off', + 'vue/valid-define-props': 'off', + 'vue/no-v-model-argument': 'off', + 'prefer-rest-params': 'off', + // prettier + 'prettier/prettier': 'error', + // 允许使用空Object类型 {} + '@typescript-eslint/no-empty-object-type': 'off', + '@typescript-eslint/no-unused-expressions': 'off' + } + } +); diff --git a/package.json b/package.json index 26d0862..5edbf92 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { - "$schema": "https://json.schemastore.org/tsconfig", + "$schema": "https://json.schemastore.org/package", "name": "ruoyi-vue-plus", - "version": "5.3.0", + "version": "5.3.1-BETA_2.3.0-BETA", "description": "RuoYi-Vue-Plus多租户管理系统", "author": "LionLi", "license": "MIT", @@ -23,13 +23,11 @@ "@element-plus/icons-vue": "2.3.1", "@highlightjs/vue-plugin": "2.1.0", "@vueup/vue-quill": "1.2.0", - "@vueuse/core": "11.3.0", + "@vueuse/core": "12.7.0", "animate.css": "4.1.1", "await-to-js": "3.0.0", "axios": "1.7.8", "crypto-js": "4.2.0", - "diagram-js": "12.3.0", - "didi": "9.0.2", "echarts": "5.5.0", "element-plus": "2.8.8", "file-saver": "2.0.5", @@ -50,38 +48,47 @@ "vxe-table": "4.5.22" }, "devDependencies": { - "@eslint/js": "9.15.0", "@iconify/json": "2.2.276", "@types/crypto-js": "4.2.2", "@types/file-saver": "2.0.7", "@types/js-cookie": "3.0.6", - "@types/node": "18.18.2", + "@types/node": "^22.13.4", "@types/nprogress": "0.2.3", - "@unocss/preset-attributify": "0.64.1", - "@unocss/preset-icons": "0.64.1", - "@unocss/preset-uno": "0.64.1", - "@vitejs/plugin-vue": "5.0.4", + "@unocss/preset-attributify": "66.0.0", + "@unocss/preset-icons": "66.0.0", + "@unocss/preset-uno": "66.0.0", + "@vitejs/plugin-vue": "5.2.1", "@vue/compiler-sfc": "3.4.23", - "autoprefixer": "10.4.18", - "eslint": "9.15.0", - "eslint-plugin-prettier": "^5.2.1", - "eslint-plugin-vue": "9.31.0", - "fast-glob": "3.3.2", - "globals": "15.12.0", - "postcss": "8.4.36", - "prettier": "3.2.5", - "sass": "1.72.0", - "typescript": "5.7.2", - "typescript-eslint": "8.16.0", - "unocss": "0.64.1", + "@vue/eslint-config-prettier": "10.2.0", + "@vue/eslint-config-typescript": "14.4.0", + "autoprefixer": "10.4.20", + "eslint": "9.21.0", + "eslint-plugin-prettier": "5.2.3", + "eslint-plugin-vue": "9.32.0", + "globals": "16.0.0", + "prettier": "3.5.2", + "sass": "1.84.0", + "typescript": "~5.7.3", + "unocss": "66.0.0", "unplugin-auto-import": "0.17.5", "unplugin-icons": "0.18.5", - "unplugin-vue-components": "0.26.0", + "unplugin-vue-components": "28.0.0", "unplugin-vue-setup-extend-plus": "1.0.1", "vite": "5.4.11", "vite-plugin-compression": "0.5.1", - "vite-plugin-svg-icons": "2.0.1", - "vitest": "1.5.0", - "vue-tsc": "2.0.13" - } + "vite-plugin-svg-icons-ng": "^1.2.2", + "vite-plugin-vue-devtools": "7.7.1", + "vitest": "3.0.5", + "vue-tsc": "^2.2.2" + }, + "engines": { + "node": ">=18.18.0", + "npm": ">=8.9.0" + }, + "browserslist": [ + "Chrome >= 87", + "Edge >= 88", + "Safari >= 14", + "Firefox >= 78" + ] } diff --git a/src/App.vue b/src/App.vue index 66dbed6..617a10e 100644 --- a/src/App.vue +++ b/src/App.vue @@ -5,9 +5,9 @@ - diff --git a/src/directive/permission/index.ts b/src/directive/permission/index.ts index eb2dccc..c66da22 100644 --- a/src/directive/permission/index.ts +++ b/src/directive/permission/index.ts @@ -1,5 +1,5 @@ import { Directive, DirectiveBinding } from 'vue'; -import useUserStore from '@/store/modules/user'; +import { useUserStore } from '@/store/modules/user'; /** * 操作权限处理 */ diff --git a/src/layout/components/AppMain.vue b/src/layout/components/AppMain.vue index 0d402f2..f27a37f 100644 --- a/src/layout/components/AppMain.vue +++ b/src/layout/components/AppMain.vue @@ -1,12 +1,12 @@ - diff --git a/src/views/system/role/index.vue b/src/views/system/role/index.vue index fc42cd5..9f0ea11 100644 --- a/src/views/system/role/index.vue +++ b/src/views/system/role/index.vue @@ -135,7 +135,7 @@ node-key="id" :check-strictly="!form.menuCheckStrictly" empty-text="加载中,请稍候" - :props="{ label: 'label', children: 'children' }" + :props="{ label: 'label', children: 'children' } as any" > @@ -177,7 +177,7 @@ node-key="id" :check-strictly="!form.deptCheckStrictly" empty-text="加载中,请稍候" - :props="{ label: 'label', children: 'children' }" + :props="{ label: 'label', children: 'children' } as any" > diff --git a/src/views/system/role/selectUser.vue b/src/views/system/role/selectUser.vue index e55120a..12df828 100644 --- a/src/views/system/role/selectUser.vue +++ b/src/views/system/role/selectUser.vue @@ -128,5 +128,3 @@ defineExpose({ show }); - - diff --git a/src/views/system/tenant/index.vue b/src/views/system/tenant/index.vue index df97b64..1e3ff81 100644 --- a/src/views/system/tenant/index.vue +++ b/src/views/system/tenant/index.vue @@ -155,7 +155,7 @@ import { syncTenantDict } from '@/api/system/tenant'; import { selectTenantPackage } from '@/api/system/tenantPackage'; -import useUserStore from '@/store/modules/user'; +import { useUserStore } from '@/store/modules/user'; import { TenantForm, TenantQuery, TenantVO } from '@/api/system/tenant/types'; import { TenantPkgVO } from '@/api/system/tenantPackage/types'; diff --git a/src/views/system/tenantPackage/index.vue b/src/views/system/tenantPackage/index.vue index f97bb35..1609b6d 100644 --- a/src/views/system/tenantPackage/index.vue +++ b/src/views/system/tenantPackage/index.vue @@ -82,7 +82,7 @@ node-key="id" :check-strictly="!form.menuCheckStrictly" empty-text="加载中,请稍候" - :props="{ label: 'label', children: 'children' }" + :props="{ label: 'label', children: 'children' } as any" > diff --git a/src/views/system/user/index.vue b/src/views/system/user/index.vue index 430c55a..fdc5018 100644 --- a/src/views/system/user/index.vue +++ b/src/views/system/user/index.vue @@ -10,7 +10,7 @@ class="mt-2" node-key="id" :data="deptOptions" - :props="{ label: 'label', children: 'children' }" + :props="{ label: 'label', children: 'children' } as any" :expand-on-click-node="false" :filter-node-method="filterNode" highlight-current @@ -81,8 +81,9 @@ @@ -155,7 +156,7 @@ import api from '@/api/system/user'; import { UserForm, UserQuery, UserVO } from '@/api/system/user/types'; -import {DeptTreeVO, DeptVO} from '@/api/system/dept/types'; +import { DeptTreeVO, DeptVO } from '@/api/system/dept/types'; import { RoleVO } from '@/api/system/role/types'; import { PostQuery, PostVO } from '@/api/system/post/types'; import { treeselect } from '@/api/system/dept'; import { globalHeaders } from '@/utils/request'; import { to } from 'await-to-js'; import { optionselect } from '@/api/system/post'; +import { hasPermi } from '@/directive/permission'; +import { checkPermi } from '@/utils/permission'; const router = useRouter(); const { proxy } = getCurrentInstance() as ComponentInternalInstance; @@ -450,7 +453,7 @@ const getDeptTree = async () => { /** 过滤禁用的部门 */ const filterDisabledDept = (deptList: DeptTreeVO[]) => { - return deptList.filter(dept => { + return deptList.filter((dept) => { if (dept.disabled) { return false; } @@ -660,5 +663,3 @@ async function handleDeptChange(value: number | string) { form.value.postIds = []; } - - diff --git a/src/views/system/user/profile/onlineDevice.vue b/src/views/system/user/profile/onlineDevice.vue index 7634b06..b884446 100644 --- a/src/views/system/user/profile/onlineDevice.vue +++ b/src/views/system/user/profile/onlineDevice.vue @@ -26,7 +26,7 @@ - -