From 15db5e8db3af3d999db0d7ab1c7cf92f9f1446e1 Mon Sep 17 00:00:00 2001 From: kailong321200875 <321200875@qq.com> Date: Thu, 18 Jul 2024 16:56:42 +0800 Subject: [PATCH] =?UTF-8?q?chore:=20=E6=9B=B4=E6=96=B0eslint?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .eslintignore | 8 -- .eslintrc.cjs | 71 ---------------- .husky/commit-msg | 2 +- .husky/pre-commit | 2 +- eslint.config.mjs | 81 +++++++++++++++++++ package.json | 67 +++++++-------- .../Descriptions/src/Descriptions.vue | 4 +- .../Table/src/components/ColumnSetting.vue | 2 +- .../UserInfo/src/components/LockPage.vue | 2 +- src/layout/Layout.vue | 5 +- src/utils/index.ts | 1 - src/views/Components/Table/CardTable.vue | 2 +- src/views/Components/Table/DefaultTable.vue | 2 +- .../Components/Table/TableImagePreview.vue | 2 +- .../Components/Table/TableVideoPreview.vue | 2 +- src/views/Dashboard/Workplace.vue | 2 +- src/views/Example/Page/ExampleAdd.vue | 1 - types/env.d.ts | 2 +- vite.config.ts | 2 + 19 files changed, 130 insertions(+), 130 deletions(-) delete mode 100644 .eslintignore delete mode 100644 .eslintrc.cjs create mode 100644 eslint.config.mjs diff --git a/.eslintignore b/.eslintignore deleted file mode 100644 index 1e85c0f..0000000 --- a/.eslintignore +++ /dev/null @@ -1,8 +0,0 @@ -/build/ -/config/ -/dist/ -/*.js -/test/unit/coverage/ -/node_modules/* -/dist* -/src/main.ts diff --git a/.eslintrc.cjs b/.eslintrc.cjs deleted file mode 100644 index 8068163..0000000 --- a/.eslintrc.cjs +++ /dev/null @@ -1,71 +0,0 @@ -// @ts-check -const { defineConfig } = require('eslint-define-config') -module.exports = defineConfig({ - root: true, - env: { - browser: true, - node: true, - es6: true - }, - parser: 'vue-eslint-parser', - parserOptions: { - parser: '@typescript-eslint/parser', - ecmaVersion: 2020, - sourceType: 'module', - jsxPragma: 'React', - ecmaFeatures: { - jsx: true - } - }, - extends: [ - 'plugin:vue/vue3-recommended', - 'plugin:@typescript-eslint/recommended', - 'prettier', - 'plugin:prettier/recommended' - ], - rules: { - 'vue/no-setup-props-destructure': 'off', - 'vue/script-setup-uses-vars': 'error', - 'vue/no-reserved-component-names': 'off', - '@typescript-eslint/ban-ts-ignore': 'off', - '@typescript-eslint/explicit-function-return-type': 'off', - '@typescript-eslint/no-explicit-any': 'off', - '@typescript-eslint/no-var-requires': 'off', - '@typescript-eslint/no-empty-function': 'off', - 'vue/custom-event-name-casing': 'off', - 'no-use-before-define': 'off', - '@typescript-eslint/no-use-before-define': 'off', - '@typescript-eslint/ban-ts-comment': 'off', - '@typescript-eslint/ban-types': 'off', - '@typescript-eslint/no-non-null-assertion': 'off', - '@typescript-eslint/explicit-module-boundary-types': 'off', - '@typescript-eslint/no-unused-vars': 'off', - 'no-unused-vars': 'off', - 'space-before-function-paren': 'off', - - 'vue/attributes-order': 'off', - 'vue/one-component-per-file': 'off', - 'vue/html-closing-bracket-newline': 'off', - 'vue/max-attributes-per-line': 'off', - 'vue/multiline-html-element-content-newline': 'off', - 'vue/singleline-html-element-content-newline': 'off', - 'vue/attribute-hyphenation': 'off', - 'vue/require-default-prop': 'off', - 'vue/require-explicit-emits': 'off', - 'vue/html-self-closing': [ - 'error', - { - html: { - void: 'always', - normal: 'never', - component: 'always' - }, - svg: 'always', - math: 'always' - } - ], - 'vue/multi-word-component-names': 'off', - 'vue/no-v-html': 'off', - 'vue/require-toggle-inside-transition': 'off' - } -}) diff --git a/.husky/commit-msg b/.husky/commit-msg index 10cb551..c00eb35 100755 --- a/.husky/commit-msg +++ b/.husky/commit-msg @@ -1,4 +1,4 @@ #!/bin/sh -. "$(dirname "$0")/_/husky.sh" +. "$(dirname "$0")/husky.sh" pnpm commitlint --edit "$1" diff --git a/.husky/pre-commit b/.husky/pre-commit index a6a2318..ae8ae36 100755 --- a/.husky/pre-commit +++ b/.husky/pre-commit @@ -1,5 +1,5 @@ #!/bin/sh -. "$(dirname "$0")/_/husky.sh" +. "$(dirname "$0")/husky.sh" [ -n "$CI" ] && exit 0 diff --git a/eslint.config.mjs b/eslint.config.mjs new file mode 100644 index 0000000..6c8a81f --- /dev/null +++ b/eslint.config.mjs @@ -0,0 +1,81 @@ +// 引入vue模版的eslint +import pluginVue from 'eslint-plugin-vue' +import eslint from '@eslint/js' +// ts-eslint解析器,使 eslint 可以解析 ts 语法 +import tseslint from 'typescript-eslint' +// vue文件解析器 +import vueParser from 'vue-eslint-parser' +import prettier from 'eslint-plugin-prettier' + +export default tseslint.config({ + // ignores: ['node_modules', 'prettier.config.cjs', 'dist*'], + files: ['src/**/*.ts', 'src/**/*.tsx', 'src/**/*.vue'], + // tseslint.config添加了extends扁平函数,直接用。否则是eslint9.0版本是没有extends的 + extends: [ + eslint.configs.recommended, + ...tseslint.configs.recommended, + ...pluginVue.configs['flat/essential'] + ], + plugins: { + prettier + }, + languageOptions: { + parser: vueParser, // 使用vue解析器,这个可以识别vue文件 + parserOptions: { + parser: tseslint.parser, // 在vue文件上使用ts解析器 + sourceType: 'module', + ecmaVersion: 2020, + ecmaFeatures: { + jsx: true + } + } + }, + rules: { + 'prettier/prettier': 'error', + 'no-useless-escape': 0, + 'no-undef': 0, + 'vue/no-setup-props-destructure': 0, + 'vue/script-setup-uses-vars': 1, + 'vue/no-reserved-component-names': 0, + '@typescript-eslint/ban-ts-ignore': 0, + '@typescript-eslint/explicit-function-return-type': 0, + '@typescript-eslint/no-explicit-any': 0, + '@typescript-eslint/no-var-requires': 0, + '@typescript-eslint/no-empty-function': 0, + 'vue/custom-event-name-casing': 0, + 'no-use-before-define': 0, + '@typescript-eslint/no-use-before-define': 0, + '@typescript-eslint/ban-ts-comment': 0, + '@typescript-eslint/ban-types': 0, + '@typescript-eslint/no-non-null-assertion': 0, + '@typescript-eslint/explicit-module-boundary-types': 0, + '@typescript-eslint/no-unused-vars': 0, + 'no-unused-vars': 0, + 'space-before-function-paren': 0, + + 'vue/attributes-order': 0, + 'vue/one-component-per-file': 0, + 'vue/html-closing-bracket-newline': 0, + 'vue/max-attributes-per-line': 0, + 'vue/multiline-html-element-content-newline': 0, + 'vue/singleline-html-element-content-newline': 0, + 'vue/attribute-hyphenation': 0, + 'vue/require-default-prop': 0, + 'vue/require-explicit-emits': 0, + 'vue/html-self-closing': [ + 1, + { + html: { + void: 'always', + normal: 'never', + component: 'always' + }, + svg: 'always', + math: 'always' + } + ], + 'vue/multi-word-component-names': 0, + 'vue/no-v-html': 0, + 'vue/require-toggle-inside-transition': 0 + } +}) diff --git a/package.json b/package.json index c5d80bf..9bed0cf 100644 --- a/package.json +++ b/package.json @@ -19,7 +19,7 @@ "npm:check": "pnpx npm-check-updates -u", "clean": "pnpx rimraf node_modules", "clean:cache": "pnpx rimraf node_modules/.cache", - "lint:eslint": "eslint --fix --ext .js,.ts,.vue ./src", + "lint:eslint": "eslint . --fix \"src/**/*.{js,ts,tsx,vue,html}\"", "lint:format": "prettier --write --loglevel warn \"src/**/*.{js,ts,json,tsx,css,less,vue,html,md}\"", "lint:style": "stylelint --fix \"**/*.{vue,less,postcss,css,scss}\" --cache --cache-location node_modules/.cache/stylelint/", "lint:lint-staged": "lint-staged -c ./.husky/lintstagedrc.cjs", @@ -30,7 +30,7 @@ "dependencies": { "@iconify/iconify": "^3.1.1", "@iconify/vue": "^4.1.2", - "@vueuse/core": "^10.10.0", + "@vueuse/core": "^10.11.0", "@wangeditor/editor": "^5.1.23", "@wangeditor/editor-for-vue": "^5.1.10", "@zxcvbn-ts/core": "^3.0.4", @@ -39,78 +39,79 @@ "cropperjs": "^1.6.2", "dayjs": "^1.11.11", "driver.js": "^1.3.1", - "echarts": "^5.5.0", + "echarts": "^5.5.1", "echarts-wordcloud": "^2.1.0", - "element-plus": "2.7.4", + "element-plus": "2.7.7", "lodash-es": "^4.17.21", "mitt": "^3.0.1", - "monaco-editor": "^0.49.0", + "monaco-editor": "^0.50.0", "nprogress": "^0.2.0", "pinia": "^2.1.7", "pinia-plugin-persistedstate": "^3.2.1", "qrcode": "^1.5.3", - "qs": "^6.12.1", + "qs": "^6.12.3", "url": "^0.11.3", - "vue": "3.4.27", - "vue-draggable-plus": "^0.5.0", + "vue": "3.4.32", + "vue-draggable-plus": "^0.5.2", "vue-i18n": "9.13.1", "vue-json-pretty": "^2.4.0", - "vue-router": "^4.3.2", - "vue-types": "^5.1.2", + "vue-router": "^4.4.0", + "vue-types": "^5.1.3", "xgplayer": "^3.0.18" }, "devDependencies": { "@commitlint/cli": "^19.3.0", "@commitlint/config-conventional": "^19.2.2", - "@iconify/json": "^2.2.215", + "@iconify/json": "^2.2.229", "@intlify/unplugin-vue-i18n": "^4.0.0", "@types/fs-extra": "^11.0.4", "@types/inquirer": "^9.0.7", "@types/lodash-es": "^4.17.12", "@types/mockjs": "^1.0.10", - "@types/node": "^20.13.0", + "@types/node": "^20.14.11", "@types/nprogress": "^0.2.3", "@types/qrcode": "^1.5.5", "@types/qs": "^6.9.15", "@types/sortablejs": "^1.15.8", - "@typescript-eslint/eslint-plugin": "^7.11.0", - "@typescript-eslint/parser": "^7.11.0", - "@unocss/transformer-variant-group": "^0.60.4", + "@typescript-eslint/eslint-plugin": "^7.16.1", + "@typescript-eslint/parser": "^7.16.1", + "@unocss/transformer-variant-group": "^0.61.5", "@vitejs/plugin-legacy": "^5.4.1", "@vitejs/plugin-vue": "^5.0.5", "@vitejs/plugin-vue-jsx": "^4.0.0", "autoprefixer": "^10.4.19", "chalk": "^5.3.0", "consola": "^3.2.3", - "eslint": "^8.57.0", + "eslint": "^9.7.0", "eslint-config-prettier": "^9.1.0", "eslint-define-config": "^2.1.0", - "eslint-plugin-prettier": "^5.1.3", - "eslint-plugin-vue": "^9.26.0", + "eslint-plugin-prettier": "^5.2.1", + "eslint-plugin-vue": "^9.27.0", "esno": "^4.7.0", "fs-extra": "^11.2.0", - "husky": "^9.0.11", - "inquirer": "^9.2.23", + "husky": "^9.1.0", + "inquirer": "^10.0.3", "less": "^4.2.0", - "lint-staged": "^15.2.5", + "lint-staged": "^15.2.7", "mockjs": "^1.1.0", "plop": "^4.0.1", - "postcss": "^8.4.38", + "postcss": "^8.4.39", "postcss-html": "^1.7.0", "postcss-less": "^6.0.0", - "prettier": "^3.2.5", - "rimraf": "^5.0.7", - "rollup": "^4.18.0", + "prettier": "^3.3.3", + "rimraf": "^6.0.1", + "rollup": "^4.18.1", "rollup-plugin-visualizer": "^5.12.0", - "stylelint": "^16.6.1", + "stylelint": "^16.7.0", "stylelint-config-html": "^1.1.0", - "stylelint-config-recommended": "^14.0.0", - "stylelint-config-standard": "^36.0.0", + "stylelint-config-recommended": "^14.0.1", + "stylelint-config-standard": "^36.0.1", "stylelint-order": "^6.0.4", - "terser": "^5.31.0", - "typescript": "5.4.5", - "unocss": "^0.60.4", - "vite": "5.2.12", + "terser": "^5.31.3", + "typescript": "5.5.3", + "typescript-eslint": "^7.16.1", + "unocss": "^0.61.5", + "vite": "5.3.4", "vite-plugin-ejs": "^1.7.0", "vite-plugin-eslint": "^1.8.1", "vite-plugin-mock": "2.9.6", @@ -119,7 +120,7 @@ "vite-plugin-style-import": "2.0.0", "vite-plugin-svg-icons": "^2.0.1", "vite-plugin-url-copy": "^1.1.4", - "vue-tsc": "^2.0.19" + "vue-tsc": "^2.0.26" }, "packageManager": "pnpm@8.1.0", "engines": { diff --git a/src/components/Descriptions/src/Descriptions.vue b/src/components/Descriptions/src/Descriptions.vue index 2c773b8..a4b222b 100644 --- a/src/components/Descriptions/src/Descriptions.vue +++ b/src/components/Descriptions/src/Descriptions.vue @@ -133,7 +133,7 @@ export default defineComponent({
{item.slots?.default ? item.slots?.default(props.data) - : get(props.data, item.field) ?? defaultData} + : (get(props.data, item.field) ?? defaultData)}
) : ( @@ -147,7 +147,7 @@ export default defineComponent({
{item.slots?.default ? item.slots?.default(props.data) - : get(props.data, item.field) ?? defaultData} + : (get(props.data, item.field) ?? defaultData)}
)} diff --git a/src/components/Table/src/components/ColumnSetting.vue b/src/components/Table/src/components/ColumnSetting.vue index bda3545..35595f9 100644 --- a/src/components/Table/src/components/ColumnSetting.vue +++ b/src/components/Table/src/components/ColumnSetting.vue @@ -50,7 +50,7 @@ const handleCheckedColumnsChange = (value: string[]) => { const confirm = () => { const newColumns = cloneDeep(unref(settingColumns))?.map((item) => { const fixed = unref(settingColumns)?.find((col) => col.field === item.field)?.fixed - item.hidden = !!!unref(checkColumns)?.includes(item.field) + item.hidden = !unref(checkColumns)?.includes(item.field) item.fixed = fixed ? fixed : undefined return item }) diff --git a/src/components/UserInfo/src/components/LockPage.vue b/src/components/UserInfo/src/components/LockPage.vue index cfa44cc..1e5c9ef 100644 --- a/src/components/UserInfo/src/components/LockPage.vue +++ b/src/components/UserInfo/src/components/LockPage.vue @@ -37,7 +37,7 @@ async function unLock() { if (!password.value) { return } - let pwd = password.value + const pwd = password.value try { loading.value = true const res = await lockStore.unLock(pwd) diff --git a/src/layout/Layout.vue b/src/layout/Layout.vue index c807392..a498345 100644 --- a/src/layout/Layout.vue +++ b/src/layout/Layout.vue @@ -27,18 +27,15 @@ const handleClickOutside = () => { } const renderLayout = () => { + const { renderClassic, renderTopLeft, renderTop, renderCutMenu } = useRenderLayout() switch (unref(layout)) { case 'classic': - const { renderClassic } = useRenderLayout() return renderClassic() case 'topLeft': - const { renderTopLeft } = useRenderLayout() return renderTopLeft() case 'top': - const { renderTop } = useRenderLayout() return renderTop() case 'cutMenu': - const { renderCutMenu } = useRenderLayout() return renderCutMenu() default: break diff --git a/src/utils/index.ts b/src/utils/index.ts index de17305..d91b679 100644 --- a/src/utils/index.ts +++ b/src/utils/index.ts @@ -54,7 +54,6 @@ export const getCssVar = (prop: string, dom = document.documentElement) => { * @param {Array} ary 查找的数组 * @param {Functon} fn 判断的方法 */ -// eslint-disable-next-line export const findIndex = (ary: Array, fn: Fn): number => { if (ary.findIndex) { return ary.findIndex(fn) diff --git a/src/views/Components/Table/CardTable.vue b/src/views/Components/Table/CardTable.vue index 19849f1..f07059d 100644 --- a/src/views/Components/Table/CardTable.vue +++ b/src/views/Components/Table/CardTable.vue @@ -15,7 +15,7 @@ const { t } = useI18n() const loading = ref(true) -let tableDataList = ref([]) +const tableDataList = ref([]) const getTableList = async (params?: Params) => { const res = await getCardTableListApi( diff --git a/src/views/Components/Table/DefaultTable.vue b/src/views/Components/Table/DefaultTable.vue index 974c896..1d9124a 100644 --- a/src/views/Components/Table/DefaultTable.vue +++ b/src/views/Components/Table/DefaultTable.vue @@ -68,7 +68,7 @@ const columns: TableColumn[] = [ const loading = ref(true) -let tableDataList = ref([]) +const tableDataList = ref([]) const getTableList = async (params?: Params) => { const res = await getTableListApi( diff --git a/src/views/Components/Table/TableImagePreview.vue b/src/views/Components/Table/TableImagePreview.vue index 97b6c17..ded2d6d 100644 --- a/src/views/Components/Table/TableImagePreview.vue +++ b/src/views/Components/Table/TableImagePreview.vue @@ -54,7 +54,7 @@ const columns: TableColumn[] = [ const loading = ref(true) -let tableDataList = ref([]) +const tableDataList = ref([]) const getTableList = async (params?: Params) => { const res = await getTableListApi( diff --git a/src/views/Components/Table/TableVideoPreview.vue b/src/views/Components/Table/TableVideoPreview.vue index 94aafc4..a6607b0 100644 --- a/src/views/Components/Table/TableVideoPreview.vue +++ b/src/views/Components/Table/TableVideoPreview.vue @@ -38,7 +38,7 @@ const columns: TableColumn[] = [ const loading = ref(true) -let tableDataList = ref([]) +const tableDataList = ref([]) const getTableList = async (params?: Params) => { const res = await getTableListApi( diff --git a/src/views/Dashboard/Workplace.vue b/src/views/Dashboard/Workplace.vue index d8adac7..4e0bd80 100644 --- a/src/views/Dashboard/Workplace.vue +++ b/src/views/Dashboard/Workplace.vue @@ -66,7 +66,7 @@ const getTeam = async () => { } // 获取指数 -let radarOptionData = reactive(radarOption) as EChartsOption +const radarOptionData = reactive(radarOption) as EChartsOption const getRadar = async () => { const res = await getRadarApi().catch(() => {}) diff --git a/src/views/Example/Page/ExampleAdd.vue b/src/views/Example/Page/ExampleAdd.vue index 1c4e3b8..fbe7460 100644 --- a/src/views/Example/Page/ExampleAdd.vue +++ b/src/views/Example/Page/ExampleAdd.vue @@ -49,4 +49,3 @@ const save = async () => { -@/hooks/event/useEventBus diff --git a/types/env.d.ts b/types/env.d.ts index 6687edd..3811725 100644 --- a/types/env.d.ts +++ b/types/env.d.ts @@ -2,7 +2,7 @@ declare module '*.vue' { import { DefineComponent } from 'vue' - // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/ban-types + const component: DefineComponent<{}, {}, any> export default component } diff --git a/vite.config.ts b/vite.config.ts index 72b788a..749c3c1 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -61,6 +61,8 @@ export default ({ command, mode }: ConfigEnv): UserConfig => { : undefined, EslintPlugin({ cache: false, + failOnWarning: false, + failOnError: false, include: ['src/**/*.vue', 'src/**/*.ts', 'src/**/*.tsx'] // 检查的文件 }), VueI18nPlugin({