diff --git a/src/api/mall/product/comment.ts b/src/api/mall/product/comment.ts
new file mode 100644
index 0000000000000000000000000000000000000000..defdbb9309b7cb9c64141a064d7f3116ab7021cc
--- /dev/null
+++ b/src/api/mall/product/comment.ts
@@ -0,0 +1,49 @@
+import request from '@/config/axios'
+
+export interface CommentVO {
+ id: number
+ userId: number
+ userNickname: string
+ userAvatar: string
+ anonymous: boolean
+ orderId: number
+ orderItemId: number
+ spuId: number
+ spuName: string
+ skuId: number
+ visible: boolean
+ scores: number
+ descriptionScores: number
+ benefitScores: number
+ content: string
+ picUrls: string
+ replyStatus: boolean
+ replyUserId: number
+ replyContent: string
+ replyTime: Date
+}
+
+// 查询商品评论列表
+export const getCommentPage = async (params) => {
+ return await request.get({ url: `/product/comment/page`, params })
+}
+
+// 查询商品评论详情
+export const getComment = async (id: number) => {
+ return await request.get({ url: `/product/comment/get?id=` + id })
+}
+
+// 添加自评
+export const createComment = async (data: CommentVO) => {
+ return await request.post({ url: `/product/comment/create`, data })
+}
+
+// 显示 / 隐藏评论
+export const updateCommentVisible = async (data: any) => {
+ return await request.put({ url: `/product/comment/update-visible`, data })
+}
+
+// 商家回复
+export const replyComment = async (data: any) => {
+ return await request.put({ url: `/product/comment/reply`, data })
+}
diff --git a/src/views/mall/product/comment/CommentForm.vue b/src/views/mall/product/comment/CommentForm.vue
new file mode 100644
index 0000000000000000000000000000000000000000..85458c3db5ee1181ca85a1d12529cab75cf4e2b5
--- /dev/null
+++ b/src/views/mall/product/comment/CommentForm.vue
@@ -0,0 +1,198 @@
+
+
+
+
+
+
+
diff --git a/src/views/mall/product/comment/components/SkuTableSelect.vue b/src/views/mall/product/comment/components/SkuTableSelect.vue
new file mode 100644
index 0000000000000000000000000000000000000000..8bbc50cfcf3194922f00c9b406a650e27dba7370
--- /dev/null
+++ b/src/views/mall/product/comment/components/SkuTableSelect.vue
@@ -0,0 +1,94 @@
+
+
+
+
+
diff --git a/src/views/mall/product/comment/components/SpuTableSelect.vue b/src/views/mall/product/comment/components/SpuTableSelect.vue
new file mode 100644
index 0000000000000000000000000000000000000000..f8560aa34f56c09b1d52520007ef30a84645d3d6
--- /dev/null
+++ b/src/views/mall/product/comment/components/SpuTableSelect.vue
@@ -0,0 +1,167 @@
+
+
+
+
+
diff --git a/src/views/mall/product/comment/index.vue b/src/views/mall/product/comment/index.vue
new file mode 100644
index 0000000000000000000000000000000000000000..ecb519c92695b7b08c8e7ba371f9b752f8682634
--- /dev/null
+++ b/src/views/mall/product/comment/index.vue
@@ -0,0 +1,297 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 搜索
+
+
+
+ 重置
+
+
+
+ 添加虚拟评论
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
{{ scope.row.spuName }}
+
+
+
+
+
+
+
+
+ {{ scope.row.content }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 回复
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+