diff --git a/frontend/pages/asset-detail/asset-detail.vue b/frontend/pages/asset-detail/asset-detail.vue index 9f5738b..4965885 100644 --- a/frontend/pages/asset-detail/asset-detail.vue +++ b/frontend/pages/asset-detail/asset-detail.vue @@ -210,6 +210,14 @@ + + + @@ -221,6 +229,7 @@ import { getAssetCoverRealUrl } from '@/utils/assetImageHelper.js'; import LikeUsersModal from '@/pages/components/LikeUsersModal.vue'; import ShareReportButtons from '@/pages/components/ShareReportButtons.vue'; import ShareModal from '@/pages/components/ShareModal.vue'; +import ReportModal from '@/pages/components/ReportModal.vue'; import LenticularCard from '@/components/lenticular/LenticularCard.vue'; import { useLenticularCraftTiltPreview } from '@/composables/useLenticularCraftTiltPreview.js'; import { @@ -429,6 +438,13 @@ const likeUsersActiveTab = ref(0); const showShareModal = ref(false); const shareCoverUrl = ref(''); const shareQrcodeUrl = ref(''); +// 举报弹窗(asset-detail 内显式持有,与 ShareReportButtons 内的 modal 互不影响,可由本页面其他位置触发) +const showReportModal = ref(false); + +// 举报提交回调(埋点/统计/事件总线用) +const handleReportSubmit = (payload) => { + console.log('[asset-detail] report submitted', payload); +}; // 全部点赞用户数据(从API加载) const allLikedUsers = ref([]); diff --git a/frontend/pages/components/FeedbackModal.vue b/frontend/pages/components/FeedbackModal.vue new file mode 100644 index 0000000..5218549 --- /dev/null +++ b/frontend/pages/components/FeedbackModal.vue @@ -0,0 +1,615 @@ + + + + + diff --git a/frontend/pages/components/ReportModal.vue b/frontend/pages/components/ReportModal.vue new file mode 100644 index 0000000..d9e20eb --- /dev/null +++ b/frontend/pages/components/ReportModal.vue @@ -0,0 +1,678 @@ + + + + + diff --git a/frontend/pages/components/ShareReportButtons.vue b/frontend/pages/components/ShareReportButtons.vue index 3440e29..521ff2c 100644 --- a/frontend/pages/components/ShareReportButtons.vue +++ b/frontend/pages/components/ShareReportButtons.vue @@ -20,11 +20,20 @@ :qrcodeUrl="shareQrcodeUrl" @close="showShareModal = false" /> + + + diff --git a/frontend/pages/profile/profile.vue b/frontend/pages/profile/profile.vue index 51ca540..5160d6e 100644 --- a/frontend/pages/profile/profile.vue +++ b/frontend/pages/profile/profile.vue @@ -1,388 +1,628 @@ - diff --git a/frontend/static/assetDetail/Vector.png b/frontend/static/assetDetail/Vector.png new file mode 100644 index 0000000..16f502a Binary files /dev/null and b/frontend/static/assetDetail/Vector.png differ diff --git a/frontend/static/assetDetail/text-bj.png b/frontend/static/assetDetail/text-bj.png new file mode 100644 index 0000000..b5de6ea Binary files /dev/null and b/frontend/static/assetDetail/text-bj.png differ diff --git a/frontend/static/assetDetail/topfans-fk.png b/frontend/static/assetDetail/topfans-fk.png new file mode 100644 index 0000000..437fa56 Binary files /dev/null and b/frontend/static/assetDetail/topfans-fk.png differ diff --git a/frontend/static/assetDetail/topfans-jb.png b/frontend/static/assetDetail/topfans-jb.png new file mode 100644 index 0000000..79a17ce Binary files /dev/null and b/frontend/static/assetDetail/topfans-jb.png differ diff --git a/frontend/static/background/profilebj.png b/frontend/static/background/profilebj.png new file mode 100644 index 0000000..1f30a7e Binary files /dev/null and b/frontend/static/background/profilebj.png differ diff --git a/frontend/utils/api.js b/frontend/utils/api.js index f4a1220..4bd30df 100644 --- a/frontend/utils/api.js +++ b/frontend/utils/api.js @@ -1018,3 +1018,30 @@ export const dashboardApi = { getUpgradeProgress: (starId) => dashboardRequest('/upgrade-progress', { star_id: starId }), } +// ==================== 举报 ==================== +// TODO: 等待后端接入资产举报接口 (建议路径: POST /api/v1/assets/:assetId/reports) +// 或通用举报接口 (建议路径: POST /api/v1/reports),参数: +// { target_type: 'asset', target_id, reason, content, image_url } +export function submitReportApi(data) { + return request({ + url: '/api/v1/assets/reports', + method: 'POST', + data + }) +} + +// ==================== 意见反馈 ==================== +// 鉴权:由 gateway AuthMiddleware 强制 JWT +// 路径:POST /api/v1/feedback +// 参数:{ type, content, image_url } +// - type: 'functionality' | 'ui' | 'suggestion' | 'other' +// - content: 用户填写的具体描述(可空) +// - image_url: 截图 URL(可空,需先走 OSS 上传) +export function submitFeedbackApi(data) { + return request({ + url: '/api/v1/feedback', + method: 'POST', + data + }) +} +