211 lines
5.1 KiB
Vue
211 lines
5.1 KiB
Vue
<template>
|
||
<view class="tn-tr-class tn-tr" :class="[trClass]" :style="[trStyle]">
|
||
<slot></slot>
|
||
</view>
|
||
</template>
|
||
|
||
<script>
|
||
import componentsColorMixin from '../../libs/mixin/components_color.js'
|
||
export default {
|
||
name: 'tn-tr',
|
||
options: {
|
||
// 在微信小程序中将组件节点渲染为虚拟节点,更加接近Vue组件的表现(不会出现shadow节点下再去创建元素)
|
||
virtualHost: true
|
||
},
|
||
mixins: [componentsColorMixin],
|
||
props: {
|
||
// 宽度
|
||
width: {
|
||
type: [String, Number],
|
||
default: ''
|
||
},
|
||
// 边框颜色
|
||
borderColor: {
|
||
type: String,
|
||
default: ''
|
||
},
|
||
// 边框宽度
|
||
borderWidth: {
|
||
type: [String, Number],
|
||
default: ''
|
||
},
|
||
// 左边框
|
||
borderLeft: {
|
||
type: Boolean,
|
||
default: false
|
||
},
|
||
// 上边框
|
||
borderTop: {
|
||
type: Boolean,
|
||
default: false
|
||
},
|
||
// 换行显示
|
||
wrap: {
|
||
type: Boolean,
|
||
default: false
|
||
},
|
||
// 固定表格
|
||
fixed: {
|
||
type: Boolean,
|
||
default: false
|
||
},
|
||
// left偏移值
|
||
left: {
|
||
type: [String, Number],
|
||
default: 0
|
||
},
|
||
// right偏移值
|
||
right: {
|
||
type: [String, Number],
|
||
default: 0
|
||
},
|
||
// top偏移值(自定义顶部导航栏时用到)
|
||
top: {
|
||
type: [String, Number],
|
||
default: 0
|
||
},
|
||
// 外边距
|
||
margin: {
|
||
type: String,
|
||
default: ''
|
||
},
|
||
// zIndex
|
||
zIndex: {
|
||
type: Number,
|
||
default: 0
|
||
},
|
||
// 行数索引
|
||
index: {
|
||
type: [String, Number],
|
||
default: 0
|
||
},
|
||
// 参数
|
||
params: {
|
||
type: String,
|
||
default: ''
|
||
}
|
||
},
|
||
computed: {
|
||
borderWidthValue() {
|
||
return this.borderWidth || this.parentData.borderWidth || ''
|
||
},
|
||
borderColorValue() {
|
||
return this.borderColor || this.parentData.borderColor || ''
|
||
},
|
||
trClass() {
|
||
let clazz = ''
|
||
if (this.backgroundColorClass) {
|
||
clazz += ` ${this.backgroundColorClass}`
|
||
}
|
||
if (this.fontColorClass) {
|
||
clazz += ` ${this.fontColorClass}`
|
||
}
|
||
if (this.wrap) {
|
||
clazz += ' tn-tr--wrap'
|
||
}
|
||
if (this.fixed) {
|
||
clazz += ' tn-tr--fixed'
|
||
}
|
||
return clazz
|
||
},
|
||
trStyle() {
|
||
let style = {}
|
||
if (this.width) {
|
||
style.width = this.$tn.string.getLengthUnitValue(this.width)
|
||
}
|
||
if (this.backgroundColorStyle) {
|
||
style.backgroundColor = this.backgroundColorStyle
|
||
}
|
||
if (this.fontColorStyle) {
|
||
style.color = this.fontColorStyle
|
||
}
|
||
if (this.fontSizeStyle) {
|
||
style.fontSize = this.fontSizeStyle
|
||
}
|
||
if (this.borderWidth !== '' || this.parentData.borderWidth !== '') {
|
||
style.borderWidth = this.borderWidth !== '' ? this.$tn.string.getLengthUnitValue(this.borderWidth) : this.$tn.string.getLengthUnitValue(this.parentData.borderWidth)
|
||
}
|
||
if (this.borderColor || this.parentData.borderColor) {
|
||
style.borderColor = this.borderColor || this.parentData.borderColor
|
||
}
|
||
if (this.borderLeft) {
|
||
style.borderLeftStyle = 'solid'
|
||
}
|
||
if (this.borderTop) {
|
||
style.borderTopStyle = 'solid'
|
||
}
|
||
if (this.fixed) {
|
||
style.left = this.left ? this.$tn.string.getLengthUnitValue(this.left) : 'auto'
|
||
style.right = this.right ? this.$tn.string.getLengthUnitValue(this.right) : 'auto'
|
||
style.top = this.top ? this.$tn.string.getLengthUnitValue(this.top) : 'auto'
|
||
}
|
||
if (this.margin) {
|
||
style.margin = this.margin
|
||
}
|
||
style.zIndex = this.zIndex ? this.zIndex : this.$tn.zIndex.tableTr
|
||
return style
|
||
}
|
||
},
|
||
data() {
|
||
return {
|
||
parentData: {
|
||
borderColor: null,
|
||
borderWidth: null
|
||
}
|
||
}
|
||
},
|
||
watch: {
|
||
parentData: {
|
||
handler() {
|
||
// 更新子组件的数据
|
||
if (this.children.length) {
|
||
this.children.map((child) => {
|
||
typeof(child.updateParentData) === 'function' && child.updateParentData()
|
||
})
|
||
}
|
||
},
|
||
deep: true
|
||
}
|
||
},
|
||
created() {
|
||
this.children = []
|
||
this.parent = false
|
||
this.updateParentData()
|
||
this.parent && this.parent.children.push(this)
|
||
},
|
||
methods: {
|
||
handleClick() {
|
||
this.$emit('click', {
|
||
index: this.index,
|
||
params: this.params
|
||
})
|
||
},
|
||
// 更新父组件信息
|
||
updateParentData() {
|
||
this.getParentData('tn-table')
|
||
}
|
||
}
|
||
}
|
||
</script>
|
||
|
||
<style lang="scss" scoped>
|
||
.tn-tr {
|
||
width: 100%;
|
||
display: flex;
|
||
box-sizing: border-box;
|
||
background-color: #FFFFFF;
|
||
|
||
border-width: 1rpx;
|
||
border-style: none none solid none;
|
||
border-color: #AAAAAA;
|
||
|
||
&--wrap {
|
||
flex-wrap: wrap;
|
||
}
|
||
|
||
&--fixed {
|
||
position: fixed;
|
||
}
|
||
}
|
||
</style>
|