main.js 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  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);
  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. ipcMain.on('open-newinst-prompt', (event, arg) => {
  88. prompt({
  89. title: 'Prompt',
  90. label: '请输入实例id:',
  91. value: '',
  92. inputAttrs: {
  93. type: 'text'
  94. },
  95. type: 'input'
  96. })
  97. .then((r) => {
  98. if(r === null) {
  99. console.log('user cancelled');
  100. } else {
  101. console.log('result', r);
  102. event.reply('prompt-newinst-reply', r);
  103. }
  104. })
  105. .catch(console.error);
  106. })