feat: P1-P3 全栈集成 — 数据库基础 + DWS 扩展 + 小程序鉴权 + 工程化体系

## P1 数据库基础
- zqyy_app: 创建 auth/biz schema、FDW 连接 etl_feiqiu
- etl_feiqiu: 创建 app schema RLS 视图、商品库存预警表
- 清理 assistant_abolish 残留数据

## P2 ETL/DWS 扩展
- 新增 DWS 助教订单贡献度表 (dws.assistant_order_contribution)
- 新增 assistant_order_contribution_task 任务及 RLS 视图
- member_consumption 增加充值字段、assistant_daily 增加处罚字段
- 更新 ODS/DWD/DWS 任务文档及业务规则文档
- 更新 consistency_checker、flow_runner、task_registry 等核心模块

## P3 小程序鉴权系统
- 新增 xcx_auth 路由/schema(微信登录 + JWT)
- 新增 wechat/role/matching/application 服务层
- zqyy_app 鉴权表迁移 + 角色权限种子数据
- auth/dependencies.py 支持小程序 JWT 鉴权

## 文档与审计
- 新增 DOCUMENTATION-MAP 文档导航
- 新增 7 份 BD_Manual 数据库变更文档
- 更新 DDL 基线快照(etl_feiqiu 6 schema + zqyy_app auth)
- 新增全栈集成审计记录、部署检查清单更新
- 新增 BACKLOG 路线图、FDW→Core 迁移计划

## Kiro 工程化
- 新增 5 个 Spec(P1/P2/P3/全栈集成/核心业务)
- 新增审计自动化脚本(agent_on_stop/build_audit_context/compliance_prescan)
- 新增 6 个 Hook(合规检查/会话日志/提交审计等)
- 新增 doc-map steering 文件

## 运维与测试
- 新增 ops 脚本:迁移验证/API 健康检查/ETL 监控/集成报告
- 新增属性测试:test_dws_contribution / test_auth_system
- 清理过期 export 报告文件
- 更新 .gitignore 排除规则
This commit is contained in:
Neo
2026-02-26 08:03:53 +08:00
parent fafc95e64c
commit b25308c3f4
224 changed files with 17660 additions and 32198 deletions

185
docs/h5_ui/css/ai-icons.css Normal file
View File

