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:
@@ -2324,6 +2324,114 @@ abstract class AppLocalizations {
|
||||
/// In zh, this message translates to:
|
||||
/// **'已开启'**
|
||||
String get settingsDoNotSellDisabled;
|
||||
|
||||
/// No description provided for @settingsFeedbackTitle.
|
||||
///
|
||||
/// In zh, this message translates to:
|
||||
/// **'意见反馈'**
|
||||
String get settingsFeedbackTitle;
|
||||
|
||||
/// No description provided for @feedbackTitle.
|
||||
///
|
||||
/// In zh, this message translates to:
|
||||
/// **'意见反馈'**
|
||||
String get feedbackTitle;
|
||||
|
||||
/// No description provided for @feedbackTypeLabel.
|
||||
///
|
||||
/// In zh, this message translates to:
|
||||
/// **'反馈类型'**
|
||||
String get feedbackTypeLabel;
|
||||
|
||||
/// No description provided for @feedbackTypeBug.
|
||||
///
|
||||
/// In zh, this message translates to:
|
||||
/// **'问题反馈'**
|
||||
String get feedbackTypeBug;
|
||||
|
||||
/// No description provided for @feedbackTypeSuggestion.
|
||||
///
|
||||
/// In zh, this message translates to:
|
||||
/// **'功能建议'**
|
||||
String get feedbackTypeSuggestion;
|
||||
|
||||
/// No description provided for @feedbackTypeOther.
|
||||
///
|
||||
/// In zh, this message translates to:
|
||||
/// **'其他'**
|
||||
String get feedbackTypeOther;
|
||||
|
||||
/// No description provided for @feedbackContentLabel.
|
||||
///
|
||||
/// In zh, this message translates to:
|
||||
/// **'反馈内容'**
|
||||
String get feedbackContentLabel;
|
||||
|
||||
/// No description provided for @feedbackContentHint.
|
||||
///
|
||||
/// In zh, this message translates to:
|
||||
/// **'请详细描述您的问题或建议...'**
|
||||
String get feedbackContentHint;
|
||||
|
||||
/// No description provided for @feedbackImagesLabel.
|
||||
///
|
||||
/// In zh, this message translates to:
|
||||
/// **'添加截图(最多3张)'**
|
||||
String get feedbackImagesLabel;
|
||||
|
||||
/// No description provided for @feedbackAnonymousLabel.
|
||||
///
|
||||
/// In zh, this message translates to:
|
||||
/// **'不上传我的个人信息'**
|
||||
String get feedbackAnonymousLabel;
|
||||
|
||||
/// No description provided for @feedbackAnonymousHint.
|
||||
///
|
||||
/// In zh, this message translates to:
|
||||
/// **'勾选后将不采集您的用户ID,仅采集设备信息用于问题排查'**
|
||||
String get feedbackAnonymousHint;
|
||||
|
||||
/// No description provided for @feedbackSubmit.
|
||||
///
|
||||
/// In zh, this message translates to:
|
||||
/// **'提交反馈'**
|
||||
String get feedbackSubmit;
|
||||
|
||||
/// No description provided for @feedbackSubmitting.
|
||||
///
|
||||
/// In zh, this message translates to:
|
||||
/// **'提交中...'**
|
||||
String get feedbackSubmitting;
|
||||
|
||||
/// No description provided for @feedbackSuccess.
|
||||
///
|
||||
/// In zh, this message translates to:
|
||||
/// **'感谢您的反馈,我们会尽快处理'**
|
||||
String get feedbackSuccess;
|
||||
|
||||
/// No description provided for @feedbackContentRequired.
|
||||
///
|
||||
/// In zh, this message translates to:
|
||||
/// **'请输入反馈内容'**
|
||||
String get feedbackContentRequired;
|
||||
|
||||
/// No description provided for @feedbackContentTooLong.
|
||||
///
|
||||
/// In zh, this message translates to:
|
||||
/// **'反馈内容不能超过500字'**
|
||||
String get feedbackContentTooLong;
|
||||
|
||||
/// No description provided for @feedbackTooManyImages.
|
||||
///
|
||||
/// In zh, this message translates to:
|
||||
/// **'最多只能上传3张图片'**
|
||||
String get feedbackTooManyImages;
|
||||
|
||||
/// No description provided for @feedbackImageTooLarge.
|
||||
///
|
||||
/// In zh, this message translates to:
|
||||
/// **'图片大小不能超过5MB'**
|
||||
String get feedbackImageTooLarge;
|
||||
}
|
||||
|
||||
class _AppLocalizationsDelegate
|
||||
|
||||
Reference in New Issue
Block a user