zhuzhuanzhuan
2023-10-17 bed4e60f46a75823d7314311e3d5fafe71c1a2fa
代码格式化
已修改2个文件
1424 ■■■■ 文件已修改
src/views/WorkshopSignage.vue 636 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/system/WorkshopSignageManagement.vue 788 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/WorkshopSignage.vue
@@ -1,58 +1,78 @@
<template>
  <dv-full-screen-container class="full-screen-container">
    <header class="page-header">
      {{workshopDetails.workshopName}}
      {{ workshopDetails.workshopName }}
      <div class="header-right" v-has="'home:saveDevicePositionAndSize'">
        <a-space>
          <span v-if="!isSwitchChecked">开启功能</span>
          <span v-else>关闭功能</span>
          <a-switch checked-children="开" un-checked-children="关" @change="handleSwitchChange"
                    v-model="isSwitchChecked" :disabled="isSwitchChecked"/>
          <a-switch
            checked-children="开"
            un-checked-children="关"
            @change="handleSwitchChange"
            v-model="isSwitchChecked"
            :disabled="isSwitchChecked"
          />
        </a-space>
        <a-button type="primary" icon="save" size="large" @click="saveDevicePositionAndSizeByApi"
        >保存位置
        </a-button>
        <a-button type="primary" icon="save" size="large" @click="saveDevicePositionAndSizeByApi">保存位置</a-button>
      </div>
    </header>
    <dv-border-box-8>
      <div class="content-container" ref="deviceContainerRef">
        <VueDragResize v-for="(item,index) in deviceList" :key="item.equipmentId" :w="item.vw"
                       :h="item.vh" :x="item.coordinateLeft" :y="item.coordinateTop"
                       v-on:resizing="resize($event,index)"
                       v-on:dragging="resize($event,index)"
                       :parentLimitation="true"
                       :minw="100"
                       :minh="100"
                       :isDraggable="isDraggable"
                       :isResizable="isResizable"
                       :stickSize="6"
        <VueDragResize
          v-for="(item, index) in deviceList"
          :key="item.equipmentId"
          :w="item.vw"
          :h="item.vh"
          :x="item.coordinateLeft"
          :y="item.coordinateTop"
          v-on:resizing="resize($event, index)"
          v-on:dragging="resize($event, index)"
          :parentLimitation="true"
          :minw="100"
          :minh="100"
          :isDraggable="isDraggable"
          :isResizable="isResizable"
          :stickSize="6"
        >
          <div class="single-device"
               :style="{width:  item.vw+ 'px',height:item.vh+'px'}">
          <div class="single-device" :style="{ width: item.vw + 'px', height: item.vh + 'px' }">
            <div class="device-status">
              <div v-if="item.equipmentStatus==2||item.equipmentStatus==1"
                   :style="{backgroundImage:`url(${require('@/assets/yellow.png')})`}" class="status-image"></div>
              <div v-if="item.equipmentStatus==22" :style="{backgroundImage:`url(${require('@/assets/red.png')})`}"
                   class="status-image"></div>
              <div v-if="item.equipmentStatus==0" :style="{backgroundImage:`url(${require('@/assets/gray.png')})`}"
                   class="status-image"></div>
              <div v-if="item.equipmentStatus==3" :style="{backgroundImage:`url(${require('@/assets/green.png')})`}"
                   class="status-image"></div>
              <div
                :style="{backgroundImage:`url(${getImgView(item.equipmentImage)||require('@/assets/8.png')})`}"
                class="device-image"></div>
                v-if="item.equipmentStatus == 2 || item.equipmentStatus == 1"
                :style="{ backgroundImage: `url(${require('@/assets/yellow.png')})` }"
                class="status-image"
              ></div>
              <div
                v-if="item.equipmentStatus == 22"
                :style="{ backgroundImage: `url(${require('@/assets/red.png')})` }"
                class="status-image"
              ></div>
              <div
                v-if="item.equipmentStatus == 0"
                :style="{ backgroundImage: `url(${require('@/assets/gray.png')})` }"
                class="status-image"
              ></div>
              <div
                v-if="item.equipmentStatus == 3"
                :style="{ backgroundImage: `url(${require('@/assets/green.png')})` }"
                class="status-image"
              ></div>
              <div
                :style="{ backgroundImage: `url(${getImgView(item.equipmentImage) || require('@/assets/8.png')})` }"
                class="device-image"
              ></div>
            </div>
            <div class="device-id" :style="{fontSize: item.fontSize+'px'}">
              {{item.equipmentId}}
            <div class="device-id" :style="{ fontSize: item.fontSize + 'px' }">
              {{ item.equipmentId }}
            </div>
          </div>
        </VueDragResize>
        <div class="device-status-info">
          <div v-for="item in deviceStatusList" :key="item.value" class="single-status-info">
            <div>{{item.label}}</div>
            <div class="status-square" :style="{backgroundColor:item.color}"></div>
            <div>{{getDeviceNumberByStatus(item.value)}}</div>
            <div>{{ item.label }}</div>
            <div class="status-square" :style="{ backgroundColor: item.color }"></div>
            <div>{{ getDeviceNumberByStatus(item.value) }}</div>
          </div>
        </div>
      </div>
@@ -61,289 +81,289 @@
</template>
<script>
  import VueDragResize from 'vue-drag-resize'
  import api from '@/api/mdc'
  import { getFileAccessHttpUrl } from '@/api/manage'
