Initial commit: Receipt Studio desktop application

This commit is contained in:
fuenmao
2026-10-19 11:09:09 +08:00
commit 2caac3c31f
77 changed files with 9846 additions and 0 deletions
+26
View File
@@ -0,0 +1,26 @@
import { createServer } from 'vite'
import { build } from 'esbuild'
import { _electron as electron,expect } from '@playwright/test'
import electronPath from 'electron'
import path from 'node:path'
import fs from 'node:fs/promises'
for(const entry of ['index','preload'])await build({entryPoints:['src/main/'+entry+'.ts'],outfile:'dist/main/'+entry+'.cjs',bundle:true,platform:'node',format:'cjs',external:['electron'],sourcemap:true})
const server=await createServer({server:{host:'127.0.0.1',port:5174,strictPort:true}})
await server.listen()
const profile=path.join(process.cwd(),'.qa','dev-window-profile')
await fs.mkdir(profile,{recursive:true})
const env={...process.env,ELECTRON_RENDERER_URL:'http://127.0.0.1:5174'}
delete env.ELECTRON_RUN_AS_NODE
let desktop
try{
desktop=await electron.launch({executablePath:electronPath,args:['.','--user-data-dir='+profile],cwd:process.cwd(),env,timeout:30000})
const page=await desktop.firstWindow();page.setDefaultTimeout(15000)
await expect(page.getByText('把表格交给收据工坊')).toBeVisible({timeout:30000})
expect(await page.evaluate(()=>typeof window.receipts?.importExcel)).toBe('function')
expect(await desktop.evaluate(({BrowserWindow})=>BrowserWindow.getAllWindows()[0].isVisible())).toBe(true)
await desktop.evaluate(({BrowserWindow})=>{const w=BrowserWindow.getAllWindows().find(w=>w.webContents.getURL().includes('/index.html'));w.focus();w.webContents.sendInputEvent({type:'keyDown',keyCode:'F12'});w.webContents.sendInputEvent({type:'keyUp',keyCode:'F12'})})
await expect.poll(()=>desktop.evaluate(({BrowserWindow})=>BrowserWindow.getAllWindows().find(w=>w.webContents.getURL().includes('/index.html'))?.webContents.isDevToolsOpened())).toBe(true)
await desktop.evaluate(({BrowserWindow})=>BrowserWindow.getAllWindows().find(w=>w.webContents.getURL().includes('/index.html'))?.webContents.closeDevTools())
await fs.writeFile('.qa/dev-window-result.json',JSON.stringify({passed:true,visible:true,rendererReady:true,desktopApi:true,f12:true},null,2))
console.log('Development window verified: visible, ready, desktop bridge and F12.')
}finally{if(desktop)await desktop.close();await server.close()}