import { bodyTemperature, TOP_KEYS, HEAD_HEIGHT, LINE_HEIGHT } from './config'; export default class viewConfig { constructor({ width = 640, // outer width, in pixels height = 400, // outer height, in pixels marginTop = 20, // top margin, in pixels marginRight = 20, // right margin, in pixels marginBottom = 50, // bottom margin, in pixels marginLeft = 30, // left margin, in pixels stroke = 'currentColor', // stroke color of line and dots strokeWidth = 2, // stroke width of line and dots strokeLinecap = 'round', // stroke line cap of line strokeLinejoin = 'round', // stroke line join of line renderData, } = {}) { // 基础配置赋值 this.width = width; this.height = height; this.stroke = stroke; this.strokeWidth = strokeWidth; this.strokeLinecap = strokeLinecap; this.renderData = renderData; this.strokeLinejoin = strokeLinejoin; this.marginRight = marginRight; this.marginLeft = marginLeft; this.marginBottom = marginBottom; this.marginTop = marginTop; // 计算属性赋值 this.contentWidth = width - marginLeft - marginRight; this.step = this.contentWidth / 8; this.bottomPos = height - HEAD_HEIGHT - marginTop - (marginBottom - 30); // 底部坐标,30是因为默认的30,忘记计算了,后续的按照30的偏移量计算 this.tableHeight = height - marginBottom - HEAD_HEIGHT; const { micoStep, verticalHeight } = this.utilsGetMicoPos(this.step, this.bottomPos); this.micoStep = micoStep; this.verticalHeight = verticalHeight; this.X_OFFSET = micoStep / 2; // 为了让图标在小格子居中展示,需要进行一个偏移 this.xRange = [this.step, width - marginLeft - marginRight]; // [60, 860] this.topPos = marginTop + HEAD_HEIGHT; this.topKeysPos = LINE_HEIGHT * (TOP_KEYS.length + 1); // 1 是时间那一行 this.bottomKeysPosStart = this.topKeysPos + verticalHeight + 20; this.yRange = [this.bottomKeysPosStart - 20, this.topKeysPos]; } // 获取折线区域的高度 utilsGetMicoPos(step, botpos) { const micoStep = (step * 7) / 42; // 折线小格子的宽度 const verticalLength = bodyTemperature[1] - bodyTemperature[0]; // 根据体温来计算格子 const verticalHeight = micoStep * 5 * verticalLength; return { micoStep, verticalHeight, }; } }