feat: 申诉常见理由快捷选择 + 证据截图上传

- 后端: 新增 appeal_reason_type, appeal_evidence_urls 字段
- 后端: 新建 upload_routes.py 图片上传接口
- 前端: history 页面添加快捷理由选择器 + 截图上传
- 前端: admin-review 页面展示证据图片 + 点击预览
- 新增 SQL 更新脚本 update_appeal_fields.sql

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
刘正航
2026-04-21 23:26:25 +08:00
parent 50440e84fb
commit f7d0601c4e
12 changed files with 344 additions and 13 deletions

View File

@@ -61,7 +61,25 @@
</view>
<view wx:if="{{appealPostId === item.id}}">
<textarea class="textarea" placeholder="请输入申诉理由(至少 2 个字符)" value="{{appealReason}}" bindinput="onAppealInput" />
<view class="field">
<text class="field-label">申诉理由类型</text>
<picker mode="selector" range="{{appealReasonTypeOptions}}" range-key="label" value="{{appealReasonTypeIndex}}" bindchange="onReasonTypeChange">
<view class="picker-value">{{appealReasonTypeOptions[appealReasonTypeIndex].label}}</view>
</picker>
</view>
<textarea class="textarea" placeholder="可补充申诉理由(选择快捷理由后可省略)" value="{{appealReason}}" bindinput="onAppealInput" />
<view class="field">
<text class="field-label">证据截图最多3张</text>
<view class="evidence-grid">
<view class="evidence-item" wx:for="{{appealEvidenceFiles}}" wx:key="index">
<image class="evidence-thumb" src="{{item}}" mode="aspectFill" />
<view class="evidence-remove" data-index="{{index}}" bindtap="removeEvidence">×</view>
</view>
<view class="evidence-add" wx:if="{{appealEvidenceFiles.length < 3}}" bindtap="chooseEvidence">
<text class="evidence-add-icon">+</text>
</view>
</view>
</view>
<view class="btn-row">
<button class="btn btn-primary" bindtap="submitAppeal">提交申诉</button>
<button class="btn btn-ghost" bindtap="cancelAppeal">取消</button>