xingyu4j пре 2 година
родитељ
комит
8a77c94710
36 измењених фајлова са 293 додато и 327 уклоњено
  1. 1 1
      yudao-ui-admin-vue3/README.md
  2. 4 3
      yudao-ui-admin-vue3/package.json
  3. 134 173
      yudao-ui-admin-vue3/pnpm-lock.yaml
  4. 5 5
      yudao-ui-admin-vue3/src/App.vue
  5. 6 6
      yudao-ui-admin-vue3/src/components/Breadcrumb/src/Breadcrumb.vue
  6. 5 5
      yudao-ui-admin-vue3/src/components/Descriptions/src/Descriptions.vue
  7. 6 15
      yudao-ui-admin-vue3/src/components/Dialog/src/Dialog.vue
  8. 2 2
      yudao-ui-admin-vue3/src/components/Form/src/Form.vue
  9. 0 1
      yudao-ui-admin-vue3/src/components/IFrame/src/IFrame.vue
  10. 1 1
      yudao-ui-admin-vue3/src/components/Icon/src/IconSelect.vue
  11. 4 4
      yudao-ui-admin-vue3/src/components/InputPassword/src/InputPassword.vue
  12. 32 32
      yudao-ui-admin-vue3/src/components/Menu/src/Menu.vue
  13. 3 3
      yudao-ui-admin-vue3/src/components/Qrcode/src/Qrcode.vue
  14. 3 3
      yudao-ui-admin-vue3/src/components/Setting/src/Setting.vue
  15. 3 3
      yudao-ui-admin-vue3/src/components/Setting/src/components/ColorRadioPicker.vue
  16. 3 3
      yudao-ui-admin-vue3/src/components/Setting/src/components/LayoutRadioPicker.vue
  17. 3 3
      yudao-ui-admin-vue3/src/components/TabMenu/src/TabMenu.vue
  18. 1 1
      yudao-ui-admin-vue3/src/components/Table/src/Table.vue
  19. 12 12
      yudao-ui-admin-vue3/src/components/TagsView/src/TagsView.vue
  20. 1 1
      yudao-ui-admin-vue3/src/components/XButton/src/XButton.vue
  21. 1 1
      yudao-ui-admin-vue3/src/components/XButton/src/XTextButton.vue
  22. 4 4
      yudao-ui-admin-vue3/src/hooks/web/useDesign.ts
  23. 5 5
      yudao-ui-admin-vue3/src/layout/Layout.vue
  24. 3 3
      yudao-ui-admin-vue3/src/layout/components/ToolHeader.vue
  25. 1 1
      yudao-ui-admin-vue3/src/main.ts
  26. 6 0
      yudao-ui-admin-vue3/src/styles/global.module.scss
  27. 0 3
      yudao-ui-admin-vue3/src/styles/index.less
  28. 23 0
      yudao-ui-admin-vue3/src/styles/index.scss
  29. 0 6
      yudao-ui-admin-vue3/src/styles/theme.less
  30. 0 10
      yudao-ui-admin-vue3/src/styles/variables.module.less
  31. 4 0
      yudao-ui-admin-vue3/src/styles/variables.scss
  32. 9 9
      yudao-ui-admin-vue3/src/views/Home/Index2.vue
  33. 3 3
      yudao-ui-admin-vue3/src/views/Login/Login.vue
  34. 1 1
      yudao-ui-admin-vue3/src/views/Login/components/LoginForm.vue
  35. 1 1
      yudao-ui-admin-vue3/src/views/Login/components/MobileForm.vue
  36. 3 3
      yudao-ui-admin-vue3/vite.config.ts

+ 1 - 1
yudao-ui-admin-vue3/README.md

@@ -9,7 +9,7 @@
     <img src="https://img.shields.io/badge/-pnpm7-F69220?logo=pnpm&logoColor=white" />
     <img src="https://img.shields.io/badge/-Axios-008fc7?logo=axios.js&logoColor=white" />
     <img src="https://img.shields.io/badge/-Prettier-ef9421?logo=Prettier&logoColor=white" alt="Prettier">
-    <img src="https://img.shields.io/badge/-Less-1D365D?logo=less&logoColor=white" alt="Less">
+    <img src="https://img.shields.io/badge/-Sass-1D365D?logo=Sass&logoColor=white" alt="Sass">
     <img src="https://img.shields.io/badge/-Wind%20CSS-06B6D4?logo=Tailwind%20CSS&logoColor=white" alt="Taiwind">
 </p>
 

+ 4 - 3
yudao-ui-admin-vue3/package.json

@@ -18,7 +18,7 @@
     "clean": "npx rimraf node_modules",
     "clean:cache": "npx rimraf node_modules/.cache",
     "lint:eslint": "eslint --fix --ext .js,.ts,.vue ./src",
-    "lint:format": "prettier --write --loglevel warn \"src/**/*.{js,ts,json,tsx,css,less,vue,html,md}\"",
+    "lint:format": "prettier --write --loglevel warn \"src/**/*.{js,ts,json,tsx,css,less,scss,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 ",
     "lint:pretty": "pretty-quick --staged",
@@ -78,12 +78,13 @@
     "eslint-define-config": "^1.12.0",
     "eslint-plugin-prettier": "^4.2.1",
     "eslint-plugin-vue": "^9.7.0",
-    "less": "^4.1.3",
+    "sass": "^1.56.1",
+    "sass-loader": "^13.2.0",
     "lint-staged": "^13.0.3",
     "plop": "^3.1.1",
     "postcss": "^8.4.19",
     "postcss-html": "^1.5.0",
-    "postcss-less": "^6.0.0",
+    "postcss-scss": "^4.0.5",
     "prettier": "^2.7.1",
     "rimraf": "^3.0.2",
     "rollup": "^3.4.0",

+ 134 - 173
yudao-ui-admin-vue3/pnpm-lock.yaml

@@ -37,7 +37,6 @@ specifiers:
   intro.js: ^6.0.0
   js-cookie: ^3.0.1
   jsencrypt: ^3.3.1
-  less: ^4.1.3
   lint-staged: ^13.0.3
   lodash-es: ^4.17.21
   mitt: ^3.0.0
@@ -46,12 +45,14 @@ specifiers:
   plop: ^3.1.1
   postcss: ^8.4.19
   postcss-html: ^1.5.0
-  postcss-less: ^6.0.0
+  postcss-scss: ^4.0.5
   prettier: ^2.7.1
   qrcode: ^1.5.1
   qs: ^6.11.0
   rimraf: ^3.0.2
   rollup: ^3.4.0
+  sass: ^1.56.1
+  sass-loader: ^13.2.0
   stylelint: ^14.15.0
   stylelint-config-html: ^1.1.0
   stylelint-config-prettier: ^9.0.4
@@ -134,15 +135,16 @@ devDependencies:
   eslint-define-config: registry.npmmirror.com/eslint-define-config/1.12.0
   eslint-plugin-prettier: registry.npmmirror.com/eslint-plugin-prettier/4.2.1_pgxuib4rd7wiymfktharf5ydt4
   eslint-plugin-vue: registry.npmmirror.com/eslint-plugin-vue/9.7.0_eslint@8.28.0
-  less: registry.npmmirror.com/less/4.1.3
   lint-staged: registry.npmmirror.com/lint-staged/13.0.3
   plop: registry.npmmirror.com/plop/3.1.1
   postcss: registry.npmmirror.com/postcss/8.4.19
   postcss-html: registry.npmmirror.com/postcss-html/1.5.0
-  postcss-less: registry.npmmirror.com/postcss-less/6.0.0_postcss@8.4.19
+  postcss-scss: registry.npmmirror.com/postcss-scss/4.0.5_postcss@8.4.19
   prettier: registry.npmmirror.com/prettier/2.7.1
   rimraf: registry.npmmirror.com/rimraf/3.0.2
   rollup: registry.npmmirror.com/rollup/3.4.0
