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:
@@ -1171,6 +1171,60 @@ class AppLocalizationsZh extends AppLocalizations {
|
||||
|
||||
@override
|
||||
String get settingsDoNotSellDisabled => '已开启';
|
||||
|
||||
@override
|
||||
String get settingsFeedbackTitle => '意见反馈';
|
||||
|
||||
@override
|
||||
String get feedbackTitle => '意见反馈';
|
||||
|
||||
@override
|
||||
String get feedbackTypeLabel => '反馈类型';
|
||||
|
||||
@override
|
||||
String get feedbackTypeBug => '问题反馈';
|
||||
|
||||
@override
|
||||
String get feedbackTypeSuggestion => '功能建议';
|
||||
|
||||
@override
|
||||
String get feedbackTypeOther => '其他';
|
||||
|
||||
@override
|
||||
String get feedbackContentLabel => '反馈内容';
|
||||
|
||||
@override
|
||||
String get feedbackContentHint => '请详细描述您的问题或建议...';
|
||||
|
||||
@override
|
||||
String get feedbackImagesLabel => '添加截图(最多3张)';
|
||||
|
||||
@override
|
||||
String get feedbackAnonymousLabel => '不上传我的个人信息';
|
||||
|
||||
@override
|
||||
String get feedbackAnonymousHint => '勾选后将不采集您的用户ID,仅采集设备信息用于问题排查';
|
||||
|
||||
@override
|
||||
String get feedbackSubmit => '提交反馈';
|
||||
|
||||
@override
|
||||
String get feedbackSubmitting => '提交中...';
|
||||
|
||||
@override
|
||||
String get feedbackSuccess => '感谢您的反馈,我们会尽快处理';
|
||||
|
||||
@override
|
||||
String get feedbackContentRequired => '请输入反馈内容';
|
||||
|
||||
@override
|
||||
String get feedbackContentTooLong => '反馈内容不能超过500字';
|
||||
|
||||
@override
|
||||
String get feedbackTooManyImages => '最多只能上传3张图片';
|
||||
|
||||
@override
|
||||
String get feedbackImageTooLarge => '图片大小不能超过5MB';
|
||||
}
|
||||
|
||||
/// The translations for Chinese, using the Han script (`zh_Hant`).
|
||||
@@ -2096,4 +2150,58 @@ class AppLocalizationsZhHant extends AppLocalizationsZh {
|
||||
|
||||
@override
|
||||
String get settingsDoNotSellDisabled => '已開啟';
|
||||
|
||||
@override
|
||||
String get settingsFeedbackTitle => '意見回饋';
|
||||
|
||||
@override
|
||||
String get feedbackTitle => '意見回饋';
|
||||
|
||||
@override
|
||||
String get feedbackTypeLabel => '回饋類型';
|
||||
|
||||
@override
|
||||
String get feedbackTypeBug => '問題回饋';
|
||||
|
||||
@override
|
||||
String get feedbackTypeSuggestion => '功能建議';
|
||||
|
||||
@override
|
||||
String get feedbackTypeOther => '其他';
|
||||
|
||||
@override
|
||||
String get feedbackContentLabel => '回饋內容';
|
||||
|
||||
@override
|
||||
String get feedbackContentHint => '請詳細描述您的問題或建議...';
|
||||
|
||||
@override
|
||||
String get feedbackImagesLabel => '添加截圖(最多3張)';
|
||||
|
||||
@override
|
||||
String get feedbackAnonymousLabel => '不上傳我的個人信息';
|
||||
|
||||
@override
|
||||
String get feedbackAnonymousHint => '勾選後將不採集您的用戶ID,僅採集設備信息用於問題排查';
|
||||
|
||||
@override
|
||||
String get feedbackSubmit => '提交回饋';
|
||||
|
||||
@override
|
||||
String get feedbackSubmitting => '提交中...';
|
||||
|
||||
@override
|
||||
String get feedbackSuccess => '感謝您的回饋,我們會盡快處理';
|
||||
|
||||
@override
|
||||
String get feedbackContentRequired => '請輸入回饋內容';
|
||||
|
||||
@override
|
||||
String get feedbackContentTooLong => '回饋內容不能超過500字';
|
||||
|
||||
@override
|
||||
String get feedbackTooManyImages => '最多只能上傳3張圖片';
|
||||
|
||||
@override
|
||||
String get feedbackImageTooLarge => '圖片大小不能超過5MB';
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user