<template> <view class="tm-stepsItem "> <view @click="onclick" class="px-10 flex-center flex-col tm-stepsItem-wk" > <view class="tm-stepsItem-dian rounded flex-center" :class="[ isSu&&!isFa&&model=='icon'?' su '+ color +' shadow-'+color+'-5':'', isSu&&!isFa&&model=='number'?' su '+color +' shadow-'+color+'-5' :'', isFa?'fa red' +' shadow-red-5':'', isWa&&!isFa&&!isSu?(black_tmeme?'wa bk grey-lighten-4 text-grey':`wa grey-lighten-4 text text-grey`):'', ]" > <text v-if="model=='number'">{{setNum}}</text> <view v-if="model=='icon'"> <tm-icons size="20" v-if="isSu&&!isFa" name="icon-check"></tm-icons> <tm-icons size="20" v-if="isFa" name="icon-times"></tm-icons> <view v-if="isWa&&!isFa&&!isSu" class="tm-stepsItem-dian-quan rounded " :class="[color]"></view> </view> </view> <view class="tm-stepsItem-text text-size-xs py-10 "><slot></slot></view> </view> </view> </template> <script> /** * 步骤条子组件 * @description 只能在tm-steps中使用。默认插槽显示底部内容。 * @property {String} model = [number|icon] 默认:number,两种模式,number:数字,icon:图标模式。 * @property {String} color = [] 默认:primary,主题色。 * @property {Boolean} wait = [true|false] 默认:true,待流转。显示错误状态。优先级最低 * @property {Boolean} fail = [true|false] 默认:false,显示错误状态。优先级最高 * @property {Boolean} success = [true|false] 默认:false,显示错误状态。优先级高于wait. * @property {Number|String} step = [] 默认:0,model=number时,显示的数字文本。 * @property {Boolean} black = [true|false] 默认:false,暗黑模式。 * @property {Function} click 点击事件。 * @example <tm-stepsItem :fail="true" model="icon" ></tm-stepsItem> */ export default { name:"tm-stepsItem", props:{ black:{ type:Boolean|String, default:null }, step:{ type:Number|String, default:0 }, success:{ type:Boolean, default:false }, fail:{ type:Boolean, default:false }, wait:{ type:Boolean, default:true }, color:{ type:String, default:'primary' }, // number|icon model:{ type:String, default:'number' } }, data() { return { width:0, su_selft:false, fa_selft:false, wa_selft:false, }; }, watch:{ success:function(newval){ this.isSu = newval; }, fail:function(newval){ this.isFa = newval; }, wait:function(newval){ this.isWa = newval; }, }, computed:{ black_tmeme: function() { if (this.black !== null) return this.black; return this.$tm.vx.state().tmVuetify.black; }, setNum:function(){ return this.step; }, isSu:{ get:function(){ return this.su_selft; }, set:function(val){ this.su_selft = val; } }, isFa:{ get:function(){ return this.fa_selft; }, set:function(val){ this.fa_selft = val; } }, isWa:{ get:function(){ return this.wa_selft; }, set:function(val){ this.wa_selft = val; } }, }, async mounted() { this.isSu = this.success; this.isFa = this.fail; this.isWa = this.wait; this.$nextTick(async function (){ let tbs = await this.$Querey(".tm-stepsItem"); this.width = tbs[0].width; }) }, methods: { setActive({success,fail,wait}) { this.isSu = success; if(typeof fail !=='undefined'){ this.isFa = fail; } this.isWa = wait; }, onclick(e){ this.$emit('click',e) }, }, } </script> <style lang="scss" scoped> .tm-stepsItem{ flex-shrink: 0; .tm-stepsItem-wk{ position: relative; top: -18upx; } .tm-stepsItem-dian{ width: 36upx; height: 36upx; font-size: 22upx; line-height: 12upx; .tm-stepsItem-dian-quan{ width: 12upx; height: 12upx; } } .tm-stepsItem-text{ flex-shrink: 0; width: 100upx; text-align: center; } } </style>