uni-Identify-quality/tm-vuetify/components/tm-divider/tm-divider.vue
2023-09-19 15:48:24 +08:00

167 lines
3.4 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-divider ">
<view class="flex-center tm-divider-wk" :class="[
vertical?' flex-col flexVer ':'',setpsClass
]" >
<view :style="{
borderBottomStyle:model,
height:vertical?height/2+'px':'1rpx',
width:vertical?'1rpx':'50%',
}" class="tm-divider-left" :class="[vertical?color_tmeme:`border-${color_tmeme}-b-1`]">
</view>
<view v-if="text" :class="[
vertical?'py-20':'px-20'
]" class="tm-divider-text text-size-xs" :style="{color:'grey'}">{{text}}</view>
<!-- 点位符。 -->
<text v-if="!text"></text>
<view :style="{
borderBottomStyle:model,
height:vertical?(height/2+'px'):'1rpx',
width:vertical?'1rpx':'50%',
}" class="tm-divider-right" :class="[vertical?color_tmeme:`border-${color_tmeme}-b-1`]"></view>
</view>
</view>
</template>
<script>
/**
* 分割线
* @property {String} text = [] 默认:'',显示的文本。
* @property {String} color = [] 默认:'#eeeeee',线的颜色16进制或者rgb,rgba
* @property {Number} height = [] 默认0, 竖向高度时,起作用。
* @property {Boolean} vertical = [] 默认false 是否竖向
* @property {String} model = [solid|dashed|dotted] 默认solid 线的类型。
* @example <tm-divider text="我是分割线"></tm-divider>
*/
export default {
name: "tm-divider",
props: {
// 不为空时,显示文本。
text: {
type: String,
default: ''
},
// 颜色16进制或者rgb,rgba
color: {
type: String,
default: 'grey'
},
// 竖向高度时,起作用。
height: {
type: Number,
default: 100
},
// 竖向高度时,起作用。
width: {
type: Number,
default: 0
},
// 是否竖
vertical: {
type: Boolean,
default: false
},
// solid|dashed|dotted
model: {
type: String,
default: 'solid'
},
// 跟随主题色的改变而改变。
fllowTheme: {
type: Boolean | String,
default: false
}
},
computed: {
wd: {
get: function() {
if (this.width) return this.width;
return this.width_s;
},
set: function(val) {
this.width_s = val;
}
},
color_tmeme: function() {
if (this.$tm.vx.state().tmVuetify.color !== null && this.$tm.vx.state().tmVuetify.color && this
.fllowTheme) {
return this.$tm.vx.state().tmVuetify.color;
}
return this.color;
},
},
data() {
return {
width_s: 0,
height_s: 0,
setpsClass: ''
};
},
async mounted() {
await this.init();
},
methods: {
async init() {
this.$nextTick(async function() {
let tbs = await this.$Querey(".tm-divider");
this.wd = tbs[0].width ? tbs[0].width : this.wd;
})
},
setWidth(width) {
this.$nextTick(async function() {
this.wd = width;
this.setpsClass = 'setpsClass'
if (this.text) {
let tbs_text = await this.$Querey(".tm-divider-text");
this.wd = this.wd - tbs_text[0].width;
}
})
}
},
}
</script>
<style lang="scss" scoped>
.tm-divider {
display: block;
width: auto;
position: relative;
.tm-divider-wk {
&.setpsClass {
position: absolute;
// left: -100upx;
line-height: 0;
// left: 0;
}
}
.flexVer {
width: 1px;
}
.tm-divider-text {
flex-shrink: 0;
}
.tm-divider-left,
.tm-divider-right {
width: 50%;
height: 1px;
border-bottom-width: 1px;
}
}
</style>