Component({ properties: { statusList: { type: Array, value: [], }, dataset: { type: Object }, }, data: { dashedCounts: [], }, lifetimes: { ready() { this.calcAllDashes(); }, }, methods: { onBodyModel(event: any) { const position = event.mark?.position; if (position) this.triggerEvent("position", { position }); }, calcAllDashes() { const query = wx.createSelectorQuery().in(this); const dashedCounts: any[] = []; const itemCount = this.data.statusList.length; const systemInfo = wx.getSystemInfoSync(); const rpx2px = systemInfo.windowWidth / 750; for (let i = 0; i < itemCount; i++) { query.select(`#item-${i}`).boundingClientRect(); } query.exec((rects) => { if (rects) { rects.forEach((rect: any, i: number) => { if (rect) { // 换算成 rpx const heightRpx = rect.height / rpx2px; // 14rpx为圆圈高度 const lineHeight = heightRpx - 14; const dashHeight = 10; const gap = 4; let count = Math.floor(lineHeight / (dashHeight + gap)); if (count < 1) count = 1; dashedCounts[i] = Array.from({ length: count }, (_, j) => j); } else { dashedCounts[i] = Array.from({ length: 10 }, (_, j) => j); } }); this.setData({ dashedCounts }); } }); }, }, observers: { statusList: function () { this.calcAllDashes(); }, }, });