www:新增问题反馈功能;dashboard:适配问题反馈功能,可以在后台系统和用户沟通

This commit is contained in:
eafonyang
2026-08-20 16:42:01 +08:00
parent 5ae979f7e1
commit 3702ad4163
31 changed files with 1956 additions and 11 deletions
+6 -1
View File
@@ -50,5 +50,10 @@ export function useRequest() {
return request<T>(url, { method: 'POST', body });
}
return { request, get, post };
/** POST multipart/form-data(文件上传;ofetch 自动设置 boundary */
function postForm<T = unknown>(url: string, body: FormData) {
return request<T>(url, { method: 'POST', body });
}
return { request, get, post, postForm };
}
+31 -1
View File
@@ -11,6 +11,8 @@ import type {
AboutConfig,
SupportConfig,
ContactConfig,
SupportFeedbackItem,
SupportFeedbackMessage,
PageSeo
} from '~/types/site';
@@ -81,5 +83,33 @@ export function useSiteApi() {
return useRequest().post<null>('/site/contact/submit', { form_data: formData });
}
return { getGlobal, getNav, getSections, getI18n, getProducts, getNews, getNewsDetail, getPageConfig, getPageSeo, getContact, submitContact };
/** 提交问题反馈(multipart/form-dataproduct_id / description / email / log_file[可选] */
function submitSupportFeedback(formData: FormData) {
return useRequest().postForm<{ feedback_no: string }>('/site/support/feedback', formData);
}
/** 按邮箱或反馈编号查询问题反馈 */
function getSupportFeedbacks(params: { email?: string; feedback_no?: string }) {
return get<{ items: SupportFeedbackItem[]; total: number }>('/site/support/feedbacks', params);
}
/** 拉取反馈对话消息(含当前反馈状态,便于轮询时同步状态) */
function getFeedbackMessages(feedbackNo: string, email: string, sinceId?: number) {
const params: Record<string, unknown> = { email };
if (sinceId && sinceId > 0) params.since_id = sinceId;
return get<{ items: SupportFeedbackMessage[]; total: number; status: string }>(
`/site/support/feedbacks/${encodeURIComponent(feedbackNo)}/messages`,
params,
);
}
/** 用户发送反馈对话消息 */
function sendFeedbackMessage(feedbackNo: string, email: string, content: string) {
return useRequest().post<{ items: SupportFeedbackMessage[]; total: number }>(
`/site/support/feedbacks/${encodeURIComponent(feedbackNo)}/messages`,
{ email, content },
);
}
return { getGlobal, getNav, getSections, getI18n, getProducts, getNews, getNewsDetail, getPageConfig, getPageSeo, getContact, submitContact, submitSupportFeedback, getSupportFeedbacks, getFeedbackMessages, sendFeedbackMessage };
}