+  sass: registry.npmmirror.com/sass/1.56.1
+  sass-loader: registry.npmmirror.com/sass-loader/13.2.0_sass@1.56.1
   stylelint: registry.npmmirror.com/stylelint/14.15.0
   stylelint-config-html: registry.npmmirror.com/stylelint-config-html/1.1.0_qendsqix7hqecpnpx4fjs6qry4
   stylelint-config-prettier: registry.npmmirror.com/stylelint-config-prettier/9.0.4_stylelint@14.15.0
@@ -150,7 +152,7 @@ devDependencies:
   stylelint-config-standard: registry.npmmirror.com/stylelint-config-standard/29.0.0_stylelint@14.15.0
   stylelint-order: registry.npmmirror.com/stylelint-order/5.0.0_stylelint@14.15.0
   typescript: registry.npmmirror.com/typescript/4.9.3
-  vite: registry.npmmirror.com/vite/3.2.4_mp5lu76ee5qtwstsyca37sdhqi
+  vite: registry.npmmirror.com/vite/3.2.4_ajklay5k626t46b6fyghkbup3i
   vite-plugin-compression: registry.npmmirror.com/vite-plugin-compression/0.5.1_vite@3.2.4
   vite-plugin-eslint: registry.npmmirror.com/vite-plugin-eslint/1.8.1_eslint@8.28.0+vite@3.2.4
   vite-plugin-html: registry.npmmirror.com/vite-plugin-html/3.2.0_vite@3.2.4
@@ -987,7 +989,7 @@ packages:
       debug: registry.npmmirror.com/debug/4.3.4
       fast-glob: registry.npmmirror.com/fast-glob/3.2.12
       source-map: registry.npmmirror.com/source-map/0.6.1
-      vite: registry.npmmirror.com/vite/3.2.4_mp5lu76ee5qtwstsyca37sdhqi
+      vite: registry.npmmirror.com/vite/3.2.4_ajklay5k626t46b6fyghkbup3i
       vue-i18n: registry.npmmirror.com/vue-i18n/9.2.2_vue@3.2.45
     transitivePeerDependencies:
       - supports-color
@@ -1540,7 +1542,7 @@ packages:
       '@babel/core': registry.npmmirror.com/@babel/core/7.20.2
       '@babel/plugin-transform-typescript': registry.npmmirror.com/@babel/plugin-transform-typescript/7.20.2_@babel+core@7.20.2
       '@vue/babel-plugin-jsx': registry.npmmirror.com/@vue/babel-plugin-jsx/1.1.1_@babel+core@7.20.2
-      vite: registry.npmmirror.com/vite/3.2.4_mp5lu76ee5qtwstsyca37sdhqi
+      vite: registry.npmmirror.com/vite/3.2.4_ajklay5k626t46b6fyghkbup3i
       vue: registry.npmmirror.com/vue/3.2.45
     transitivePeerDependencies:
       - supports-color
@@ -1556,7 +1558,7 @@ packages:
       vite: ^3.0.0
       vue: ^3.2.25
     dependencies:
-      vite: registry.npmmirror.com/vite/3.2.4_mp5lu76ee5qtwstsyca37sdhqi
+      vite: registry.npmmirror.com/vite/3.2.4_ajklay5k626t46b6fyghkbup3i
       vue: registry.npmmirror.com/vue/3.2.45
     dev: true
 
@@ -2167,6 +2169,16 @@ packages:
     engines: {node: '>=12'}
     dev: true
 
+  registry.npmmirror.com/anymatch/3.1.3:
+    resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/anymatch/-/anymatch-3.1.3.tgz}
+    name: anymatch
+    version: 3.1.3
+    engines: {node: '>= 8'}
+    dependencies:
+      normalize-path: registry.npmmirror.com/normalize-path/3.0.0
+      picomatch: registry.npmmirror.com/picomatch/2.3.1
+    dev: true
+
   registry.npmmirror.com/arg/4.1.3:
     resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/arg/-/arg-4.1.3.tgz}
     name: arg
@@ -2362,6 +2374,13 @@ packages:
     version: 5.2.2
     dev: true
 
+  registry.npmmirror.com/binary-extensions/2.2.0:
+    resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/binary-extensions/-/binary-extensions-2.2.0.tgz}
+    name: binary-extensions
+    version: 2.2.0
+    engines: {node: '>=8'}
+    dev: true
+
   registry.npmmirror.com/bl/4.1.0:
     resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/bl/-/bl-4.1.0.tgz}
     name: bl
@@ -2625,6 +2644,23 @@ packages:
     version: 0.7.0
     dev: true
 
+  registry.npmmirror.com/chokidar/3.5.3:
+    resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/chokidar/-/chokidar-3.5.3.tgz}
+    name: chokidar
+    version: 3.5.3
+    engines: {node: '>= 8.10.0'}
+    dependencies:
+      anymatch: registry.npmmirror.com/anymatch/3.1.3
+      braces: registry.npmmirror.com/braces/3.0.2
+      glob-parent: registry.npmmirror.com/glob-parent/5.1.2
+      is-binary-path: registry.npmmirror.com/is-binary-path/2.1.0
+      is-glob: registry.npmmirror.com/is-glob/4.0.3
+      normalize-path: registry.npmmirror.com/normalize-path/3.0.0
+      readdirp: registry.npmmirror.com/readdirp/3.6.0
+    optionalDependencies:
+      fsevents: registry.npmmirror.com/fsevents/2.3.2
+    dev: true
+
   registry.npmmirror.com/class-utils/0.3.6:
     resolution: {integrity: sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/class-utils/-/class-utils-0.3.6.tgz}
     name: class-utils
@@ -2923,14 +2959,6 @@ packages:
     version: 1.9.0
     dev: true
 
-  registry.npmmirror.com/copy-anything/2.0.6:
-    resolution: {integrity: sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/copy-anything/-/copy-anything-2.0.6.tgz}
-    name: copy-anything
-    version: 2.0.6
-    dependencies:
-      is-what: registry.npmmirror.com/is-what/3.14.1
-    dev: true
-
   registry.npmmirror.com/copy-descriptor/0.1.1:
     resolution: {integrity: sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz}
     name: copy-descriptor
@@ -3111,20 +3139,6 @@ packages:
       ms: registry.npmmirror.com/ms/2.0.0
     dev: true
 
-  registry.npmmirror.com/debug/3.2.7:
-    resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/debug/-/debug-3.2.7.tgz}
-    name: debug
-    version: 3.2.7
-    peerDependencies:
-      supports-color: '*'
-    peerDependenciesMeta:
-      supports-color:
-        optional: true
-    dependencies:
-      ms: registry.npmmirror.com/ms/2.1.3
-    dev: true
-    optional: true
-
   registry.npmmirror.com/debug/4.3.4:
     resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/debug/-/debug-4.3.4.tgz}
     name: debug
@@ -3514,17 +3528,6 @@ packages:
     engines: {node: '>=0.12'}
     dev: true
 
-  registry.npmmirror.com/errno/0.1.8:
-    resolution: {integrity: sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/errno/-/errno-0.1.8.tgz}
-    name: errno
-    version: 0.1.8
-    hasBin: true
-    requiresBuild: true
-    dependencies:
-      prr: registry.npmmirror.com/prr/1.0.1
-    dev: true
-    optional: true
-
   registry.npmmirror.com/error-ex/1.3.2:
     resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/error-ex/-/error-ex-1.3.2.tgz}
     name: error-ex
@@ -4903,16 +4906,6 @@ packages:
       safer-buffer: registry.npmmirror.com/safer-buffer/2.1.2
     dev: true
 
-  registry.npmmirror.com/iconv-lite/0.6.3:
-    resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/iconv-lite/-/iconv-lite-0.6.3.tgz}
-    name: iconv-lite
-    version: 0.6.3
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      safer-buffer: registry.npmmirror.com/safer-buffer/2.1.2
-    dev: true
-    optional: true
-
   registry.npmmirror.com/ieee754/1.2.1:
     resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/ieee754/-/ieee754-1.2.1.tgz}
     name: ieee754
