68 lines
1.2 KiB
TypeScript
68 lines
1.2 KiB
TypeScript
Component({
|
||
properties: {
|
||
/** 指标名称 */
|
||
title: {
|
||
type: String,
|
||
value: '',
|
||
},
|
||
/** 指标数值(已格式化字符串) */
|
||
value: {
|
||
type: String,
|
||
value: null,
|
||
},
|
||
/** 单位(元/次/人) */
|
||
unit: {
|
||
type: String,
|
||
value: '',
|
||
},
|
||
/** 环比趋势 */
|
||
trend: {
|
||
type: String,
|
||
value: 'flat', // 'up' | 'down' | 'flat'
|
||
},
|
||
/** 环比数值(如 "+12.5%") */
|
||
trendValue: {
|
||
type: String,
|
||
value: '',
|
||
},
|
||
/** 帮助说明文字 */
|
||
helpText: {
|
||
type: String,
|
||
value: '',
|
||
},
|
||
},
|
||
|
||
observers: {
|
||
value(val: string | null | undefined) {
|
||
// null/undefined 显示 "--"
|
||
this.setData({
|
||
displayValue: val == null || val === '' ? '--' : val,
|
||
})
|
||
},
|
||
},
|
||
|
||
data: {
|
||
displayValue: '--',
|
||
},
|
||
|
||
lifetimes: {
|
||
attached() {
|
||
const val = this.data.value
|
||
this.setData({
|
||
displayValue: val == null || val === '' ? '--' : val,
|
||
})
|
||
},
|
||
},
|
||
|
||
methods: {
|
||
onTap() {
|
||
this.triggerEvent('tap')
|
||
},
|
||
onHelpTap(e: WechatMiniprogram.TouchEvent) {
|
||
// 阻止冒泡到卡片 tap
|
||
e.stopPropagation?.()
|
||
this.triggerEvent('helpTap')
|
||
},
|
||
},
|
||
})
|