wux-weapp
Version:
一套组件化、可复用、易扩展的微信小程序 UI 组件库
89 lines (86 loc) • 2.4 kB
JavaScript
import baseComponent from '../helpers/baseComponent'
import classNames from '../helpers/libs/classNames'
import styleToCssString from '../helpers/libs/styleToCssString'
import { useRect } from '../helpers/hooks/useDOM'
baseComponent({
options: {
multipleSlots: false,
},
relations: {
'../cell/index': {
type: 'descendant',
observer() {
this.callDebounceFn(this.updateIsLastElement)
},
},
},
properties: {
prefixCls: {
type: String,
value: 'wux-cell-group',
},
title: {
type: String,
value: '',
},
label: {
type: String,
value: '',
},
mode: {
type: String,
value: 'default',
},
bodyStyle: {
type: [String, Object],
value: '',
observer(newVal) {
this.setData({
internalBodyStyle: styleToCssString(newVal),
})
},
},
hasLine: {
type: Boolean,
value: true,
},
},
data: {
internalBodyStyle: '',
},
computed: {
classes: ['prefixCls, mode, hasLine', function(prefixCls, mode, hasLine) {
const wrap = classNames(prefixCls, {
[`${prefixCls}--card`]: mode === 'card',
[`${prefixCls}--has-line`]: hasLine,
})
const hd = `${prefixCls}__hd`
const bd = `${prefixCls}__bd`
const ft = `${prefixCls}__ft`
return {
wrap,
hd,
bd,
ft,
}
}],
},
methods: {
updateIsLastElement() {
const elements = this.getRelationsByName('../cell/index')
if (elements.length > 0) {
const lastIndex = elements.length - 1
elements.forEach((element, index) => {
element.updateIsLastElement(index === lastIndex)
})
}
},
getBoundingClientRect(callback) {
useRect(`.${this.data.prefixCls}`, this)
.then((rect) => {
if (!rect) return
callback.call(this, rect.height, rect)
})
},
},
})