From 5b143a2b3f0d690f6a48b251203c68de97abe55d Mon Sep 17 00:00:00 2001
From: 梁灏 <admin@aresn.com>
Date: Fri, 15 Mar 2019 15:44:27 +0800
Subject: [PATCH] fixed #5401 , close #5403

---
 examples/routers/tabs.vue    | 48 +++++++++---------------------------------------
 src/components/tabs/pane.vue |  5 +++++
 src/components/tabs/tabs.vue |  8 ++++++++
 3 files changed, 22 insertions(+), 39 deletions(-)

diff --git a/examples/routers/tabs.vue b/examples/routers/tabs.vue
index 5c6edac..38ac2f0 100644
--- a/examples/routers/tabs.vue
+++ b/examples/routers/tabs.vue
@@ -1,48 +1,18 @@
 <template>
-    <Tabs type="card" :animated="true" closable @on-tab-remove="handleTabRemove" :beforeRemove="handleBeforeRemove">
-        <Wrapper>
-            <TabPane label="标签一" v-if="tab0">标签一的内容</TabPane>
-            <TabPane label="标签二" v-if="tab1">标签二的内容</TabPane>
-            <TabPane label="标签三" v-if="tab2">标签三的内容</TabPane>
-        </Wrapper>
-    </Tabs>
-
-    <!--<Tabs type="card" :animated="true" closable @on-tab-remove="handleTabRemove" :beforeRemove="handleBeforeRemove">-->
-        <!--<TabPane label="标签一" v-if="tab0">标签一的内容</TabPane>-->
-        <!--<TabPane label="标签二" v-if="tab1">标签二的内容</TabPane>-->
-        <!--<TabPane label="标签三" v-if="tab2">标签三的内容</TabPane>-->
-    <!--</Tabs>-->
+    <div>
+        <Button @click="showSecond = !showSecond">change</Button>
+        <Tabs value="name1">
+            <TabPane label="标签一" name="name1" :index="1">标签一的内容</TabPane>
+            <TabPane label="标签二" name="name2" :index="2" v-if="showSecond">标签二的内容</TabPane>
+            <TabPane label="标签三" name="name3" :index="3">标签三的内容</TabPane>
+        </Tabs>
+    </div>
 </template>
 <script>
-    import Wrapper from '../components/wrapper.vue';
     export default {
-        components: { Wrapper },
         data () {
             return {
-                tab0: true,
-                tab1: true,
-                tab2: true
-            }
-        },
-        methods: {
-            handleTabRemove (name) {
-                this['tab' + name] = false;
-            },
-            handleBeforeRemove (index) {
-                console.log(index);
-
-                return new Promise((resolve, reject) => {
-                    this.$Modal.confirm({
-                        title: 'Title',
-                        content: '<p>Content of dialog</p><p>Content of dialog</p>',
-                        onOk: () => {
-                            resolve();
-                        },
-                        onCancel: () => {
-                            reject();
-                        }
-                    });
-                });
+                showSecond: false
             }
         }
     }
diff --git a/src/components/tabs/pane.vue b/src/components/tabs/pane.vue
index 7a14a76..318e011 100644
--- a/src/components/tabs/pane.vue
+++ b/src/components/tabs/pane.vue
@@ -30,6 +30,11 @@
             tab: {
                 type: String
             },
+            // 在 TabPane 使用 v-if 时,并不会按照预先的顺序渲染,这时可设置 index,并从小到大排序
+            // 数值需大于 0
+            index: {
+                type: Number
+            }
         },
         data () {
             return {
diff --git a/src/components/tabs/tabs.vue b/src/components/tabs/tabs.vue
index b3e8062..5f1000d 100644
--- a/src/components/tabs/tabs.vue
+++ b/src/components/tabs/tabs.vue
@@ -187,6 +187,14 @@
                     }
                 });
 
+                // 在 TabPane 使用 v-if 时,并不会按照预先的顺序渲染,这时可设置 index,并从小到大排序
+                TabPanes.sort((a, b) => {
+                    if (a.index && b.index) {
+                        return a.index > b.index ? 1 : -1;
+                    } else {
+                        return 1;
+                    }
+                });
                 return TabPanes;
             },
             updateNav () {
--
libgit2 0.21.4