You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
96 lines
1.9 KiB
96 lines
1.9 KiB
<template>
|
|
<view>
|
|
<view
|
|
:id="elId"
|
|
:class="{ border: showBorder }"
|
|
:style="{ 'border-left': showBorder ? '1px ' + borderColor + ' solid' : 'none' }"
|
|
class="uni-grid"><slot /></view>
|
|
</view>
|
|
</template>
|
|
|
|
<script>
|
|
export default {
|
|
name: 'UniGrid',
|
|
props: {
|
|
// 每列显示个数
|
|
column: {
|
|
type: Number,
|
|
default: 3
|
|
},
|
|
// 是否显示边框
|
|
showBorder: {
|
|
type: Boolean,
|
|
default: true
|
|
},
|
|
// 是否显示边框
|
|
borderColor: {
|
|
type: String,
|
|
default: '#d0dee5'
|
|
},
|
|
// 全局标记水平方向移动距离 ,起点为中心,负数为左移动,正数为右移动
|
|
hor: {
|
|
type: Number,
|
|
default: 0
|
|
},
|
|
// 全局标记垂直方向移动距离 ,起点为中心,负数为上移动,正数为下移动
|
|
ver: {
|
|
type: Number,
|
|
default: 0
|
|
},
|
|
// 是否正方形显示,默认为 true
|
|
square: {
|
|
type: Boolean,
|
|
default: true
|
|
},
|
|
highlight: {
|
|
type: Boolean,
|
|
default: true
|
|
}
|
|
},
|
|
provide () {
|
|
return {
|
|
grid: this
|
|
}
|
|
},
|
|
data () {
|
|
const elId = `Uni_${Math.ceil(Math.random() * 10e5).toString(36)}`
|
|
return {
|
|
index: 0,
|
|
elId
|
|
}
|
|
},
|
|
created () {
|
|
this.index = 0
|
|
this.childrens = []
|
|
this.pIndex = this.pIndex ? this.pIndex++ : 0
|
|
},
|
|
methods: {
|
|
change (e) {
|
|
this.$emit('change', e)
|
|
},
|
|
_getSize (fn) {
|
|
uni.createSelectorQuery()
|
|
.in(this)
|
|
.select(`#${this.elId}`)
|
|
.boundingClientRect()
|
|
.exec(ret => {
|
|
if (!ret[0]) {
|
|
setTimeout(this._getSize(fn))
|
|
return
|
|
}
|
|
let width = parseInt(ret[0].width / this.column) - 1 + 'px'
|
|
typeof fn === 'function' && fn(width)
|
|
})
|
|
}
|
|
}
|
|
}
|
|
</script>
|
|
|
|
<style lang="scss">
|
|
.uni-grid {
|
|
display: flex;
|
|
flex-wrap: wrap;
|
|
box-sizing: border-box;
|
|
border-left: 1px #d0dee5 solid;
|
|
}
|
|
</style>
|
|
|