Files

2 lines
5.3 KiB
JavaScript
Raw Normal View History

var e,t;import{Y as s,Z as i,G as a,H as r,o as l,j as n,w as o,h as d,a0 as c,y as u,e as h,F as p,k as _,m as b,I as g,l as v,A as m,B as f,R as y}from"./index-9bec188e.js";import{u as w,_ as S}from"./uv-badge.07f8d0fa.js";import{_ as x}from"./_plugin-vue_export-helper.1b428a4d.js";const $=x({name:"uv-tabs",emits:["click","change"],mixins:[s,i,{props:{duration:{type:Number,default:300},list:{type:Array,default:()=>[]},lineColor:{type:String,default:"#3c9cff"},activeStyle:{type:[String,Object],default:()=>({color:"#303133"})},inactiveStyle:{type:[String,Object],default:()=>({color:"#606266"})},lineWidth:{type:[String,Number],default:20},lineHeight:{type:[String,Number],default:3},lineBgSize:{type:String,default:"cover"},itemStyle:{type:[String,Object],default:()=>({height:"44px"})},scrollable:{type:Boolean,default:!0},current:{type:[Number,String],default:0},keyName:{type:String,default:"name"},...null==(t=null==(e=uni.$uv)?void 0:e.props)?void 0:t.tabs}}],data:()=>({firstTime:!0,scrollLeft:0,scrollViewWidth:0,lineOffsetLeft:0,tabsRect:{left:0},innerCurrent:0,moving:!1}),watch:{current:{immediate:!0,handler(e,t){e!==this.innerCurrent&&(this.innerCurrent=e,this.$nextTick((()=>{this.resize()})))}},list(){this.$nextTick((()=>{this.resize()}))}},computed:{textStyle(){return e=>{const t={},s=e===this.innerCurrent?this.$uv.addStyle(this.activeStyle):this.$uv.addStyle(this.inactiveStyle);return this.list[e].disabled&&(t.color="#c8c9cc"),this.$uv.deepMerge(s,t)}},propsBadge:()=>w},async mounted(){this.init()},methods:{setLineLeft(){const e=this.list[this.innerCurrent];if(!e)return;let t=this.list.slice(0,this.innerCurrent).reduce(((e,t)=>e+t.rect.width),0);const s=this.$uv.getPx(this.lineWidth);this.lineOffsetLeft=t+(e.rect.width-s)/2,this.firstTime&&setTimeout((()=>{this.firstTime=!1}),10)},animation(e,t=0){},clickHandler(e,t){this.$emit("click",{...e,index:t}),e.disabled||(this.innerCurrent=t,this.$nextTick((()=>{this.resize()})),this.$emit("change",{...e,index:t}))},init(){this.$uv.sleep().then((()=>{this.resize()}))},setScrollLeft(){const e=this.list[this.innerCurrent],t=this.list.slice(0,this.innerCurrent).reduce(((e,t)=>e+t.rect.width),0),s=this.$uv.sys().windowWidth;let i=t-(this.tabsRect.width-e.rect.width)/2-(s-this.tabsRect.right)/2+this.tabsRect.left/2;i=Math.min(i,this.scrollViewWidth-this.tabsRect.width),this.scrollLeft=Math.max(0,i)},resize(){0!==this.list.length&&Promise.all([this.getTabsRect(),this.getAllItemRect()]).then((([e,t=[]])=>{this.tabsRect=e,this.scrollViewWidth=0,t.map(((e,t)=>{this.scrollViewWidth+=e.width,this.list[t].rect=e})),this.setLineLeft(),this.setScrollLeft()}))},getTabsRect(){return new Promise((e=>{this.queryRect("uv-tabs__wrapper__scroll-view").then((t=>e(t)))}))},getAllItemRect(){return new Promise((e=>{const t=this.list.map(((e,t)=>this.queryRect(`uv-tabs__wrapper__nav__item-${t}`,!0)));Promise.all(t).then((t=>e(t)))}))},queryRect(e,t){return new Promise((t=>{this.$uvGetRect(`.${e}`).then((e=>{t(e)}))}))}}},[["render",function(e,t,s,i,w,x){const $=m,C=a(r("uv-badge"),S),k=f,B=y;return l(),n(k,{class:"uv-tabs",style:u([e.$uv.addStyle(e.customStyle)])},{default:o((()=>[d(k,{class:"uv-tabs__wrapper"},{default:o((()=>[c(e.$slots,"left",{},void 0,!0),d(k,{class:"uv-tabs__wrapper__scroll-view-wrapper"},{default:o((()=>[d(B,{"scroll-x":e.scrollable,"scroll-left":w.scrollLeft,"scroll-with-animation":"",class:"uv-tabs__wrapper__scroll-view","show-scrollbar":!1,ref:"uv-tabs__wrapper__scroll-view"},{default:o((()=>[d(k,{class:"uv-tabs__wrapper__nav",ref:"uv-tabs__wrapper__nav",style:u({flex:e.scrollable?"":1})},{default:o((()=>[(l(!0),h(p,null,_(e.list,((t,s)=>(l(),n(k,{class:b(["uv-tabs__wrapper__nav__item",[`uv-tabs__wrapper__nav__item-${s}`,t.disabled&&"uv-tabs__wrapper__nav__item--disabled"]]),key:s,onClick:e=>x.clickHandler(t,s),ref_for:!0,ref:`uv-tabs__wrapper__nav__item-${s}`,style:u([{flex:e.scrollable?"":1},e.$uv.addStyle(e.itemStyle)])},{default:o((()=>[d($,{class:b([[t.disabled&&"uv-tabs__wrapper__nav__item__text--disabled"],"uv-tabs__wrapper__nav__item__text"]),style:u([x.textStyle(s)