feat(feedback): implement user feedback collection system with email reporting

Backend:
- Add user_feedback table with RLS policy
- Create feedback submission API (multipart/form-data)
- Implement xlsx report generation with embedded images
- Add scheduled email delivery via Feishu SMTP
- Create HTML email templates (daily_report, no_feedback)

Frontend:
- Add feedback screen with type selection and image picker
- Support anonymous submission via skipAuth flag
- Collect device info and app version

Protocol:
- Document feedback API contract and error codes
- Update http-error-codes.md with FEEDBACK_* codes
This commit is contained in:
qzl
2026-04-20 12:49:54 +08:00
parent 913ed26f8d
commit 6a2a9d2c87
46 changed files with 4768 additions and 9 deletions
+19 -1
View File
@@ -487,5 +487,23 @@
"settingsDoNotSellTitle": "Personalized Ads",
"settingsDoNotSellDescription": "When off, your personal info won't be used for ad recommendations",
"settingsDoNotSellEnabled": "Off",
"settingsDoNotSellDisabled": "On"
"settingsDoNotSellDisabled": "On",
"settingsFeedbackTitle": "Feedback",
"feedbackTitle": "Feedback",
"feedbackTypeLabel": "Feedback Type",
"feedbackTypeBug": "Bug",
"feedbackTypeSuggestion": "Suggestion",
"feedbackTypeOther": "Other",
"feedbackContentLabel": "Content",
"feedbackContentHint": "Please describe your issue or suggestion in detail...",
"feedbackImagesLabel": "Add Screenshots (max 3)",
"feedbackAnonymousLabel": "Do not upload my personal information",
"feedbackAnonymousHint": "If checked, your user ID will not be collected. Device info will still be collected for troubleshooting.",
"feedbackSubmit": "Submit Feedback",
"feedbackSubmitting": "Submitting...",
"feedbackSuccess": "Thank you for your feedback. We will process it soon.",
"feedbackContentRequired": "Please enter feedback content",
"feedbackContentTooLong": "Feedback content cannot exceed 500 characters",
"feedbackTooManyImages": "Maximum 3 images allowed",
"feedbackImageTooLarge": "Image size cannot exceed 5MB"
}