zhenyulei 6 years ago
parent
commit
59f709803e

+ 1 - 0
src/packages/avatar/avatar.scss

@@ -17,6 +17,7 @@
     .text{
         display: inline-block;
         width:100%;
+        height: 100%;
         text-align: center;
         overflow: hidden;
     }

+ 1 - 1
src/packages/avatar/avatar.vue

@@ -47,7 +47,7 @@ export default {
     },
     methods: {
         activeAvatar(){
-            this.$emit('activeAvatar');
+            this.$emit('active-avatar');
         }
     }
 }

+ 3 - 3
src/packages/avatar/demo.vue

@@ -15,11 +15,11 @@
     </div>
     <h4>修改背景色</h4>
     <div class="white-bg">
-      <nut-avatar bgcolor="#f0250f"></nut-avatar>
+      <nut-avatar bg-color="#f0250f"></nut-avatar>
     </div>
     <h4>可以修改头像的内容</h4>
     <div class="white-bg">
-      <nut-avatar size="large" bgIcon>U</nut-avatar>
+      <nut-avatar size="large" bg-icon>U</nut-avatar>
     </div>
     <h4>修改背景图片</h4>
     <div class="white-bg">
@@ -36,7 +36,7 @@
     </div>
     <h4>点击头像有触发事件</h4>
     <div class="white-bg">
-      <nut-avatar @activeAvatar="activeAvatar"></nut-avatar>
+      <nut-avatar @active-avatar="activeAvatar"></nut-avatar>
     </div>
   </div>
 </template>

+ 26 - 42
src/packages/avatar/doc.md

@@ -4,21 +4,6 @@
 
 ## 基本用法
 
-```html
-<nut-avatar></nut-avatar>
-```
-
-## 设置背景色
-
-```html
-<nut-avatar 
-    bgColor="#87d068"
-></nut-avatar>
-```
-
-
-## 设置大小
-
 内置 **smal** / **normal** / **large** 三种尺寸规格
 
 ```html
@@ -27,45 +12,44 @@
 <nut-avatar size="small"></nut-avatar>
 ```
 
-## 设置头像的形状类型
+## 修改形状类型
+
 ```html
-<nut-avatar 
-  shape="square"
-></nut-avatar>
+<nut-avatar size="large" shape="square"></nut-avatar>
+<nut-avatar size="normal" shape="square"></nut-avatar>
+<nut-avatar size="small" shape="square"></nut-avatar>
 ```
 
+## 修改背景色
+
+```html
+<nut-avatar bg-color="#f0250f"></nut-avatar>
+```
 
 ## 设置头像的文本内容
+
 ```html
-<nut-avatar 
-  :size="30"
-  bgIcon=""
->U</nut-avatar>
+<nut-avatar size="large" bg-icon>U</nut-avatar>
 ```
 
-## 设置头像背景图片
+## 设置背景图片
 ```html
-<nut-avatar 
-  bgIcon="" 
-  bgImage="http://img30.360buyimg.com/uba/jfs/t1/84318/29/2102/10483/5d0704c1Eb767fa74/fc456b03fdd6cbab.png"
->
-</nut-avatar>
+<nut-avatar
+  bg-icon
+  bg-image="http://img30.360buyimg.com/uba/jfs/t1/84318/29/2102/10483/5d0704c1Eb767fa74/fc456b03fdd6cbab.png"
+></nut-avatar>
 ```
 
-## 设置头像Icon图标
+## 设置头像ICON图标
 ```html
 <nut-avatar
-  bgIcon="http://img10.360buyimg.com/uba/jfs/t1/69001/30/2126/550/5d06f947Effd02898/95f18e668670e598.png"
->
-</nut-avatar>
+  bg-icon="http://img10.360buyimg.com/uba/jfs/t1/69001/30/2126/550/5d06f947Effd02898/95f18e668670e598.png"
+></nut-avatar>
 ```
 
 ## 点击头像有触发事件
 ```html
-<nut-avatar 
-  @activeAvatar="activeAvatar"
->
-</nut-avatar>
+<nut-avatar @active-avatar="activeAvatar"></nut-avatar>
 ```
 
 
