• 利用vue-gird-layout 制作可定制桌面 (二)


     

    添加资源池

    根据项目需求 添加,

    实例两个数据

    {
      "mainData": [
        {
          "x": 0,
          "y": 0,
          "w": 4,
          "h": 4,
          "i": 0,
          "Component": "planExecution",
          "IsResource": false
        }
      ]
    }
    layoutData.json
    {
      "mainData": [{
          "x": 0,
          "y": 0,
          "w": 2,
          "h": 2,
          "i": 0,
          "Component": "productionLine",
          "IsResource": true
        },
        {
          "x": 0,
          "y": 0,
          "w": 2,
          "h": 2,
          "i": 0,
          "Component": "takeTime",
          "IsResource": true
        },
        {
          "x": 0,
          "y": 0,
          "w": 4,
          "h": 2,
          "i": 0,
          "Component": "yieldStatistics",
          "IsResource": true
        }
      ]
    }
    resourcesData.json

     引到页面中

      import layoutData from '@/virtualData/layoutData.json'
      import resourcesData from '@/virtualData/resourcesData.json'

    增加 资源数据 并且给页面数据 赋值

          // 初始化数据
          init() {
            this.layoutData = layoutData.mainData
            this.ResourceData = resourcesData.mainData
          }

    初始化页面之后,把资源池数据添加到页面数据中

     // 打开资源池
          OpenResource() {
            // 资源起始点
            const x = 12
            // 计算向下高度
            let y = 0
            // 是否行并行
            let wFlag = false
            // 并行高度
            let tempY = 0
            const Resource = this.ResourceData
            for (const item of Resource) {
              if (item.w === 2) {
                if (wFlag) {
                  // 第二个并行
                  item.x = x + 2
                  item.y = tempY
                  tempY = false
                } else {
                  // 第一个并行行
                  item.x = x
                  item.y = y
                  tempY = y
                  wFlag = true
                }
              } else {
                item.x = x
                item.y = y
              }
              item.i = this.layoutConfig.index
              y += item.h
              this.layoutConfig.index += 1
            }
            this.layoutData = this.layoutData.concat(Resource)
            this.historyLayout = JSON.parse(JSON.stringify(this.layoutData))
          },
    View Code

    然后把资源池和页面数据分开,并且加上校验。

    <div class="Main_border" v-if="layoutConfig.ToolVisible">
          </div>
     .Main_border {
            height: 75%;
             75%;
            position: absolute;
            box-sizing: border-box;
            border: 1px solid #000000;
          }

    加上分割线,然后添加移动监听。

      // 监听组件移动结束位置
          movedEvent(i, newX) {
            const item = this.layoutData.find(t => t.i === i)
            const itemW = item.w
            if (newX + itemW <= 12) { // 放到线中 允许添加
              console.log('放到线中 允许添加')
              item.IsResource = false
              this.historyLayout = JSON.parse(JSON.stringify(this.layoutData))
            } else if (newX >= 12) { // 不在线中 允许添加
              this.historyLayout = JSON.parse(JSON.stringify(this.layoutData))
              item.IsResource = true
              console.log('不在线中 允许添加')
            } else { // 压线 禁止添加
              this.layoutData = JSON.parse(JSON.stringify(this.historyLayout))
              console.log('压线 禁止添加')
            }
          }

     

     
  • 相关阅读:
    Java基础
    数据库表设计
    Spring循环依赖
    Mysql类型转换
    Mysql刷题
    JavaScript
    Git
    告别.NET生成报表统计图的烦恼
    JS给页面标签添加事件(或超链接链接)
    发现联想手机P630型号的一个严重的系统Bug
  • 原文地址:https://www.cnblogs.com/yasoPeng/p/9983978.html
Copyright © 2020-2023  润新知