#
Junjie
6 天以前 1c95a184f83f180414e0ec93dc6af8380ac20732
src/main/webapp/views/watch/console2.html
@@ -85,6 +85,8 @@
    let pixiStaMap = new Map();
    let pixiCrnMap = new Map();
    let pixiShelfMap = new Map();
    let pixiTrackMap = new Map();
    let crnList = [];
    let objectsContainer;
    let objectsContainer2;
    let graphicsShelf;
@@ -334,38 +336,80 @@
          pixiStaMap = new Map();//重置
          objectsContainer.removeChildren()
          let bayWidthList = this.initWidth(map)
          map.forEach((item, index) => {
            for(let idx = 0;idx < item.length;idx++){
              let val = item[idx];
              if(val.cellWidth == undefined || val.cellWidth === ''){
                val.cellWidth = bayWidthList[idx];
              }
            }
          })
          let bayHeightList = this.initHeight(map);
          let bayWidthList = this.initWidth(map)
          map.forEach((item, index) => {
            for(let idx = 0;idx < item.length;idx++){
              let val = item[idx];
              if(val.cellHeight == undefined || val.cellHeight === ''){
                val.cellHeight = bayHeightList[index];
              }
              if(val.cellWidth == undefined || val.cellWidth === ''){
                val.cellWidth = bayWidthList[idx];
              }
            }
          })
          map.forEach((item, index) => {
            for(let idx = 0;idx < item.length;idx++){
              let val = item[idx];
              // 计算合并单元格的实际宽高
              let cellWidth = val.cellWidth / 40;
              let cellHeight = val.cellHeight / 8;
              val.width = cellWidth;
              val.height = cellHeight;
              val.posX = idx * cellWidth;
              val.posY = index * cellHeight;
              let mergeHeight = cellHeight;
              if(val.rowSpan  > 1) {
                for(let i = 1;i < val.rowSpan;i++){
                  let nextMerge = map[index + i][idx];
                  if(nextMerge.type != 'merge'){
                    continue;
                  }
                  let mergeCellHeight = nextMerge.cellHeight / 8;
                  mergeHeight += mergeCellHeight;
                }
                val.height = mergeHeight;
              }
              let mergeWidth = cellWidth;
              if(val.colSpan  > 1) {
                for(let i = 1;i < val.colSpan;i++){
                  let nextMerge = map[index][idx + i];
                  if(nextMerge.type != 'merge'){
                    continue;
                  }
                  let mergeCellWidth = nextMerge.cellWidth / 40;
                  mergeWidth += mergeCellWidth;
                }
                val.width = mergeWidth;
              }
            }
          })
          const rowHeightScaled = bayHeightList.map(h => (h != null && h !== -1) ? (h / 8) : (height));
          let yOffsets = [];
          let yCursor = 0;
          for (let r = 0; r < map.length; r++) {
            yOffsets[r] = yCursor;
            yCursor += (rowHeightScaled[r] || 0);
          }
          map.forEach((row, rowIndex) => {
            let xCursor = 0;
            for (let colIndex = 0; colIndex < row.length; colIndex++) {
              let val = row[colIndex];
              let cellWidth = val.width;
              let cellHeight = val.height;
              val.posX = xCursor;
              val.posY = yOffsets[rowIndex];
              xCursor += cellWidth;
            }
          })
@@ -403,6 +447,26 @@
            }
          });
          crnList.forEach((item) => {
              let sprite = new PIXI.Sprite(graphicsCrn);
              const deviceNo = getDeviceNo(item.value);
              const taskNo = getTaskNo(item.value);
              const style = new PIXI.TextStyle({ fontFamily: 'Arial', fontSize: 12, fill: '#ffffff', stroke: '#000000', strokeThickness: 2 });
              const txt = taskNo > 0 ? (deviceNo + "(" + taskNo + ")") : String(deviceNo);
              const text = new PIXI.Text(txt, style);
              text.anchor.set(0.5);
              text.position.set(sprite.width / 2, sprite.height / 2);
              sprite.addChild(text);
              sprite.textObj = text;
              sprite.zIndex = 1;
              sprite.position.set(item.posX, item.posY);
              sprite.interactive = true; // 必须要设置才能接收事件
              sprite.buttonMode = true; // 让光标在hover时变为手型指针
              pixiCrnMap.set(parseInt(deviceNo), sprite);
              objectsContainer2.addChild(sprite);
          })
          
          //视角居中
@@ -663,6 +727,16 @@
      return new PIXI.Sprite(texture);
    }
    function createTrackSprite(width, height) {
      let idx = width + "-" + height;
      let texture = pixiTrackMap.get(idx);
      if (texture == undefined) {
        texture = createTrackTexture(width, height);
        pixiTrackMap.set(idx, texture);
      }
      return new PIXI.Sprite(texture);
    }
    function getContainer(type, width, height) {
      let graphics = new PIXI.Graphics();
      let drawBorder = true;
@@ -781,22 +855,11 @@
          pixiStaMap.set(parseInt(siteId), sprite);
        }
      } else if (item.type == 'crn') {
        if (getDeviceNo(value) == -1) {
          sprite = new PIXI.Sprite(graphicsCrnTrack);
          sprite.zIndex = 0;
        } else {
          sprite = new PIXI.Sprite(graphicsCrn);
          const deviceNo = getDeviceNo(value);
          const taskNo = getTaskNo(value);
          const style = new PIXI.TextStyle({ fontFamily: 'Arial', fontSize: 12, fill: '#ffffff', stroke: '#000000', strokeThickness: 2 });
          const txt = taskNo > 0 ? (deviceNo + "(" + taskNo + ")") : String(deviceNo);
          const text = new PIXI.Text(txt, style);
          text.anchor.set(0.5);
          text.position.set(sprite.width / 2, sprite.height / 2);
          sprite.addChild(text);
          sprite.textObj = text;
          pixiCrnMap.set(parseInt(deviceNo), sprite);
          sprite.zIndex = 1;
        sprite = createTrackSprite(item.width, item.height);
        sprite.zIndex = 0;
        if(getDeviceNo(value) > 0){
          crnList.push(item);
        }
      } else {
        return null;