multipleSelectMixin.js 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. /**
  2. * 选中多个组件进行组合
  3. */
  4. import { mapMutations, mapState } from 'vuex'
  5. let isMac = false
  6. if (window && window.navigator && window.navigator.userAgent) {
  7. isMac = window.navigator.userAgent.indexOf('Mac') > -1
  8. }
  9. export default {
  10. computed: {
  11. ...mapState({
  12. activeCodes: (state) => state.bigScreen.activeCodes,
  13. activeChart: (state) => state.bigScreen.activeItemConfig
  14. })
  15. },
  16. mounted () {
  17. // 监听shift键的按下和抬起
  18. document.addEventListener('keydown', this.keydown)
  19. document.addEventListener('keyup', this.keyup)
  20. },
  21. beforeDestroy () {
  22. document.removeEventListener('keydown', this.keydown)
  23. document.removeEventListener('keyup', this.keyup)
  24. },
  25. methods: {
  26. ...mapMutations('bigScreen', {
  27. changeCtrlOrCommandDown: 'changeCtrlOrCommandDown',
  28. changeActivePos: 'changeActivePos',
  29. deleteItem: 'delItem',
  30. undoTimeLine: 'undoTimeLine',
  31. copyCharts: 'copyCharts',
  32. pasteCharts: 'pasteCharts'
  33. }),
  34. keydown (event) {
  35. // 获取当前获得焦点的元素
  36. const activeElement = document.activeElement
  37. // 判断当前获得焦点的元素是否是一个输入元素
  38. const isInputFocused = activeElement instanceof HTMLInputElement || activeElement instanceof HTMLTextAreaElement
  39. if (!isInputFocused) {
  40. // 当前页面没有输入聚焦
  41. if (event.keyCode === 37) {
  42. // 关闭默认事件
  43. event.preventDefault()
  44. // 左箭头键被按下
  45. this.changeActivePos({ diffX: -1, diffY: 0 })
  46. } else if (event.keyCode === 38) {
  47. // 关闭默认事件
  48. event.preventDefault()
  49. // 上箭头键被按下
  50. this.changeActivePos({ diffX: 0, diffY: -1 })
  51. } else if (event.keyCode === 39) {
  52. // 关闭默认事件
  53. event.preventDefault()
  54. // 右箭头键被按下
  55. this.changeActivePos({ diffX: 1, diffY: 0 })
  56. } else if (event.keyCode === 40) {
  57. // 关闭默认事件
  58. event.preventDefault()
  59. // 下箭头键被按下
  60. this.changeActivePos({ diffX: 0, diffY: 1 })
  61. }
  62. }
  63. // ctrl/command + s保存
  64. if ((event.ctrlKey || event.metaKey) && event.keyCode === 83) {
  65. // 关闭默认事件
  66. event.preventDefault()
  67. this.$refs.PageTopSetting.save('saveLoading')
  68. }
  69. // ctrl/command + z撤销
  70. if ((event.ctrlKey || event.metaKey) && !event.shiftKey && event.keyCode === 90) {
  71. event.preventDefault()
  72. this.undoTimeLine(true)
  73. }
  74. // ctrl/command + shift + z 反撤销
  75. if ((event.ctrlKey || event.metaKey) && event.shiftKey && event.keyCode === 90) {
  76. event.preventDefault()
  77. this.undoTimeLine(false)
  78. }
  79. if (isMac) {
  80. // 是否按下了command键
  81. if (event.metaKey) {
  82. this.changeCtrlOrCommandDown(true)
  83. }
  84. } else {
  85. // 是否按下了ctrl键
  86. if (event.ctrlKey) {
  87. this.changeCtrlOrCommandDown(true)
  88. }
  89. }
  90. },
  91. keyup (event) {
  92. // 判断mac系统还是windows系统
  93. if (isMac) {
  94. // 是否按下了command键
  95. if (!event.metaKey) {
  96. this.changeCtrlOrCommandDown(false)
  97. }
  98. } else {
  99. // 是否按下了ctrl键
  100. if (!event.ctrlKey) {
  101. this.changeCtrlOrCommandDown(false)
  102. }
  103. }
  104. },
  105. designKeydown (event) {
  106. // 删除键被按下且鼠标没有在输入框中
  107. if (
  108. (event.keyCode === 8 || event.keyCode === 46) &&
  109. !event.target.classList.contains('el-input__inner')
  110. ) {
  111. // 关闭默认事件
  112. event.preventDefault()
  113. this.$confirm('确定删除该组件吗?', '提示', {
  114. confirmButtonText: '确定',
  115. cancelButtonText: '取消',
  116. type: 'warning',
  117. customClass: 'bs-el-message-box'
  118. }).then(() => {
  119. // 批量删除
  120. if (Array.isArray(this.activeCodes) && this.activeCodes.length > 0) {
  121. this.deleteItem(this.activeCodes)
  122. } else {
  123. // 单个删除
  124. this.deleteItem(this.activeChart)
  125. }
  126. }).catch(() => {})
  127. }
  128. // ctrl/command + c复制
  129. if ((event.ctrlKey || event.metaKey) && event.keyCode === 67) {
  130. this.copyCharts()
  131. }
  132. if ((event.ctrlKey || event.metaKey) && event.keyCode === 86) {
  133. // 粘贴
  134. this.pasteCharts()
  135. }
  136. }
  137. }
  138. }