171 lines
3.2 KiB
Vue
171 lines
3.2 KiB
Vue
|
<template>
|
|||
|
<view class="uni-title__box" :style="{'align-items':textAlign}">
|
|||
|
<text class="uni-title__base" :class="['uni-'+type]" :style="{'color':color}">{{title}}</text>
|
|||
|
</view>
|
|||
|
</template>
|
|||
|
|
|||
|
<script>
|
|||
|
/**
|
|||
|
* Title 章节标题
|
|||
|
* @description 章节标题,通常用于记录页面标题,使用当前组件,uni-app 如果开启统计,将会自动统计页面标题
|
|||
|
* @tutorial https://ext.dcloud.net.cn/plugin?id=1066
|
|||
|
* @property {String} type = [h1|h2|h3|h4|h5] 标题类型
|
|||
|
* @value h1 一级标题
|
|||
|
* @value h2 二级标题
|
|||
|
* @value h3 三级标题
|
|||
|
* @value h4 四级标题
|
|||
|
* @value h5 五级标题
|
|||
|
* @property {String} title 章节标题内容
|
|||
|
* @property {String} align = [left|center|right] 对齐方式
|
|||
|
* @value left 做对齐
|
|||
|
* @value center 居中对齐
|
|||
|
* @value right 右对齐
|
|||
|
* @property {String} color 字体颜色
|
|||
|
* @property {Boolean} stat = [true|false] 是否开启统计功能呢,如不填写type值,默认为开启,填写 type 属性,默认为关闭
|
|||
|
*/
|
|||
|
export default {
|
|||
|
props: {
|
|||
|
type: {
|
|||
|
type: String,
|
|||
|
default: ''
|
|||
|
},
|
|||
|
title: {
|
|||
|
type: String,
|
|||
|
default: ''
|
|||
|
},
|
|||
|
align: {
|
|||
|
type: String,
|
|||
|
default: 'left'
|
|||
|
},
|
|||
|
color: {
|
|||
|
type: String,
|
|||
|
default: '#333333'
|
|||
|
},
|
|||
|
stat: {
|
|||
|
type: [Boolean, String],
|
|||
|
default: ''
|
|||
|
}
|
|||
|
},
|
|||
|
data() {
|
|||
|
return {
|
|||
|
|
|||
|
};
|
|||
|
},
|
|||
|
computed: {
|
|||
|
textAlign() {
|
|||
|
let align = 'center';
|
|||
|
switch (this.align) {
|
|||
|
case 'left':
|
|||
|
align = 'flex-start'
|
|||
|
break;
|
|||
|
case 'center':
|
|||
|
align = 'center'
|
|||
|
break;
|
|||
|
case 'right':
|
|||
|
align = 'flex-end'
|
|||
|
break;
|
|||
|
}
|
|||
|
return align
|
|||
|
}
|
|||
|
},
|
|||
|
watch: {
|
|||
|
title(newVal) {
|
|||
|
if (this.isOpenStat()) {
|
|||
|
// 上报数据
|
|||
|
if (uni.report) {
|
|||
|
uni.report('title', this.title)
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
},
|
|||
|
mounted() {
|
|||
|
if (this.isOpenStat()) {
|
|||
|
// 上报数据
|
|||
|
if (uni.report) {
|
|||
|
uni.report('title', this.title)
|
|||
|
}
|
|||
|
}
|
|||
|
},
|
|||
|
methods: {
|
|||
|
isOpenStat() {
|
|||
|
if (this.stat === '') {
|
|||
|
this.isStat = false
|
|||
|
}
|
|||
|
let stat_type = (typeof(this.stat) === 'boolean' && this.stat) || (typeof(this.stat) === 'string' && this.stat !==
|
|||
|
'')
|
|||
|
if (this.type === "") {
|
|||
|
this.isStat = true
|
|||
|
if (this.stat.toString() === 'false') {
|
|||
|
this.isStat = false
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
if (this.type !== '') {
|
|||
|
this.isStat = true
|
|||
|
if (stat_type) {
|
|||
|
this.isStat = true
|
|||
|
} else {
|
|||
|
this.isStat = false
|
|||
|
}
|
|||
|
}
|
|||
|
return this.isStat
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
</script>
|
|||
|
|
|||
|
<style scoped>
|
|||
|
/* .uni-title {
|
|||
|
|
|||
|
} */
|
|||
|
.uni-title__box {
|
|||
|
/* #ifndef APP-NVUE */
|
|||
|
display: flex;
|
|||
|
/* #endif */
|
|||
|
flex-direction: column;
|
|||
|
align-items: flex-start;
|
|||
|
justify-content: center;
|
|||
|
padding: 8px 0;
|
|||
|
flex: 1;
|
|||
|
}
|
|||
|
|
|||
|
.uni-title__base {
|
|||
|
font-size: 15px;
|
|||
|
color: #333;
|
|||
|
font-weight: 500;
|
|||
|
}
|
|||
|
|
|||
|
.uni-h1 {
|
|||
|
font-size: 20px;
|
|||
|
color: #333;
|
|||
|
font-weight: bold;
|
|||
|
}
|
|||
|
|
|||
|
.uni-h2 {
|
|||
|
font-size: 18px;
|
|||
|
color: #333;
|
|||
|
font-weight: bold;
|
|||
|
}
|
|||
|
|
|||
|
.uni-h3 {
|
|||
|
font-size: 16px;
|
|||
|
color: #333;
|
|||
|
font-weight: bold;
|
|||
|
/* font-weight: 400; */
|
|||
|
}
|
|||
|
|
|||
|
.uni-h4 {
|
|||
|
font-size: 14px;
|
|||
|
color: #333;
|
|||
|
font-weight: bold;
|
|||
|
/* font-weight: 300; */
|
|||
|
}
|
|||
|
|
|||
|
.uni-h5 {
|
|||
|
font-size: 12px;
|
|||
|
color: #333;
|
|||
|
font-weight: bold;
|
|||
|
/* font-weight: 200; */
|
|||
|
}
|
|||
|
</style>
|