浏览代码

feat: 增加全局配置,cascader会乱

gemercheung 1 年之前
父节点
当前提交
f6a3524d07
共有 3 个文件被更改,包括 61 次插入41 次删除
  1. 28 27
      components.d.ts
  2. 18 8
      pnpm-lock.yaml
  3. 15 6
      src/layout/basic/index.vue

+ 28 - 27
components.d.ts

@@ -7,32 +7,33 @@ export {}
 
 declare module 'vue' {
   export interface GlobalComponents {
-    AButton: typeof import('ant-design-vue/es')['Button']
-    ACascader: typeof import('ant-design-vue/es')['Cascader']
-    AForm: typeof import('ant-design-vue/es')['Form']
-    AFormItem: typeof import('ant-design-vue/es')['FormItem']
-    AInput: typeof import('ant-design-vue/es')['Input']
-    ASelect: typeof import('ant-design-vue/es')['Select']
-    ATextarea: typeof import('ant-design-vue/es')['Textarea']
-    AUpload: typeof import('ant-design-vue/es')['Upload']
-    RouterLink: typeof import('vue-router')['RouterLink']
-    RouterView: typeof import('vue-router')['RouterView']
-    TitleBar: typeof import('./src/components/TitleBar/index.vue')['default']
-    VanButton: typeof import('vant/es')['Button']
-    VanCascader: typeof import('vant/es')['Cascader']
-    VanCellGroup: typeof import('vant/es')['CellGroup']
-    VanDivider: typeof import('vant/es')['Divider']
-    VanField: typeof import('vant/es')['Field']
-    VanForm: typeof import('vant/es')['Form']
-    VanIcon: typeof import('vant/es')['Icon']
-    VanList: typeof import('vant/es')['List']
-    VanPicker: typeof import('vant/es')['Picker']
-    VanPopup: typeof import('vant/es')['Popup']
-    VanRadio: typeof import('vant/es')['Radio']
-    VanRadioGroup: typeof import('vant/es')['RadioGroup']
-    VanRate: typeof import('vant/es')['Rate']
-    VanTab: typeof import('vant/es')['Tab']
-    VanTabs: typeof import('vant/es')['Tabs']
-    VanUploader: typeof import('vant/es')['Uploader']
+    AButton: typeof import('ant-design-vue/es')['Button'];
+    ACascader: typeof import('ant-design-vue/es')['Cascader'];
+    AConfigProvider: typeof import('ant-design-vue/es')['ConfigProvider'];
+    AForm: typeof import('ant-design-vue/es')['Form'];
+    AFormItem: typeof import('ant-design-vue/es')['FormItem'];
+    AInput: typeof import('ant-design-vue/es')['Input'];
+    ASelect: typeof import('ant-design-vue/es')['Select'];
+    ATextarea: typeof import('ant-design-vue/es')['Textarea'];
+    AUpload: typeof import('ant-design-vue/es')['Upload'];
+    RouterLink: typeof import('vue-router')['RouterLink'];
+    RouterView: typeof import('vue-router')['RouterView'];
+    TitleBar: typeof import('./src/components/TitleBar/index.vue')['default'];
+    VanButton: typeof import('vant/es')['Button'];
+    VanCascader: typeof import('vant/es')['Cascader'];
+    VanCellGroup: typeof import('vant/es')['CellGroup'];
+    VanDivider: typeof import('vant/es')['Divider'];
+    VanField: typeof import('vant/es')['Field'];
+    VanForm: typeof import('vant/es')['Form'];
+    VanIcon: typeof import('vant/es')['Icon'];
+    VanList: typeof import('vant/es')['List'];
+    VanPicker: typeof import('vant/es')['Picker'];
+    VanPopup: typeof import('vant/es')['Popup'];
+    VanRadio: typeof import('vant/es')['Radio'];
+    VanRadioGroup: typeof import('vant/es')['RadioGroup'];
+    VanRate: typeof import('vant/es')['Rate'];
+    VanTab: typeof import('vant/es')['Tab'];
+    VanTabs: typeof import('vant/es')['Tabs'];
+    VanUploader: typeof import('vant/es')['Uploader'];
   }
 }

+ 18 - 8
pnpm-lock.yaml

@@ -38,7 +38,7 @@ dependencies:
     version: 5.1.12(@wangeditor/editor@5.1.23)(vue@3.2.45)
   ant-design-vue:
     specifier: 4.x
-    version: 4.1.2(vue@3.2.45)
+    version: 4.0.0(vue@3.2.45)
   axios:
     specifier: 1.2.1
     version: 1.2.1
@@ -252,6 +252,16 @@ packages:
     resolution: {integrity: sha512-vHbT+zJEVzllwP+CM+ul7reTEfBR0vgxFe7+lREAsAA7YGsYpboiq2sQNeQeRvh09GfQgs/GyFEvZpJ9cLXpXA==}
     dev: false
 
