feat: Add build scripts and runtime config support

Backend:
- Add setup-backend.sh/bat for one-click backend setup
- Fix test_auth.py mock settings (JWT_EXPIRE_HOURS)
- Fix test_excel_export.py TEMPLATE_DIR reference

Frontend:
- Add config.json for runtime API URL configuration
- Add init.js and settings.js for config loading
- Update main.js to load config from external file
- Update api.js to use dynamic API_BASE_URL
- Update all pages to initialize config before API calls
- Update package.json with extraResources for config

Build:
- Add build-client.sh/bat for packaging Electron + Sidecar
- Add build-all.ps1 PowerShell script with -ApiUrl parameter
- Add GitHub Actions workflow for Windows builds
- Add scripts/README.md documentation

This allows IT to configure backend URL without rebuilding.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
egg
2025-12-16 20:03:16 +08:00
parent 01aee1fd0d
commit 7d4fc69071
20 changed files with 2454 additions and 32 deletions

View File

@@ -26,8 +26,12 @@
</div>
<script type="module">
import { initApp } from '../services/init.js';
import { login } from '../services/api.js';
// Initialize app config before any API calls
await initApp();
const form = document.getElementById('login-form');
const errorAlert = document.getElementById('error-alert');
const loginBtn = document.getElementById('login-btn');

View File

@@ -235,6 +235,7 @@
</div>
<script type="module">
import { initApp } from '../services/init.js';
import {
getMeeting,
updateMeeting,
@@ -244,6 +245,9 @@
transcribeAudio
} from '../services/api.js';
// Initialize app config before any API calls
await initApp();
const meetingId = localStorage.getItem('currentMeetingId');
let currentMeeting = null;
let isRecording = false;

View File

@@ -67,8 +67,12 @@
</div>
<script type="module">
import { initApp } from '../services/init.js';
import { getMeetings, createMeeting, clearToken } from '../services/api.js';
// Initialize app config before any API calls
await initApp();
const meetingsContainer = document.getElementById('meetings-container');
const newMeetingBtn = document.getElementById('new-meeting-btn');
const logoutBtn = document.getElementById('logout-btn');