小程序 聊天室布局样式

This commit is contained in:
2025-12-23 17:16:28 +08:00
parent 498ebfeb66
commit d2e141f17c
3 changed files with 57 additions and 29 deletions

View File

@@ -38,7 +38,6 @@
} }
.nav-title { .nav-title {
flex: 1;
font-size: 30rpx; font-size: 30rpx;
font-weight: 600; font-weight: 600;
color: #222; color: #222;
@@ -47,33 +46,57 @@
overflow: hidden; overflow: hidden;
text-overflow: ellipsis; text-overflow: ellipsis;
white-space: nowrap; white-space: nowrap;
} max-width: 160rpx;
.nav-actions {
display: flex;
align-items: center;
gap: 16rpx;
flex-shrink: 0; flex-shrink: 0;
} }
.action-btn { .nav-right {
padding: 12rpx 20rpx; flex: 1;
background: rgba(255,255,255,0.9); display: flex;
border-radius: 32rpx; flex-direction: row;
box-shadow: 0 2rpx 8rpx rgba(0,0,0,0.05); align-items: center;
justify-content: flex-end;
gap: 6px;
// 小程序需要为右侧胶囊按钮留出空间
/* #ifdef MP-WEIXIN */
padding-right: 100px;
/* #endif */
} }
.action-text { .nav-btn {
font-size: 26rpx; display: flex;
font-weight: 600; flex-direction: row;
align-items: center;
justify-content: center;
gap: 4px;
padding: 4px 10px;
height: 28px;
background: rgba(107, 186, 231, 0.8);
border: none;
border-radius: 14px;
box-sizing: border-box;
white-space: nowrap;
flex-shrink: 0;
margin: 0;
line-height: 1;
}
.nav-btn::after {
border: none;
}
.nav-btn-text {
color: #173294; color: #173294;
font-size: 12px;
font-weight: 500;
line-height: 1;
} }
.meeting-btn { .meeting-btn {
background: linear-gradient(90deg, #52c41a 0%, #73d13d 100%); background: linear-gradient(90deg, #52c41a 0%, #73d13d 100%);
} }
.meeting-btn .action-text { .meeting-text {
color: #fff; color: #fff;
} }
@@ -104,6 +127,7 @@
.message-row { .message-row {
display: flex; display: flex;
flex-direction: row;
align-items: flex-start; align-items: flex-start;
gap: 16rpx; gap: 16rpx;
} }

View File

@@ -9,13 +9,13 @@
<view class="nav-back-icon"></view> <view class="nav-back-icon"></view>
</view> </view>
<text class="nav-title">{{ roomName }}</text> <text class="nav-title">{{ roomName }}</text>
<view class="nav-actions"> <view class="nav-right">
<view class="action-btn" @tap="handleWorkcaseAction"> <button class="nav-btn" @tap="handleWorkcaseAction">
<text class="action-text">{{ workcaseId ? '查看工单' : '创建工单' }}</text> <text class="nav-btn-text">{{ workcaseId ? '查看工单' : '创建工单' }}</text>
</view> </button>
<view class="action-btn meeting-btn" @tap="startMeeting"> <button class="nav-btn meeting-btn" @tap="startMeeting">
<text class="action-text">发起会议</text> <text class="nav-btn-text meeting-text">发起会议</text>
</view> </button>
</view> </view>
</view> </view>
@@ -27,11 +27,13 @@
:class="msg.senderType === 'guest' ? 'self' : 'other'"> :class="msg.senderType === 'guest' ? 'self' : 'other'">
<!-- 对方消息(左侧) --> <!-- 对方消息(左侧) -->
<view class="message-row other-row" v-if="msg.senderType !== 'guest'"> <view class="message-row other-row" v-if="msg.senderType !== 'guest'">
<view class="avatar"> <view>
<text class="avatar-text">{{ msg.senderName?.charAt(0) || '客' }}</text> <view class="avatar">
<text class="avatar-text">{{ msg.senderName?.charAt(0) || '客' }}</text>
</view>
<text class="sender-name">{{ msg.senderName || '客服' }}</text>
</view> </view>
<view class="message-content"> <view class="message-content">
<text class="sender-name">{{ msg.senderName || '客服' }}</text>
<view class="bubble other-bubble"> <view class="bubble other-bubble">
<text class="message-text">{{ msg.content }}</text> <text class="message-text">{{ msg.content }}</text>
</view> </view>
@@ -178,10 +180,13 @@ function loadChatRoom() {
// TODO: 调用 workcaseChatAPI.getChatMessagePage() 获取消息列表 // TODO: 调用 workcaseChatAPI.getChatMessagePage() 获取消息列表
} }
// 格式化时间 // 格式化时间(兼容 iOS
function formatTime(time?: string): string { function formatTime(time?: string): string {
if (!time) return '' if (!time) return ''
const date = new Date(time) // iOS 不支持 "yyyy-MM-dd HH:mm:ss" 格式,需要转换为 "yyyy-MM-ddTHH:mm:ss" 或 "yyyy/MM/dd HH:mm:ss"
const iosCompatibleTime = time.replace(' ', 'T')
const date = new Date(iosCompatibleTime)
if (isNaN(date.getTime())) return ''
return `${date.getHours().toString().padStart(2, '0')}:${date.getMinutes().toString().padStart(2, '0')}` return `${date.getHours().toString().padStart(2, '0')}:${date.getMinutes().toString().padStart(2, '0')}`
} }