305ee5df09
亮灯表: - 四色覆盖矩阵: 绿亮灯/黄临期/红灭灯/灰未分配 - 按客户经理折叠卡片流, 覆盖率进度条, 团队总览统计 - 红灯客户显示连续未拜访月份, 未分配客户专区 - 后端: light_board.py service + GET /api/dashboard/light-board - 前端: LightBoard.vue + 路由 /light-board + 汇总侧边栏 AI 周报摘要: - 接入 OpenAI 兼容大模型, 注入拜访数据+亮灯表覆盖数据 - 四段式结构化输出: 概况/需求/覆盖分析/建议 - 一键生成+Markdown渲染+复制纯文本 - 支局长/分管领导专用, 支持配置内部模型 - 后端: ai_summary.py service + POST /api/ai/summary - 前端: WeeklyReport 集成按钮+结果面板 - 新增配置: AI_API_URL / AI_API_KEY / AI_MODEL Co-Authored-By: Claude <noreply@anthropic.com>
55 lines
1.4 KiB
Python
55 lines
1.4 KiB
Python
from pydantic_settings import BaseSettings
|
|
from typing import Optional
|
|
|
|
|
|
class Settings(BaseSettings):
|
|
# App
|
|
APP_NAME: str = "企迹-政企周报管理系统"
|
|
DEBUG: bool = True
|
|
SECRET_KEY: str = "change-me-in-production"
|
|
|
|
# Database
|
|
DATABASE_URL: str = "postgresql+asyncpg://postgres:postgres@localhost:5432/qiji"
|
|
|
|
# JWT
|
|
JWT_ALGORITHM: str = "HS256"
|
|
JWT_EXPIRE_MINUTES: int = 480
|
|
|
|
# Casdoor
|
|
CASDOOR_ENDPOINT: str = "http://localhost:8001"
|
|
CASDOOR_CLIENT_ID: str = ""
|
|
CASDOOR_CLIENT_SECRET: str = ""
|
|
CASDOOR_CERTIFICATE: Optional[str] = None
|
|
CASDOOR_ORG_NAME: str = "qiji"
|
|
CASDOOR_APPLICATION: str = "qiji-weekly-report"
|
|
|
|
# MinIO
|
|
MINIO_ENDPOINT: str = "localhost:9000"
|
|
MINIO_ACCESS_KEY: str = "minioadmin"
|
|
MINIO_SECRET_KEY: str = "minioadmin"
|
|
MINIO_BUCKET: str = "qiji-photos"
|
|
MINIO_SECURE: bool = False
|
|
|
|
# WeChat Work
|
|
WECOM_CORP_ID: str = ""
|
|
WECOM_AGENT_ID: str = ""
|
|
WECOM_SECRET: str = ""
|
|
WECOM_TOKEN: str = ""
|
|
WECOM_ENCODING_AES_KEY: str = ""
|
|
|
|
# AI / LLM (OpenAI-compatible)
|
|
AI_API_URL: str = ""
|
|
AI_API_KEY: str = ""
|
|
AI_MODEL: str = "gpt-4o"
|
|
AI_MAX_TOKENS: int = 2000
|
|
|
|
# CORS
|
|
CORS_ORIGINS: list[str] = ["http://localhost:5173", "http://localhost:3000"]
|
|
|
|
class Config:
|
|
env_file = ".env"
|
|
env_file_encoding = "utf-8"
|
|
|
|
|
|
settings = Settings()
|