import VueDragResize from 'vue-drag-resize'
import api from '@/api/mdc'
import { getFileAccessHttpUrl } from '@/api/manage'
  export default {
    components: {
      VueDragResize
    },
    data() {
      return {
        workshopDetails: {}, //  车间详细信息,
        isDraggable: false, // 是否开启拖拽
        isResizable: false, // 是否开启缩放
        isSwitchChecked: false, // 是否开启功能
        timingAcquisition: null, // 定时刷新是否开启
        deviceList: [
          // {
          //   equipmentId: '123213213123232',// 设备ID
          //   equipmentImage: require('@/assets/8.png'), // 设备图片
          //   coordinateTop: 200, // 拖拽元素距盒子顶距离
          //   coordinateLeft: 100, // 拖拽元素距盒子左侧距离
          //   vw: 100,  // 缩放元素宽度
          //   vh: 100, // 缩放元素高度
          //   fontSize: 12, // 缩放元素字体大小
          //   equipmentStatus: 1 // 设备状态 0:关机 22:报警 2:待机 3:运行 开机:1(没有四色灯标识归为待机)
          // }
        ], // 设备信息列表
        deviceStatusList: [
          {
            label: '关机',
            value: 0,
            color: '#A8A8A8'
          },
          {
            label: '待机',
            value: 2,
            color: '#FFFF00'
          },
          {
            label: '运行',
            value: 3,
            color: '#00EE00'
          },
          {
            label: '报警',
            value: 22,
            color: '#FF0000'
          }
        ] // 设备状态指示灯列表
      }
    },
    watch: {
      isSwitchChecked: {
        handler(newVal) {
          if (!newVal) {
            console.log('定时器开启中')
            this.timingAcquisition = setInterval(() => {
              this.getDeviceListByApi(this.$route.params.id)
            }, 2000)
          } else {
            console.log('关闭定时器')
            clearInterval(this.timingAcquisition)
            this.timingAcquisition = null
          }
        },
        immediate: true
      }
    },
    methods: {
      /**
       * 通过车间Id调用接口获取设备信息列表
       * @param id 车间Id
       */
      getDeviceListByApi(id) {
        console.log('重新刷新')
        api.getDeviceListInWorkshopSignagePageApi(id).then(res => {
          if (res.result && res.result.length > 0) {
            this.deviceList = res.result
          }
        })
      },
      /**
       * 通过车间Id调用接口获取车间详细信息
       * @param id 车间Id
       */
      getWorkshopDetailsByApi(id) {
        api.getWorkshopDetailByWorkshopIdApi(id).then(res => {
          this.workshopDetails = res.result
          this.$refs.deviceContainerRef.style.backgroundImage = `url(${this.getImgView(this.workshopDetails.backgroundImage)})`
        })
      },
      /**
       * 图片预览
       * @param text 图片地址
       */
      getImgView(text) {
        if (text && text.indexOf(',') > 0) {
          text = text.substring(0, text.indexOf(','))
        }
        return getFileAccessHttpUrl(text)
      },
      /**
       * 点击保存按钮调用接口保存拖拽后的位置与设备图标尺寸
       */
      saveDevicePositionAndSizeByApi() {
        console.log('触发保存')
        if (this.isOperatingDevice) {
          api.saveDevicePositionAndSizeApi(this.deviceList).then(res => {
            if (res.code === 200) {
              this.$notification.success({
                message: '消息',
                description: res.message
              })
              this.isOperatingDevice = false
              if (this.isSwitchChecked) {
                this.isSwitchChecked = false
                this.isResizable = !this.isResizable
                this.isDraggable = !this.isDraggable
              }
              this.getDeviceListByApi(this.$route.params.id)
            }
          })
        } else {
          this.$notification.warning({
            message: '消息',
            description: '请开启功能后再进行保存'
          })
        }
      },
      /**
       * 设备拖拽或缩放时触发事件
       * @param newRect 拖拽或缩放后的尺寸及距离
       * @param index 拖拽设备在数组中的下标
       */
      resize(newRect, index) {
        // if (newRect.width > 100) {
        //   if (newRect.width / newRect.height < 2) {
        //     this.deviceList[index].fontSize = newRect.width / 10
        //   } else {
        //     this.deviceList[index].fontSize = newRect.height / 5
        //   }
        // } else {
        //   this.deviceList[index].fontSize = 12
export default {
  components: {
    VueDragResize,
  },
  data() {
    return {
      workshopDetails: {}, //  车间详细信息,
      isDraggable: false, // 是否开启拖拽
      isResizable: false, // 是否开启缩放
      isSwitchChecked: false, // 是否开启功能
      timingAcquisition: null, // 定时刷新是否开启
      deviceList: [
        // {
        //   equipmentId: '123213213123232',// 设备ID
        //   equipmentImage: require('@/assets/8.png'), // 设备图片
        //   coordinateTop: 200, // 拖拽元素距盒子顶距离
        //   coordinateLeft: 100, // 拖拽元素距盒子左侧距离
        //   vw: 100,  // 缩放元素宽度
        //   vh: 100, // 缩放元素高度
        //   fontSize: 12, // 缩放元素字体大小
        //   equipmentStatus: 1 // 设备状态 0:关机 22:报警 2:待机 3:运行 开机:1(没有四色灯标识归为待机)
        // }
        this.deviceList[index].vw = newRect.width
        this.deviceList[index].vh = newRect.height
        this.deviceList[index].coordinateTop = newRect.top
        this.deviceList[index].coordinateLeft = newRect.left
      },
      /**
       * 根据设备状态值获取对应设备数量
       * @param value 设备状态值
       * @returns {number} 设备数量
       */
      getDeviceNumberByStatus(value) {
        return this.deviceList.filter(item => item.equipmentStatus === value).length
      },
      /**
       * 开启功能触发事件
       * @param checked 当前switch状态,是否开启,初始为false
       */
      handleSwitchChange(checked) {
        this.isOperatingDevice = true
        this.isResizable = !this.isResizable
        this.isDraggable = !this.isDraggable
      }
    },
    created() {
      if (this.$route.params.id) {
        this.getDeviceListByApi(this.$route.params.id)
        this.getWorkshopDetailsByApi(this.$route.params.id)
      }
    },
    mounted() {
      // 禁止用户选中内容
      document.onselectstart = () => false
    },
    beforeDestroy() {
      // 确保销毁定时器及回收资源
      clearInterval(this.timingAcquisition)
      this.timingAcquisition = null
      ], // 设备信息列表
      deviceStatusList: [
        {
          label: '关机',
          value: 0,
          color: '#A8A8A8',
        },
        {
          label: '待机',
          value: 2,
          color: '#FFFF00',
        },
        {
          label: '运行',
          value: 3,
          color: '#00EE00',
        },
        {
          label: '报警',
          value: 22,
          color: '#FF0000',
        },
      ], // 设备状态指示灯列表
    }
  }
  },
  watch: {
    isSwitchChecked: {
      handler(newVal) {
        if (!newVal) {
          console.log('定时器开启中')
          this.timingAcquisition = setInterval(() => {
            this.getDeviceListByApi(this.$route.params.id)
          }, 2000)
        } else {
          console.log('关闭定时器')
          clearInterval(this.timingAcquisition)
          this.timingAcquisition = null
        }
      },
      immediate: true,
    },
  },
  methods: {
    /**
     * 通过车间Id调用接口获取设备信息列表
     * @param id 车间Id
     */
    getDeviceListByApi(id) {
      console.log('重新刷新')
      api.getDeviceListInWorkshopSignagePageApi(id).then((res) => {
        if (res.result && res.result.length > 0) {
          this.deviceList = res.result
        }
      })
    },
    /**
     * 通过车间Id调用接口获取车间详细信息
     * @param id 车间Id
     */
    getWorkshopDetailsByApi(id) {
      api.getWorkshopDetailByWorkshopIdApi(id).then((res) => {
        this.workshopDetails = res.result
        this.$refs.deviceContainerRef.style.backgroundImage = `url(${this.getImgView(
          this.workshopDetails.backgroundImage
        )})`
      })
    },
    /**
     * 图片预览
     * @param text 图片地址
     */
    getImgView(text) {
      if (text && text.indexOf(',') > 0) {
        text = text.substring(0, text.indexOf(','))
      }
      return getFileAccessHttpUrl(text)
    },
    /**
     * 点击保存按钮调用接口保存拖拽后的位置与设备图标尺寸
     */
    saveDevicePositionAndSizeByApi() {
      console.log('触发保存')
      if (this.isOperatingDevice) {
        api.saveDevicePositionAndSizeApi(this.deviceList).then((res) => {
          if (res.code === 200) {
            this.$notification.success({
              message: '消息',
              description: res.message,
            })
            this.isOperatingDevice = false
            if (this.isSwitchChecked) {
              this.isSwitchChecked = false
              this.isResizable = !this.isResizable
              this.isDraggable = !this.isDraggable
            }
            this.getDeviceListByApi(this.$route.params.id)
          }
        })
      } else {
        this.$notification.warning({
          message: '消息',
          description: '请开启功能后再进行保存',
        })
      }
    },
    /**
     * 设备拖拽或缩放时触发事件
     * @param newRect 拖拽或缩放后的尺寸及距离
     * @param index 拖拽设备在数组中的下标
     */
    resize(newRect, index) {
      // if (newRect.width > 100) {
      //   if (newRect.width / newRect.height < 2) {
      //     this.deviceList[index].fontSize = newRect.width / 10
      //   } else {
      //     this.deviceList[index].fontSize = newRect.height / 5
      //   }
      // } else {
      //   this.deviceList[index].fontSize = 12
      // }
      this.deviceList[index].vw = newRect.width
      this.deviceList[index].vh = newRect.height
      this.deviceList[index].coordinateTop = newRect.top
      this.deviceList[index].coordinateLeft = newRect.left
    },
    /**
     * 根据设备状态值获取对应设备数量
     * @param value 设备状态值
     * @returns {number} 设备数量
     */
    getDeviceNumberByStatus(value) {
      return this.deviceList.filter((item) => item.equipmentStatus === value).length
    },
    /**
     * 开启功能触发事件
     * @param checked 当前switch状态,是否开启,初始为false
     */
    handleSwitchChange(checked) {
      this.isOperatingDevice = true
      this.isResizable = !this.isResizable
      this.isDraggable = !this.isDraggable
    },
  },
  created() {
    if (this.$route.params.id) {
      this.getDeviceListByApi(this.$route.params.id)
      this.getWorkshopDetailsByApi(this.$route.params.id)
    }
  },
  mounted() {
    // 禁止用户选中内容
    document.onselectstart = () => false
  },
  beforeDestroy() {
    // 确保销毁定时器及回收资源
    clearInterval(this.timingAcquisition)
    this.timingAcquisition = null
  },
}
</script>
<style scoped lang="less">
  .full-screen-container {
    background-image: url('../assets/Bj.jpg');
    background-size: 100% 100%;
    color: #fff;
.full-screen-container {
  background-image: url('../assets/Bj.jpg');
  background-size: 100% 100%;
  color: #fff;
    .page-header {
      height: 80px;
      font-size: 50px;
      text-align: center;
      position: relative;
  .page-header {
    height: 80px;
    font-size: 50px;
    text-align: center;
    position: relative;
      .header-right {
        width: 450px;
        position: absolute;
        right: 0px;
        top: 35px;
        display: flex;
        justify-content: space-evenly;
        align-items: center;
        font-size: 16px;
      }
    }
    .content-container {
      position: relative;
      width: 100%;
      height: 100%;
      background-repeat: no-repeat;
      background-size: 100% 100%;
      .device-status-info {
        width: 400px;
        position: absolute;
        top: 5px;
        right: 5px;
        display: flex;
        align-items: center;
        justify-content: space-between;
        .single-status-info {
          width: 60px;
          display: flex;
          align-items: center;
          justify-content: space-between;
          .status-square {
            width: 14px;
            height: 14px;
            border: 1px solid #fff;
            border-radius: 2px;
          }
        }
      }
      .single-device {
        position: absolute;
        border: 1px solid transparent;
        padding: 10px;
        display: flex;
        flex-direction: column;
        align-items: center;
        justify-content: space-between;
        cursor: default;
        &:active {
          border: 1px solid #1890ff;
        }
        .device-status {
          width: 100%;
          height: 100%;
          display: flex;
          justify-content: space-between;
          .status-image {
            background-size: 100% 100%;
            background-repeat: no-repeat;
            width: 45px;
            margin-right: 10px;
          }
          .device-image {
            background-size: 100% 100%;
            background-repeat: no-repeat;
            width: 100%;
            height: 100%;
          }
        }
      }
    .header-right {
      width: 450px;
      position: absolute;
      right: 0px;
      top: 35px;
      display: flex;
      justify-content: space-evenly;
      align-items: center;
      font-size: 16px;
    }
  }
  .content-container {
    position: relative;
    width: 100%;
    height: 100%;
    background-repeat: no-repeat;
    background-size: 100% 100%;
    .device-status-info {
      width: 400px;
      position: absolute;
      top: 5px;
      right: 5px;
      display: flex;
      align-items: center;
      justify-content: space-between;
      .single-status-info {
        width: 60px;
        display: flex;
        align-items: center;
        justify-content: space-between;
        .status-square {
          width: 14px;
          height: 14px;
          border: 1px solid #fff;
          border-radius: 2px;
        }
      }
    }
    .single-device {
      position: absolute;
      border: 1px solid transparent;
      padding: 10px;
      display: flex;
      flex-direction: column;
      align-items: center;
      justify-content: space-between;
      cursor: default;
      &:active {
        border: 1px solid #1890ff;
      }
      .device-status {
        width: 100%;
        height: 100%;
        display: flex;
        justify-content: space-between;
        .status-image {
          background-size: 100% 100%;
          background-repeat: no-repeat;
          width: 45px;
          margin-right: 10px;
        }
        .device-image {
          background-size: 100% 100%;
          background-repeat: no-repeat;
          width: 100%;
          height: 100%;
        }
      }
    }
  }
}
</style>
src/views/system/WorkshopSignageManagement.vue
@@ -8,16 +8,16 @@
          <a-form layout="inline" @keyup.enter.native="searchQuery">
            <a-row :gutter="24">
              <a-col :md="12" :sm="8">
                <a-form-item label="车间名称" :labelCol="{span: 5}" :wrapperCol="{span: 18, offset: 1}">
                <a-form-item label="车间名称" :labelCol="{ span: 5 }" :wrapperCol="{ span: 18, offset: 1 }">
                  <a-input placeholder="" v-model="queryParam.workshopName"></a-input>
                </a-form-item>
              </a-col>
              <span style="float: left;overflow: hidden;" class="table-page-search-submitButtons">
            <a-col :md="12" :sm="24">
               <a-button type="primary" @click="searchQuery" icon="search" style="margin-left: 21px">查询</a-button>
              <a-button type="primary" @click="searchReset" icon="reload" style="margin-left: 8px">重置</a-button>
            </a-col>
          </span>
              <span style="float: left; overflow: hidden" class="table-page-search-submitButtons">
                <a-col :md="12" :sm="24">
                  <a-button type="primary" @click="searchQuery" icon="search" style="margin-left: 21px">查询</a-button>
                  <a-button type="primary" @click="searchReset" icon="reload" style="margin-left: 8px">重置</a-button>
                </a-col>
              </span>
            </a-row>
          </a-form>
        </div>
@@ -26,15 +26,17 @@
          <a-button @click="handleAdd" type="primary" icon="plus">新建车间</a-button>
        </div>
        <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;">
          <i class="anticon anticon-info-circle ant-alert-icon">
          </i> 已选择 <a><b>{{ selectedRowKeys1.length }}</b></a>项
        <div class="ant-alert ant-alert-info" style="margin-bottom: 16px">
          <i class="anticon anticon-info-circle ant-alert-icon"> </i> 已选择
          <a
            ><b>{{ selectedRowKeys1.length }}</b></a
          >项
          <a style="margin-left: 24px" @click="onClearSelected1">清空</a>
        </div>
        <div style="margin-top: 15px">
          <a-table
            style="height:500px"
            style="height: 500px"
            ref="table"
            size="middle"
            bordered
@@ -43,85 +45,85 @@
            :dataSource="dataSource"
            :pagination="ipagination"
            :loading="loading"
            :rowSelection="{selectedRowKeys: selectedRowKeys1, onChange: onSelectChange1, type:'radio'}"
            @change="handleTableChange">
            <template slot="backgroundImage" slot-scope="text,record">
              <img :src="getImgView(record.backgroundImage)" width="50" height="50">
            :rowSelection="{ selectedRowKeys: selectedRowKeys1, onChange: onSelectChange1, type: 'radio' }"
            @change="handleTableChange"
          >
            <template slot="backgroundImage" slot-scope="text, record">
              <img :src="getImgView(record.backgroundImage)" width="50" height="50" />
            </template>
            <span slot="action" slot-scope="text, record">
            <a @click="handleOpen(record)">车间</a>
            <a-divider type="vertical"/>
            <a-dropdown>
              <a class="ant-dropdown-link">
                更多 <a-icon type="down"/>
              </a>
              <a-menu slot="overlay">
                <a-menu-item>
                  <a @click="handleEdit(record)">编辑</a>
                </a-menu-item>
                <a-menu-item>
                  <a-popconfirm title="确定删除吗?" @confirm="() => handleDelete1(record.id)">
                    <a>删除</a>
                  </a-popconfirm>
                </a-menu-item>
              </a-menu>
            </a-dropdown>
        </span>
              <a @click="handleOpen(record)">设备</a>
              <a-divider type="vertical" />
              <a-dropdown>
                <a class="ant-dropdown-link"> 更多 <a-icon type="down" /> </a>
                <a-menu slot="overlay">
                  <a-menu-item>
                    <a @click="handleEdit(record)">编辑</a>
                  </a-menu-item>
                  <a-menu-item>
                    <a-popconfirm title="确定删除吗?" @confirm="() => handleDelete1(record.id)">
                      <a>删除</a>
                    </a-popconfirm>
                  </a-menu-item>
                </a-menu>
              </a-dropdown>
            </span>
          </a-table>
        </div>
      </a-card>
    </a-col>
    <a-col :md="rightColMd" :sm="24" v-if="this.rightcolval == 1">
      <a-card :bordered="false">
        <div style="text-align: right;">
          <a-icon type="close-circle" @click="hideUserList"/>
        <div style="text-align: right">
          <a-icon type="close-circle" @click="hideUserList" />
        </div>
        <!-- 查询区域 -->
        <div class="table-page-search-wrapper">
          <a-form layout="inline">
            <a-row :gutter="24">
              <a-col :md="12" :sm="12">
                <a-form-item label="设备编码">
                  <a-input placeholder="" v-model="queryParam2.equipmentId"></a-input>
                </a-form-item>
              </a-col>
              <span style="float: left;overflow: hidden;" class="table-page-search-submitButtons">
            <a-col :md="9" :sm="24">
             <a-button type="primary" @click="searchQuery2" icon="search" style="margin-left: 21px">查询</a-button>
              <a-button type="primary" @click="searchReset2" icon="reload" style="margin-left: 8px">重置</a-button>
            </a-col>
          </span>
              <span style="float: left; overflow: hidden" class="table-page-search-submitButtons">
                <a-col :md="9" :sm="24">
                  <a-button type="primary" @click="searchQuery2" icon="search" style="margin-left: 21px">查询</a-button>
                  <a-button type="primary" @click="searchReset2" icon="reload" style="margin-left: 8px">重置</a-button>
                </a-col>
              </span>
            </a-row>
          </a-form>
        </div>
        <!-- 操作按钮区域 -->
        <div class="table-operator" :md="24" :sm="24">
          <a-button @click="handleAddDeviceInWorkshop" type="primary" icon="plus" style="margin-top: 16px">已有设备
          <a-button @click="handleAddDeviceInWorkshop" type="primary" icon="plus" style="margin-top: 16px"
            >已有设备
          </a-button>
          <a-dropdown v-if="selectedRowKeys2.length > 0">
            <a-menu slot="overlay">
              <a-menu-item key="1" @click="batchDel2">
                <a-icon type="delete"/>
                <a-icon type="delete" />
                删除
              </a-menu-item>
            </a-menu>
            <a-button style="margin-left: 8px"> 批量操作
              <a-icon type="down"/>
            <a-button style="margin-left: 8px">
              批量操作
              <a-icon type="down" />
            </a-button>
          </a-dropdown>
        </div>
        <!-- table区域-begin -->
        <div>
          <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;">
            <i class="anticon anticon-info-circle ant-alert-icon"></i> 已选择 <a style="font-weight: 600">{{
            selectedRowKeys2.length }}</a>项
          <div class="ant-alert ant-alert-info" style="margin-bottom: 16px">
            <i class="anticon anticon-info-circle ant-alert-icon"></i> 已选择
            <a style="font-weight: 600">{{ selectedRowKeys2.length }}</a
            >项
            <a style="margin-left: 24px" @click="onClearSelected2">清空</a>
          </div>
          <a-table
            style="height:500px"
            style="height: 500px"
            ref="table2"
            bordered
            size="middle"
@@ -130,366 +132,370 @@
            :dataSource="dataSource2"
            :pagination="ipagination2"
            :loading="loading2"
            :rowSelection="{selectedRowKeys: selectedRowKeys2, onChange: onSelectChange2}"
            @change="handleTableChange2">
            :rowSelection="{ selectedRowKeys: selectedRowKeys2, onChange: onSelectChange2 }"
            @change="handleTableChange2"
          >
            <span slot="action" slot-scope="text, record">
          <a-popconfirm title="确定删除吗?" @confirm="() => handleDelete2(record.equipmentId)">
                  <a>删除</a>
          </a-popconfirm>
        </span>
              <a-popconfirm title="确定删除吗?" @confirm="() => handleDelete2(record.equipmentId)">
                <a>删除</a>
              </a-popconfirm>
            </span>
          </a-table>
        </div>
      </a-card>
    </a-col>
    <!-- 表单区域 -->
    <workshop-modal ref="modalForm" @ok="modalFormOk"></workshop-modal> <!--新增车间-->
    <select-device-modal ref="selectUserModal" @selectFinished="selectOK"></select-device-modal> <!--已有设备-->
    <workshop-modal ref="modalForm" @ok="modalFormOk"></workshop-modal>
    <!--新增车间-->
    <select-device-modal ref="selectUserModal" @selectFinished="selectOK"></select-device-modal>
    <!--已有设备-->
  </a-row>
</template>
<script>
  import { JeecgListMixin } from '@/mixins/JeecgListMixin'
  import { deleteAction, postAction, getAction } from '@/api/manage'
  import SelectDeviceModal from './modules/SelectDeviceModal'
  import WorkshopModal from './modules/WorkshopModal'
  import { filterObj } from '@/utils/util'
  import moment from 'moment'
import { JeecgListMixin } from '@/mixins/JeecgListMixin'
import { deleteAction, postAction, getAction } from '@/api/manage'
import SelectDeviceModal from './modules/SelectDeviceModal'
import WorkshopModal from './modules/WorkshopModal'
import { filterObj } from '@/utils/util'
import moment from 'moment'
  export default {
    name: 'WorkshopSignageManagement',
    mixins: [JeecgListMixin],
    components: {
      SelectDeviceModal,
      WorkshopModal,
      moment
export default {
  name: 'WorkshopSignageManagement',
  mixins: [JeecgListMixin],
  components: {
    SelectDeviceModal,
    WorkshopModal,
    moment,
  },
  data() {
    return {
      model1: {},
      model2: {},
      currentRoleId: '',
      currentWorkshopId: '',
      queryParam1: {},
      queryParam2: {},
      dataSource1: [],
      dataSource2: [],
      ipagination1: {
        current: 1,
        pageSize: 10,
        pageSizeOptions: ['10', '20', '30'],
        showTotal: (total, range) => {
          return range[0] + '-' + range[1] + ' 共' + total + '条'
        },
        showQuickJumper: true,
        showSizeChanger: true,
        total: 0,
      },
      ipagination2: {
        current: 1,
        pageSize: 10,
        pageSizeOptions: ['10', '20', '30'],
        showTotal: (total, range) => {
          return range[0] + '-' + range[1] + ' 共' + total + '条'
        },
        showQuickJumper: true,
        showSizeChanger: true,
        total: 0,
      },
      isorter1: {
        column: 'createTime',
        order: 'desc',
      },
      isorter2: {
        column: 'createTime',
        order: 'desc',
      },
      filters1: {},
      filters2: {},
      loading1: false,
      loading2: false,
      selectedRowKeys1: [],
      selectedRowKeys2: [],
      selectionRows1: [],
      selectionRows2: [],
      test: {},
      rightcolval: 0,
      columns: [
        {
          title: '车间名称',
          align: 'center',
          dataIndex: 'workshopName',
        },
        {
          title: '车间背景图',
          dataIndex: 'backgroundImage',
          align: 'center',
          scopedSlots: { customRender: 'backgroundImage' },
        },
        {
          title: '操作',
          dataIndex: 'action',
          align: 'center',
          scopedSlots: { customRender: 'action' },
        },
      ],
      columns2: [
        {
          title: '设备编码',
          align: 'center',
          dataIndex: 'equipmentId',
          width: 120,
        },
        {
          title: '设备名称',
          align: 'center',
          width: 100,
          dataIndex: 'equipmentName',
        },
        {
          title: '设备类型',
          align: 'center',
          width: 80,
          dataIndex: 'equipmentType',
        },
        {
          title: '操作',
          dataIndex: 'action',
          scopedSlots: { customRender: 'action' },
          align: 'center',
          width: 120,
        },
      ],
      // 高级查询参数
      superQueryParams2: '',
      // 高级查询拼接条件
      superQueryMatchType2: 'and',
      url: {
        list: '/mdc/mdcWorkshopInfo/list',
        delete: '/mdc/mdcWorkshopInfo/delete',
        list2: '/mdc/mdcWorkshopInfo/workshopEquipmentList',
        addDeviceInWorkshop: '/mdc/mdcWorkshopInfo/addWorkshopEquipment',
        delete2: '/mdc/mdcWorkshopInfo/deleteWorkshopEquipment',
        deleteBatch2: '/mdc/mdcWorkshopInfo/deleteWorkshopEquipmentBatch',
      },
    }
  },
  computed: {
    leftColMd() {
      return this.selectedRowKeys1.length === 0 ? 24 : 12
    },
    data() {
      return {
        model1: {},
        model2: {},
        currentRoleId: '',
        currentWorkshopId: '',
        queryParam1: {},
        queryParam2: {},
        dataSource1: [],
        dataSource2: [],
        ipagination1: {
          current: 1,
          pageSize: 10,
          pageSizeOptions: ['10', '20', '30'],
          showTotal: (total, range) => {
            return range[0] + '-' + range[1] + ' 共' + total + '条'
          },
          showQuickJumper: true,
          showSizeChanger: true,
          total: 0
        },
        ipagination2: {
          current: 1,
          pageSize: 10,
          pageSizeOptions: ['10', '20', '30'],
          showTotal: (total, range) => {
            return range[0] + '-' + range[1] + ' 共' + total + '条'
          },
          showQuickJumper: true,
          showSizeChanger: true,
          total: 0
        },
        isorter1: {
          column: 'createTime',
          order: 'desc'
        },
        isorter2: {
          column: 'createTime',
          order: 'desc'
        },
        filters1: {},
        filters2: {},
        loading1: false,
        loading2: false,
        selectedRowKeys1: [],
        selectedRowKeys2: [],
        selectionRows1: [],
        selectionRows2: [],
        test: {},
        rightcolval: 0,
        columns: [
          {
            title: '车间名称',
            align: 'center',
            dataIndex: 'workshopName'
          },
          {
            title: '车间背景图',
            dataIndex: 'backgroundImage',
            align: 'center',
            scopedSlots: { customRender: 'backgroundImage' }
          },
          {
            title: '操作',
            dataIndex: 'action',
            align: 'center',
            scopedSlots: { customRender: 'action' }
          }
        ],
        columns2: [
          {
            title: '设备编码',
            align: 'center',
            dataIndex: 'equipmentId',
            width: 120
          },
          {
            title: '设备名称',
            align: 'center',
            width: 100,
            dataIndex: 'equipmentName'
          },
          {
            title: '设备类型',
            align: 'center',
            width: 80,
            dataIndex: 'equipmentType'
          },
          {
            title: '操作',
            dataIndex: 'action',
            scopedSlots: { customRender: 'action' },
            align: 'center',
            width: 120
          }],
        // 高级查询参数
        superQueryParams2: '',
        // 高级查询拼接条件
        superQueryMatchType2: 'and',
        url: {
          list: '/mdc/mdcWorkshopInfo/list',
          delete: '/mdc/mdcWorkshopInfo/delete',
          list2: '/mdc/mdcWorkshopInfo/workshopEquipmentList',
          addDeviceInWorkshop: '/mdc/mdcWorkshopInfo/addWorkshopEquipment',
          delete2: '/mdc/mdcWorkshopInfo/deleteWorkshopEquipment',
          deleteBatch2: '/mdc/mdcWorkshopInfo/deleteWorkshopEquipmentBatch'
        }
    rightColMd() {
      return this.selectedRowKeys1.length === 0 ? 0 : 12
    },
  },
  methods: {
    onSelectChange2(selectedRowKeys, selectionRows) {
      this.selectedRowKeys2 = selectedRowKeys
      this.selectionRows2 = selectionRows
    },
    onClearSelected2() {
      this.selectedRowKeys2 = []
      this.selectionRows2 = []
    },
    onClearSelected1() {
      this.selectedRowKeys1 = []
      this.selectionRows1 = []
    },
    onSelectChange1(selectedRowKeys, selectionRows) {
      this.rightcolval = 1
      this.selectedRowKeys1 = selectedRowKeys
      this.selectionRows1 = selectionRows
      this.model1 = Object.assign({}, selectionRows[0])
      this.currentWorkshopId = selectedRowKeys[0]
      this.loadData2()
    },
    getQueryParams2() {
      //获取查询条件
      let sqp = {}
      if (this.superQueryParams2) {
        sqp['superQueryParams'] = encodeURI(this.superQueryParams2)
        sqp['superQueryMatchType'] = this.superQueryMatchType2
      }
      var param = Object.assign(sqp, this.queryParam2, this.isorter2, this.filters2)
      param.field = this.getQueryField2()
      param.pageNo = this.ipagination2.current
      param.pageSize = this.ipagination2.pageSize
      return filterObj(param)
    },
    computed: {
      leftColMd() {
        return this.selectedRowKeys1.length === 0 ? 24 : 12
      },
      rightColMd() {
        return this.selectedRowKeys1.length === 0 ? 0 : 12
    getQueryField2() {
      //TODO 字段权限控制
      var str = 'id,'
      this.columns2.forEach(function (value) {
        str += ',' + value.dataIndex
      })
      return str
    },
    modalFormOk2() {
      // 新增/修改 成功时,重载列表
      this.loadData2()
    },
    loadData2(arg) {
      if (!this.url.list2) {
        this.$message.error('请设置url.list2属性!')
        return
      }
      //加载数据 若传入参数1则加载第一页的内容
      if (arg === 1) {
        this.ipagination2.current = 1
      }
      if (this.currentWorkshopId === '') return
      let params = this.getQueryParams2() //查询条件
      params.workshopId = this.currentWorkshopId
      this.loading2 = true
      getAction(this.url.list2, params).then((res) => {
        if (res.success) {
          this.dataSource2 = res.result.records
          this.ipagination2.total = res.result.total
        }
        this.loading2 = false
      })
    },
    methods: {
      onSelectChange2(selectedRowKeys, selectionRows) {
        this.selectedRowKeys2 = selectedRowKeys
        this.selectionRows2 = selectionRows
      },
      onClearSelected2() {
        this.selectedRowKeys2 = []
        this.selectionRows2 = []
      },
      onClearSelected1() {
        this.selectedRowKeys1 = []
        this.selectionRows1 = []
      },
      onSelectChange1(selectedRowKeys, selectionRows) {
        this.rightcolval = 1
        this.selectedRowKeys1 = selectedRowKeys
        this.selectionRows1 = selectionRows
        this.model1 = Object.assign({}, selectionRows[0])
        this.currentWorkshopId = selectedRowKeys[0]
        this.loadData2()
      },
      getQueryParams2() {
        //获取查询条件
        let sqp = {}
        if (this.superQueryParams2) {
          sqp['superQueryParams'] = encodeURI(this.superQueryParams2)
          sqp['superQueryMatchType'] = this.superQueryMatchType2
        }
        var param = Object.assign(sqp, this.queryParam2, this.isorter2, this.filters2)
        param.field = this.getQueryField2()
        param.pageNo = this.ipagination2.current
        param.pageSize = this.ipagination2.pageSize
        return filterObj(param)
      },
      getQueryField2() {
        //TODO 字段权限控制
        var str = 'id,'
        this.columns2.forEach(function(value) {
          str += ',' + value.dataIndex
        })
        return str
      },
      modalFormOk2() {
        // 新增/修改 成功时,重载列表
        this.loadData2()
      },
      loadData2(arg) {
        if (!this.url.list2) {
          this.$message.error('请设置url.list2属性!')
          return
        }
        //加载数据 若传入参数1则加载第一页的内容
        if (arg === 1) {
          this.ipagination2.current = 1
        }
        if (this.currentWorkshopId === '') return
        let params = this.getQueryParams2()//查询条件
        params.workshopId = this.currentWorkshopId
        this.loading2 = true
        getAction(this.url.list2, params).then((res) => {
          if (res.success) {
            this.dataSource2 = res.result.records
            this.ipagination2.total = res.result.total
          }
          this.loading2 = false
        })
      },
      handleDelete1: function(id) {
        this.handleDelete(id)
        this.dataSource2 = []
        this.currentRoleId = ''
      },
    handleDelete1: function (id) {
      this.handleDelete(id)
      this.dataSource2 = []
      this.currentRoleId = ''
    },
      /**
       * 点击设备表格中的删除按钮后触发删除单个车间与设备的关系
       * @param equipmentId 当前行的设备编号
       */
      handleDelete2: function(equipmentId) {
        if (!this.url.delete2) {
          this.$message.error('请设置url.delete2属性!')
          return
    /**
     * 点击设备表格中的删除按钮后触发删除单个车间与设备的关系
     * @param equipmentId 当前行的设备编号
     */
    handleDelete2: function (equipmentId) {
      if (!this.url.delete2) {
        this.$message.error('请设置url.delete2属性!')
        return
      }
      var that = this
      deleteAction(that.url.delete2, { workshopId: this.currentWorkshopId, equipmentId }).then((res) => {
        if (res.success) {
          that.$message.success(res.message)
          that.loadData2()
        } else {
          that.$message.warning(res.message)
        }
      })
    },
    /**
     * 批量删除车间与设备的关系
     */
    batchDel2: function () {
      if (!this.url.deleteBatch2) {
        this.$message.error('请设置url.deleteBatch2属性!')
        return
      }
      if (this.selectedRowKeys2.length <= 0) {
        // this.$message.warning('请选择一条记录!')
        this.$notification.warning({
          message: '消息',
          description: '请选择一条记录',
        })
        return
      } else {
        var ids = ''
        for (var a = 0; a < this.selectedRowKeys2.length; a++) {
          ids += this.selectedRowKeys2[a] + ','
        }
        var that = this
        deleteAction(that.url.delete2, { workshopId: this.currentWorkshopId, equipmentId }).then((res) => {
          if (res.success) {
            that.$message.success(res.message)
            that.loadData2()
          } else {
            that.$message.warning(res.message)
          }
        this.$confirm({
          title: '确认删除',
          content: '是否删除选中数据?',
          onOk: function () {
            deleteAction(that.url.deleteBatch2, {
              workshopId: that.currentWorkshopId,
              equipmentIds: ids,
            }).then((res) => {
              if (res.success) {
                that.$message.success(res.message)
                that.loadData2()
                that.onClearSelected()
              } else {
                that.$message.warning(res.message)
              }
            })
          },
        })
      },
      /**
       * 批量删除车间与设备的关系
       */
      batchDel2: function() {
        if (!this.url.deleteBatch2) {
          this.$message.error('请设置url.deleteBatch2属性!')
          return
        }
        if (this.selectedRowKeys2.length <= 0) {
          // this.$message.warning('请选择一条记录!')
          this.$notification.warning({
            message: '消息',
            description: '请选择一条记录'
          })
          return
        } else {
          var ids = ''
          for (var a = 0; a < this.selectedRowKeys2.length; a++) {
            ids += this.selectedRowKeys2[a] + ','
          }
          var that = this
          this.$confirm({
            title: '确认删除',
            content: '是否删除选中数据?',
            onOk: function() {
              deleteAction(that.url.deleteBatch2, {
                workshopId: that.currentWorkshopId,
                equipmentIds: ids
              }).then((res) => {
                if (res.success) {
                  that.$message.success(res.message)
                  that.loadData2()
                  that.onClearSelected()
                } else {
                  that.$message.warning(res.message)
                }
              })
            }
          })
        }
      },
      /**
       * 选择已有设备后点击确定时触发
       * @param data 已选择的设备
       */
      selectOK(data) {
        let params = {}
        params.workshopId = this.currentWorkshopId
        params.equipmentIdList = []
        for (var a = 0; a < data.length; a++) {
          params.equipmentIdList.push(data[a])
        }
        console.log(params)
        postAction(this.url.addDeviceInWorkshop, params).then((res) => {
          if (res.success) {
            this.loadData2()
            this.$message.success(res.message)
          } else {
            this.$message.warning(res.message)
          }
        })
      },
      /**
       * 点击已有设备按钮触发
       */
      handleAddDeviceInWorkshop() {
        if (this.currentWorkshopId == '') {
          this.$message.error('请选择一个车间!')
        } else {
          this.$refs.selectUserModal.visible = true
          this.$refs.selectUserModal.selectedRowKeys = []
          this.$refs.selectUserModal.selectedRows = []
        }
      },
      /**
       * 点击当前行车间选项后触发事件
       * @param record 当前行数据
       */
      handleOpen(record) {
        this.rightcolval = 1
        this.selectedRowKeys1 = [record.id]
        this.model1 = Object.assign({}, record)
        this.currentWorkshopId = record.id
        this.onClearSelected2()
        this.loadData2()
      },
      searchQuery2() {
        this.loadData2(1)
      },
      searchReset2() {
        this.queryParam2 = {}
        this.loadData2(1)
      },
      handleTableChange2(pagination, filters, sorter) {
        //分页、排序、筛选变化时触发
        //TODO 筛选
        if (Object.keys(sorter).length > 0) {
          this.isorter2.column = sorter.field
          this.isorter2.order = 'ascend' == sorter.order ? 'asc' : 'desc'
        }
        this.ipagination2 = pagination
        this.loadData2()
      },
      hideUserList() {
        //this.rightcolval = 0
        this.selectedRowKeys1 = []
      }
    }
  }
    },
    /**
     * 选择已有设备后点击确定时触发
     * @param data 已选择的设备
     */
    selectOK(data) {
      let params = {}
      params.workshopId = this.currentWorkshopId
      params.equipmentIdList = []
      for (var a = 0; a < data.length; a++) {
        params.equipmentIdList.push(data[a])
      }
      console.log(params)
      postAction(this.url.addDeviceInWorkshop, params).then((res) => {
        if (res.success) {
          this.loadData2()
          this.$message.success(res.message)
        } else {
          this.$message.warning(res.message)
        }
      })
    },
    /**
     * 点击已有设备按钮触发
     */
    handleAddDeviceInWorkshop() {
      if (this.currentWorkshopId == '') {
        this.$message.error('请选择一个车间!')
      } else {
        this.$refs.selectUserModal.visible = true
        this.$refs.selectUserModal.selectedRowKeys = []
        this.$refs.selectUserModal.selectedRows = []
      }
    },
    /**
     * 点击当前行车间选项后触发事件
     * @param record 当前行数据
     */
    handleOpen(record) {
      this.rightcolval = 1
      this.selectedRowKeys1 = [record.id]
      this.model1 = Object.assign({}, record)
      this.currentWorkshopId = record.id
      this.onClearSelected2()
      this.loadData2()
    },
    searchQuery2() {
      this.loadData2(1)
    },
    searchReset2() {
      this.queryParam2 = {}
      this.loadData2(1)
    },
    handleTableChange2(pagination, filters, sorter) {
      //分页、排序、筛选变化时触发
      //TODO 筛选
      if (Object.keys(sorter).length > 0) {
        this.isorter2.column = sorter.field
        this.isorter2.order = 'ascend' == sorter.order ? 'asc' : 'desc'
      }
      this.ipagination2 = pagination
      this.loadData2()
    },
    hideUserList() {
      //this.rightcolval = 0
      this.selectedRowKeys1 = []
    },
  },
}
</script>
<style scoped>
  /** Button按钮间距 */
  .ant-btn {
    margin-left: 8px
  }
/** Button按钮间距 */
.ant-btn {
  margin-left: 8px;
}
</style>