// 线性图标。图标资源在 styles/iconfont.wxss(mask-image + currentColor)。 // // name 可以直接传图标名,也可以传服务端下发的值: // - 记录类型(HealthRecord.Type,9 值枚举,可靠) // - 文章分类(Article.Category) // - 历史 emoji(老数据里 icon 字段存的就是 emoji,只能兜底映射) // 三层都命不中时退到 fallback(默认 note),绝不留空白。 // 记录类型 / 文章分类 → 图标名 const BY_TYPE = { weight: 'weight', poop: 'poop', food: 'food', symptom: 'symptom', medicine: 'medicine', vaccine: 'vaccine', deworm: 'deworm', cost: 'cost', photo: 'photo', note: 'doc', }; // 老数据里存的 emoji → 图标名。新数据不再写 emoji,但历史记录得能正常显示 const BY_EMOJI = { '⚖️': 'weight', '⚖': 'weight', '💩': 'poop', '🍽️': 'food', '🍽': 'food', '🍚': 'food', '🤒': 'symptom', '🌡️': 'symptom', '💊': 'medicine', '💰': 'cost', '💸': 'cost', '📷': 'photo', '📸': 'photo', '💉': 'vaccine', '🛡️': 'deworm', '🛡': 'deworm', '📄': 'doc', '📋': 'doc', '📝': 'note', '✍️': 'note', '✍': 'note', '🐱': 'cat', '🐶': 'dog', '🐾': 'community', '🔔': 'bell', '⚙️': 'settings', '⚙': 'settings', '📅': 'plan', '📊': 'report', '🏠': 'home', '⚠️': 'warn', '📖': 'book', '📚': 'book', }; Component({ options: { addGlobalClass: true, virtualHost: true }, properties: { name: { type: String, value: '' }, size: { type: Number, value: 32 }, // rpx color: { type: String, value: '' }, // 留空则跟随父级文字色 fallback: { type: String, value: 'note' }, }, data: { cls: '', style: '' }, observers: { 'name,size,color,fallback': function (name, size, color, fallback) { const n = BY_TYPE[name] || BY_EMOJI[name] || name || fallback; const style = 'width:' + size + 'rpx;height:' + size + 'rpx' + (color ? ';background-color:' + color : ''); this.setData({ cls: 'pt-i pt-i-' + n, style }); }, }, });