@@ -73,15 +57,15 @@
 
 | 字段 | 说明 | 类型 | 默认值
 |----- | ----- | ----- | ----- 
-| bgColor | 设置头像背景色 | String | #eee
+| bg-color | 设置头像背景色 | String | #eee
 | size | 设置头像的大小,提供三种:large /normal/small | String | normal
-| shape | 设置头像的形状,默认是圆形,可以设置为square方形 | String | --
-| bgImage | 设置头像的背景图片 | String | --
-| bgIcon | 设置头像的icon图标 | String | --
+| shape | 设置头像的形状,默认是圆形,可以设置为square方形 | String | round
+| bg-image | 设置头像的背景图片 | String | --
+| bg-icon | 设置头像的icon图标 | String | --
 
 
 ## Event
 
 | 字段 | 说明 | 回调参数 
 |----- | ----- | ----- 
-| activeAvatar | 点击头像触发事件 | -- 
+| active-avatar | 点击头像触发事件 | -- 

+ 0 - 8
src/packages/tab/__test__/tab.spec.js

@@ -61,13 +61,6 @@ describe('Tab.vue', () => {
               expect(wrapper.findAll('.nut-title-nav-leftnav').at(0).is('.nut-tab-disable')).toBe(true)
           }) 
     });
-    it('是否显示关闭按钮', () => {
-        wrapper.setProps({ closable: true });
-        return Vue.nextTick().then(function () {
-            expect(wrapper.contains('.close-btn')).toBe(true);
-            
-        })
-    });
     it('当前默认选中的tab', () => {
         wrapper.setProps({ positionNav: 'top' });
         return Vue.nextTick().then(function () {
@@ -84,7 +77,6 @@ describe('Tab.vue', () => {
             wrapper.findAll('.nut-title-nav-list').at(1).trigger('click');
             expect(wrapper.findAll('.nut-title-nav-list').at(1).is('.nut-tab-active')).toBe(true)
       })
-        
     });
 });
 

+ 10 - 10
src/packages/tab/demo.vue

@@ -13,20 +13,20 @@
         v-for="value in editableTabs"
         v-bind:key="value.tabTitle"
         :tab-title="value.tabTitle"
-        :iconUrl="value.iconUrl"
+        :icon-url="value.iconUrl"
         v-html="value.content"
       ></nut-tab-panel>
     </nut-tab>
-    <nut-tab @tab-switch="tabSwitch" positionNav="left">
+    <nut-tab @tab-switch="tabSwitch" position-nav="left">
       <nut-tab-panel
         v-for="value in editableTabs"
         v-bind:key="value.tabTitle"
         :tab-title="value.tabTitle"
-        :iconUrl="value.iconUrl"
+        :icon-url="value.iconUrl"
         v-html="value.content"
       ></nut-tab-panel>
     </nut-tab>
-    <nut-tab @tab-switch="tabSwitch" positionNav="right">
+    <nut-tab @tab-switch="tabSwitch" position-nav="right">
       <nut-tab-panel
         v-for="value in editableTabs"
         v-bind:key="value.tabTitle"
@@ -35,12 +35,12 @@
         v-html="value.content"
       ></nut-tab-panel>
     </nut-tab>
-    <nut-tab @tab-switch="tabSwitch" positionNav="bottom">
+    <nut-tab @tab-switch="tabSwitch" position-nav="bottom">
       <nut-tab-panel
         v-for="value in editableTabs"
         v-bind:key="value.tabTitle"
         :tab-title="value.tabTitle"
-        :iconUrl="value.iconUrl"
+        :icon-url="value.iconUrl"
         v-html="value.content"
       ></nut-tab-panel>
     </nut-tab>
@@ -48,7 +48,7 @@
     <h4>禁止选中,默认选中某个标签</h4>
     <h4>如需要更新页面,请将监听变化的数据传入init-data</h4>
 
