const path = require('path'); const fs = require('fs') const csv = require('csv-parser') const prompt = require('electron-prompt'); const createCsvWriter = require('csv-writer').createObjectCsvWriter; const { app, BrowserWindow } = require('electron'); const { ipcMain } = require('electron') function createWindow() { // 创建浏览器窗口 let win = new BrowserWindow({ width: 800, height: 600, webPreferences: { nodeIntegration: true, contextIsolation: true, preload: path.join(__dirname, 'preload.js') } }) win.webContents.openDevTools() // 打开开发者工具 // 加载index.html文件 win.loadFile('index.html'); } app.on('ready', createWindow); ipcMain.on('parse-csv', (event, path) => { const results = [] fs.createReadStream(path) .pipe(csv()) .on('data', (data) => { results.push(data) }) .on('end', () => { event.reply('csv-data', results) }) }) // 保存数据到csv文件 ipcMain.on('save2csv', (event, path, data) => { // 保存数据到路径中 // 如果数据为空,直接返回 if (data.length === 0) { return; } // 从第一个数据对象中提取字段名 const headers = Object.keys(data[0]).map(key => ({id: key, title: key})); const csvWriter = createCsvWriter({ path: path, header: headers }); csvWriter.writeRecords(data).then(() => { }); }) ipcMain.on('get-file-list', (event, dirPaths) => { console.error('Will read directory: ', dirPaths); // 读取所有目录下面的文件 var lstPaths = dirPaths.split(';'); for (let i = 0; i < lstPaths.length; i++) { const dirPath = lstPaths[i]; fs.readdir(dirPath, (err, files) => { if (err) { console.error('Error reading directory: ', err); event.reply('file-list-error', err); } else { event.reply('file-list-data', files, dirPath); } }); } }); ipcMain.on('open-newlv-prompt', (event, arg) => { prompt({ title: 'Prompt', label: '请输入关卡id:', value: '', inputAttrs: { type: 'text' }, type: 'input' }) .then((r) => { if(r === null) { console.log('user cancelled'); } else { console.log('result', r); event.reply('prompt-newlv-reply', r); } }) .catch(console.error); }) // 复制模板文件到指定的目录 ipcMain.on('copy-template', (event, templateFN) => { console.log('copy-template'); prompt({ title: '复制模板文件', label: '请输入新的模板文件路径和文件名:', value: '../../templates/tm_', inputAttrs: { type: 'text' }, type: 'input' }) .then((r) => { if(r === null) { event.reply('copy-template-replay', ""); } else { // 将 templateFN 复制到指定的目录 r const { exec } = require('child_process'); exec(`cp ${templateFN} ${r}`, (err, stdout, stderr) => { if (err) { console.log('from', templateFN); console.log('to', r); console.log('result', err); event.reply('copy-template-replay', ""); return; } event.reply('copy-template-replay', r); }); } }) .catch(console.error); }) ipcMain.on('open-newinst-prompt', (event, arg) => { prompt({ title: 'Prompt', label: '请输入实例id:', value: '', inputAttrs: { type: 'text' }, type: 'input' }) .then((r) => { if(r === null) { console.log('user cancelled'); } else { console.log('result', r); event.reply('prompt-newinst-reply', r); } }) .catch(console.error); }) // 打开一个外部的应用 ipcMain.on('open-app', (event, dir, arg) => { const { exec } = require('child_process'); const options = { cwd: __dirname + dir }; exec(arg, (err, stdout, stderr) => { if (err) { console.error(err); return; } console.log(stdout); }); }) // 判断指定的文件是否存在 ipcMain.on('file-exists', (event, fn) => { })