- Replace API-based model fetching with direct SQL query on
provider_models table (shared PostgreSQL, no auth needed)
- Frontend: auto-detect base_url from model name when selecting
a Dify model, set provider to 'custom'
- Remove unused requests import and API key fallback logic
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Backend: try DIFY_CHAT/WORKFLOW_API_KEY when workspace key is missing
- Frontend: always show '从 Dify 获取' button, not just after first fetch
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- PptSettingsAdmin.vue: full settings page with provider/model/API key
config for PPT extraction, poster copy, and poster image generation
- Backend: GET /insurance/admin/ppt/available-models to fetch models
from Dify API (falls back to builtin list when unavailable)
- LLM client: read model config from SystemSetting DB with 60s cache,
priority: database > environment variables > defaults
- ppt-admin-api.ts: add getAvailableModels() method
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- generate_ppt and validate_extraction now accept status 'cached'
alongside 'success', matching the frontend's hasSuccess logic
- PptParsing: show extraction error messages in the results table
- PptParsing: show '解析失败' icon when all extractions fail
- PptParsing: only show '下一步' button when at least one extraction succeeded
- routes.py: add error logging with stack trace in parse endpoint
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
progressStatus was referenced in the template but never defined,
causing a Vue runtime warning on every render.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Restore proper UTF-8 Chinese comments (effc2a24 introduced mojibake
via double-encoding: UTF-8 → GBK → Latin-1 → UTF-8)
- Remove spurious BOM header
- Load .env.local with override=True before .env so local dev config
(localhost:5433 for PostgreSQL, localhost:6380 for Redis) takes
priority without affecting Docker deployments