rwadurian/frontend/mobile-app/lib/features
hailin 207b522754 feat(customer-service): 客服联系方式从硬编码改为后台可配置
将 mobile-app "联系客服" 弹窗的微信/QQ联系方式从硬编码改为
admin-web 后台动态配置,支持任意数量的联系方式管理。

## Backend (admin-service)

- 新增 Prisma 模型: ContactType 枚举(WECHAT/QQ) + CustomerServiceContact
- 新增迁移 SQL: 建表 + 2条索引 + 4条种子数据(保留现有硬编码联系方式)
- 新增双 Controller (参考 app-asset.controller.ts 模式):
  - AdminCustomerServiceContactController (admin/customer-service-contacts)
    GET 列表 / POST 新增 / PUT 更新 / DELETE 删除
  - PublicCustomerServiceContactController (customer-service-contacts)
    GET 仅返回 isEnabled=true,按 sortOrder 排序
- 注意: 公开 Controller 用 @Controller('customer-service-contacts')
  避免与全局前缀 api/v1 双重叠加

## Kong 网关

- 新增路由 admin-customer-service-contacts-public
  路径 /api/v1/customer-service-contacts → admin-service:3010
- Admin 端点由已有 admin-api 路由 (/api/v1/admin) 覆盖

## Admin-web

- endpoints.ts: 新增 CUSTOMER_SERVICE_CONTACTS 端点组
- customerServiceContactService.ts: CRUD 服务 (list/create/update/delete)
- settings/page.tsx: 新增"客服联系方式管理"区块
  表格展示(排序/类型/标签/联系方式/启停/操作) + 内联新增/编辑表单
- settings.module.scss: contactTable / contactForm / contactFormFields 样式

## Flutter Mobile-app

- storage_keys.dart: 新增 cachedCustomerServiceContacts 缓存 key
- customer_service_contact_service.dart: API + 缓存服务
  (内存5分钟TTL + SharedPreferences持久化 + 后台静默刷新)
- injection_container.dart: 注册 customerServiceContactServiceProvider
- profile_page.dart: _showCustomerServiceDialog() 从硬编码改为
  动态 API 加载,contacts 为空时显示"暂无客服联系方式"占位符

## 文件清单 (4 新建 + 9 修改)

新建:
- backend/.../migrations/20260205100000_add_customer_service_contacts/migration.sql
- backend/.../controllers/customer-service-contact.controller.ts
- frontend/admin-web/src/services/customerServiceContactService.ts
- frontend/mobile-app/lib/core/services/customer_service_contact_service.dart

修改:
- backend/.../prisma/schema.prisma
- backend/.../src/app.module.ts
- backend/api-gateway/kong.yml
- frontend/admin-web/src/infrastructure/api/endpoints.ts
- frontend/admin-web/src/app/(dashboard)/settings/page.tsx
- frontend/admin-web/src/app/(dashboard)/settings/settings.module.scss
- frontend/mobile-app/lib/core/storage/storage_keys.dart
- frontend/mobile-app/lib/core/di/injection_container.dart
- frontend/mobile-app/lib/features/profile/presentation/pages/profile_page.dart

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-05 05:00:25 -08:00
..
account/presentation/pages feat(mobile-app,admin): 添加系统维护功能和通知徽章功能 2025-12-27 23:26:01 -08:00
auth/presentation feat(app-assets): 应用图片管理 — 开屏图/引导图可从 admin-web 配置 2026-02-04 11:20:26 -08:00
authorization/presentation fix(mobile-app): 排名详情页隐藏敏感统计字段 2026-02-04 17:41:11 -08:00
contract_signing/presentation feat(mobile-app): 增强合同PDF下载可靠性和用户体验 2026-01-09 07:12:21 -08:00
deposit/presentation/pages fix(mobile-app): fetch wallet address from server API instead of local storage 2026-01-04 10:00:33 -08:00
home/presentation chore(mobile-app): 减少频繁轮询产生的调试日志 2025-12-28 06:54:16 -08:00
kyc feat(mobile-app): KYC成功后自动跳转合同签署页面 2025-12-25 07:07:43 -08:00
mining/presentation/pages fix(mobile-app): 优化数字显示组件防止自动换行 2025-12-23 18:33:51 -08:00
notification/presentation/pages feat(mobile-app,admin): 添加系统维护功能和通知徽章功能 2025-12-27 23:26:01 -08:00
pending_actions/presentation/pages fix(mobile-app): 修复认种订单解析和状态检查问题 2026-01-09 02:49:31 -08:00
planting/presentation fix(mobile-app): 修复认种向导完成后无法返回待办页面的问题 2026-01-09 02:43:23 -08:00
profile/presentation feat(customer-service): 客服联系方式从硬编码改为后台可配置 2026-02-05 05:00:25 -08:00
ranking/presentation/pages feat(leaderboard): add toggle control for mobile-app ranking page 2026-01-04 03:35:57 -08:00
security/presentation/pages feat(email): 实现邮箱绑定/解绑功能 2025-12-23 20:53:20 -08:00
share/presentation/pages feat(frontend): 多项功能改进 2025-12-15 04:04:21 -08:00
trading/presentation/pages feat(mobile-app): 启用兑换页面的划转功能 2026-01-09 08:48:45 -08:00
withdraw/presentation/pages feat(fiat-withdrawal): add complete fiat withdrawal system 2026-01-03 06:39:11 -08:00