Emit correlated JSON logs from the API and FunASR services, propagate request IDs to the client, and configure bounded opt-in Docker logging. Document the host-wide Grafana/Loki query workflow and keep observability deployment ownership outside the application repository.
46 lines
2.0 KiB
Plaintext
46 lines
2.0 KiB
Plaintext
<view class="page-shell records-page">
|
|
<text class="eyebrow">课堂反馈</text>
|
|
<view class="page-heading">
|
|
<text class="page-title">反馈记录</text>
|
|
</view>
|
|
<text class="page-subtitle">按学生查阅已保存的课堂反馈。</text>
|
|
|
|
<view wx:if="{{errorMessage}}" class="status-banner">
|
|
<view class="status-copy">
|
|
<text>{{errorMessage}}</text>
|
|
<view wx:if="{{errorRequestId}}" class="status-request-id">
|
|
<text>请求编号:{{errorRequestId}}</text>
|
|
<text class="status-action" bindtap="copyRequestId">复制</text>
|
|
</view>
|
|
</view>
|
|
<text class="status-action" bindtap="retryLoad">重试</text>
|
|
</view>
|
|
|
|
<picker class="records-filter surface" mode="selector" range="{{profileOptions}}" value="{{selectedProfileIndex}}" disabled="{{loading}}" bindchange="onProfileChange">
|
|
<text class="filter-label">筛选学生</text>
|
|
<text class="filter-value">{{profileOptions[selectedProfileIndex]}}</text>
|
|
</picker>
|
|
|
|
<view wx:if="{{loading && records.length === 0}}" class="loading-state">正在读取反馈记录...</view>
|
|
|
|
<view wx:elif="{{records.length === 0}}" class="records-empty surface">
|
|
<text class="empty-icon">◴</text>
|
|
<text class="empty-title">暂无反馈记录</text>
|
|
<text class="helper-text">保存课堂反馈后,记录会显示在这里。</text>
|
|
<button class="primary-button empty-action" bindtap="goFeedback">填写反馈</button>
|
|
</view>
|
|
|
|
<view wx:else class="record-list">
|
|
<view wx:for="{{records}}" wx:key="id" class="record-card surface">
|
|
<view class="record-top">
|
|
<view>
|
|
<text class="record-profile">{{item.profileName}}</text>
|
|
<text class="record-date">{{item.feedbackDate}}</text>
|
|
</view>
|
|
<button class="delete-button" loading="{{deletingId === item.id}}" disabled="{{deletingId === item.id}}" data-id="{{item.id}}" bindtap="deleteRecord">删除</button>
|
|
</view>
|
|
<text class="record-content">{{item.content}}</text>
|
|
</view>
|
|
</view>
|
|
</view>
|