feat: batch update - gift card breakdown spec, backend APIs, miniprogram pages, ETL finance recharge, docs & migrations
This commit is contained in:
372
apps/DEMO-miniprogram/miniprogram/pages/chat/chat.wxss
Normal file
372
apps/DEMO-miniprogram/miniprogram/pages/chat/chat.wxss
Normal file
@@ -0,0 +1,372 @@
|
||||
/* pages/chat/chat.wxss — AI 对话页样式 */
|
||||
|
||||
page {
|
||||
background-color: var(--color-gray-1, #f3f3f3);
|
||||
}
|
||||
|
||||
/* ========== 错误态 ========== */
|
||||
.page-error {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
height: 100vh;
|
||||
background-color: var(--color-gray-1, #f3f3f3);
|
||||
}
|
||||
.error-content {
|
||||
flex: 1;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
gap: 24rpx;
|
||||
}
|
||||
.error-text {
|
||||
font-size: 28rpx;
|
||||
color: var(--color-gray-8, #777777);
|
||||
}
|
||||
.retry-btn {
|
||||
padding: 16rpx 48rpx;
|
||||
background: var(--color-primary, #0052d9);
|
||||
border-radius: 22rpx;
|
||||
}
|
||||
.retry-btn--hover { opacity: 0.8; }
|
||||
.retry-btn-text {
|
||||
font-size: 28rpx;
|
||||
color: #ffffff;
|
||||
}
|
||||
|
||||
/* ========== 页面容器 ========== */
|
||||
.chat-page {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
height: 100vh;
|
||||
background-color: var(--color-gray-1, #f3f3f3);
|
||||
position: relative;
|
||||
}
|
||||
|
||||
/* ========== 消息列表 ========== */
|
||||
.message-list {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
bottom: 112rpx;
|
||||
padding: 24rpx 28rpx;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.scroll-bottom-spacer {
|
||||
height: 160rpx;
|
||||
}
|
||||
|
||||
/* ========== 引用内容卡片 ========== */
|
||||
.reference-card {
|
||||
background: #ecf2fe;
|
||||
border-radius: 20rpx;
|
||||
border-left: 6rpx solid #0052d9;
|
||||
padding: 22rpx 26rpx;
|
||||
margin-bottom: 28rpx;
|
||||
}
|
||||
.reference-label-row {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 10rpx;
|
||||
margin-bottom: 10rpx;
|
||||
}
|
||||
.reference-quote-icon {
|
||||
width: 32rpx;
|
||||
height: 32rpx;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
.reference-tag {
|
||||
font-size: 20rpx;
|
||||
line-height: 29rpx;
|
||||
font-weight: 600;
|
||||
color: #0052d9;
|
||||
background: rgba(0, 82, 217, 0.10);
|
||||
padding: 2rpx 12rpx;
|
||||
border-radius: 8rpx;
|
||||
}
|
||||
.reference-source {
|
||||
font-size: 20rpx;
|
||||
line-height: 29rpx;
|
||||
color: #5e5e5e;
|
||||
}
|
||||
.reference-summary {
|
||||
font-size: 24rpx;
|
||||
line-height: 36rpx;
|
||||
color: #393939;
|
||||
font-weight: 500;
|
||||
}
|
||||
|
||||
/* ========== 空对话提示 ========== */
|
||||
.empty-hint {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
padding-top: 160rpx;
|
||||
gap: 18rpx;
|
||||
}
|
||||
.empty-ai-avatar {
|
||||
width: 120rpx;
|
||||
height: 120rpx;
|
||||
border-radius: 50%;
|
||||
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
margin-bottom: 8rpx;
|
||||
box-shadow: 0 12rpx 32rpx rgba(102, 126, 234, 0.30);
|
||||
}
|
||||
.empty-ai-img {
|
||||
width: 72rpx;
|
||||
height: 72rpx;
|
||||
}
|
||||
.empty-text {
|
||||
font-size: 32rpx;
|
||||
font-weight: 600;
|
||||
color: var(--color-gray-13, #242424);
|
||||
}
|
||||
.empty-sub {
|
||||
font-size: 26rpx;
|
||||
color: var(--color-gray-6, #a6a6a6);
|
||||
}
|
||||
|
||||
/* ========== IM 时间分割线 ========== */
|
||||
.time-divider {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
margin: 20rpx 0 8rpx;
|
||||
padding: 0 28rpx;
|
||||
}
|
||||
|
||||
.time-divider-inner {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
padding: 6rpx 20rpx;
|
||||
background: rgba(0, 0, 0, 0.06);
|
||||
border-radius: 20rpx;
|
||||
margin: 12rpx;
|
||||
}
|
||||
|
||||
.time-divider-text {
|
||||
font-size: 20rpx;
|
||||
color: var(--color-gray-7, #8b8b8b);
|
||||
line-height: 28rpx;
|
||||
font-variant-numeric: tabular-nums;
|
||||
}
|
||||
|
||||
/* ========== IM 消息行 ========== */
|
||||
.message-row {
|
||||
display: flex;
|
||||
margin-bottom: 28rpx;
|
||||
}
|
||||
.message-user {
|
||||
justify-content: flex-end;
|
||||
}
|
||||
.message-assistant {
|
||||
justify-content: flex-start;
|
||||
gap: 16rpx;
|
||||
}
|
||||
|
||||
/* ========== AI 头像 ========== */
|
||||
.ai-avatar {
|
||||
width: 72rpx;
|
||||
height: 72rpx;
|
||||
border-radius: 50%;
|
||||
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
flex-shrink: 0;
|
||||
box-shadow: 0 6rpx 16rpx rgba(102, 126, 234, 0.25);
|
||||
overflow: hidden;
|
||||
}
|
||||
.ai-avatar-img {
|
||||
width: 46rpx;
|
||||
height: 46rpx;
|
||||
}
|
||||
|
||||
/* ========== 气泡 ========== */
|
||||
.bubble-wrapper {
|
||||
max-width: 80%;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 12rpx;
|
||||
}
|
||||
.bubble {
|
||||
padding: 20rpx 28rpx;
|
||||
word-break: break-all;
|
||||
}
|
||||
.bubble-text {
|
||||
font-size: 28rpx;
|
||||
line-height: 1.65;
|
||||
}
|
||||
.bubble-user {
|
||||
max-width: 80%;
|
||||
background-color: var(--color-primary, #0052d9);
|
||||
border-radius: 32rpx 8rpx 32rpx 32rpx;
|
||||
box-shadow: 0 4rpx 16rpx rgba(0, 82, 217, 0.22);
|
||||
}
|
||||
.bubble-user .bubble-text { color: #ffffff; }
|
||||
.bubble-assistant {
|
||||
background-color: #ffffff;
|
||||
border-radius: 8rpx 32rpx 32rpx 32rpx;
|
||||
box-shadow: 0 4rpx 16rpx rgba(0, 0, 0, 0.05);
|
||||
}
|
||||
.bubble-assistant .bubble-text { color: var(--color-gray-13, #242424); }
|
||||
|
||||
/* ========== AI 内联引用卡片 ========== */
|
||||
.inline-ref-card {
|
||||
background-color: #ffffff;
|
||||
border-radius: 20rpx;
|
||||
padding: 20rpx 24rpx;
|
||||
border-left: 6rpx solid var(--color-primary, #0052d9);
|
||||
box-shadow: 0 4rpx 16rpx rgba(0, 0, 0, 0.04);
|
||||
max-width: 80%;
|
||||
}
|
||||
|
||||
/* 用户侧引用卡片:右对齐,挂在用户气泡下方 */
|
||||
.user-bubble-col {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: flex-end;
|
||||
gap: 12rpx;
|
||||
max-width: 80%;
|
||||
}
|
||||
|
||||
.inline-ref-card--user {
|
||||
border-left: none;
|
||||
border-right: 6rpx solid var(--color-primary, #0052d9);
|
||||
background-color: #ecf2fe;
|
||||
max-width: 100%;
|
||||
}
|
||||
.inline-ref-header {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 10rpx;
|
||||
margin-bottom: 8rpx;
|
||||
}
|
||||
.inline-ref-type {
|
||||
font-size: 22rpx;
|
||||
color: var(--color-primary, #0052d9);
|
||||
font-weight: 600;
|
||||
}
|
||||
.inline-ref-title {
|
||||
font-size: 24rpx;
|
||||
color: var(--color-gray-13, #242424);
|
||||
font-weight: 500;
|
||||
}
|
||||
.inline-ref-summary {
|
||||
font-size: 22rpx;
|
||||
color: var(--color-gray-8, #777777);
|
||||
margin-bottom: 12rpx;
|
||||
display: block;
|
||||
line-height: 1.5;
|
||||
}
|
||||
.inline-ref-data {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 8rpx 24rpx;
|
||||
}
|
||||
.ref-data-item {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 8rpx;
|
||||
}
|
||||
.ref-data-key {
|
||||
font-size: 20rpx;
|
||||
color: var(--color-gray-7, #8b8b8b);
|
||||
}
|
||||
.ref-data-value {
|
||||
font-size: 20rpx;
|
||||
color: var(--color-gray-13, #242424);
|
||||
font-weight: 500;
|
||||
}
|
||||
|
||||
/* ========== 打字指示器 ========== */
|
||||
.typing-bubble { padding: 20rpx 32rpx; }
|
||||
.typing-dots {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 8rpx;
|
||||
}
|
||||
.dot {
|
||||
width: 12rpx;
|
||||
height: 12rpx;
|
||||
border-radius: 50%;
|
||||
background-color: var(--color-gray-6, #a6a6a6);
|
||||
animation: typingBounce 1.4s infinite ease-in-out;
|
||||
}
|
||||
.dot-1 { animation-delay: 0s; }
|
||||
.dot-2 { animation-delay: 0.2s; }
|
||||
.dot-3 { animation-delay: 0.4s; }
|
||||
@keyframes typingBounce {
|
||||
0%, 80%, 100% { transform: scale(0.6); opacity: 0.4; }
|
||||
40% { transform: scale(1); opacity: 1; }
|
||||
}
|
||||
|
||||
/* ========== 底部输入区域 ========== */
|
||||
.input-bar {
|
||||
position: fixed;
|
||||
left: 0;
|
||||
right: 0;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 16rpx;
|
||||
padding: 16rpx 24rpx 32rpx;
|
||||
background-color: #ffffff;
|
||||
border-top: 2rpx solid var(--color-gray-2, #eeeeee);
|
||||
box-shadow: 0 -4rpx 24rpx rgba(0, 0, 0, 0.04);
|
||||
z-index: 100;
|
||||
transition: bottom 0.25s ease;
|
||||
}
|
||||
.input-wrapper {
|
||||
flex: 1;
|
||||
background-color: var(--color-gray-1, #f3f3f3);
|
||||
border-radius: 48rpx;
|
||||
padding: 18rpx 28rpx;
|
||||
min-height: 72rpx;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
.chat-input {
|
||||
width: 100%;
|
||||
font-size: 28rpx;
|
||||
color: var(--color-gray-13, #242424);
|
||||
line-height: 1.4;
|
||||
background: transparent;
|
||||
}
|
||||
.input-placeholder {
|
||||
color: var(--color-gray-6, #a6a6a6);
|
||||
font-size: 28rpx;
|
||||
}
|
||||
.send-btn {
|
||||
width: 88rpx;
|
||||
height: 72rpx;
|
||||
border-radius: 36rpx;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
flex-shrink: 0;
|
||||
transition: opacity 0.15s, transform 0.15s;
|
||||
}
|
||||
.send-btn-active {
|
||||
background: var(--color-primary, #0052d9);
|
||||
box-shadow: 0 4rpx 16rpx rgba(0, 82, 217, 0.28);
|
||||
}
|
||||
.send-btn-disabled {
|
||||
background-color: var(--color-gray-3, #e0e0e0);
|
||||
}
|
||||
.send-btn--hover {
|
||||
opacity: 0.75;
|
||||
transform: scale(0.95);
|
||||
}
|
||||
.send-icon {
|
||||
width: 44rpx;
|
||||
height: 44rpx;
|
||||
}
|
||||
Reference in New Issue
Block a user