@@ -4940,6 +4933,12 @@ packages:
     version: 9.0.16
     dev: false
 
+  registry.npmmirror.com/immutable/4.1.0:
+    resolution: {integrity: sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/immutable/-/immutable-4.1.0.tgz}
+    name: immutable
+    version: 4.1.0
+    dev: true
+
   registry.npmmirror.com/import-fresh/3.3.0:
     resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/import-fresh/-/import-fresh-3.3.0.tgz}
     name: import-fresh
@@ -5062,6 +5061,15 @@ packages:
     version: 0.2.1
     dev: true
 
+  registry.npmmirror.com/is-binary-path/2.1.0:
+    resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-binary-path/-/is-binary-path-2.1.0.tgz}
+    name: is-binary-path
+    version: 2.1.0
+    engines: {node: '>=8'}
+    dependencies:
+      binary-extensions: registry.npmmirror.com/binary-extensions/2.2.0
+    dev: true
+
   registry.npmmirror.com/is-buffer/1.1.6:
     resolution: {integrity: sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-buffer/-/is-buffer-1.1.6.tgz}
     name: is-buffer
@@ -5301,12 +5309,6 @@ packages:
     version: 1.2.4
     dev: false
 
-  registry.npmmirror.com/is-what/3.14.1:
-    resolution: {integrity: sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-what/-/is-what-3.14.1.tgz}
-    name: is-what
-    version: 3.14.1
-    dev: true
-
   registry.npmmirror.com/is-windows/1.0.2:
     resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-windows/-/is-windows-1.0.2.tgz}
     name: is-windows
@@ -5526,6 +5528,13 @@ packages:
     engines: {node: '>=0.10.0'}
     dev: true
 
+  registry.npmmirror.com/klona/2.0.5:
+    resolution: {integrity: sha512-pJiBpiXMbt7dkzXe8Ghj/u4FfXOOa98fPW+bihOJ4SjnoijweJrNThJfd3ifXpXhREjpoF2mZVH1GfS9LV3kHQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/klona/-/klona-2.0.5.tgz}
+    name: klona
+    version: 2.0.5
+    engines: {node: '>= 8'}
+    dev: true
+
   registry.npmmirror.com/known-css-properties/0.26.0:
     resolution: {integrity: sha512-5FZRzrZzNTBruuurWpvZnvP9pum+fe0HcK8z/ooo+U+Hmp4vtbyp1/QDsqmufirXy4egGzbaH/y2uCZf+6W5Kg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/known-css-properties/-/known-css-properties-0.26.0.tgz}
     name: known-css-properties
@@ -5538,28 +5547,6 @@ packages:
     version: 1.6.0
     dev: true
 
-  registry.npmmirror.com/less/4.1.3:
-    resolution: {integrity: sha512-w16Xk/Ta9Hhyei0Gpz9m7VS8F28nieJaL/VyShID7cYvP6IL5oHeL6p4TXSDJqZE/lNv0oJ2pGVjJsRkfwm5FA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/less/-/less-4.1.3.tgz}
-    name: less
-    version: 4.1.3
-    engines: {node: '>=6'}
-    hasBin: true
-    dependencies:
-      copy-anything: registry.npmmirror.com/copy-anything/2.0.6
-      parse-node-version: registry.npmmirror.com/parse-node-version/1.0.1
-      tslib: registry.npmmirror.com/tslib/2.4.1
-    optionalDependencies:
-      errno: registry.npmmirror.com/errno/0.1.8
-      graceful-fs: registry.npmmirror.com/graceful-fs/4.2.10
-      image-size: registry.npmmirror.com/image-size/0.5.5
-      make-dir: registry.npmmirror.com/make-dir/2.1.0
-      mime: registry.npmmirror.com/mime/1.6.0
-      needle: registry.npmmirror.com/needle/3.2.0
-      source-map: registry.npmmirror.com/source-map/0.6.1
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
   registry.npmmirror.com/levn/0.4.1:
     resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/levn/-/levn-0.4.1.tgz}
     name: levn
@@ -5871,18 +5858,6 @@ packages:
       sourcemap-codec: registry.npmmirror.com/sourcemap-codec/1.4.8
     dev: true
 
-  registry.npmmirror.com/make-dir/2.1.0:
-    resolution: {integrity: sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/make-dir/-/make-dir-2.1.0.tgz}
-    name: make-dir
-    version: 2.1.0
-    engines: {node: '>=6'}
-    requiresBuild: true
-    dependencies:
-      pify: registry.npmmirror.com/pify/4.0.1
-      semver: registry.npmmirror.com/semver/5.7.1
-    dev: true
-    optional: true
-
   registry.npmmirror.com/make-error/1.3.6:
     resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/make-error/-/make-error-1.3.6.tgz}
     name: make-error
@@ -6064,16 +6039,6 @@ packages:
       mime-db: registry.npmmirror.com/mime-db/1.52.0
     dev: false
 
-  registry.npmmirror.com/mime/1.6.0:
-    resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/mime/-/mime-1.6.0.tgz}
-    name: mime
-    version: 1.6.0
-    engines: {node: '>=4'}
-    hasBin: true
-    requiresBuild: true
-    dev: true
-    optional: true
-
   registry.npmmirror.com/mimic-fn/2.1.0:
     resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/mimic-fn/-/mimic-fn-2.1.0.tgz}
     name: mimic-fn
@@ -6165,13 +6130,6 @@ packages:
     version: 2.1.2
     dev: true
 
-  registry.npmmirror.com/ms/2.1.3:
-    resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/ms/-/ms-2.1.3.tgz}
-    name: ms
-    version: 2.1.3
-    dev: true
-    optional: true
-
   registry.npmmirror.com/muggle-string/0.1.0:
     resolution: {integrity: sha512-Tr1knR3d2mKvvWthlk7202rywKbiOm4rVFLsfAaSIhJ6dt9o47W4S+JMtWhd/PW9Wrdew2/S2fSvhz3E2gkfEg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/muggle-string/-/muggle-string-0.1.0.tgz}
     name: muggle-string
@@ -6230,22 +6188,6 @@ packages:
     version: 1.4.0
     dev: true
 
-  registry.npmmirror.com/needle/3.2.0:
-    resolution: {integrity: sha512-oUvzXnyLiVyVGoianLijF9O/RecZUf7TkBfimjGrLM4eQhXyeJwM6GeAWccwfQ9aa4gMCZKqhAOuLaMIcQxajQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/needle/-/needle-3.2.0.tgz}
-    name: needle
-    version: 3.2.0
-    engines: {node: '>= 4.4.x'}
-    hasBin: true
-    requiresBuild: true
-    dependencies:
-      debug: registry.npmmirror.com/debug/3.2.7
-      iconv-lite: registry.npmmirror.com/iconv-lite/0.6.3
-      sax: registry.npmmirror.com/sax/1.2.4
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-    optional: true
-
   registry.npmmirror.com/neo-async/2.6.2:
     resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/neo-async/-/neo-async-2.6.2.tgz}
     name: neo-async
@@ -6626,13 +6568,6 @@ packages:
       lines-and-columns: registry.npmmirror.com/lines-and-columns/1.2.4
     dev: true
 
-  registry.npmmirror.com/parse-node-version/1.0.1:
-    resolution: {integrity: sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/parse-node-version/-/parse-node-version-1.0.1.tgz}
-    name: parse-node-version
-    version: 1.0.1
-    engines: {node: '>= 0.10'}
-    dev: true
-
   registry.npmmirror.com/parse-passwd/1.0.0:
     resolution: {integrity: sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/parse-passwd/-/parse-passwd-1.0.0.tgz}
     name: parse-passwd
