main.js 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. const path = require('path');
  2. const fs = require('fs')
  3. const csv = require('csv-parser')
  4. const prompt = require('electron-prompt');
  5. const createCsvWriter = require('csv-writer').createObjectCsvWriter;
  6. const { app, BrowserWindow } = require('electron');
  7. const { ipcMain } = require('electron')
  8. function createWindow() {
  9. // 创建浏览器窗口
  10. let win = new BrowserWindow({
  11. width: 800,
  12. height: 600,
  13. webPreferences: {
  14. nodeIntegration: true,
  15. contextIsolation: true,
  16. preload: path.join(__dirname, 'preload.js')
  17. }
  18. })
  19. win.webContents.openDevTools() // 打开开发者工具
  20. // 加载index.html文件
  21. win.loadFile('index.html');
  22. }
  23. app.on('ready', createWindow);
  24. ipcMain.on('parse-csv', (event, path) => {
  25. const results = []
  26. fs.createReadStream(path)
  27. .pipe(csv())
  28. .on('data', (data) => {
  29. results.push(data)
  30. })
  31. .on('end', () => {
  32. event.reply('csv-data', results)
  33. })
  34. })
  35. // 保存数据到csv文件
  36. ipcMain.on('save2csv', (event, path, data) => {
  37. // 保存数据到路径中
  38. // 如果数据为空,直接返回
  39. if (data.length === 0) {
  40. return;
  41. }
  42. // 从第一个数据对象中提取字段名
  43. const headers = Object.keys(data[0]).map(key => ({id: key, title: key}));
  44. const csvWriter = createCsvWriter({
  45. path: path,
  46. header: headers
  47. });
  48. csvWriter.writeRecords(data).then(() => {
  49. });
  50. })
  51. ipcMain.on('get-file-list', (event, dirPaths) => {
  52. console.error('Will read directory: ', dirPaths);
  53. // 读取所有目录下面的文件
  54. var lstPaths = dirPaths.split(';');
  55. for (let i = 0; i < lstPaths.length; i++) {
  56. const dirPath = lstPaths[i];
  57. fs.readdir(dirPath, (err, files) => {
  58. if (err) {
  59. console.error('Error reading directory: ', err);
  60. event.reply('file-list-error', err);
  61. } else {
  62. event.reply('file-list-data', files, dirPath);
  63. }
  64. });
  65. }
  66. });
  67. ipcMain.on('open-newlv-prompt', (event, arg) => {
  68. prompt({
  69. title: 'Prompt',
  70. label: '请输入关卡id:',
  71. value: '',
  72. inputAttrs: {
  73. type: 'text'
  74. },
  75. type: 'input'
  76. })
  77. .then((r) => {
  78. if(r === null) {
  79. console.log('user cancelled');
  80. } else {
  81. console.log('result', r);
  82. event.reply('prompt-newlv-reply', r);
  83. }
  84. })
  85. .catch(console.error);
  86. })
  87. // 复制模板文件到指定的目录
  88. ipcMain.on('copy-template', (event, templateFN) => {
  89. prompt({
  90. title: '复制模板文件',
  91. label: '请输入新的模板文件路径和文件名:',
  92. value: '../../templates/tm_',
  93. inputAttrs: {
  94. type: 'text'
  95. },
  96. type: 'input'
  97. })
  98. .then((r) => {
  99. if(r === null) {
  100. event.reply('copy-template-replay', "");
  101. } else {
  102. console.log('result', r);
  103. // 将 templateFN 复制到指定的目录 r
  104. const { exec } = require('child_process');
  105. exec(`cp ${templateFN} ${r}`, (err, stdout, stderr) => {
  106. if (err) {
  107. event.reply('copy-template-replay', "");
  108. return;
  109. }
  110. event.reply('copy-template-replay', r);
  111. });
  112. }
  113. })
  114. .catch(console.error);
  115. })
  116. ipcMain.on('open-newinst-prompt', (event, arg) => {
  117. prompt({
  118. title: 'Prompt',
  119. label: '请输入实例id:',
  120. value: '',
  121. inputAttrs: {
  122. type: 'text'
  123. },
  124. type: 'input'
  125. })
  126. .then((r) => {
  127. if(r === null) {
  128. console.log('user cancelled');
  129. } else {
  130. console.log('result', r);
  131. event.reply('prompt-newinst-reply', r);
  132. }
  133. })
  134. .catch(console.error);
  135. })
  136. // 打开一个外部的应用
  137. ipcMain.on('open-app', (event, arg) => {
  138. const { exec } = require('child_process');
  139. exec(arg, (err, stdout, stderr) => {
  140. if (err) {
  141. console.error(err);
  142. return;
  143. }
  144. console.log(stdout);
  145. });
  146. })
  147. // 判断指定的文件是否存在
  148. ipcMain.on('file-exists', (event, fn) => {
  149. })