feat: 2026-04-15~05-02 累积变更基线 — AI 重构 + Runtime Context + DWS 修复
涵盖(每条对应已存的审计记录): - AI 模块拆分:apps/backend/app/ai/apps -> prompts/(8 个 APP + app2a 派生) audit: 2026-04-20__ai-module-complete.md - admin-web AI 管理套件:AIDashboard / AIOperations / AIRunLogs / AITriggers / TriggerManager audit: 2026-04-21__admin-web-ai-management-suite.md - App2 财务洞察 prompt v3 -> v5.1 + 小程序 AI 接入(chat / board-finance) audit: 2026-04-22__app2_prompt_v5_1_and_miniprogram_ai_insight.md - App2 prewarm 全过滤器 + AI 触发器 cron reschedule audit: 2026-04-21__app2-finance-prewarm-all-filters.md migration: 20260420_ai_trigger_jobs_and_app2_prewarm.sql / 20260421_app2_prewarm_cron_reschedule.sql - AppType 联合类型对齐 + adminAiAppTypes.test.ts audit: 2026-04-30__admin_web_ai_app_type_alignment.md - DashScope tokens_used 提取修复 audit: 2026-04-30__backend_dashscope_tokens_used_extraction.md - App3 线索完整详情 prompt audit: 2026-05-01__backend_app3_full_detail_prompt.md - Runtime Context 沙箱(5-1~5-2 主线): - 后端 schema/service + admin_runtime_context / xcx_runtime_clock 两个 router - admin-web RuntimeContext.tsx + miniprogram runtime-clock.ts - migration: 20260501__runtime_context_sandbox.sql - tools/db/verify_admin_web_sandbox.py + verify_sandbox_end_to_end.py - database/changes: 7 份 sandbox_* 验证报告 - 飞球 DWS 修复:finance_area_daily 区域汇总 + task_engine 调整 + RLS 视图业务日上界(migration 20260502 + scripts/ops/gen_rls_business_date_migration.py) 合规: - .gitignore 启用 tmp/ 排除 - 不入仓:apps/etl/connectors/feiqiu/.env(API_TOKEN secret,本地修改保留) 待验证清单: - docs/audit/changes/2026-05-04__cumulative_baseline_pending_verification.md 每个主题的功能完整性 / 上线验证几乎都未收口,按优先级 P0~P3 逐一处理
This commit is contained in:
@@ -203,6 +203,8 @@
|
||||
<!-- AI 洞察 -->
|
||||
<!-- CHANGE 2026-03-12 | intent: H5 原型使用 SVG 机器人图标,不可用 emoji 替代;规范要求内联 SVG 导出为文件用 image 引用 -->
|
||||
<!-- CHANGE 2026-03-21 | P13 T6.1: AI 洞察改为动态渲染,移除硬编码文案 -->
|
||||
<!-- CHANGE 2026-04-22 | AI 洞察改版:两段式(dim标题 + 正文),第3条起省略为1行,加"查看全部"按钮 + 覆盖大弹窗 -->
|
||||
<!-- CHANGE 2026-04-22 seq11/12 置顶:AI 洞察区首屏为"本期总结"(健康度 + 跟踪),下方为明细 -->
|
||||
<view class="ai-insight-section">
|
||||
<view class="ai-insight-header">
|
||||
<view class="ai-insight-icon">
|
||||
@@ -210,11 +212,108 @@
|
||||
</view>
|
||||
<text class="ai-insight-title">AI 智能洞察</text>
|
||||
</view>
|
||||
<view class="ai-insight-body" wx:if="{{aiInsights.length > 0}}">
|
||||
<text class="ai-insight-line" wx:for="{{aiInsights}}" wx:key="index"><text class="ai-insight-dim">{{item.icon}} </text>{{item.text}}</text>
|
||||
|
||||
<!-- 本期总结卡片:seq11(健康度评级) + seq12(跟踪指标) -->
|
||||
<view class="ai-summary-card ai-summary-card--{{summaryLightType || 'neutral'}}" wx:if="{{aiInsightSummary.evaluation || aiInsightSummary.tracking}}">
|
||||
<view class="ai-summary-head">
|
||||
<view class="ai-summary-badge ai-summary-badge--{{summaryLightType || 'neutral'}}" wx:if="{{summaryLightLabel}}">
|
||||
<text>{{summaryLightLabel}}</text>
|
||||
</view>
|
||||
<text class="ai-summary-head-title">本期总结</text>
|
||||
</view>
|
||||
<!-- 2026-04-22 v4:evaluation title 与顶部徽章语义重复,隐藏 title 仅展示 body -->
|
||||
<view class="ai-summary-block" wx:if="{{aiInsightSummary.evaluation}}">
|
||||
<view class="ai-summary-block-body ai-summary-block-body-clamp">
|
||||
<text wx:for="{{aiInsightSummary.evaluation.bodySegs}}" wx:key="index" wx:for-item="seg" class="md-seg {{seg.bold ? 'md-bold' : ''}} {{seg.italic ? 'md-italic' : ''}}">{{seg.text}}</text>
|
||||
</view>
|
||||
</view>
|
||||
<view class="ai-summary-divider" wx:if="{{aiInsightSummary.evaluation && aiInsightSummary.tracking}}"></view>
|
||||
<view class="ai-summary-block ai-summary-block--tracking" wx:if="{{aiInsightSummary.tracking}}">
|
||||
<text class="ai-summary-block-title">⏰ {{aiInsightSummary.tracking.title}}</text>
|
||||
<view class="ai-summary-block-body ai-summary-block-body-clamp">
|
||||
<text wx:for="{{aiInsightSummary.tracking.bodySegs}}" wx:key="index" wx:for-item="seg" class="md-seg {{seg.bold ? 'md-bold' : ''}} {{seg.italic ? 'md-italic' : ''}}">{{seg.text}}</text>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<view class="ai-insight-body" wx:else>
|
||||
<text class="ai-insight-line ai-insight-dim">暂无洞察数据</text>
|
||||
|
||||
<view class="ai-insight-body" wx:if="{{aiInsightDetails.length > 0}}">
|
||||
<view class="ai-insight-details-label" wx:if="{{aiInsightSummary.evaluation || aiInsightSummary.tracking}}">
|
||||
<text class="ai-insight-details-label-text">分板块明细洞察 · 仅展示前 3 条</text>
|
||||
</view>
|
||||
<!-- 2026-04-22 v3:seq 1/2/3 统一展示"标题 + 单行省略正文",详情看弹窗 -->
|
||||
<block wx:for="{{aiInsightDetails}}" wx:key="index" wx:if="{{index < 3}}">
|
||||
<view class="ai-insight-item">
|
||||
<view class="ai-insight-item-title">
|
||||
<text class="ai-insight-item-seq">{{index + 1}}</text>
|
||||
<text class="ai-insight-item-name">{{item.title}}</text>
|
||||
</view>
|
||||
<view class="ai-insight-item-body ai-insight-item-body-ellipsis">
|
||||
<text wx:for="{{item.bodySegs}}" wx:key="index" wx:for-item="seg" class="md-seg {{seg.bold ? 'md-bold' : ''}} {{seg.italic ? 'md-italic' : ''}}">{{seg.text}}</text>
|
||||
</view>
|
||||
</view>
|
||||
</block>
|
||||
<!-- 2026-04-22 v3:只要有洞察就显示"查看全部"按钮,引导进弹窗看完整内容 -->
|
||||
<view class="ai-insight-more" wx:if="{{aiInsightDetails.length > 0 || aiInsightSummary.evaluation}}" bindtap="openAllInsights" hover-class="ai-insight-more-hover">
|
||||
<text class="ai-insight-more-text">查看全部 AI 洞察 ›</text>
|
||||
</view>
|
||||
</view>
|
||||
<view class="ai-insight-body" wx:elif="{{!aiInsightSummary.evaluation && !aiInsightSummary.tracking}}">
|
||||
<view class="ai-insight-item-body ai-insight-dim">暂无洞察数据</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<!-- AI 洞察全部查看弹窗:覆盖除底部 tab 外整个页面;header / 可滚动 body / 底部通栏按钮 -->
|
||||
<view class="ai-modal-mask" wx:if="{{aiInsightsModalVisible}}" bindtap="closeAllInsights" catchtouchmove="_noop">
|
||||
<view class="ai-modal" catchtap="_noop">
|
||||
<view class="ai-modal-header">
|
||||
<view class="ai-modal-title-wrap">
|
||||
<view class="ai-insight-icon">
|
||||
<image src="/assets/icons/ai-robot.svg" mode="aspectFit" class="ai-insight-icon-img" />
|
||||
</view>
|
||||
<text class="ai-modal-title">AI 智能洞察 · 共 {{aiInsights.length}} 条</text>
|
||||
</view>
|
||||
<view class="ai-modal-close" bindtap="closeAllInsights" hover-class="ai-modal-close-hover">
|
||||
<text class="ai-modal-close-icon">✕</text>
|
||||
</view>
|
||||
</view>
|
||||
<scroll-view scroll-y="{{true}}" class="ai-modal-body" enhanced="{{true}}" show-scrollbar="{{false}}" bounces="{{true}}">
|
||||
<!-- 弹窗顶部:本期总结(seq11+seq12)- 同款 summary-card -->
|
||||
<view class="ai-summary-card ai-summary-card--{{summaryLightType || 'neutral'}} ai-summary-card--modal" wx:if="{{aiInsightSummary.evaluation || aiInsightSummary.tracking}}">
|
||||
<view class="ai-summary-head">
|
||||
<view class="ai-summary-badge ai-summary-badge--{{summaryLightType || 'neutral'}}" wx:if="{{summaryLightLabel}}">
|
||||
<text>{{summaryLightLabel}}</text>
|
||||
</view>
|
||||
<text class="ai-summary-head-title">本期总结</text>
|
||||
</view>
|
||||
<view class="ai-summary-block" wx:if="{{aiInsightSummary.evaluation}}">
|
||||
<view class="ai-summary-block-body">
|
||||
<text wx:for="{{aiInsightSummary.evaluation.bodySegs}}" wx:key="index" wx:for-item="seg" class="md-seg {{seg.bold ? 'md-bold' : ''}} {{seg.italic ? 'md-italic' : ''}}">{{seg.text}}</text>
|
||||
</view>
|
||||
</view>
|
||||
<view class="ai-summary-divider" wx:if="{{aiInsightSummary.evaluation && aiInsightSummary.tracking}}"></view>
|
||||
<view class="ai-summary-block ai-summary-block--tracking" wx:if="{{aiInsightSummary.tracking}}">
|
||||
<text class="ai-summary-block-title">⏰ {{aiInsightSummary.tracking.title}}</text>
|
||||
<view class="ai-summary-block-body">
|
||||
<text wx:for="{{aiInsightSummary.tracking.bodySegs}}" wx:key="index" wx:for-item="seg" class="md-seg {{seg.bold ? 'md-bold' : ''}} {{seg.italic ? 'md-italic' : ''}}">{{seg.text}}</text>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<view class="ai-modal-details-label" wx:if="{{(aiInsightSummary.evaluation || aiInsightSummary.tracking) && aiInsightDetails.length > 0}}">
|
||||
<text class="ai-modal-details-label-text">分板块明细洞察</text>
|
||||
</view>
|
||||
<view class="ai-modal-item" wx:for="{{aiInsightDetails}}" wx:key="index">
|
||||
<view class="ai-modal-item-title">
|
||||
<text class="ai-modal-item-seq">{{index + 1}}</text>
|
||||
<text class="ai-modal-item-name">{{item.title}}</text>
|
||||
</view>
|
||||
<view class="ai-modal-item-body">
|
||||
<text wx:for="{{item.bodySegs}}" wx:key="index" wx:for-item="seg" class="md-seg {{seg.bold ? 'md-bold' : ''}} {{seg.italic ? 'md-italic' : ''}}">{{seg.text}}</text>
|
||||
</view>
|
||||
</view>
|
||||
<view class="ai-modal-footer-space"></view>
|
||||
</scroll-view>
|
||||
<view class="ai-modal-footer" bindtap="closeAllInsights" hover-class="ai-modal-footer-hover">关闭</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
@@ -492,7 +492,7 @@ AI_CHANGELOG
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 14rpx;
|
||||
margin-bottom: 22rpx;
|
||||
margin-bottom: 30rpx;
|
||||
}
|
||||
|
||||
/* CHANGE 2026-03-12 | intent: H5 原型 AI 图标为 SVG 机器人(24×24 → 42rpx),不可用 emoji 替代 */
|
||||
@@ -545,6 +545,357 @@ AI_CHANGELOG
|
||||
color: rgba(255, 255, 255, 0.85);
|
||||
}
|
||||
|
||||
/* CHANGE 2026-04-22 v2 | AI 洞察列表项:与弹窗同款(序号徽章 + 标题 + 缩进正文) */
|
||||
.ai-insight-item {
|
||||
padding: 6rpx 0 10rpx 0;
|
||||
}
|
||||
|
||||
.ai-insight-item-title {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 12rpx;
|
||||
margin-bottom: 8rpx;
|
||||
}
|
||||
|
||||
.ai-insight-item-seq {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
min-width: 32rpx;
|
||||
height: 32rpx;
|
||||
padding: 0 8rpx;
|
||||
border-radius: 10rpx;
|
||||
background: linear-gradient(135deg, #667eea, #764ba2);
|
||||
color: #fff;
|
||||
font-size: 20rpx;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.ai-insight-item-name {
|
||||
font-size: 26rpx;
|
||||
font-weight: 600;
|
||||
color: rgba(255, 255, 255, 0.95);
|
||||
flex: 1;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.ai-insight-item-body {
|
||||
display: block;
|
||||
font-size: 24rpx;
|
||||
line-height: 36rpx;
|
||||
color: rgba(255, 255, 255, 0.78);
|
||||
text-indent: 48rpx;
|
||||
}
|
||||
|
||||
.ai-insight-item-body-ellipsis {
|
||||
display: -webkit-box;
|
||||
-webkit-box-orient: vertical;
|
||||
-webkit-line-clamp: 1;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
|
||||
/* ===== 2026-04-22 seq11/12 置顶:本期总结(轻量版) ===== */
|
||||
/* 不用卡片容器,直接嵌入 AI 洞察区,用彩色小点 + 淡分隔区分层级 */
|
||||
.ai-summary-card {
|
||||
margin: 0 24rpx 18rpx 0;
|
||||
padding: 0 0 18rpx 0;
|
||||
border-bottom: 2rpx dashed rgba(255, 255, 255, 0.1);
|
||||
}
|
||||
|
||||
.ai-summary-card--modal {
|
||||
margin: 0 0 14rpx 0;
|
||||
}
|
||||
|
||||
/* 去掉左侧彩条,保留类名备用(无样式即不渲染) */
|
||||
.ai-summary-card--green,
|
||||
.ai-summary-card--yellow,
|
||||
.ai-summary-card--red,
|
||||
.ai-summary-card--neutral {
|
||||
background: transparent;
|
||||
}
|
||||
|
||||
.ai-summary-head {
|
||||
display: flex;
|
||||
align-items: baseline; /* 徽章与"本期总结"按文字基线对齐(字号不同时看起来贴底) */
|
||||
gap: 10rpx;
|
||||
margin-bottom: 14rpx;
|
||||
}
|
||||
|
||||
/* 徽章:去胶囊底,纯色粗字强调三色灯级别 */
|
||||
.ai-summary-badge {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
font-size: 30rpx;
|
||||
font-weight: 700;
|
||||
letter-spacing: 1rpx;
|
||||
padding: 0;
|
||||
background: transparent !important;
|
||||
box-shadow: none !important;
|
||||
}
|
||||
|
||||
.ai-summary-badge--green { color: #4ade80; }
|
||||
.ai-summary-badge--yellow { color: #facc15; }
|
||||
.ai-summary-badge--red { color: #f87171; }
|
||||
.ai-summary-badge--neutral { color: rgba(255, 255, 255, 0.6); }
|
||||
|
||||
.ai-summary-head-title {
|
||||
font-size: 22rpx;
|
||||
font-weight: 400;
|
||||
color: rgba(255, 255, 255, 0.5);
|
||||
letter-spacing: 1rpx;
|
||||
}
|
||||
|
||||
.ai-summary-block {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 6rpx;
|
||||
}
|
||||
|
||||
.ai-summary-block-title {
|
||||
font-size: 25rpx;
|
||||
font-weight: 600;
|
||||
color: rgba(255, 255, 255, 0.88);
|
||||
line-height: 36rpx;
|
||||
}
|
||||
|
||||
.ai-summary-block-body {
|
||||
font-size: 24rpx;
|
||||
line-height: 36rpx;
|
||||
color: rgba(255, 255, 255, 0.72);
|
||||
}
|
||||
|
||||
/* 2026-04-22 v3:总结区 body 2 行省略,突出要点 */
|
||||
.ai-summary-block-body-clamp {
|
||||
display: -webkit-box;
|
||||
-webkit-box-orient: vertical;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
|
||||
.ai-summary-block--tracking {
|
||||
margin-top: 14rpx;
|
||||
}
|
||||
.ai-summary-block--tracking .ai-summary-block-title {
|
||||
color: rgba(251, 191, 36, 0.85);
|
||||
font-weight: 500;
|
||||
}
|
||||
|
||||
.ai-summary-divider {
|
||||
display: none;
|
||||
}
|
||||
|
||||
/* "分板块明细洞察"分组标签 */
|
||||
.ai-insight-details-label {
|
||||
padding: 2rpx 0 12rpx 0;
|
||||
}
|
||||
|
||||
.ai-insight-details-label-text {
|
||||
font-size: 20rpx;
|
||||
color: rgba(255, 255, 255, 0.42);
|
||||
letter-spacing: 1rpx;
|
||||
}
|
||||
|
||||
.ai-modal-details-label {
|
||||
padding: 6rpx 0 8rpx 0;
|
||||
margin-bottom: 4rpx;
|
||||
}
|
||||
|
||||
.ai-modal-details-label-text {
|
||||
font-size: 20rpx;
|
||||
color: rgba(255, 255, 255, 0.42);
|
||||
letter-spacing: 1rpx;
|
||||
}
|
||||
|
||||
/* 2026-04-22 小程序 Markdown 内联样式:**加粗** / *倾斜* */
|
||||
.md-seg {
|
||||
display: inline;
|
||||
}
|
||||
|
||||
.md-bold {
|
||||
font-weight: 700;
|
||||
color: rgba(255, 255, 255, 0.98);
|
||||
}
|
||||
|
||||
.md-italic {
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
/* 加粗同时倾斜时组合生效(class 拼接即可) */
|
||||
|
||||
/* CHANGE 2026-04-22 v2 | "查看全部" 按钮居中 */
|
||||
.ai-insight-more {
|
||||
margin: 10rpx 24rpx 0 0;
|
||||
padding: 18rpx 24rpx;
|
||||
text-align: center;
|
||||
color: rgba(255, 255, 255, 0.88);
|
||||
font-size: 26rpx;
|
||||
background: rgba(255, 255, 255, 0.06);
|
||||
border-radius: 12rpx;
|
||||
}
|
||||
|
||||
.ai-insight-more-hover {
|
||||
background: rgba(255, 255, 255, 0.12);
|
||||
}
|
||||
|
||||
.ai-insight-more-text {
|
||||
letter-spacing: 1rpx;
|
||||
}
|
||||
|
||||
/* CHANGE 2026-04-22 | AI 全部洞察弹窗:覆盖除底部 tab 外整个页面 */
|
||||
.ai-modal-mask {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
bottom: 110rpx; /* 避让自定义 tabBar 约 110rpx */
|
||||
bottom: calc(110rpx + env(safe-area-inset-bottom));
|
||||
background: rgba(0, 0, 0, 0.55);
|
||||
z-index: 9998;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: flex-end;
|
||||
}
|
||||
|
||||
/* 2026-04-22 v5:fixed top+bottom 固定高(scroll-view 在 flex max-height 里渲染溢出,放弃 auto 高度) */
|
||||
.ai-modal {
|
||||
position: fixed;
|
||||
left: 24rpx;
|
||||
right: 24rpx;
|
||||
top: 40rpx;
|
||||
bottom: calc(150rpx + env(safe-area-inset-bottom)); /* 110rpx tab + 40rpx 留白 */
|
||||
background: #2e2e2e;
|
||||
border-radius: 24rpx;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
overflow: hidden;
|
||||
box-shadow: 0 12rpx 48rpx rgba(0, 0, 0, 0.45);
|
||||
z-index: 9999;
|
||||
}
|
||||
|
||||
.ai-modal-header {
|
||||
flex-shrink: 0;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
padding: 28rpx 28rpx 20rpx 28rpx;
|
||||
border-bottom: 2rpx solid rgba(255, 255, 255, 0.08);
|
||||
}
|
||||
|
||||
.ai-modal-title-wrap {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 14rpx;
|
||||
flex: 1;
|
||||
min-width: 0;
|
||||
}
|
||||
|
||||
.ai-modal-title {
|
||||
font-size: 28rpx;
|
||||
font-weight: 600;
|
||||
color: rgba(255, 255, 255, 0.95);
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.ai-modal-close {
|
||||
width: 52rpx;
|
||||
height: 52rpx;
|
||||
border-radius: 50%;
|
||||
background: rgba(255, 255, 255, 0.08);
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
margin-left: 16rpx;
|
||||
}
|
||||
|
||||
.ai-modal-close-hover {
|
||||
background: rgba(255, 255, 255, 0.18);
|
||||
}
|
||||
|
||||
.ai-modal-close-icon {
|
||||
font-size: 28rpx;
|
||||
color: rgba(255, 255, 255, 0.85);
|
||||
line-height: 28rpx;
|
||||
}
|
||||
|
||||
.ai-modal-body {
|
||||
/* 2026-04-22 v5:modal 固定高度后 flex:1 1 0 分配剩余空间给 scroll-view */
|
||||
flex: 1 1 0;
|
||||
min-height: 0;
|
||||
padding: 20rpx 28rpx 12rpx 28rpx;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.ai-modal-item {
|
||||
padding: 22rpx 0 22rpx 0;
|
||||
border-bottom: 2rpx dashed rgba(255, 255, 255, 0.1);
|
||||
}
|
||||
|
||||
.ai-modal-item:last-of-type {
|
||||
border-bottom: none;
|
||||
}
|
||||
|
||||
.ai-modal-item-title {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 12rpx;
|
||||
margin-bottom: 10rpx;
|
||||
}
|
||||
|
||||
.ai-modal-item-seq {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
min-width: 36rpx;
|
||||
height: 36rpx;
|
||||
padding: 0 10rpx;
|
||||
border-radius: 18rpx;
|
||||
background: linear-gradient(135deg, #667eea, #764ba2);
|
||||
color: #fff;
|
||||
font-size: 22rpx;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.ai-modal-item-name {
|
||||
font-size: 28rpx;
|
||||
font-weight: 600;
|
||||
color: rgba(255, 255, 255, 0.95);
|
||||
flex: 1;
|
||||
}
|
||||
|
||||
.ai-modal-item-body {
|
||||
display: block;
|
||||
font-size: 26rpx;
|
||||
line-height: 40rpx;
|
||||
color: rgba(255, 255, 255, 0.78);
|
||||
text-indent: 48rpx; /* 首行缩进,和 seq 徽章对齐阅读感 */
|
||||
}
|
||||
|
||||
.ai-modal-footer-space {
|
||||
height: 24rpx;
|
||||
}
|
||||
|
||||
/* 2026-04-22 v3 | 弹窗底部整块作为关闭按钮:固定高度 100rpx,贯通整宽 */
|
||||
.ai-modal-footer {
|
||||
flex-shrink: 0;
|
||||
height: 100rpx;
|
||||
line-height: 100rpx;
|
||||
text-align: center;
|
||||
font-size: 30rpx;
|
||||
font-weight: 500;
|
||||
color: #fff;
|
||||
background: linear-gradient(135deg, #667eea, #764ba2);
|
||||
letter-spacing: 8rpx;
|
||||
}
|
||||
|
||||
.ai-modal-footer-hover {
|
||||
opacity: 0.82;
|
||||
}
|
||||
|
||||
/* ===== 通用表格边框容器 ===== */
|
||||
.table-bordered {
|
||||
border: 2rpx solid #e7e7e7;
|
||||
|
||||
Reference in New Issue
Block a user