@@ -6753,14 +6688,6 @@ packages:
     hasBin: true
     dev: true
 
-  registry.npmmirror.com/pify/4.0.1:
-    resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/pify/-/pify-4.0.1.tgz}
-    name: pify
-    version: 4.0.1
-    engines: {node: '>=6'}
-    dev: true
-    optional: true
-
   registry.npmmirror.com/pinia/2.0.25_mgnvym7yiazkylwwogi5r767ue:
     resolution: {integrity: sha512-3reAkjJ6bW2D5hZKRMS0c9rUbHVlsVyZd037xO0PJr2AuF/09RRSBnFLlJgmHF4Jx6dEoW/jZBOHTushY7IMlw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/pinia/-/pinia-2.0.25.tgz}
     id: registry.npmmirror.com/pinia/2.0.25
@@ -6825,18 +6752,6 @@ packages:
       postcss-safe-parser: registry.npmmirror.com/postcss-safe-parser/6.0.0_postcss@8.4.19
     dev: true
 
-  registry.npmmirror.com/postcss-less/6.0.0_postcss@8.4.19:
-    resolution: {integrity: sha512-FPX16mQLyEjLzEuuJtxA8X3ejDLNGGEG503d2YGZR5Ask1SpDN8KmZUMpzCvyalWRywAn1n1VOA5dcqfCLo5rg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/postcss-less/-/postcss-less-6.0.0.tgz}
-    id: registry.npmmirror.com/postcss-less/6.0.0
-    name: postcss-less
-    version: 6.0.0
-    engines: {node: '>=12'}
-    peerDependencies:
-      postcss: ^8.3.5
-    dependencies:
-      postcss: registry.npmmirror.com/postcss/8.4.19
-    dev: true
-
   registry.npmmirror.com/postcss-media-query-parser/0.2.3:
     resolution: {integrity: sha512-3sOlxmbKcSHMjlUXQZKQ06jOswE7oVkXPxmZdoB1r5l0q6gTFTQSHxNxOrCccElbW7dxNytifNEo8qidX2Vsig==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz}
     name: postcss-media-query-parser
@@ -6872,6 +6787,18 @@ packages:
       postcss: registry.npmmirror.com/postcss/8.4.19
     dev: true
 
+  registry.npmmirror.com/postcss-scss/4.0.5_postcss@8.4.19:
+    resolution: {integrity: sha512-F7xpB6TrXyqUh3GKdyB4Gkp3QL3DDW1+uI+gxx/oJnUt/qXI4trj5OGlp9rOKdoABGULuqtqeG+3HEVQk4DjmA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/postcss-scss/-/postcss-scss-4.0.5.tgz}
+    id: registry.npmmirror.com/postcss-scss/4.0.5
+    name: postcss-scss
+    version: 4.0.5
+    engines: {node: '>=12.0'}
+    peerDependencies:
+      postcss: ^8.3.3
+    dependencies:
+      postcss: registry.npmmirror.com/postcss/8.4.19
+    dev: true
+
   registry.npmmirror.com/postcss-selector-parser/6.0.10:
     resolution: {integrity: sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz}
     name: postcss-selector-parser
@@ -7016,13 +6943,6 @@ packages:
     version: 1.1.0
     dev: false
 
-  registry.npmmirror.com/prr/1.0.1:
-    resolution: {integrity: sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/prr/-/prr-1.0.1.tgz}
-    name: prr
-    version: 1.0.1
-    dev: true
-    optional: true
-
   registry.npmmirror.com/punycode/1.3.2:
     resolution: {integrity: sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/punycode/-/punycode-1.3.2.tgz}
     name: punycode
@@ -7138,6 +7058,15 @@ packages:
       util-deprecate: registry.npmmirror.com/util-deprecate/1.0.2
     dev: true
 
+  registry.npmmirror.com/readdirp/3.6.0:
+    resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/readdirp/-/readdirp-3.6.0.tgz}
+    name: readdirp
+    version: 3.6.0
+    engines: {node: '>=8.10.0'}
+    dependencies:
+      picomatch: registry.npmmirror.com/picomatch/2.3.1
+    dev: true
+
   registry.npmmirror.com/rechoir/0.8.0:
     resolution: {integrity: sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/rechoir/-/rechoir-0.8.0.tgz}
     name: rechoir
@@ -7396,12 +7325,44 @@ packages:
     version: 2.1.2
     dev: true
 
-  registry.npmmirror.com/sax/1.2.4:
-    resolution: {integrity: sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/sax/-/sax-1.2.4.tgz}
-    name: sax
-    version: 1.2.4
+  registry.npmmirror.com/sass-loader/13.2.0_sass@1.56.1:
+    resolution: {integrity: sha512-JWEp48djQA4nbZxmgC02/Wh0eroSUutulROUusYJO9P9zltRbNN80JCBHqRGzjd4cmZCa/r88xgfkjGD0TXsHg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/sass-loader/-/sass-loader-13.2.0.tgz}
+    id: registry.npmmirror.com/sass-loader/13.2.0
+    name: sass-loader
+    version: 13.2.0
+    engines: {node: '>= 14.15.0'}
+    peerDependencies:
+      fibers: '>= 3.1.0'
+      node-sass: ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0
+      sass: ^1.3.0
+      sass-embedded: '*'
+      webpack: ^5.0.0
+    peerDependenciesMeta:
+      fibers:
+        optional: true
+      node-sass:
+        optional: true
+      sass:
+        optional: true
+      sass-embedded:
+        optional: true
+    dependencies:
+      klona: registry.npmmirror.com/klona/2.0.5
+      neo-async: registry.npmmirror.com/neo-async/2.6.2
+      sass: registry.npmmirror.com/sass/1.56.1
+    dev: true
+
+  registry.npmmirror.com/sass/1.56.1:
+    resolution: {integrity: sha512-VpEyKpyBPCxE7qGDtOcdJ6fFbcpOM+Emu7uZLxVrkX8KVU/Dp5UF7WLvzqRuUhB6mqqQt1xffLoG+AndxTZrCQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/sass/-/sass-1.56.1.tgz}
+    name: sass
+    version: 1.56.1
+    engines: {node: '>=12.0.0'}
+    hasBin: true
+    dependencies:
+      chokidar: registry.npmmirror.com/chokidar/3.5.3
+      immutable: registry.npmmirror.com/immutable/4.1.0
+      source-map-js: registry.npmmirror.com/source-map-js/1.0.2
     dev: true
-    optional: true
 
   registry.npmmirror.com/scroll-into-view-if-needed/2.2.29:
     resolution: {integrity: sha512-hxpAR6AN+Gh53AdAimHM6C8oTN1ppwVZITihix+WqalywBeFcQ6LdQP5ABNl26nX8GTEL7VT+b8lKpdqq65wXg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/scroll-into-view-if-needed/-/scroll-into-view-if-needed-2.2.29.tgz}
@@ -8490,7 +8451,7 @@ packages:
       chalk: registry.npmmirror.com/chalk/4.1.2
       debug: registry.npmmirror.com/debug/4.3.4
       fs-extra: registry.npmmirror.com/fs-extra/10.1.0
-      vite: registry.npmmirror.com/vite/3.2.4_mp5lu76ee5qtwstsyca37sdhqi
+      vite: registry.npmmirror.com/vite/3.2.4_ajklay5k626t46b6fyghkbup3i
     transitivePeerDependencies:
       - supports-color
     dev: true
@@ -8508,7 +8469,7 @@ packages:
       '@types/eslint': registry.npmmirror.com/@types/eslint/8.4.10
       eslint: registry.npmmirror.com/eslint/8.28.0
       rollup: registry.npmmirror.com/rollup/2.79.1
-      vite: registry.npmmirror.com/vite/3.2.4_mp5lu76ee5qtwstsyca37sdhqi
+      vite: registry.npmmirror.com/vite/3.2.4_ajklay5k626t46b6fyghkbup3i
     dev: true
 
   registry.npmmirror.com/vite-plugin-html/3.2.0_vite@3.2.4:
