拆分 service 与前端大文件,修复 CORS 配置与格式问题

- 后端 internal/service 按职责拆分:
  fulfillment.go(1397→527)拆出 wallet/timeout/data/order/query/dashboard/shipnotify
  delivery.go(1124→801)拆出 upstream/link/state/helpers
  merchant.go(855→251)拆出 member/product/api_client/catalog/helpers
- 前端 MerchantCenter.tsx(1327→606)拆出 merchantCenterTabs/merchantCenterUtils
- docker-compose backend 透传 CORS_ALLOWED_ORIGINS
- CORS 白名单实现(config/router/README/.env.example 配套)
- 修复 gofmt 与文件尾部多余空行
This commit is contained in:
yml2213
2026-08-05 13:32:11 +08:00
parent 569109cd92
commit 2264851d5d
29 changed files with 2990 additions and 2606 deletions
+22
View File
@@ -51,6 +51,9 @@ type Config struct {
CallbackRetryScheduleSeconds []int
// UploadDir 凭证等上传文件的存储目录(默认 data/uploads,通过 /uploads 公开访问)。
UploadDir string
// CORSAllowedOrigins 跨域允许的来源(逗号分隔);为空时仅放行常见本地开发端口。
// 生产前后端同域(Caddy 统一入口)时无需配置;仅在前后端分离部署时设置。
CORSAllowedOrigins []string
}
// Load 加载配置:先尝试读取 .env,再读系统环境变量(已存在的系统环境变量优先级更高)
@@ -82,9 +85,28 @@ func Load() *Config {
CallbackPushTimeoutSeconds: getEnvInt("CALLBACK_PUSH_TIMEOUT_SECONDS", 15),
CallbackRetryScheduleSeconds: getEnvIntList("CALLBACK_RETRY_SCHEDULE", nil),
UploadDir: getEnv("UPLOAD_DIR", "data/uploads"),
CORSAllowedOrigins: getEnvList("CORS_ALLOWED_ORIGINS", nil),
}
}
// getEnvList 解析逗号分隔的字符串列表(如 CORS 来源);空串返回默认值。
func getEnvList(key string, def []string) []string {
v := os.Getenv(key)
if v == "" {
return def
}
var out []string
for _, part := range strings.Split(v, ",") {
if s := strings.TrimSpace(part); s != "" {
out = append(out, s)
}
}
if len(out) == 0 {
return def
}
return out
}
// getEnvIntList 解析逗号分隔的整数列表(如 "15,15,30,180");空串返回 nil。
func getEnvIntList(key string, def []int) []int {
v := os.Getenv(key)