ソースを参照

修复编译后主题色切换不生效黑屏的问题

zhangdaiscott 2 年 前
コミット
6c2dfc29f2
1 ファイル変更41 行追加24 行削除
  1. 41 24
      build/vite/plugin/theme.ts

+ 41 - 24
build/vite/plugin/theme.ts

@@ -14,31 +14,47 @@ export function configThemePlugin(isBuild: boolean): PluginOption[] {
     mixLighten,
     tinycolor,
   });
-  const plugin = [
-    viteThemePlugin({
-      resolveSelector: (s) => {
-        s = s.trim();
-        switch (s) {
-          case '.ant-steps-item-process .ant-steps-item-icon > .ant-steps-icon':
-            return '.ant-steps-item-icon > .ant-steps-icon';
-          case '.ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled)':
-          case '.ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled):hover':
-          case '.ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled):active':
-            return s;
-          case '.ant-steps-item-icon > .ant-steps-icon':
-            return s;
-          case '.ant-select-item-option-selected:not(.ant-select-item-option-disabled)':
+
+  // update-begin-修复编译后主题色切换不生效黑屏的问题-----------------------
+  // https://github.com/vbenjs/vue-vben-admin/issues/1445
+  // 抽取出viteThemePlugin插件,下方会根据不同环境设置enforce
+  const vite_theme_plugin = viteThemePlugin({
+    resolveSelector: (s) => {
+      s = s.trim();
+      switch (s) {
+        case '.ant-steps-item-process .ant-steps-item-icon > .ant-steps-icon':
+          return '.ant-steps-item-icon > .ant-steps-icon';
+        case '.ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled)':
+        case '.ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled):hover':
+        case '.ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled):active':
+          return s;
+        case '.ant-steps-item-icon > .ant-steps-icon':
+          return s;
+        case '.ant-select-item-option-selected:not(.ant-select-item-option-disabled)':
+          return s;
+        default:
+          if (s.indexOf('.ant-btn') >= -1) {
+            // 按钮被重新定制过,需要过滤掉class防止覆盖
             return s;
-          default:
-            if (s.indexOf('.ant-btn') >= -1) {
-              // 按钮被重新定制过,需要过滤掉class防止覆盖
-              return s;
-            }
-        }
-        return s.startsWith('[data-theme') ? s : `[data-theme] ${s}`;
-      },
-      colorVariables: [...getThemeColors(), ...colors],
-    }),
+          }
+      }
+      return s.startsWith('[data-theme') ? s : `[data-theme] ${s}`;
+    },
+    colorVariables: [...getThemeColors(), ...colors],
+  });
+  vite_theme_plugin.forEach(function (item) {
+    //对vite:theme插件特殊配置
+    if ('vite:theme' === item.name) {
+      // 打包时去除enforce: "post",vite 2.6.x适配,否则生成app-theme-style为空,因为async transform(code, id) {的code没有正确获取
+      if (isBuild) {
+        delete item.enforce;
+      }
+    }
+  });
+  // update-end-修复编译后主题色切换不生效黑屏的问题-----------------------
+
+  const plugin = [
+    vite_theme_plugin,
     antdDarkThemePlugin({
       preloadFiles: [
         path.resolve(process.cwd(), 'node_modules/ant-design-vue/dist/antd.less'),
@@ -58,6 +74,7 @@ export function configThemePlugin(isBuild: boolean): PluginOption[] {
         // #8b949e
         'text-color-secondary': '#8b949e',
         'border-color-base': '#303030',
+        'header-light-bottom-border-color': '#303030',
         // 'border-color-split': '#30363d',
         'item-active-bg': '#111b26',
         'app-content-background': '#1e1e1e',