@@ -8531,7 +8492,7 @@ packages:
       html-minifier-terser: registry.npmmirror.com/html-minifier-terser/6.1.0
       node-html-parser: registry.npmmirror.com/node-html-parser/5.4.2
       pathe: registry.npmmirror.com/pathe/0.2.0
-      vite: registry.npmmirror.com/vite/3.2.4_mp5lu76ee5qtwstsyca37sdhqi
+      vite: registry.npmmirror.com/vite/3.2.4_ajklay5k626t46b6fyghkbup3i
     dev: true
 
   registry.npmmirror.com/vite-plugin-progress/0.0.6_vite@3.2.4:
@@ -8546,7 +8507,7 @@ packages:
       picocolors: registry.npmmirror.com/picocolors/1.0.0
       progress: registry.npmmirror.com/progress/2.0.3
       rd: registry.npmmirror.com/rd/2.0.1
-      vite: registry.npmmirror.com/vite/3.2.4_mp5lu76ee5qtwstsyca37sdhqi
+      vite: registry.npmmirror.com/vite/3.2.4_ajklay5k626t46b6fyghkbup3i
     dev: true
 
   registry.npmmirror.com/vite-plugin-purge-icons/0.9.1_vite@3.2.4:
@@ -8561,7 +8522,7 @@ packages:
       '@purge-icons/core': registry.npmmirror.com/@purge-icons/core/0.9.1
       '@purge-icons/generated': registry.npmmirror.com/@purge-icons/generated/0.9.0
       rollup-plugin-purge-icons: registry.npmmirror.com/rollup-plugin-purge-icons/0.9.1
-      vite: registry.npmmirror.com/vite/3.2.4_mp5lu76ee5qtwstsyca37sdhqi
+      vite: registry.npmmirror.com/vite/3.2.4_ajklay5k626t46b6fyghkbup3i
     transitivePeerDependencies:
       - encoding
       - supports-color
@@ -8582,7 +8543,7 @@ packages:
       fs-extra: registry.npmmirror.com/fs-extra/10.1.0
       magic-string: registry.npmmirror.com/magic-string/0.25.9
       pathe: registry.npmmirror.com/pathe/0.2.0
-      vite: registry.npmmirror.com/vite/3.2.4_mp5lu76ee5qtwstsyca37sdhqi
+      vite: registry.npmmirror.com/vite/3.2.4_ajklay5k626t46b6fyghkbup3i
     dev: true
 
   registry.npmmirror.com/vite-plugin-svg-icons/2.0.1_vite@3.2.4:
@@ -8601,7 +8562,7 @@ packages:
       pathe: registry.npmmirror.com/pathe/0.2.0
       svg-baker: registry.npmmirror.com/svg-baker/1.7.0
       svgo: registry.npmmirror.com/svgo/2.8.0
-      vite: registry.npmmirror.com/vite/3.2.4_mp5lu76ee5qtwstsyca37sdhqi
+      vite: registry.npmmirror.com/vite/3.2.4_ajklay5k626t46b6fyghkbup3i
     transitivePeerDependencies:
       - supports-color
     dev: true
@@ -8617,13 +8578,13 @@ packages:
       '@windicss/plugin-utils': registry.npmmirror.com/@windicss/plugin-utils/1.8.8
       debug: registry.npmmirror.com/debug/4.3.4
       kolorist: registry.npmmirror.com/kolorist/1.6.0
-      vite: registry.npmmirror.com/vite/3.2.4_mp5lu76ee5qtwstsyca37sdhqi
+      vite: registry.npmmirror.com/vite/3.2.4_ajklay5k626t46b6fyghkbup3i
       windicss: registry.npmmirror.com/windicss/3.5.6
     transitivePeerDependencies:
       - supports-color
     dev: true
 
-  registry.npmmirror.com/vite/3.2.4_mp5lu76ee5qtwstsyca37sdhqi:
+  registry.npmmirror.com/vite/3.2.4_ajklay5k626t46b6fyghkbup3i:
     resolution: {integrity: sha512-Z2X6SRAffOUYTa+sLy3NQ7nlHFU100xwanq1WDwqaiFiCe+25zdxP1TfCS5ojPV2oDDcXudHIoPnI1Z/66B7Yw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/vite/-/vite-3.2.4.tgz}
     id: registry.npmmirror.com/vite/3.2.4
     name: vite
@@ -8653,10 +8614,10 @@ packages:
     dependencies:
       '@types/node': registry.npmmirror.com/@types/node/18.11.9
       esbuild: registry.npmmirror.com/esbuild/0.15.14
-      less: registry.npmmirror.com/less/4.1.3
       postcss: registry.npmmirror.com/postcss/8.4.19
       resolve: registry.npmmirror.com/resolve/1.22.1
       rollup: registry.npmmirror.com/rollup/2.79.1
+      sass: registry.npmmirror.com/sass/1.56.1
     optionalDependencies:
       fsevents: registry.npmmirror.com/fsevents/2.3.2
     dev: true

+ 5 - 5
yudao-ui-admin-vue3/src/App.vue

