1
0
mirror of https://github.com/ialley-workshop-open/uni-halo.git synced 2026-06-11 12:49:30 +08:00
Files
uni-halo/tm-vuetify/components/tm-stepsItem/tm-stepsItem.vue
T
2022-12-06 15:08:29 +08:00

183 lines
4.0 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<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 = [] 默认:0model=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>