main.js 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  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, dirPath) => {
  52. console.error('Will read directory: ', dirPath);
  53. fs.readdir(dirPath, (err, files) => {
  54. if (err) {
  55. console.error('Error reading directory: ', err);
  56. event.reply('file-list-error', err);
  57. } else {
  58. event.reply('file-list-data', files);
  59. }
  60. });
  61. });
  62. ipcMain.on('open-newlv-prompt', (event, arg) => {
  63. prompt({
  64. title: 'Prompt',
  65. label: '请输入关卡id:',
  66. value: '',
  67. inputAttrs: {
  68. type: 'text'
  69. },
  70. type: 'input'
  71. })
  72. .then((r) => {
  73. if(r === null) {
  74. console.log('user cancelled');
  75. } else {
  76. console.log('result', r);
  77. event.reply('prompt-newlv-reply', r);
  78. }
  79. })
  80. .catch(console.error);
  81. })
  82. ipcMain.on('open-newinst-prompt', (event, arg) => {
  83. prompt({
  84. title: 'Prompt',
  85. label: '请输入实例id:',
  86. value: '',
  87. inputAttrs: {
  88. type: 'text'
  89. },
  90. type: 'input'
  91. })
  92. .then((r) => {
  93. if(r === null) {
  94. console.log('user cancelled');
  95. } else {
  96. console.log('result', r);
  97. event.reply('prompt-newinst-reply', r);
  98. }
  99. })
  100. .catch(console.error);
  101. })