example.js 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. 'use strict';
  2. const _ = require('lodash');
  3. const Controller = require('ee-core').Controller;
  4. const {app, dialog, webContents, shell, BrowserWindow, BrowserView, Notification, powerMonitor, screen, nativeTheme} = require('electron');
  5. let myTimer = null;
  6. /**
  7. * 示例控制器
  8. * @class
  9. */
  10. class ExampleController extends Controller {
  11. /**
  12. * 所有方法接收两个参数
  13. * args 前端传的参数
  14. * @param event - IpcMainEvent 文档:https://www.electronjs.org/docs/latest/api/structures/ipc-main-event
  15. */
  16. constructor(ctx) {
  17. super(ctx);
  18. //this.myTimer = null;
  19. }
  20. /**
  21. * test
  22. */
  23. async test (args) {
  24. let obj = {
  25. status:'ok'
  26. }
  27. // 调用egg的某个api
  28. // const result = await this.app.curlEgg('post', '/api/v1/example/test2', {name: 'gsx2'});
  29. // console.log('fffffffffff: ', result);
  30. //this.app.logger.info('ssssssssssssssssssss');
  31. return obj;
  32. }
  33. /**
  34. * hello
  35. */
  36. hello (args) {
  37. let newMsg = args + " +1";
  38. let content = '';
  39. content = '收到:' + args + ',返回:' + newMsg;
  40. // let channel = "example.socketMessageStop";
  41. // event.reply(`${channel}`, '另外的数据');
  42. return content;
  43. }
  44. /**
  45. * 消息提示对话框
  46. */
  47. messageShow () {
  48. dialog.showMessageBoxSync({
  49. type: 'info', // "none", "info", "error", "question" 或者 "warning"
  50. title: '自定义标题-message',
  51. message: '自定义消息内容',
  52. detail: '其它的额外信息'
  53. })
  54. return '打开了消息框';
  55. }
  56. /**
  57. * 消息提示与确认对话框
  58. */
  59. messageShowConfirm () {
  60. const res = dialog.showMessageBoxSync({
  61. type: 'info',
  62. title: '自定义标题-message',
  63. message: '自定义消息内容',
  64. detail: '其它的额外信息',
  65. cancelId: 1, // 用于取消对话框的按钮的索引
  66. defaultId: 0, // 设置默认选中的按钮
  67. buttons: ['确认', '取消'], // 按钮及索引
  68. })
  69. let data = (res === 0) ? '点击确认按钮' : '点击取消按钮';
  70. return data;
  71. }
  72. /**
  73. * 选择目录
  74. */
  75. selectFolder () {
  76. const filePaths = dialog.showOpenDialogSync({
  77. properties: ['openDirectory', 'createDirectory']
  78. });
  79. if (_.isEmpty(filePaths)) {
  80. return null
  81. }
  82. return filePaths[0];
  83. }
  84. /**
  85. * 打开目录
  86. */
  87. openDirectory (args) {
  88. if (!args.id) {
  89. return false;
  90. }
  91. const dir = app.getPath(args.id);
  92. shell.openPath(dir);
  93. return true;
  94. }
  95. /**
  96. * 长消息 - 开始
  97. */
  98. socketMessageStart (args, event) {
  99. // 每隔1秒,向前端页面发送消息
  100. // 用定时器模拟
  101. // 前端ipc频道 channel
  102. const channel = 'controller.example.socketMessageStart';
  103. myTimer = setInterval(function(e, c, msg) {
  104. let timeNow = Date.now();
  105. let data = msg + ':' + timeNow;
  106. e.reply(`${c}`, data)
  107. }, 1000, event, channel, args)
  108. return '开始了'
  109. }
  110. /**
  111. * 长消息 - 停止
  112. */
  113. socketMessageStop () {
  114. clearInterval(myTimer);
  115. return '停止了'
  116. }
  117. /**
  118. * 执行js
  119. */
  120. executeJS (args) {
  121. let jscode = `(()=>{alert('${args}');return 'fromJs:${args}';})()`;
  122. return webContents.fromId(1).executeJavaScript(jscode);
  123. }
  124. }
  125. module.exports = ExampleController;