electron launcher
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

209 lines
5.4 KiB

4 years ago
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="utf-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width,initial-scale=1">
  7. <script type="text/javascript" src="./lib/vue.js"></script>
  8. </head>
  9. <style scoped>
  10. body {
  11. /*-webkit-app-region: drag;*/
  12. margin: 0;
  13. padding: 0;
  14. width: 100%;
  15. height: 100%;
  16. overflow: hidden;
  17. display: flex;
  18. justify-content: center;
  19. align-items: center;
  20. }
  21. .sp-main {
  22. /*width: 425px;*/
  23. height: 128px;
  24. width: 100%;
  25. /*height: 100%;*/
  26. display: flex;
  27. overflow: hidden;
  28. align-items: center;
  29. }
  30. .logo-cover {
  31. height: 128px;
  32. width: 128px;
  33. border-radius: 50%;
  34. display: flex;
  35. justify-content: center;
  36. align-items: center;
  37. background: #262522;
  38. position: absolute;
  39. }
  40. .logo {
  41. height: 77px;
  42. width: 77px;
  43. background: #5daf34;
  44. background: url("./img/logo.png") no-repeat;
  45. background-size: 100% 100%;
  46. }
  47. .logo-active{
  48. height: 77px;
  49. width: 77px;
  50. background: #5daf34;
  51. background: url("./img/logo-active.png") no-repeat;
  52. background-size: 100% 100%;
  53. }
  54. .center-cover {
  55. height: 100%;
  56. width: auto;
  57. display: flex;
  58. align-items: center;
  59. justify-content: space-around;
  60. background: #262522;
  61. flex: 1;
  62. margin-left: 68px;
  63. padding-left: 37px;
  64. user-select: none;
  65. }
  66. .center {
  67. display: flex;
  68. width: auto;
  69. flex-direction: column;
  70. justify-content: space-around;
  71. height: 77px;
  72. background: #262522;
  73. }
  74. .text {
  75. font-size: 28px;
  76. color: #ffffff;
  77. font-weight: 600;
  78. }
  79. .yellow {
  80. color: #f7c829;
  81. }
  82. .count {
  83. color: #ffffff;
  84. opacity: 0.52;
  85. font-weight: 300;
  86. }
  87. .back {
  88. height: 80px;
  89. width: 80px;
  90. cursor: pointer;
  91. /*-webkit-app-region: no-drag;*/
  92. }
  93. </style>
  94. <body>
  95. <!--<div style="-webkit-app-region: no-drag;height:100%;width: 100%;"></div>-->
  96. <div class="sp-main" id="app" @mouseup="removeMoveListener" @contextmenu="showMenu">
  97. <div class="logo-cover" @dblclick="showSystem" @click="showSuspensionWin">
  98. <div :class="unMessage.length===0 ? 'logo':'logo-active'" id="logo"></div>
  99. </div>
  100. <div class="center-cover">
  101. <div class="center" v-show="showText">
  102. <div v-if="unMessage.length===0" class="text">暂无新消息</div>
  103. <div v-else class="text">你有一条来自<span class="yellow">{{unMessage[msgCount-1].type}}</span>的消息</div>
  104. <div class="count">共{{msgCount}}条未读消息</div>
  105. </div>
  106. <img v-show="showText" @click="showSystem" id="back" class="back" src="./img/back.png">
  107. </div>
  108. </div>
  109. <!--<button id="logo">回复最大化</button>-->
  110. <!--<img src='./img/logo.png' onclick="" alt="s207">-->
  111. </body>
  112. <script type="text/javascript">
  113. const {Menu} = require("electron").remote;
  114. const ipcRenderer = require('electron').ipcRenderer;
  115. let template = [
  116. {
  117. label:'退出系统',accelerator:'alt+f4',click:()=>{
  118. window.api.exitSystem();
  119. }
  120. }
  121. ]
  122. let menu = Menu.buildFromTemplate(template);
  123. new Vue({
  124. el: "#app",
  125. data :{
  126. msgCount:0,
  127. unMessage:[],
  128. showText:true,
  129. },
  130. methods:{
  131. showSystem(e){
  132. e.preventDefault();
  133. window.api.showMainWindow();
  134. window.api.hideSuspensionWindow();
  135. },
  136. removeMoveListener(){
  137. moveWindow(false)
  138. logo.removeEventListener('mousemove', moveWindow)
  139. },
  140. showMenu(e){
  141. e.preventDefault();
  142. menu.popup()
  143. },
  144. showSuspensionWin(e){
  145. if(!this.showText && endTime - startTime <200){
  146. e.preventDefault();
  147. window.api.showSuspensionWindow();
  148. }
  149. }
  150. },
  151. created(){
  152. this.msgCount = 15;
  153. window.getUnReadMessage = (message)=>{
  154. console.log('aaaaaaaa',message)
  155. this.msgCount = message.length;
  156. this.unMessage = message;
  157. window.api.resizeWindow();
  158. };
  159. ipcRenderer.on("winResize",(e, args) => {
  160. if(args[0][0]>130){
  161. this.showText = true
  162. }else {
  163. this.showText = false
  164. }
  165. });
  166. window.api.getUnReadMessage();
  167. },
  168. watch:{
  169. unMessage(){
  170. }
  171. },
  172. })
  173. function moveWindow(flag = false) {
  174. window.api.windowMoveHandle(flag)
  175. }
  176. let startTime = 0;
  177. let endTime = 0;
  178. var logo = document.getElementById('logo');
  179. logo.addEventListener('mousedown', () => {
  180. startTime = new Date().getTime();
  181. logo.addEventListener('mousemove', moveWindow(true))
  182. })
  183. logo.addEventListener('mouseup', () => {
  184. endTime = new Date().getTime();
  185. moveWindow(false);
  186. logo.removeEventListener('mousemove', moveWindow)
  187. })
  188. </script>
  189. </html>