@@ -0,0 +1,185 @@
/* ========== AI 标识通用样式 ========== */
/* --- 配色系渐变背景badge 用更深的 --ai-from-deep / --ai-to-deep --- */
.ai-color-red { --ai-from: #e74c3c; --ai-to: #f39c9c; --ai-from-deep: #c0392b; --ai-to-deep: #e74c3c; }
.ai-color-orange { --ai-from: #e67e22; --ai-to: #f5c77e; --ai-from-deep: #ca6c17; --ai-to-deep: #e67e22; }
.ai-color-yellow { --ai-from: #d4a017; --ai-to: #f7dc6f; --ai-from-deep: #b8860b; --ai-to-deep: #d4a017; }
.ai-color-blue { --ai-from: #2980b9; --ai-to: #7ec8e3; --ai-from-deep: #1a5276; --ai-to-deep: #2980b9; }
.ai-color-indigo { --ai-from: #667eea; --ai-to: #a78bfa; --ai-from-deep: #4a5fc7; --ai-to-deep: #667eea; }
.ai-color-purple { --ai-from: #764ba2; --ai-to: #c084fc; --ai-from-deep: #5b3080; --ai-to-deep: #764ba2; }
/* --- 1. 嵌入 Icon行首小图标轻量化 --- */
.ai-inline-icon {
display: inline-flex;
align-items: center;
justify-content: center;
width: 16px;
height: 16px;
background: linear-gradient(135deg, color-mix(in srgb, var(--ai-from) 45%, white), color-mix(in srgb, var(--ai-to) 50%, white));
border-radius: 4px;
font-size: 10px;
line-height: 1;
vertical-align: middle;
margin-right: 3px;
flex-shrink: 0;
position: relative;
overflow: hidden;
}
/* 嵌入 Icon 内的机器人 SVG */
.ai-inline-icon svg {
width: 13px;
height: 13px;
position: relative;
z-index: 1;
flex-shrink: 0;
}
/* 微光动画(慢速、柔和、宽光带) */
.ai-inline-icon::after {
content: '';
position: absolute;
top: -50%;
left: -50%;
width: 200%;
height: 200%;
background: linear-gradient(
45deg,
transparent 30%,
rgba(255,255,255,0.18) 45%,
rgba(255,255,255,0.22) 50%,
rgba(255,255,255,0.18) 55%,
transparent 70%
);
animation: ai-shimmer 12s ease-in-out infinite;
}
@keyframes ai-shimmer {
0%, 100% { transform: translateX(-100%) rotate(45deg); }
50% { transform: translateX(100%) rotate(45deg); }
}
/* --- 2. Title AI 标识(标题行右侧,浅色背景+主题色文字+边框) --- */
.ai-title-badge {
display: inline-flex;
align-items: center;
gap: 3px;
padding: 2px 8px 2px 3px;
background: linear-gradient(135deg, color-mix(in srgb, var(--ai-from) 8%, white), color-mix(in srgb, var(--ai-to) 10%, white));
border: 1px solid color-mix(in srgb, var(--ai-from) 35%, transparent);
border-radius: 10px;
font-size: 11px;
font-weight: 500;
color: var(--ai-from-deep);
white-space: nowrap;
position: relative;
overflow: hidden;
line-height: 1.4;
/* 呼吸脉冲:模拟 AI 思考进度感 */
animation: ai-pulse 3s ease-in-out infinite;
}
@keyframes ai-pulse {
0%, 100% { box-shadow: 0 0 0 0 rgba(var(--ai-pulse-r, 102), var(--ai-pulse-g, 126), var(--ai-pulse-b, 234), 0); }
50% { box-shadow: 0 0 8px 2px rgba(var(--ai-pulse-r, 102), var(--ai-pulse-g, 126), var(--ai-pulse-b, 234), 0.35); }
}
/* 各配色的脉冲 RGB 值 */
.ai-color-red .ai-title-badge,
.ai-title-badge.ai-color-red { --ai-pulse-r: 231; --ai-pulse-g: 76; --ai-pulse-b: 60; }
.ai-color-orange .ai-title-badge,
.ai-title-badge.ai-color-orange { --ai-pulse-r: 230; --ai-pulse-g: 126; --ai-pulse-b: 34; }
.ai-color-yellow .ai-title-badge,
.ai-title-badge.ai-color-yellow { --ai-pulse-r: 212; --ai-pulse-g: 160; --ai-pulse-b: 23; }
.ai-color-blue .ai-title-badge,
.ai-title-badge.ai-color-blue { --ai-pulse-r: 41; --ai-pulse-g: 128; --ai-pulse-b: 185; }
.ai-color-indigo .ai-title-badge,
.ai-title-badge.ai-color-indigo { --ai-pulse-r: 102; --ai-pulse-g: 126; --ai-pulse-b: 234; }
.ai-color-purple .ai-title-badge,
.ai-title-badge.ai-color-purple { --ai-pulse-r: 118; --ai-pulse-g: 75; --ai-pulse-b: 162; }
.ai-title-badge-icon {
display: inline-flex;
align-items: center;
justify-content: center;
width: 18px;
height: 18px;
flex-shrink: 0;
/* 主题色发光 */
filter: drop-shadow(0 0 2px var(--ai-from));
}
.ai-title-badge-icon svg {
width: 16px;
height: 16px;
}
/* 高光扫过(柔和、微弱) */
.ai-title-badge::after {
content: '';
position: absolute;
top: -50%;
left: -50%;
width: 200%;
height: 200%;
background: linear-gradient(
45deg,
transparent 30%,
rgba(255,255,255,0.15) 43%,
rgba(255,255,255,0.22) 50%,
rgba(255,255,255,0.15) 57%,
transparent 70%
);
animation: ai-shimmer 14s ease-in-out infinite;
}
/* --- 星级评价备注卡片右上角14px --- */
.star-rating {
display: inline-flex;
align-items: center;
gap: 1px;
}
.star-rating .star {
position: relative;
width: 14px;
height: 14px;
cursor: default;
}
.star-rating .star svg {
width: 14px;
height: 14px;
}
/* 空星 */
.star-rating .star .star-empty {
color: #e8e8e8;
}
/* 满星 / 半星用 clip 实现 */
.star-rating .star .star-fill {
position: absolute;
top: 0;
left: 0;
overflow: hidden;
}
/* 颜色方案浅黄→黄→橙→深红橙0-10 分) */
.star-rating[data-score="0"] { --star-color: #d4d4d4; }
.star-rating[data-score="1"] { --star-color: #f5e6a3; }
.star-rating[data-score="2"] { --star-color: #f0d86e; }
.star-rating[data-score="3"] { --star-color: #f0c93a; }
.star-rating[data-score="4"] { --star-color: #f0b429; }
.star-rating[data-score="5"] { --star-color: #f09c1a; }
.star-rating[data-score="6"] { --star-color: #ed8a0a; }
.star-rating[data-score="7"] { --star-color: #e67e22; }
.star-rating[data-score="8"] { --star-color: #e05d1a; }
.star-rating[data-score="9"] { --star-color: #d44a12; }
.star-rating[data-score="10"] { --star-color: #c0392b; }
.star-rating .star .star-fill svg {
color: var(--star-color);
}
/* 高分微光 */
.star-rating[data-score="9"] .star .star-fill svg,
.star-rating[data-score="10"] .star .star-fill svg {
filter: drop-shadow(0 0 2px rgba(192,57,43,0.4));
}
/* 备注卡片内星级评价:删除按钮左侧,垂直居中 */
.note-card-wrap {
position: relative;
}
.note-card-wrap .star-rating {
/* 不再绝对定位,改为在 flex 布局中自然排列 */
flex-shrink: 0;
align-self: center;
}