index.vue 9.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249
  1. <template>
  2. <!-- notifyTrayPanelDetail -->
  3. <div
  4. class="v-layout sds-notify-detail-dialog layout-window-app v-window"
  5. style="position: absolute; width: 680px; height: 420px"
  6. :style="{
  7. display: notifyTrayPanelDetailContant.display,
  8. zIndex: notifyTrayPanelDetailContant.zIndex,
  9. left: notifyTrayPanelDetailContant.left,
  10. top: notifyTrayPanelDetailContant.top,
  11. }"
  12. :class="notifyTrayPanelDetailContant.cls"
  13. @mousedown.capture="openNotifyDetail"
  14. >
  15. <div
  16. class="v-window-header-wrapper draggable"
  17. @mousedown.capture="mousedownNotifyTrayPanelDetail"
  18. >
  19. <div class="app-icon"></div>
  20. <div class="v-window-header-text">
  21. <div class="v-window-header-title">事件详情</div>
  22. </div>
  23. <div class="window-header-tool-wrapper light">
  24. <div class="tool close" @click.capture="closeNotifyDetail"></div>
  25. </div>
  26. </div>
  27. <div class="v-window-body" v-if="notifyTrayPanelDetail.detailMessage.title">
  28. <div class="v-trap-focus-indicator"></div>
  29. <div class="v-trap-focus-body">
  30. <div role="application" class="v-trap-focus-indicator"></div>
  31. <div
  32. class="v-layout detail-panel layout-panel-content v-panel"
  33. style="--svc-layout-height: 100%"
  34. >
  35. <div class="v-spin-wrapper circle v-panel-wrapper">
  36. <div class="v-spin-wrapper-masking" style="display: none"></div>
  37. <div
  38. class="v-layout layout-body-wrapper layout-panel-body"
  39. style="
  40. --panel-in-tabs-padding-top: 0;
  41. --svc-layout-padding: 16px 20px 6px 20px;
  42. --svc-layout-margin: 0 0 0 0;
  43. "
  44. >
  45. <div class="body-wrapper">
  46. <div class="v-ps ps">
  47. <form
  48. class="v-layout layout-form v-form v-form-horizontal"
  49. style=""
  50. >
  51. <div class="v-form-item">
  52. <div class="v-form-item-label">
  53. <label for="">类别:</label>
  54. </div>
  55. <div class="v-form-item-input">
  56. <div class="v-form-item-control v-form-displayfield">
  57. <div>
  58. {{ notifyTrayPanelDetail.detailMessage.title }}
  59. </div>
  60. </div>
  61. </div>
  62. </div>
  63. <div class="v-form-item">
  64. <div class="v-form-item-label">
  65. <label for="">主题:</label>
  66. </div>
  67. <div class="v-form-item-input">
  68. <div class="v-form-item-control v-form-displayfield">
  69. <div>
  70. <div
  71. v-html="notifyTrayPanelDetail.detailMessage.text"
  72. ></div>
  73. </div>
  74. </div>
  75. </div>
  76. </div>
  77. <div class="v-form-item">
  78. <div class="v-form-item-label">
  79. <label for="">时间:</label>
  80. </div>
  81. <div class="v-form-item-input">
  82. <div class="v-form-item-control v-form-displayfield">
  83. <div>
  84. {{ notifyTrayPanelDetail.detailMessage.time1 }}
  85. </div>
  86. </div>
  87. </div>
  88. </div>
  89. <div class="v-form-item">
  90. <div class="v-form-item-input">
  91. <div class="v-form-item-control v-form-displayfield">
  92. <div>
  93. <div
  94. class="detail-mail-content"
  95. v-html="
  96. notifyTrayPanelDetail.detailMessage.message
  97. "
  98. ></div>
  99. </div>
  100. </div>
  101. </div>
  102. </div>
  103. </form>
  104. <div class="ps__rail-x" style="left: 0px; bottom: 0px">
  105. <div
  106. class="ps__thumb-x"
  107. style="left: 0px; width: 0px"
  108. ></div>
  109. </div>
  110. <div class="ps__rail-y" style="top: 0px; right: 0px">
  111. <div
  112. class="ps__thumb-y"
  113. style="top: 0px; height: 0px"
  114. ></div>
  115. </div>
  116. </div>
  117. </div>
  118. </div>
  119. <div
  120. class="
  121. v-layout
  122. layout-panel-fbar
  123. fbar-wrapper fbar-wrapper--fluid
  124. "
  125. >
  126. <div class="pull-right">
  127. <button
  128. type="button"
  129. class="v-btn v-btn-footbar v-btn-grey"
  130. @click.capture="closeNotifyDetail"
  131. >
  132. <span> 关闭 </span>
  133. </button>
  134. </div>
  135. </div>
  136. </div>
  137. </div>
  138. </div>
  139. <div class="v-trap-focus-indicator"></div>
  140. </div>
  141. <div class="v-window-resizable">
  142. <div class="handler v-window-resizable-nw"></div>
  143. <div class="handler v-window-resizable-ne"></div>
  144. <div class="handler v-window-resizable-sw"></div>
  145. <div class="handler v-window-resizable-se"></div>
  146. <div class="handler v-window-resizable-n"></div>
  147. <div class="handler v-window-resizable-s"></div>
  148. <div class="handler v-window-resizable-w"></div>
  149. <div class="handler v-window-resizable-e"></div>
  150. </div>
  151. </div>
  152. </template>
  153. <script>
  154. import { moveWindow } from "../../../../common/common";
  155. export default {
  156. props: ["defaultZIndex", "notifyTrayPanelDetailData"],
  157. mounted() {
  158. this.$bus.on("openNotifyDetail", this.openNotifyDetail);
  159. this.$bus.on("closeNotifyDetail", this.closeNotifyDetail);
  160. this.notifyTrayPanelDetailContant = this.notifyTrayPanelDetailData;
  161. },
  162. data() {
  163. return {
  164. windowFirstClick: {
  165. layerX: 0,
  166. layerY: 0,
  167. screenX: 0,
  168. screenY: 0,
  169. },
  170. notifyTrayPanelDetail: {
  171. detailMessage: [],
  172. },
  173. notifyTrayPanelDetailContant: {
  174. zIndex: 9050,
  175. cls: "deactive-win",
  176. display: "none",
  177. top: 0,
  178. left: 0,
  179. },
  180. };
  181. },
  182. components: {},
  183. methods: {
  184. // 打开/点击本页面
  185. openNotifyDetail(detailMessage) {
  186. if (this.notifyTrayPanelDetailContant.display === "none") {
  187. this.notifyTrayPanelDetailContant.display = "block";
  188. this.notifyTrayPanelDetailContant.top = "10px";
  189. this.notifyTrayPanelDetailContant.left = "10px";
  190. }
  191. if (this.notifyTrayPanelDetailContant.cls === "deactive-win") {
  192. this.notifyTrayPanelDetailContant.zIndex = this.defaultZIndex + 10;
  193. this.$bus.emit("changeDefaultZIndex", this.defaultZIndex + 10);
  194. }
  195. if (detailMessage && detailMessage.title) {
  196. this.notifyTrayPanelDetail.detailMessage = detailMessage;
  197. }
  198. },
  199. // 关闭本页面
  200. closeNotifyDetail() {
  201. this.notifyTrayPanelDetailContant.display = "none";
  202. this.notifyTrayPanelDetailContant.zIndex = this.defaultZIndex - 10;
  203. this.$bus.emit("changeDefaultZIndex", this.defaultZIndex - 10);
  204. },
  205. // 鼠标按下该页面头部
  206. mousedownNotifyTrayPanelDetail(e) {
  207. this.windowFirstClick.layerX = e.layerX;
  208. this.windowFirstClick.screenX = document.documentElement.clientWidth;
  209. this.windowFirstClick.layerY = e.layerY;
  210. this.windowFirstClick.screenY = document.documentElement.clientHeight;
  211. document.addEventListener("mousemove", this.moveWindowPosition);
  212. document.addEventListener("mouseup", this.upWindowPosition);
  213. },
  214. // 移动弹出框窗口位置
  215. moveWindowPosition(e) {
  216. let window = document.querySelector(".v-layout.sds-notify-detail-dialog");
  217. let obj = moveWindow(
  218. e,
  219. window,
  220. this.windowFirstClick.layerX,
  221. this.windowFirstClick.layerY,
  222. this.windowFirstClick.screenX,
  223. this.windowFirstClick.screenY
  224. );
  225. this.notifyTrayPanelDetailContant.left = obj.moveX + "px";
  226. this.notifyTrayPanelDetailContant.top = obj.moveY + "px";
  227. if (!window.className.includes(" x-panel-ghost")) {
  228. window.className = window.className + " x-panel-ghost";
  229. }
  230. },
  231. // 鼠标松开
  232. upWindowPosition(e) {
  233. let window = document.querySelector(".v-layout.sds-notify-detail-dialog");
  234. if (window.className.includes(" x-panel-ghost")) {
  235. window.className = window.className.replace(" x-panel-ghost", "");
  236. }
  237. document.removeEventListener("mousemove", this.moveWindowPosition);
  238. document.removeEventListener("mouseup", this.upWindowPosition);
  239. },
  240. },
  241. };
  242. </script>
  243. <style lang="css" scoped>
  244. .v-window .v-window-body {
  245. height: 380px;
  246. }
  247. </style>