-    <nut-tab :defIndex="defIndex" class="customer-css" @tab-switch="tabSwitch" :contentShow="true" :init-data="disableTabs">
+    <nut-tab :def-index="defIndex" class="customer-css" @tab-switch="tabSwitch" :contentShow="true" :init-data="disableTabs">
       <nut-tab-panel
         v-for="value in disableTabs"
         v-bind:key="value.tabTitle"
@@ -206,9 +206,9 @@ export default {
   .nut-title-nav-list {
     background: #fff;
     border-left: 1px solid #e4e7ed;
-  }
-  .nut-title-nav-list:first-child {
-    border-left: 0;
+    &:first-child{
+      border-left: 0;
+    }
   }
   .nut-tab-active {
     background: $primary-color;

+ 16 - 16
src/packages/tab/doc.md

@@ -6,9 +6,9 @@
 
 ```html
 <nut-tab @tab-switch="tabSwitch">
-    <nut-tab-panel tabTitle="页签1">页签1</nut-tab-panel>
-    <nut-tab-panel tabTitle="页签2">页签2</nut-tab-panel>
-    <nut-tab-panel tabTitle="页签3">页签3</nut-tab-panel>
+    <nut-tab-panel tab-title="页签1">页签1</nut-tab-panel>
+    <nut-tab-panel tab-title="页签2">页签2</nut-tab-panel>
+    <nut-tab-panel tab-title="页签3">页签3</nut-tab-panel>
 </nut-tab>
 ```
 ```javascript
@@ -21,15 +21,15 @@ export default {
 };
 ```
 
-使用数据渲染,支持上/下/左/右四个样式;
+## 使用数据渲染,支持上/下/左/右四个样式;
 
 ```html
-<nut-tab @tab-switch="tabSwitch"  positionNav="bottom">
+<nut-tab @tab-switch="tabSwitch"  position-nav="bottom">
     <nut-tab-panel 
       v-for="value in editableTabs" 
       v-bind:key="value.tabTitle" 
-      :tabTitle="value.tabTitle" 
-      :iconUrl="value.tabUrl" 
+      :tab-title="value.tabTitle" 
+      :icon-url="value.tabUrl" 
       v-html="value.content"
     >
     </nut-tab-panel>
@@ -72,14 +72,14 @@ export default {
 };
 ```
 
-禁止选中,默认选中某个标签,如需更新数组后,重新渲染Tab页面,请将更新数组传入init-data
+## 禁止选中,默认选中某个标签,如需更新数组后,重新渲染Tab页面,请将更新数组传入init-data
 
 ```html
-<nut-tab :defIndex="1" class="customer-css" @tab-switch="tabSwitch" :contentShow="true" :init-data="disableTabs">
+<nut-tab :def-index="1" class="customer-css" @tab-switch="tabSwitch" :contentShow="true" :init-data="disableTabs">
     <nut-tab-panel
     v-for="value in disableTabs"
     v-bind:key="value.tabTitle"
-    :tabTitle="value.tabTitle"
+    :tab-title="value.tabTitle"
     :disable="value.disable"
     v-html="value.content"
   ></nut-tab-panel>
@@ -195,9 +195,8 @@ export default {
 
 | 字段 | 说明 | 类型 | 默认值
 |----- | ----- | ----- | ----- 
-| positionNav | 页签栏的分布,可选值 top/bottom/left/right | String | top
-| defIndex | 默认选中的页签栏 | String | 1
-| contentShow | 是否显示tab内容 | Boolean | true
+| position-nav | 页签栏的分布,可选值 top/bottom/left/right | String | top
+| def-index | 默认选中的页签栏 | String | 1
 | init-data | 监听数据变化,渲染更新页面 | Array | []
 
 
@@ -206,13 +205,14 @@ export default {
 
 | 字段 | 说明 | 类型 | 默认值
 |----- | ----- | ----- | ----- 
-| tabTitle | 页签的标题 | String | ''
-| iconUrl | 页签的图标地址 | String | ''
+| tab-title | 页签的标题 | String | ''
+| icon-url | 页签的图标地址 | String | ''
 | content | 页签的自定义内容 | String | ''
+| disable | 是否禁用页签 |Boolean|false|
 
 ### Event
 
 | 事件名称 | 说明 | 回调参数 
 |----- | ----- | ----- 
-| tabSwitch | 切换页签时触发事件 | 点击的索引值和触发元素
+| tab-switch | 切换页签时触发事件 | 点击的索引值和触发元素
 

+ 3 - 18
src/packages/tab/tab.scss

@@ -5,7 +5,7 @@
     font-size: 12px;
     background:#eee;
 }
-.nut-tab-leftnav{
+.nut-tab-horizontal{
     display: flex;
     flex-direction: row;
     position: relative;
@@ -25,7 +25,7 @@
     top: 0px;
     border-radius: 50%;
 }
-.nut-tab-leftnav .close-btn{
+.nut-tab-horizontal .close-btn{
     position: absolute;
     width: 17px;
     height: 17px;
@@ -118,13 +118,13 @@
 
 .nut-title-nav-list{
     flex: 1;
-    cursor: pointer;
     position: relative;
     flex-direction: row;
     align-items:center;
     justify-content:center;
     display: flex;
     background: #fff;
+    box-sizing: border-box;
 }
 .nut-title-nav-leftnav{
     flex:1;
@@ -142,15 +142,6 @@
     align-items: center;
     position: relative;
 }
-.nut-tab-link{
-    color: #333;
-    display: flex;
-    align-items:center;
-    justify-content:center;
-    font-size:12px;
-    text-decoration:none;
-    line-height: 1;
-}
 .nut-tab-icon{
     display: inline-block;
     margin-right: 5px;
@@ -162,12 +153,6 @@
 .nut-tab-active{
     background: #fff;
     border: 0;
-    .nut-tab-link{
-        font-size: 14px;
-        font-weight: bold;
-        border: 0;
-        color: #333;
-    }
 }
 .nut-tab-item {  
     height: 200px;

+ 72 - 109
src/packages/tab/tab.vue

@@ -1,75 +1,67 @@
 <template>
     <div v-if='showTabs'>
-        <div class="nut-tab" :class="{'nut-tab-leftnav' : positionNavCss}">
+        <div class="nut-tab" :class="{'nut-tab-horizontal' : positionNavCss}">
             <template v-if="positionNav=='top'">
-                <div :class="['nut-tab-title',tabType]">
+                <div class="nut-tab-title">
                     <b class="nav-bar" :style="[{transform:'translateX('+initX+'px)'},{width:navWidth+'px'}]"></b>
                     <span v-for="(value,index) in tabTitleList"  
-                    v-bind:key="index"
-                    v-on:click="switchTab(index,$event,value.disable)" class="nut-title-nav-list" 
+                    :key="index"
+                    @click="switchTab(index,$event,value.disable)" class="nut-title-nav-list" 
                     :class="['nut-title-nav',{'nut-tab-disable':value.disable},{'nut-tab-active' : activeIndex == index}]"
                     >
-                    <a :href="value.href" :clstag="value.clstag" class="nut-tab-link" v-on:click="switchTabLink(index,$event,value.disable)">
                     <i class="nut-tab-icon" :style="{backgroundImage: 'url('+value.iconUrl+')'}" v-if="value.iconUrl"></i>
                     {{value.tabTitle}}
-                    </a>
                     </span>
                 </div>
-                <div class="nut-tab-item"  v-show="contentShow">
+                <div class="nut-tab-item">
                     <slot></slot>
                 </div>  
             </template>
             <template v-else-if="positionNav=='left'">
-                    <div :class="['nut-tab-title-leftnav',tabType]">
-                        <b class="nav-bar-left" :style="[{transform:'translateY('+initX+'px)'},{height:navWidth+'px'}]"></b>
-                        <span v-for="(value,index) in tabTitleList" 
-                        v-bind:key="index"
-                        v-on:click="switchTab(index,$event,value.disable)" class="nut-title-nav-leftnav" 
-                        :class="['nut-title-nav',{'nut-tab-disable':value.disable},{'nut-tab-active' : activeIndex == index}]"
-                        >
-                        <a :href="value.href" :clstag="value.clstag" class="nut-tab-link" v-on:click="switchTabLink(index,$event,value.disable)">
-                        <i class="nut-tab-icon" :style="{backgroundImage: 'url('+value.iconUrl+')'}" v-if="value.iconUrl"></i>
-                        {{value.tabTitle}}
-                        </a>
-                        </span>
-                    </div>
-                    <div class="nut-tab-item"  v-show="contentShow">
-                        <slot></slot>
-                    </div>  
+                <div class="nut-tab-title-leftnav">
+                    <b class="nav-bar-left" :style="[{transform:'translateY('+initX+'px)'},{height:navWidth+'px'}]"></b>
+                    <span v-for="(value,index) in tabTitleList" 
+                    :key="index"
+                    @click="switchTab(index,$event,value.disable)" class="nut-title-nav-leftnav" 
+                    :class="['nut-title-nav',{'nut-tab-disable':value.disable},{'nut-tab-active' : activeIndex == index}]"
+                    >
+                    <i class="nut-tab-icon" :style="{backgroundImage: 'url('+value.iconUrl+')'}" v-if="value.iconUrl"></i>
+                    {{value.tabTitle}}
+                    </span>
+                </div>
+                <div class="nut-tab-item">
+                    <slot></slot>
+                </div>  
             </template>
             <template v-else-if="positionNav=='right'">
-                    <div class="nut-tab-item"  v-show="contentShow">
-                        <slot></slot>
-                    </div>
-                    <div :class="['nut-tab-title-rightnav',tabType]">
-                        <b class="nav-bar-right" :style="[{transform:'translateY('+initX+'px)'},{height:navWidth+'px'}]"></b>
-                        <span v-for="(value,index) in tabTitleList" 
-                        v-bind:key="index"
-                        v-on:click="switchTab(index,$event,value.disable)" class="nut-title-nav-rightnav" 
-                        :class="['nut-title-nav',{'nut-tab-disable':value.disable},{'nut-tab-active' : activeIndex == index}]"
-                        >
-                        <a :href="value.href" :clstag="value.clstag" class="nut-tab-link" v-on:click="switchTabLink(index,$event,value.disable)">
-                        {{value.tabTitle}}
-                        <i class="nut-tab-icon" :style="{backgroundImage: 'url('+value.iconUrl+')'}" v-if="value.iconUrl"></i>
-                        </a>
-                        </span>
+                <div class="nut-tab-item">
+                    <slot></slot>
+                </div>
+                <div class="nut-tab-title-rightnav">
+                    <b class="nav-bar-right" :style="[{transform:'translateY('+initX+'px)'},{height:navWidth+'px'}]"></b>
+                    <span v-for="(value,index) in tabTitleList" 
+                    :key="index"
+                    @click="switchTab(index,$event,value.disable)" class="nut-title-nav-rightnav" 
+                    :class="['nut-title-nav',{'nut-tab-disable':value.disable},{'nut-tab-active' : activeIndex == index}]"
+                    >
+                    {{value.tabTitle}}
+                    <i class="nut-tab-icon" :style="{backgroundImage: 'url('+value.iconUrl+')'}" v-if="value.iconUrl"></i>
+                    </span>
                 </div>
             </template>
             <template v-else-if="positionNav=='bottom'">
-                <div class="nut-tab-item"  v-show="contentShow">
+                <div class="nut-tab-item">
                     <slot></slot>
                 </div> 
-                    <div :class="['nut-tab-title-bottomnav',tabType]">
+                    <div class="nut-tab-title-bottomnav">
                     <b class="nav-bar-bottom" :style="[{transform:'translateX('+initX+'px)'},{width:navWidth+'px'}]"></b>
                     <span v-for="(value,index) in tabTitleList" 
-                    v-bind:key="index"
-                    v-on:click="switchTab(index,$event,value.disable)" class="nut-title-nav-list" 
+                    :key="index"
+                    @click="switchTab(index,$event,value.disable)" class="nut-title-nav-list" 
                     :class="['nut-title-nav',{'nut-tab-disable':value.disable},{'nut-tab-active' : activeIndex == index}]"
                     >
-                    <a :href="value.href" :clstag="value.clstag" class="nut-tab-link" v-on:click="switchTabLink(index,$event,value.disable)">
                     <i class="nut-tab-icon" :style="{backgroundImage: 'url('+value.iconUrl+')'}" v-if="value.iconUrl"></i>
                     {{value.tabTitle}}
-                    </a>
                     </span>
                 </div>
             </template>
@@ -80,26 +72,14 @@
 export default {
     name:'nut-tab',
     props: {
-        'type':{
-            type:String,
-            default:'based',
-        },
         'defIndex':{
             type:Number,
             default:0,
         },
-        'contentShow':{
-            type:Boolean,
-            default:true,
-        },
         'positionNav':{
             type:String,
             default:'top',
         },
-        'closable':{
-            type:Boolean,
-            default:false,
-        },
         'initData':{
             type:Array,
             default:function(){
@@ -111,7 +91,6 @@ export default {
         return {
             tabTitleList:[],
             activeIndex:this.defIndex,
-            initIndex:0,
             showTabs:true,
             initX:'0px',
             navWidth:0,
@@ -129,59 +108,46 @@ export default {
        }
     },
     computed:{
-        tabType:function(){
-            return this.type;
-        },
         positionNavCss:function(){
-            if(this.positionNav=='top' || this.positionNav=='bottom'){
-                return false;
-            }else{
-                return true;
-            }
+            if(this.positionNav==='left' || this.positionNav==='right') return true;
         },
     },
     mounted() {
         this.$nextTick(()=>{
-            this.$slots.default && this.initTab(this.$slots.default); 
+            this.$slots.default && this.updeteTab(this.$slots.default); 
         })     
     },
     methods: {
         updeteTab:function(){
-            setTimeout(()=>{
-                let slot = [...this.$slots.default];
+            setTimeout(()=>{;
                 this.tabTitleList = [];
                 this.activeIndex = this.defIndex;
-                this.initTab(slot);  
+                this.initTab([...this.$slots.default]);  
             },100);  
         },
-        initTab:function(params){
-            let slot = params;
+        initTab:function(slot){
             for(let i = 0; i < slot.length; i++) {
-                let aa = slot[i].tag;
-                if(typeof(aa)=='string'){
-                    if(slot[i].tag.indexOf('nut-tab-panel') != -1) {
-                        let item ={
-                        'tabTitle':slot[i].data.attrs['tab-title'] || slot[i].data.attrs['tabTitle'],
-                        'disable':slot[i].data.attrs.disable==''?true:false,
-                        'iconUrl':slot[i].data.attrs.iconUrl,
-                        'clstag': slot[i].data.attrs.clstag,
-                        'href':slot[i].data.attrs.tabLink?slot[i].data.attrs.tabLink:'javascript:void(0)',
-                       }
-                       this.tabTitleList.push(item);
-                       let slotElm = slot[i].elm;
-                       if(slotElm){
-                            this.addClass(slotElm,'hide');
-                            if(this.activeIndex == i) {
-                                this.removeClass(slotElm,'hide')
-                            }
-                       }                
+                let slotTag = slot[i].tag;
+                if(typeof(slotTag)=='string' && slotTag.indexOf('nut-tab-panel') != -1) {
+                    let attrs = slot[i].data.attrs;
+                    let item ={
+                        'tabTitle':attrs['tab-title'] || attrs['tabTitle'],
+                        'disable':attrs.disable===false,
+                        'iconUrl':attrs['iconUrl'] || attrs['icon-url'],
                     }
-                }  
+                    this.tabTitleList.push(item);
+                    let slotElm = slot[i].elm;
+                    if(slotElm){
+                        this.addClass(slotElm,'hide');
+                        if(this.activeIndex == i) {
+                            this.removeClass(slotElm,'hide');
+                        }
+                    }                
+                }
             }
             setTimeout(()=>{
                 this.getTabWidth();
             },0);
-            
         },
         getStyle:function(obj,styleName){
             if(!obj){
@@ -197,19 +163,18 @@ export default {
             if(this.positionNav=='top' || this.positionNav=='bottom'){
                 let tabTitle = document.querySelector('.nut-tab-title');
                 let tabWidth = this.getStyle(tabTitle,'width');
-                let tabWidthNum = tabWidth.substring(0,tabWidth.length-2);
-                let navBarWidth = (tabWidthNum/this.tabTitleList.length);
-                this.navWidth = navBarWidth;
-                this.initX= parseInt(this.navWidth * this.defIndex);
+                this.setInitX(tabWidth);
             }else{
-                let tabTitle = document.querySelector('.nut-tab-title-leftnav')||document.querySelector('.nut-tab-title-rightnav');
+                let tabTitle = document.querySelector('.nut-tab-title-leftnav')|| document.querySelector('.nut-tab-title-rightnav');
                 let tabWidth = this.getStyle(tabTitle,'height');
-                let tabWidthNum = tabWidth.substring(0,tabWidth.length-2);
-                let navBarWidth = (tabWidthNum/this.tabTitleList.length);
-                this.navWidth = navBarWidth;
-                this.initX= parseInt(this.navWidth * this.defIndex);
+                this.setInitX(tabWidth);
             }
-            
+        },
+        setInitX(tabWidth){
+            let tabWidthNum = tabWidth.substring(0,tabWidth.length-2);
+            let navBarWidth = (tabWidthNum/this.tabTitleList.length);
+            this.navWidth = navBarWidth;
+            this.initX= parseInt(this.navWidth * this.defIndex);
         },
         hasClass:function( elements,cName ){ 
             return !!elements.className.match( new RegExp( "(\\s|^)" + cName + "(\\s|$)") ); // ( \\s|^ ) 判断前面是否有空格 (\\s | $ )判断后面是否有空格 两个感叹号为转换为布尔值 以方便做判断 
@@ -221,29 +186,27 @@ export default {
         },
         removeClass:function ( elements,cName ){ 
             if( this.hasClass( elements,cName ) ){ 
-            elements.className = elements.className.replace( new RegExp( "(\\s|^)" + cName + "(\\s|$)" )," " ); // replace方法是替换 
+                elements.className = elements.className.replace( new RegExp( "(\\s|^)" + cName + "(\\s|$)" )," " ); // replace方法是替换 
             }; 
         }, 
-        switchTabLink:function(index,event,disable){
-            if(!disable){
-                event.target.parentNode.click();
-            } 
-        },
         switchTab:function(index,event,disable){
+            if(!disable && event.target.className.indexOf('nut-tab-icon')!==-1){
+                event.target.parentNode.click();
+            }
             if(!disable && event.target.className.indexOf('nut-title-nav')!==-1){
                 this.activeIndex=index;
                 this.initX= parseInt(this.navWidth * index);
                 let nutTab = event.target.parentNode.parentNode;
-                let items =  this.positionNav=='bottom' || this.positionNav=='right' ?nutTab.children[0].children : nutTab.children[1].children;
+                let items =  this.positionNav=='bottom' || this.positionNav=='right' ? nutTab.children[0].children : nutTab.children[1].children;
                 for(let i=0;i<items.length;i++){
                     if(i==index){
                         this.removeClass(items[i],'hide');
-                        
                     }else{
                         this.addClass(items[i],'hide');
                     }
                 }
                 this.$emit('tab-switch',index,event); 
+                this.$emit('tabSwitch',index,event); //兼容以前驼峰法命名
             }
         }
     },

+ 3 - 28
src/packages/tabbar/demo.vue

@@ -94,38 +94,13 @@ export default {
   },
   methods: {
       tabSwitch1:function(value,index){
-        /*let arr = [...this.tabList1];
-        arr.map((item,idx)=>{
-          if(idx==index){
-              item.curr = true;
-          }else{
-              item.curr = false;
-          }
-        })
-        this.tabList1 = [...arr];*/
-        console.log(index);
+        console.log(value,index);
       },
       tabSwitch2:function(value,index){
-        /*let arr = [...this.tabList2];
-        arr.map((item,idx)=>{
-          if(idx==index){
-              item.curr = true;
-          }else{
-              item.curr = false;
-          }
-        })
-        this.tabList2 = [...arr];*/
+        console.log(value,index);
       },
       tabSwitch3:function(value,index){
-        /*let arr = [...this.tabList3];
-        arr.map((item,idx)=>{
-          if(idx==index){
-              item.curr = true;
-          }else{
-              item.curr = false;
-          }
-        })
-        this.tabList3 = [...arr];*/
+        console.log(value,index);
       }
   }
 };

+ 6 - 2
src/packages/tabbar/tabbar.scss

@@ -1,12 +1,16 @@
 .nut-tabbar{
 	border:0px;
 	border-bottom: 1px solid #eee;
+	border-top: 1px solid #eee;
     width: 100%;
     display: flex;
     height: 70px;
     box-sizing: border-box;
     background: #fff;
-    margin-top: 20px;
+	margin-top: 20px;
+	&:last-child{
+		border-right: 0;
+	}
 }
 .bottom{
 	position: fixed;
@@ -24,7 +28,7 @@
     justify-content: center;
     align-items: center;
 }
-.bor-right{
+.card{
 	border-right:1px solid #eee;
 }
 .curr{

+ 5 - 15
src/packages/tabbar/tabbar.vue

@@ -2,8 +2,8 @@
     <div class="nut-tabbar" :class="{'bottom':bottom}">
         <a class="tabbar-nav" 
         v-for="(value,index) in tabList" 
-        :class="[{'curr':value.curr},type=='card'?'bor-right':null]"
-        v-bind:key="value.tabTitle"
+        :class="[{'curr':value.curr},type]"
+        :key="value.tabTitle"
         v-on:click="switchTabs(value,index)"
         :href="value.href"
         >   
@@ -11,9 +11,8 @@
             <b class="tips" v-if="value.num">{{value.num}}</b>
             <template v-if="value.icon">
                 <div class="icon" v-if="value.curr" :style="{backgroundImage: 'url('+value.activeIcon+')'}"></div>
-                <div class="icon" v-if="!value.curr" :style="{backgroundImage: 'url('+value.icon+')'}"></div>
+                <div class="icon" v-else :style="{backgroundImage: 'url('+value.icon+')'}"></div>
             </template>
-            
             <span :class="['tabbar-nav-word',{'big-word':!value.icon}]">{{value.tabTitle}}</span>
         </span>
         </a>
@@ -51,19 +50,9 @@ export default {
            deep:true
        }
     },
-    computed:{
-        
-    },
-    mounted() {
-        
-    },
     methods: {
-        closeItem:function(value,e){
-            this.$emit('delete-tabs',value); 
-        },
         switchTabs:function(value,index){
-            let newArr = [...this.tabList];
-            newArr.forEach((item,idx)=>{
+            let newArr = this.tabList.map((item,idx)=>{
                 if(index == idx){
                    item.curr = true;
                 }else{
@@ -72,6 +61,7 @@ export default {
             })
             this.tabList =newArr;
             this.$emit('tab-switch',value,index); 
+            this.$emit('tabSwitch',value,index); //兼容以前驼峰法
         }
     },
 }