index.vue 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  1. <!-- @desc:Message信息 @auth:周兴 @time:2022/11/15 14:31 -->
  2. <template>
  3. <DkModal ref="modal_message" v-model="visible" width="300" :title="title"
  4. @modalOk="onOk"
  5. @modalCancel="onCancel"
  6. @on-cancel="onCancel">
  7. <!-- 主体部分 -->
  8. <div class="content-div">
  9. <Icon type="md-help-circle" color="#2d8cf0" class="content-icon"/>
  10. {{ content }}
  11. </div>
  12. </DkModal>
  13. </template>
  14. <script>
  15. import {button as buttonList} from "@/locale/lang/zh-CN";
  16. export default {
  17. name: "MyMessage",
  18. data() {
  19. const vm = window.vm;
  20. return {
  21. documentKeyDownContent: Object,
  22. vm: vm,
  23. title: '系统提示',//标题
  24. content: '确定要这么做吗?',//主体内容
  25. visible: false,//显示控制
  26. cancelFunc: () => {
  27. },//取消回调
  28. okFunc: () => {
  29. },//确定回调
  30. okText: vm.$t('confirm'),
  31. cancelText: vm.$t('cancel'),
  32. }
  33. },
  34. methods: {
  35. /**
  36. * @desc : 监听全局键盘按钮按下的事件
  37. * @author : 周兴
  38. * @date : 2022/3/4 16:57
  39. */
  40. addKeyBoardEvent() {
  41. let code = 0
  42. let self = this
  43. this.documentKeyDownContent = document.onkeydown;
  44. document.onkeydown = function (e) {
  45. const evn = e || event
  46. const key = evn.keyCode || evn.which || evn.charCode
  47. // alt:code = 18
  48. if (key === 18) {
  49. code = 18
  50. }
  51. let btList = []
  52. for (let itKey in buttonList) {
  53. if (!buttonList[itKey].includes('(')) {
  54. continue
  55. }
  56. btList.push({
  57. name: itKey,
  58. hotKey: buttonList[itKey].substring(buttonList[itKey].length - 2, buttonList[itKey].length - 1)
  59. })
  60. }
  61. // 查询子模块是否开着
  62. let currentModal = null
  63. let modalName = ''
  64. for (let it of Object.keys(self.$refs)) {
  65. // 如果没有放大镜的查询,那么就看这个界面的查询
  66. if (it.startsWith('modal_') && self.$refs[it] && self.$refs[it].showModal) {
  67. currentModal = self.$refs[it]
  68. modalName = it
  69. break
  70. }
  71. }
  72. // Q:code = 81 查询
  73. btList.forEach(forIt => {
  74. if (code != 18 || forIt.hotKey.toLowerCase() != e.key.toLowerCase()) return
  75. e.returnValue = false
  76. // 如果模块开着,在前面加上模块的ref名
  77. if (currentModal != null) {
  78. if (self.$refs[modalName].$refs[forIt.name]) {
  79. self.$refs[modalName].$refs[forIt.name].$el.click()
  80. }
  81. } else {
  82. if (self.$refs[forIt.name]) {
  83. self.$refs[forIt.name].$el.click()
  84. }
  85. }
  86. })
  87. }
  88. // 监听全局键盘按钮松开的事件
  89. document.onkeyup = function (e) {
  90. const evn = e || event
  91. const key = evn.keyCode || evn.which || evn.charCode
  92. if (key === 18) {
  93. code = 0
  94. }
  95. }
  96. },
  97. /**
  98. * @author : 沈博
  99. * @date : 2022/2/28 16:57
  100. * @desc : 点击取消
  101. */
  102. onCancel() {
  103. this.visible = false
  104. this.cancelFunc()
  105. this.displayFlag = false;
  106. },
  107. /**
  108. * @author : 沈博
  109. * @date : 2022/2/28 16:57
  110. * @desc : 点击确定
  111. */
  112. onOk() {
  113. this.visible = false
  114. this.okFunc()
  115. }
  116. },
  117. watch: {
  118. visible(n, o) {
  119. if (!n) {
  120. //回复快捷键
  121. document.onkeydown = this.documentKeyDownContent;
  122. }else{
  123. this.addKeyBoardEvent() // 增加快捷键
  124. }
  125. }
  126. },
  127. created() {
  128. }
  129. }
  130. </script>
  131. <style scoped>
  132. /deep/ .ivu-modal-body {
  133. padding: 0;
  134. }
  135. .close-div {
  136. color: #fff;
  137. }
  138. .close-icon {
  139. font-size: 20px;
  140. margin-top: -1px;
  141. }
  142. .content-div {
  143. height: 105px;
  144. align-items: center;
  145. justify-content: center;
  146. display: flex;
  147. }
  148. .content-icon {
  149. font-size: 28px;
  150. margin-right: 10px;
  151. }
  152. </style>