+  /@ant-design/icons-vue@6.1.0(vue@3.2.45):
+    resolution: {integrity: sha512-EX6bYm56V+ZrKN7+3MT/ubDkvJ5rK/O2t380WFRflDcVFgsvl3NLH7Wxeau6R8DbrO5jWR6DSTC3B6gYFp77AA==}
+    peerDependencies:
+      vue: '>=3.0.3'
+    dependencies:
+      '@ant-design/colors': 6.0.0
+      '@ant-design/icons-svg': 4.4.2
+      vue: 3.2.45
+    dev: false
+
   /@ant-design/icons-vue@7.0.1(vue@3.2.45):
     resolution: {integrity: sha512-eCqY2unfZK6Fe02AwFlDHLfoyEFreP6rBwAZMIJ1LugmfMiVgwWDYlp1YsRugaPtICYOabV1iWxXdP12u9U43Q==}
     peerDependencies:
@@ -2076,14 +2086,14 @@ packages:
     engines: {node: '>=12'}
     dev: true
 
-  /ant-design-vue@4.1.2(vue@3.2.45):
-    resolution: {integrity: sha512-ynFkDJLlHgumeK6Hr1UZ7PvQNZ1uBcri/pmejBdS3kRqHeA5VRsxneYDwa8YxA+uYB5YfT2jpYsSHsiMiCjRGg==}
+  /ant-design-vue@4.0.0(vue@3.2.45):
+    resolution: {integrity: sha512-6V8DxHPv3HJYDdv48W/KFOUjeZDsYJhFlk13HFSKCJSR2MQs4YnPIAC+rWie9vYcVEKbO+cQDqiOM3cBoHMNUQ==}
     engines: {node: '>=12.22.0'}
     peerDependencies:
       vue: '>=3.2.0'
     dependencies:
       '@ant-design/colors': 6.0.0
-      '@ant-design/icons-vue': 7.0.1(vue@3.2.45)
+      '@ant-design/icons-vue': 6.1.0(vue@3.2.45)
       '@babel/runtime': 7.23.9
       '@ctrl/tinycolor': 3.6.1
       '@emotion/hash': 0.9.1
@@ -4361,7 +4371,7 @@ packages:
     dev: true
 
   /filename-reserved-regex@2.0.0:
-    resolution: {integrity: sha512-lc1bnsSr4L4Bdif8Xb/qrtokGbq5zlsms/CYH8PP+WtCkGNF65DPiQY8vG3SakEdRn8Dlnm+gW/qWKKjS5sZzQ==}
+    resolution: {integrity: sha1-q/c9+rc10EVECr/qLZHzieu/oik=}
     engines: {node: '>=4'}
     dev: true
 
@@ -7981,14 +7991,14 @@ packages:
       - supports-color
 
   /sort-keys-length@1.0.1:
-    resolution: {integrity: sha512-GRbEOUqCxemTAk/b32F2xa8wDTs+Z1QHOkbhJDQTvv/6G3ZkbJ+frYWsTcc7cBB3Fu4wy4XlLCuNtJuMn7Gsvw==}
+    resolution: {integrity: sha1-nLb09OnkgVWmqgZx7dM2/xR5oYg=}
     engines: {node: '>=0.10.0'}
     dependencies:
       sort-keys: 1.1.2
     dev: true
 
   /sort-keys@1.1.2:
-    resolution: {integrity: sha512-vzn8aSqKgytVik0iwdBEi+zevbTYZogewTUM6dtpmGwEcdzbub/TX4bCzRhebDCRC3QzXgJsLRKB2V/Oof7HXg==}
+    resolution: {integrity: sha1-RBttTTRnmPG05J6JIK37oOVD+a0=}
     engines: {node: '>=0.10.0'}
     dependencies:
       is-plain-obj: 1.1.0
@@ -8686,7 +8696,7 @@ packages:
     dev: true
 
   /trim-repeated@1.0.0:
-    resolution: {integrity: sha512-pkonvlKk8/ZuR0D5tLW8ljt5I8kmxp2XKymhepUeOdCEfKpZaktSArkLHZt76OB1ZvO9bssUsDty4SWhLvZpLg==}
+    resolution: {integrity: sha1-42RqLqTokTEr9+rObPsFOAvAHCE=}
     engines: {node: '>=0.10.0'}
     dependencies:
       escape-string-regexp: 1.0.5

+ 15 - 6
src/layout/basic/index.vue

@@ -1,11 +1,13 @@
 <template>
   <div class="main-page">
-    <RouterView v-slot="{ Component }" v-if="$route.meta.keepAlive">
-      <keep-alive :include="['homePage', 'index']">
-        <component :is="Component" :key="$route.path" />
-      </keep-alive>
-    </RouterView>
-    <RouterView v-else :key="$route.path" />
+    <a-config-provider :getPopupContainer="getPopupContainer">
+      <RouterView v-slot="{ Component }" v-if="$route.meta.keepAlive">
+        <keep-alive :include="['homePage', 'index']">
+          <component :is="Component" :key="$route.path" />
+        </keep-alive>
+      </RouterView>
+      <RouterView v-else :key="$route.path" />
+    </a-config-provider>
   </div>
 </template>
 
@@ -14,6 +16,13 @@
   onMounted(() => {
     // activeTab.value = tabItem.findIndex((item) => item.key === router.currentRoute.value.path.replace('/', ''));
   });
+  const getPopupContainer = (node) => {
+    if (node) {
+      return node.parentNode;
+    } else {
+      return document.body;
+    }
+  };
 </script>
 
 <style scoped lang="scss">