派生自 wuyushui/SewerAndRainNetwork

chenzeping
2021-04-12 6d31f5dbd15517c2aa1c1a0e1c5afb04290f7af0
弹框问题修改
1个文件已添加
3个文件已修改
103 ■■■■■ 已修改文件
src/components/BaseNav/PublicBounced/GasComponents/PublicChart.vue 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/BaseNav/PublicBounced/PublicBounced.vue 23 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/BaseNav/SolidWaste/directive/dir.js 37 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/utils/dragBoxes.js 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/BaseNav/PublicBounced/GasComponents/PublicChart.vue
@@ -25,14 +25,12 @@
<script>
import EChartsHour from './EChartsHour'
import EChartsDate from './EChartsDate'
import Echarts from '@components/BaseNav/PublicBounced/GasComponents/Echarts'
export default {
  name: 'PublicChart',
  components: {
    EChartsHour,
    EChartsDate,
    Echarts
    EChartsDate
  },
  data () {
    return {
src/components/BaseNav/PublicBounced/PublicBounced.vue
@@ -1,9 +1,6 @@
<template>
  <div class="public-bounced map-background" v-drag v-if="flag">
    <!--    <Echarts></Echarts>-->
    <div class="public-bounced-title panel-title">
  <div class="public-bounced" v-if="flag">
    <div class="public-bounced-title" draggable="true" @dragstart="drag($event)">
    <div class="public-bounced-title panel-title" ref="publicBounced">
      <span>{{ displayContentTitle }}</span>
      <i class="el-icon-circle-close" @click="closePopup"></i>
    </div>
@@ -17,7 +14,8 @@
          <public-chart v-else :getWasteGasDetails="getWasteGasDetails"
                        :value="value"
                        :getQueryOnlineMonData="getQueryOnlineMonData"
                        :getWasteWaterMonitoringDetails="getWasteWaterMonitoringDetails">
                        :getWasteWaterMonitoringDetails='getWasteWaterMonitoringDetails'
          >
          </public-chart>
        </div>
      </div>
@@ -29,7 +27,8 @@
</template>
<script>
import '@/components/BaseNav/SolidWaste/directive/dir'
import '@/utils/dragBoxes'
import PublicTabs from '@components/BaseNav/PublicBounced/GasComponents/PublicTabs'
import PublicTable from '@components/BaseNav/PublicBounced/GasComponents/PublicTable'
import PublicVideo from '@components/BaseNav/PublicBounced/GasComponents/PublicVideo'
@@ -38,7 +37,7 @@
export default {
  name: 'PublicBounced',
  components: {
    // Echarts
    // Echarts,
    PublicTabs,
    PublicTable,
    PublicChart,
@@ -59,10 +58,12 @@
      // getGasQueryOnlineMonData: []
    }
  },
  methods: {
    drag (event) {
      console.log(event)
  mounted () {
    this.$nextTick(() => {
      console.log(this.$refs.publicBounced)
    })
    },
  methods: {
    closePopup () {
      this.flag = false
    },
@@ -108,7 +109,6 @@
  left: 20%;
  .public-bounced-title {
    //cursor: pointer;
    cursor: move;
    height: 0.1rem;
    padding: 10px 0;
@@ -128,6 +128,7 @@
        font-size: 22px;
        cursor: pointer;
    }
      i:hover{
          color: #00fff6;
      }
src/components/BaseNav/SolidWaste/directive/dir.js
@@ -1,45 +1,31 @@
import Vue from 'vue'
// 使用Vue.directive()定义一个全局指令
// 1.参数一:指令的名称,定义时指令前面不需要写v-
// 2.参数二:是一个对象,该对象中有相关的操作函数
// 3.在调用的时候必须写v-
const drag = Vue.directive('drag', {
  // 1.指令绑定到元素上回立刻执行bind函数,只执行一次
  // 2.每个函数中第一个参数永远是el,表示绑定指令的元素,el参数是原生js对象
  // 3.通过el.focus()是无法获取焦点的,因为只有插入DOM后才生效
  bind: function (el) {
    el.style.cursor = 'move' // 鼠标样式变move样式
  },
  // inserted表示一个元素,插入到DOM中会执行inserted函数,只触发一次
  inserted: function (el) {
    el.onmousedown = function (e) {
  bind (el, binding, vnode, oldVnode) {
    const dialogHeaderEl = el.querySelector('.public-bounced-title')
    dialogHeaderEl.onmousedown = function (e) {
      var distX = e.pageX - el.offsetLeft
      var distY = e.pageY - el.offsetTop
      // console.log('元素本身的高:' + el.clientHeight + ',元素本身的宽:' + el.clientWidth)
      if (e.preventDefault) {
        e.preventDefault()
      } else {
        e.returnValue = false
      }
      // 解决快速拖动滞后问题
      document.onmousemove = function (e) {
        // 用鼠标的位置减去鼠标相对元素的位置,得到元素的位置
        let left = e.clientX - distX
        let top = e.clientY - distY
        if (left <= 0) {
          left = 5 // 设置成5是为了不离边缘太近
        } else if (left > document.documentElement.clientWidth - el.clientWidth) {
          // document.documentElement.clientWidth 屏幕的可视宽度
          left = document.documentElement.clientWidth - el.clientWidth - 5
          left = 5
        } else if (left > document.documentElement.clientWidth - dialogHeaderEl.clientWidth) {
          left = document.documentElement.clientWidth - dialogHeaderEl.clientWidth - 5
        }
        if (top <= 0) {
          top = 5
        } else if (top > document.documentElement.clientHeight - el.clientHeight) {
          top = document.documentElement.clientHeight - el.clientHeight - 5
        } else if (top > document.documentElement.clientHeight - dialogHeaderEl.clientHeight) {
          top = document.documentElement.clientHeight - dialogHeaderEl.clientHeight - 5
        }
        el.style.left = left + 'px'
        el.style.top = top + 'px'
      }
@@ -47,9 +33,6 @@
        document.onmousemove = document.onmouseup = null
      }
    }
  },
  // 当VNode更新的时候会执行updated,可以触发多次
  updated: function (el) {
  }
})
export default drag
src/utils/dragBoxes.js
New file
@@ -0,0 +1,39 @@
/* eslint */
import Vue from 'vue'
const drag = Vue.directive('drag', {
  bind (el, binding, vnode, oldVnode) {
    const dialogHeaderEl = el.querySelector('.public-bounced-title')
    dialogHeaderEl.onmousedown = function (e) {
      var distX = e.pageX - el.offsetLeft
      var distY = e.pageY - el.offsetTop
      if (e.preventDefault) {
        e.preventDefault()
      } else {
        e.returnValue = false
      }
      document.onmousemove = function (e) {
        let left = e.clientX - distX
        let top = e.clientY - distY
        if (left <= 0) {
          left = 5
        } else if (left > document.documentElement.clientWidth - dialogHeaderEl.clientWidth) {
          left = document.documentElement.clientWidth - dialogHeaderEl.clientWidth - 5
        }
        if (top <= 0) {
          top = 5
        } else if (top > document.documentElement.clientHeight - dialogHeaderEl.clientHeight) {
          top = document.documentElement.clientHeight - dialogHeaderEl.clientHeight - 5
        }
        el.style.left = left + 'px'
        el.style.top = top + 'px'
      }
      document.onmouseup = function () {
        document.onmousemove = document.onmouseup = null
      }
    }
  }
})
export default drag