fix(feedback): refine summary and error states

This commit is contained in:
zhangheng
2026-07-22 19:30:26 +08:00
parent 0a2509d923
commit 7934d64520
4 changed files with 90 additions and 9 deletions

View File

@@ -5,15 +5,17 @@
</view> </view>
<text class="page-subtitle">填写课堂表现并保存到教学反馈记录。</text> <text class="page-subtitle">填写课堂表现并保存到教学反馈记录。</text>
<view wx:if="{{errorMessage}}" class="status-banner"> <view wx:if="{{errorMessage}}" class="status-banner feedback-error-banner">
<view class="status-copy"> <view class="status-copy">
<text>{{errorMessage}}</text> <text class="feedback-error-message">{{errorMessage}}</text>
<view wx:if="{{errorRequestId}}" class="status-request-id"> </view>
<text>请求编号:{{errorRequestId}}</text> <view class="feedback-error-footer">
<text class="status-action" bindtap="copyRequestId">复制</text> <view wx:if="{{errorRequestId}}" class="feedback-error-reference">
</view> <text>问题编号:{{errorRequestId}}</text>
<button class="feedback-error-copy" bindtap="copyRequestId">复制编号</button>
</view>
<button class="feedback-error-retry" bindtap="retryLoad">重试</button>
</view> </view>
<text class="status-action" bindtap="retryLoad">重试</text>
</view> </view>
<view class="feedback-form surface"> <view class="feedback-form surface">

View File

@@ -7,6 +7,76 @@
padding: 0; padding: 0;
} }
.feedback-error-banner {
flex-direction: column;
align-items: stretch;
gap: 14rpx;
}
.feedback-error-message {
display: block;
}
.feedback-error-footer,
.feedback-error-reference {
display: flex;
align-items: center;
}
.feedback-error-footer {
justify-content: flex-end;
gap: 18rpx;
}
.feedback-error-reference {
flex: 1;
min-width: 0;
gap: 12rpx;
color: #6e6e73;
font-size: 21rpx;
}
.feedback-error-reference > text {
min-width: 0;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.feedback-error-copy,
.feedback-error-retry {
display: flex;
flex: none;
align-items: center;
justify-content: center;
height: 56rpx;
margin: 0;
border: 0;
border-radius: 8rpx;
font-size: 23rpx;
line-height: 1;
}
.feedback-error-copy {
padding: 0;
background: transparent;
color: #6e6e73;
font-weight: 500;
}
.feedback-error-retry {
min-width: 104rpx;
padding: 0 22rpx;
background: #007aff;
color: #ffffff;
font-weight: 600;
}
.feedback-error-copy::after,
.feedback-error-retry::after {
border: 0;
}
.feedback-field, .feedback-field,
.content-field { .content-field {
padding: 24rpx; padding: 24rpx;
@@ -323,14 +393,18 @@
.voice-summary-button, .voice-summary-button,
.voice-summary-apply-button { .voice-summary-apply-button {
display: flex;
align-items: center;
justify-content: center;
width: 100%; width: 100%;
height: 72rpx; height: 72rpx;
margin: 0; margin: 0;
padding: 0 20rpx;
border: 0; border: 0;
border-radius: 8rpx; border-radius: 8rpx;
font-size: 25rpx; font-size: 25rpx;
font-weight: 600; font-weight: 600;
line-height: 72rpx; line-height: 1;
} }
.voice-summary-button { .voice-summary-button {

View File

@@ -92,10 +92,11 @@ impl IntoResponse for ApiError {
} }
impl From<sqlx::Error> for ApiError { impl From<sqlx::Error> for ApiError {
fn from(_: sqlx::Error) -> Self { fn from(error: sqlx::Error) -> Self {
tracing::error!( tracing::error!(
event = "database_query_failed", event = "database_query_failed",
error_class = "database_query_failed", error_class = "database_query_failed",
error = %error,
"database query failed" "database query failed"
); );
Self::Internal Self::Internal

View File

@@ -192,6 +192,10 @@ export function getApiErrorMessage(error: unknown): string {
if (error.statusCode === 401) return '登录状态已失效,请重试' if (error.statusCode === 401) return '登录状态已失效,请重试'
if (error.statusCode === 404) return '请求的数据不存在或无权访问' if (error.statusCode === 404) return '请求的数据不存在或无权访问'
if (error.statusCode === 503 && error.message.includes('database')) return '后端尚未配置数据库连接' if (error.statusCode === 503 && error.message.includes('database')) return '后端尚未配置数据库连接'
if (error.statusCode && error.statusCode >= 500) return '服务暂时无法完成操作,请稍后重试'
if (error.message.toLowerCase() === 'internal server error') {
return '服务暂时无法完成操作,请稍后重试'
}
return error.message return error.message
} }