兰宝车间质量管理系统-前端
!159 eslint升级v9版本
* update: eslint升级v9版本 & 更新一些不符合校验规则的代码
已添加1个文件
已删除1个文件
已修改7个文件
138 ■■■■ 文件已修改
.eslintignore 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eslint.config.js 86 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
package.json 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/layout/components/TopBar/search.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/permission.ts 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/register.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/system/user/index.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/system/user/profile/resetPwd.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/tool/gen/importTable.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
.eslintignore
ÎļþÒÑɾ³ý
eslint.config.js
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,86 @@
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'
    }
  }
];
package.json
@@ -1,4 +1,5 @@
{
  "$schema": "https://json.schemastore.org/tsconfig",
  "name": "ruoyi-vue-plus",
  "version": "5.2.3",
  "description": "RuoYi-Vue-Plus多租户管理系统",
@@ -10,7 +11,8 @@
    "build:prod": "vite build --mode production",
    "build:dev": "vite build --mode development",
    "preview": "vite preview",
    "lint:eslint": "eslint  --fix --ext .ts,.js,.vue ./src ",
    "lint:eslint": "eslint",
    "lint:eslint:fix": "eslint --fix",
    "prettier": "prettier --write ."
  },
  "repository": {
@@ -34,7 +36,7 @@
    "file-saver": "2.0.5",
    "fuse.js": "7.0.0",
    "highlight.js": "11.9.0",
    "image-conversion": "^2.1.1",
    "image-conversion": "2.1.1",
    "js-cookie": "3.0.5",
    "jsencrypt": "3.3.2",
    "nprogress": "0.2.0",
@@ -49,6 +51,7 @@
    "vxe-table": "4.5.22"
  },
  "devDependencies": {
    "@eslint/js": "9.15.0",
    "@iconify/json": "2.2.276",
    "@intlify/unplugin-vue-i18n": "3.0.1",
    "@types/crypto-js": "4.2.2",
@@ -56,27 +59,22 @@
    "@types/js-cookie": "3.0.6",
    "@types/node": "18.18.2",
    "@types/nprogress": "0.2.3",
    "@typescript-eslint/eslint-plugin": "7.18.0",
    "@typescript-eslint/parser": "7.18.0",
    "@unocss/preset-attributify": "0.64.1",
    "@unocss/preset-icons": "0.64.1",
    "@unocss/preset-uno": "0.64.1",
    "@vitejs/plugin-vue": "5.0.4",
    "@vue/compiler-sfc": "3.4.23",
    "autoprefixer": "10.4.18",
    "eslint": "8.57.0",
    "eslint-config-prettier": "9.1.0",
    "eslint-define-config": "2.1.0",
    "eslint-plugin-import": "2.31.0",
    "eslint-plugin-node": "11.1.0",
    "eslint-plugin-prettier": "5.2.1",
    "eslint-plugin-promise": "7.2.0",
    "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",
    "unplugin-auto-import": "0.17.5",
    "unplugin-icons": "0.18.5",
@@ -86,7 +84,6 @@
    "vite-plugin-compression": "0.5.1",
    "vite-plugin-svg-icons": "2.0.1",
    "vitest": "1.5.0",
    "vue-eslint-parser": "9.4.2",
    "vue-tsc": "2.0.13"
  }
}
src/layout/components/TopBar/search.vue
@@ -66,7 +66,7 @@
  state.isShowSearch = false;
};
// èœå•搜索数据过滤
const menuSearch = (queryString: string, cb: Function) => {
const menuSearch = (queryString: string, cb: (options: any[]) => void) => {
  let options = state.menuList.filter((item) => {
    return item.title.indexOf(queryString) > -1;
  });
src/permission.ts
@@ -40,7 +40,7 @@
              router.addRoute(route); // åŠ¨æ€æ·»åŠ å¯è®¿é—®è·¯ç”±è¡¨
            }
          });
          // @ts-ignore
          // @ts-expect-error hack方法 ç¡®ä¿addRoutes已完成
          next({ path: to.path, replace: true, params: to.params, query: to.query, hash: to.hash, name: to.name as string }); // hack方法 ç¡®ä¿addRoutes已完成
        }
      } else {
src/views/register.vue
@@ -92,7 +92,7 @@
  password: [
    { required: true, trigger: 'blur', message: '请输入您的密码' },
    { min: 5, max: 20, message: '用户密码长度必须介于 5 å’Œ 20 ä¹‹é—´', trigger: 'blur' },
    { pattern: /^[^<>"'|\\]+$/, message: '不能包含非法字符:< > " \' \\\ |', trigger: 'blur' }
    { pattern: /^[^<>"'|\\]+$/, message: '不能包含非法字符:< > " \' \\ |', trigger: 'blur' }
  ],
  confirmPassword: [
    { required: true, trigger: 'blur', message: '请再次输入您的密码' },
src/views/system/user/index.vue
@@ -393,7 +393,7 @@
        message: '用户密码长度必须介于 5 å’Œ 20 ä¹‹é—´',
        trigger: 'blur'
      },
      { pattern: /^[^<>"'|\\]+$/, message: '不能包含非法字符:< > " \' \\\ |', trigger: 'blur' }
      { pattern: /^[^<>"'|\\]+$/, message: '不能包含非法字符:< > " \' \\ |', trigger: 'blur' }
    ],
    email: [
      {
@@ -506,7 +506,7 @@
      inputErrorMessage: '用户密码长度必须介于 5 å’Œ 20 ä¹‹é—´',
      inputValidator: (value) => {
        if (/<|>|"|'|\||\\/.test(value)) {
          return '不能包含非法字符:< > " \' \\\ |';
          return '不能包含非法字符:< > " \' \\ |';
        }
      }
    })
src/views/system/user/profile/resetPwd.vue
@@ -45,7 +45,7 @@
      message: '长度在 6 åˆ° 20 ä¸ªå­—符',
      trigger: 'blur'
    },
    { pattern: /^[^<>"'|\\]+$/, message: '不能包含非法字符:< > " \' \\\ |', trigger: 'blur' }
    { pattern: /^[^<>"'|\\]+$/, message: '不能包含非法字符:< > " \' \\ |', trigger: 'blur' }
  ],
  confirmPassword: [
    { required: true, message: '确认密码不能为空', trigger: 'blur' },
src/views/tool/gen/importTable.vue
@@ -63,7 +63,7 @@
/** æŸ¥è¯¢å‚数列表 */
const show = (dataName: string) => {
  getDataNames().then(res => {
  getDataNames().then((res) => {
    if (res.code == 200) {
      dataNameList.value = res.data;
      if (dataName) {