@@ -33,8 +33,8 @@ const setDefaultTheme = () => {
 setDefaultTheme()
 </script>
 
-<style lang="less">
-@prefix-cls: ~'@{namespace}-app';
+<style lang="scss">
+$prefix-cls: #{$namespace}-app;
 
 .size {
   width: 100%;
@@ -46,14 +46,14 @@ body {
   padding: 0 !important;
   margin: 0;
   overflow: hidden;
-  .size;
+  @extend .size;
 
   #app {
-    .size;
+    @extend .size;
   }
 }
 
-.@{prefix-cls}-grey-mode {
+.#{$prefix-cls}-grey-mode {
   filter: grayscale(100%);
 }
 </style>

+ 6 - 6
yudao-ui-admin-vue3/src/components/Breadcrumb/src/Breadcrumb.vue

@@ -87,13 +87,13 @@ export default defineComponent({
 })
 </script>
 
-<style lang="less" scoped>
-@prefix-cls: ~'@{elNamespace}-breadcrumb';
+<style lang="scss" scoped>
+$prefix-cls: #{$elNamespace}-breadcrumb;
 
-.@{prefix-cls} {
+.#{$prefix-cls} {
   :deep(&__item) {
     display: flex;
-    .@{prefix-cls}__inner {
+    .#{$prefix-cls}__inner {
       display: flex;
       align-items: center;
       color: var(--top-header-text-color);
@@ -105,7 +105,7 @@ export default defineComponent({
   }
 
   :deep(&__item):not(:last-child) {
-    .@{prefix-cls}__inner {
+    .#{$prefix-cls}__inner {
       color: var(--top-header-text-color);
 
       &:hover {
@@ -115,7 +115,7 @@ export default defineComponent({
   }
 
   :deep(&__item):last-child {
-    .@{prefix-cls}__inner {
+    .#{$prefix-cls}__inner {
       color: var(--el-text-color-placeholder);
 
       &:hover {

+ 5 - 5
yudao-ui-admin-vue3/src/components/Descriptions/src/Descriptions.vue

@@ -129,10 +129,10 @@ const toggleClick = () => {
   </div>
 </template>
 
-<style lang="less" scoped>
-@prefix-cls: ~'@{namespace}-descriptions';
+<style lang="scss" scoped>
+$prefix-cls: #{$namespace}-descriptions;
 
-.@{prefix-cls}-header {
+.#{$prefix-cls}-header {
   &__title {
     &::after {
       position: absolute;
@@ -146,8 +146,8 @@ const toggleClick = () => {
   }
 }
 
-.@{prefix-cls}-content {
-  :deep(.@{elNamespace}-descriptions__cell) {
+.#{$prefix-cls}-content {
+  :deep(.#{$elNamespace}-descriptions__cell) {
     width: 0;
   }
 }

+ 6 - 15
yudao-ui-admin-vue3/src/components/Dialog/src/Dialog.vue

@@ -92,23 +92,14 @@ const dialogStyle = computed(() => {
   </ElDialog>
 </template>
 
-<style lang="less">
-.@{elNamespace}-dialog__header {
+<style lang="scss">
+.#{$elNamespace}-dialog__header {
   margin-right: 0 !important;
-  padding-bottom: 6px;
-  padding-top: 10px;
   border-bottom: 1px solid var(--tags-view-border-color);
 }
 
-.@{elNamespace}-dialog__headerbtn {
-  top: -4px !important;
-}
-
-.@{elNamespace}-dialog__footer {
-  border-top: 0px solid var(--tags-view-border-color);
-}
-.dialog-footer button:first-child {
-  margin-right: 10px;
+.#{$elNamespace}-dialog__footer {
+  border-top: 1px solid var(--tags-view-border-color);
 }
 
 .is-hover {
@@ -118,11 +109,11 @@ const dialogStyle = computed(() => {
 }
 
 .dark {
-  .@{elNamespace}-dialog__header {
+  .#{$elNamespace}-dialog__header {
     border-bottom: 1px solid var(--el-border-color);
   }
 
-  .@{elNamespace}-dialog__footer {
+  .#{$elNamespace}-dialog__footer {
     border-top: 1px solid var(--el-border-color);
   }
 }

+ 2 - 2
yudao-ui-admin-vue3/src/components/Form/src/Form.vue

@@ -294,8 +294,8 @@ export default defineComponent({
 })
 </script>
 
-<style lang="less" scoped>
-.@{elNamespace}-form.@{namespace}-form .@{elNamespace}-row {
+<style lang="scss" scoped>
+.#{$elNamespace}-form.#{$namespace}-form .#{$elNamespace}-row {
   margin-right: 0 !important;
   margin-left: 0 !important;
 }

+ 0 - 1
yudao-ui-admin-vue3/src/components/IFrame/src/IFrame.vue

@@ -29,4 +29,3 @@ onMounted(() => {
     ></iframe>
   </div>
 </template>
-<script lang="less" scoped></script>

+ 1 - 1
yudao-ui-admin-vue3/src/components/Icon/src/IconSelect.vue

@@ -182,7 +182,7 @@ watch(
   </div>
 </template>
 
-<style lang="less" scoped>
+<style lang="scss" scoped>
 .el-divider--horizontal {
   margin: 1px auto !important;
 }

+ 4 - 4
yudao-ui-admin-vue3/src/components/InputPassword/src/InputPassword.vue

@@ -74,11 +74,11 @@ const getIconName = computed(() => (unref(textType) === 'password' ? 'ep:hide' :
   </div>
 </template>
 
-<style lang="less" scoped>
-@prefix-cls: ~'@{namespace}-input-password';
+<style lang="scss" scoped>
+$prefix-cls: #{$namespace}-input-password;
 
-.@{prefix-cls} {
-  :deep(.@{elNamespace}-input__clear) {
+.#{$prefix-cls} {
+  :deep(.#{$elNamespace}-input__clear) {
     margin-left: 5px;
   }
 

+ 32 - 32
yudao-ui-admin-vue3/src/components/Menu/src/Menu.vue

@@ -121,8 +121,8 @@ export default defineComponent({
 })
 </script>
 
-<style lang="less" scoped>
-@prefix-cls: ~'@{namespace}-menu';
+<style lang="scss" scoped>
+$prefix-cls: #{$namespace}-menu;
 
 .is-active--after {
   position: absolute;
@@ -134,7 +134,7 @@ export default defineComponent({
   content: '';
 }
 
-.@{prefix-cls} {
+.#{$prefix-cls} {
   position: relative;
   transition: width var(--transition-time-02);
 
@@ -147,20 +147,20 @@ export default defineComponent({
     content: '';
   }
 
-  :deep(.@{elNamespace}-menu) {
+  :deep(.#{$elNamespace}-menu) {
     width: 100% !important;
     border-right: none;
 
     // 设置选中时子标题的颜色
     .is-active {
-      & > .@{elNamespace}-sub-menu__title {
+      & > .#{$elNamespace}-sub-menu__title {
         color: var(--left-menu-text-active-color) !important;
       }
     }
 
     // 设置子菜单悬停的高亮和背景色
-    .@{elNamespace}-sub-menu__title,
-    .@{elNamespace}-menu-item {
+    .#{$elNamespace}-sub-menu__title,
+    .#{$elNamespace}-menu-item {
       &:hover {
         color: var(--left-menu-text-active-color) !important;
         background-color: var(--left-menu-bg-color) !important;
@@ -168,8 +168,8 @@ export default defineComponent({
     }
 
     // 设置选中时的高亮背景和高亮颜色
-    .@{elNamespace}-sub-menu.is-active,
-    .@{elNamespace}-menu-item.is-active {
+    .#{$elNamespace}-sub-menu.is-active,
+    .#{$elNamespace}-menu-item.is-active {
       color: var(--left-menu-text-active-color) !important;
       background-color: var(--left-menu-bg-active-color) !important;
 
@@ -178,34 +178,34 @@ export default defineComponent({
       }
     }
 
-    .@{elNamespace}-menu-item.is-active {
+    .#{$elNamespace}-menu-item.is-active {
       position: relative;
 
       &:after {
-        .is-active--after;
+        @extend .is-active--after;
       }
     }
 
     // 设置子菜单的背景颜色
-    .@{elNamespace}-menu {
-      .@{elNamespace}-sub-menu__title,
-      .@{elNamespace}-menu-item:not(.is-active) {
+    .#{$elNamespace}-menu {
+      .#{$elNamespace}-sub-menu__title,
+      .#{$elNamespace}-menu-item:not(.is-active) {
         background-color: var(--left-menu-bg-light-color) !important;
       }
     }
   }
 
   // 折叠时的最小宽度
-  :deep(.@{elNamespace}-menu--collapse) {
+  :deep(.#{$elNamespace}-menu--collapse) {
     width: var(--left-menu-min-width);
 
     & > .is-active,
-    & > .is-active > .@{elNamespace}-sub-menu__title {
+    & > .is-active > .#{$elNamespace}-sub-menu__title {
       position: relative;
       background-color: var(--left-menu-collapse-bg-active-color) !important;
 
       &:after {
-        .is-active--after;
+        @extend .is-active--after;
       }
     }
   }
@@ -213,26 +213,26 @@ export default defineComponent({
   // 折叠动画的时候,就需要把文字给隐藏掉
   :deep(.horizontal-collapse-transition) {
     // transition: 0s width ease-in-out, 0s padding-left ease-in-out, 0s padding-right ease-in-out !important;
-    .@{prefix-cls}__title {
+    .#{$prefix-cls}__title {
       display: none;
     }
   }
 
   // 水平菜单
   &__horizontal {
-    height: calc(~'var(--top-tool-height)') !important;
+    height: calc(var(--top-tool-height)) !important;
 
-    :deep(.@{elNamespace}-menu--horizontal) {
-      height: calc(~'var(--top-tool-height)');
+    :deep(.#{$elNamespace}-menu--horizontal) {
+      height: calc(var(--top-tool-height));
       border-bottom: none;
       // 重新设置底部高亮颜色
-      & > .@{elNamespace}-sub-menu.is-active {
-        .@{elNamespace}-sub-menu__title {
+      & > .#{$elNamespace}-sub-menu.is-active {
+        .#{$elNamespace}-sub-menu__title {
           border-bottom-color: var(--el-color-primary) !important;
         }
       }
 
-      .@{elNamespace}-menu-item.is-active {
+      .#{$elNamespace}-menu-item.is-active {
         position: relative;
 
         &:after {
@@ -240,19 +240,19 @@ export default defineComponent({
         }
       }
 
-      .@{prefix-cls}__title {
+      .#{$prefix-cls}__title {
         /* stylelint-disable-next-line */
-        max-height: calc(~'var(--top-tool-height) - 2px') !important;
+        max-height: calc(var(--top-tool-height) - 2px) !important;
         /* stylelint-disable-next-line */
-        line-height: calc(~'var(--top-tool-height) - 2px');
+        line-height: calc(var(--top-tool-height) - 2px);
       }
     }
   }
 }
 </style>
 
-<style lang="less">
-@prefix-cls: ~'@{namespace}-menu-popper';
+<style lang="scss">
+$prefix-cls: #{$namespace}-menu-popper;
 
 .is-active--after {
   position: absolute;
@@ -264,8 +264,8 @@ export default defineComponent({
   content: '';
 }
 
-.@{prefix-cls}--vertical,
-.@{prefix-cls}--horizontal {
+.#{$prefix-cls}--vertical,
+.#{$prefix-cls}--horizontal {
   // 设置选中时子标题的颜色
   .is-active {
     & > .el-sub-menu__title {
@@ -292,7 +292,7 @@ export default defineComponent({
     }
 
     &:after {
-      .is-active--after;
+      @extend .is-active--after;
     }
   }
 }

+ 3 - 3
yudao-ui-admin-vue3/src/components/Qrcode/src/Qrcode.vue

@@ -237,10 +237,10 @@ const disabledClick = () => {
   </div>
 </template>
 
-<style lang="less" scoped>
-@prefix-cls: ~'@{namespace}-qrcode';
+<style lang="scss" scoped>
+$prefix-cls: #{$namespace}-qrcode;
 
-.@{prefix-cls} {
+.#{$prefix-cls} {
   &--disabled {
     background: rgba(255, 255, 255, 0.95);
 

+ 3 - 3
yudao-ui-admin-vue3/src/components/Setting/src/Setting.vue

@@ -288,10 +288,10 @@ const clear = () => {
   </ElDrawer>
 </template>
 
-<style lang="less" scoped>
-@prefix-cls: ~'@{namespace}-setting';
+<style lang="scss" scoped>
+$prefix-cls: #{$namespace}-setting;
 
-.@{prefix-cls} {
+.#{$prefix-cls} {
   border-radius: 6px 0 0 6px;
 }
 </style>

+ 3 - 3
yudao-ui-admin-vue3/src/components/Setting/src/components/ColorRadioPicker.vue

@@ -54,10 +54,10 @@ watch(
   </div>
 </template>
 
-<style lang="less" scoped>
-@prefix-cls: ~'@{namespace}-color-radio-picker';
+<style lang="scss" scoped>
+$prefix-cls: #{$namespace}-color-radio-picker;
 
-.@{prefix-cls} {
+.#{$prefix-cls} {
   .is-active {
     border-color: var(--el-color-primary);
   }

+ 3 - 3
yudao-ui-admin-vue3/src/components/Setting/src/components/LayoutRadioPicker.vue

@@ -59,10 +59,10 @@ const layout = computed(() => appStore.getLayout)
   </div>
 </template>
 
-<style lang="less" scoped>
-@prefix-cls: ~'@{namespace}-layout-radio-picker';
+<style lang="scss" scoped>
+$prefix-cls: #{$namespace}-layout-radio-picker;
 
-.@{prefix-cls} {
+.#{$prefix-cls} {
   &__classic {
     border: 2px solid #e5e7eb;
     border-radius: 4px;

+ 3 - 3
yudao-ui-admin-vue3/src/components/TabMenu/src/TabMenu.vue

@@ -213,10 +213,10 @@ export default defineComponent({
 })
 </script>
 
-<style lang="less" scoped>
-@prefix-cls: ~'@{namespace}-tab-menu';
+<style lang="scss" scoped>
+$prefix-cls: #{$namespace}-tab-menu;
 
-.@{prefix-cls} {
+.#{$prefix-cls} {
   transition: all var(--transition-time-02);
 
   &:after {

+ 1 - 1
yudao-ui-admin-vue3/src/components/Table/src/Table.vue

@@ -295,7 +295,7 @@ export default defineComponent({
   }
 })
 </script>
-<style lang="less" scoped>
+<style lang="scss" scoped>
 :deep(.el-button.is-text) {
   margin-left: 0;
   padding: 8px 4px;

+ 12 - 12
yudao-ui-admin-vue3/src/components/TagsView/src/TagsView.vue

@@ -463,11 +463,11 @@ watch(
   </div>
 </template>
 
-<style lang="less" scoped>
-@prefix-cls: ~'@{namespace}-tags-view';
+<style lang="scss" scoped>
+$prefix-cls: #{$namespace}-tags-view;
 
-.@{prefix-cls} {
-  :deep(.@{elNamespace}-scrollbar__view) {
+.#{$prefix-cls} {
+  :deep(.#{$elNamespace}-scrollbar__view) {
     height: 100%;
   }
 
@@ -485,7 +485,7 @@ watch(
       top: 1px;
       left: 0;
       width: 100%;
-      height: calc(~'100% - 1px');
+      height: calc(100% - 1px);
       border-right: 1px solid var(--tags-view-border-color);
       border-left: 1px solid var(--tags-view-border-color);
       content: '';
@@ -495,7 +495,7 @@ watch(
   &__item {
     position: relative;
     top: 2px;
-    height: calc(~'100% - 4px');
+    height: calc(100% - 4px);
     padding-right: 25px;
     margin-left: 4px;
     font-size: 12px;
@@ -509,8 +509,8 @@ watch(
       display: none;
       transform: translate(0, -50%);
     }
-    &:not(.@{prefix-cls}__item--affix):hover {
-      .@{prefix-cls}__item--close {
+    &:not(.#{$prefix-cls}__item--affix):hover {
+      .#{$prefix-cls}__item--close {
         display: block;
       }
     }
@@ -526,7 +526,7 @@ watch(
     color: var(--el-color-white);
     background-color: var(--el-color-primary);
     border: 1px solid var(--el-color-primary);
-    .@{prefix-cls}__item--close {
+    .#{$prefix-cls}__item--close {
       :deep(span) {
         color: var(--el-color-white) !important;
       }
@@ -535,7 +535,7 @@ watch(
 }
 
 .dark {
-  .@{prefix-cls} {
+  .#{$prefix-cls} {
     &__tool {
       &:hover {
         :deep(span) {
@@ -552,7 +552,7 @@ watch(
     &__item {
       position: relative;
       top: 2px;
-      height: calc(~'100% - 4px');
+      height: calc(100% - 4px);
       padding-right: 25px;
       font-size: 12px;
       cursor: pointer;
@@ -568,7 +568,7 @@ watch(
     &__item.is-active {
       color: var(--el-color-white);
       background-color: var(--el-color-primary);
-      .@{prefix-cls}__item--close {
+      .#{$prefix-cls}__item--close {
         :deep(span) {
           color: var(--el-color-white) !important;
         }

+ 1 - 1
yudao-ui-admin-vue3/src/components/XButton/src/XButton.vue

@@ -35,7 +35,7 @@ const getBindValue = computed(() => {
     <Icon :icon="postIcon" v-if="postIcon" class="mr-1px" />
   </el-button>
 </template>
-<style lang="less" scoped>
+<style lang="scss" scoped>
 :deep(.el-button.is-text) {
   margin-left: 0;
   padding: 8px 4px;

+ 1 - 1
yudao-ui-admin-vue3/src/components/XButton/src/XTextButton.vue

@@ -34,7 +34,7 @@ const getBindValue = computed(() => {
     <Icon :icon="postIcon" v-if="postIcon" class="mr-1px" />
   </el-button>
 </template>
-<style lang="less" scoped>
+<style lang="scss" scoped>
 :deep(.el-button.is-text) {
   margin-left: 0;
   padding: 8px 4px;

+ 4 - 4
yudao-ui-admin-vue3/src/hooks/web/useDesign.ts

@@ -1,18 +1,18 @@
-import variables from '@/styles/variables.module.less'
+import variables from '@/styles/global.module.scss'
 
 export const useDesign = () => {
-  const lessVariables = variables
+  const scssVariables = variables
 
   /**
    * @param scope 类名
    * @returns 返回空间名-类名
    */
   const getPrefixCls = (scope: string) => {
-    return `${lessVariables.namespace}-${scope}`
+    return `${scssVariables.namespace}-${scope}`
   }
 
   return {
-    variables: lessVariables,
+    variables: scssVariables,
     getPrefixCls
   }
 }

+ 5 - 5
yudao-ui-admin-vue3/src/layout/Layout.vue

@@ -66,12 +66,12 @@ export default defineComponent({
 })
 </script>
 
-<style lang="less" scoped>
-@prefix-cls: ~'@{namespace}-layout';
+<style lang="scss" scoped>
+$prefix-cls: #{$namespace}-layout;
 
-.@{prefix-cls} {
-  background-color: var(--app-contnet-bg-color);
-  :deep(.@{elNamespace}-scrollbar__view) {
+.#{$prefix-cls} {
+  background-color: var(--app-content-bg-color);
+  :deep(.#{$elNamespace}-scrollbar__view) {
     height: 100% !important;
   }
 }

+ 3 - 3
yudao-ui-admin-vue3/src/layout/components/ToolHeader.vue

@@ -74,10 +74,10 @@ export default defineComponent({
 })
 </script>
 
-<style lang="less" scoped>
-@prefix-cls: ~'@{namespace}-tool-header';
+<style lang="scss" scoped>
+$prefix-cls: #{$namespace}-tool-header;
 
-.@{prefix-cls} {
+.#{$prefix-cls} {
   transition: left var(--transition-time-02);
 }
 </style>

+ 1 - 1
yudao-ui-admin-vue3/src/main.ts

@@ -20,7 +20,7 @@ import { setupElementPlus } from '@/plugins/elementPlus'
 import { setupVxeTable } from '@/plugins/vxeTable'
 
 // 引入全局样式
-import '@/styles/index.less'
+import '@/styles/index.scss'
 
 // 引入动画
 import '@/plugins/animate.css'

+ 6 - 0
yudao-ui-admin-vue3/src/styles/global.module.scss

@@ -0,0 +1,6 @@
+@import './variables.scss';
+// 导出变量
+:export {
+  namespace: $namespace;
+  elNamespace: $elNamespace;
+}

+ 0 - 3
yudao-ui-admin-vue3/src/styles/index.less

@@ -1,3 +0,0 @@
-@import './var.css';
-@import './vxe.css';
-@import 'element-plus/theme-chalk/dark/css-vars.css';

+ 23 - 0
yudao-ui-admin-vue3/src/styles/index.scss

@@ -0,0 +1,23 @@
+@import './var.css';
+@import './vxe.css';
+@import 'element-plus/theme-chalk/dark/css-vars.css';
+
+.reset-margin [class*='el-icon'] + span {
+  margin-left: 2px !important;
+}
+
+/* nprogress 适配 element-plus 的主题色 */
+#nprogress {
+  & .bar {
+    background-color: var(--el-color-primary) !important;
+  }
+
+  & .peg {
+    box-shadow: 0 0 10px var(--el-color-primary), 0 0 5px var(--el-color-primary) !important;
+  }
+
+  & .spinner-icon {
+    border-top-color: var(--el-color-primary);
+    border-left-color: var(--el-color-primary);
+  }
+}

+ 0 - 6
yudao-ui-admin-vue3/src/styles/theme.less

@@ -1,6 +0,0 @@
-// .text-color {
-//   color: var(--el-text-color-regular);
-// }
-// .dark .dark\:text-color {
-//   color: rgba(255, 255, 255, var(--dark-text-color));
-// }

+ 0 - 10
yudao-ui-admin-vue3/src/styles/variables.module.less

@@ -1,10 +0,0 @@
-// 命名空间
-@namespace: v;
-// el命名空间
-@elNamespace: el;
-
-// 导出变量
-:export {
-  namespace: @namespace;
-  elNamespace: @elNamespace;
-}

+ 4 - 0
yudao-ui-admin-vue3/src/styles/variables.scss

@@ -0,0 +1,4 @@
+// 命名空间
+$namespace: v;
+// el命名空间
+$elNamespace: el;

+ 9 - 9
yudao-ui-admin-vue3/src/views/Home/Index2.vue

@@ -270,10 +270,10 @@ const getAllApi = async () => {
 getAllApi()
 </script>
 
-<style lang="less" scoped>
-@prefix-cls: ~'@{namespace}-panel';
+<style lang="scss" scoped>
+$prefix-cls: #{$namespace}-panel;
 
-.@{prefix-cls} {
+.#{$prefix-cls} {
   &__item {
     &--peoples {
       color: #40c9c6;
@@ -292,22 +292,22 @@ getAllApi()
     }
 
     &:hover {
-      :deep(.@{namespace}-icon) {
+      :deep(.#{$namespace}-icon) {
         color: #fff !important;
       }
-      .@{prefix-cls}__item--icon {
+      .#{$prefix-cls}__item--icon {
         transition: all 0.38s ease-out;
       }
-      .@{prefix-cls}__item--peoples {
+      .#{$prefix-cls}__item--peoples {
         background: #40c9c6;
       }
-      .@{prefix-cls}__item--message {
+      .#{$prefix-cls}__item--message {
         background: #36a3f7;
       }
-      .@{prefix-cls}__item--money {
+      .#{$prefix-cls}__item--money {
         background: #f4516c;
       }
-      .@{prefix-cls}__item--shopping {
+      .#{$prefix-cls}__item--shopping {
         background: #34bfa3;
       }
     }

+ 3 - 3
yudao-ui-admin-vue3/src/views/Login/Login.vue

@@ -73,10 +73,10 @@ const { getPrefixCls } = useDesign()
 const prefixCls = getPrefixCls('login')
 </script>
 
-<style lang="less" scoped>
-@prefix-cls: ~'@{namespace}-login';
+<style lang="scss" scoped>
+$prefix-cls: #{$namespace}-panel;
 
-.@{prefix-cls} {
+.#{$prefix-cls} {
   &__left {
     &::before {
       position: absolute;

+ 1 - 1
yudao-ui-admin-vue3/src/views/Login/components/LoginForm.vue

@@ -307,7 +307,7 @@ onMounted(() => {
 })
 </script>
 
-<style lang="less" scoped>
+<style lang="scss" scoped>
 :deep(.anticon) {
   &:hover {
     color: var(--el-color-primary) !important;

+ 1 - 1
yudao-ui-admin-vue3/src/views/Login/components/MobileForm.vue

@@ -197,7 +197,7 @@ const signIn = async () => {
 }
 </script>
 
-<style lang="less" scoped>
+<style lang="scss" scoped>
 :deep(.anticon) {
   &:hover {
     color: var(--el-color-primary) !important;

+ 3 - 3
yudao-ui-admin-vue3/vite.config.ts

@@ -105,14 +105,14 @@ export default ({ command, mode }: ConfigEnv): UserConfig => {
     ],
     css: {
       preprocessorOptions: {
-        less: {
-          additionalData: '@import "./src/styles/variables.module.less";',
+        scss: {
+          additionalData: '@import "./src/styles/variables.scss";',
           javascriptEnabled: true
         }
       }
     },
     resolve: {
-      extensions: ['.mjs', '.js', '.ts', '.jsx', '.tsx', '.json', '.less', '.css'],
+      extensions: ['.mjs', '.js', '.ts', '.jsx', '.tsx', '.json', '.scss', '.css'],
       alias: [
         {
           find: 'vue-i18n',