From 77378e395b619524123f8146a2d12b0137862169 Mon Sep 17 00:00:00 2001 From: Leo <98382335+gaoziman@users.noreply.github.com> Date: Wed, 15 Oct 2025 21:02:38 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8A=9F=E8=83=BD=EF=BC=9A=E6=96=B0=E5=A2=9E?= =?UTF-8?q?=E9=9D=9E=E9=81=97=E7=AE=A1=E7=90=86=E6=A8=A1=E5=9D=97=E7=9B=B8?= =?UTF-8?q?=E5=85=B3=E9=A1=B5=E9=9D=A2=E5=92=8CAPI?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增传承人管理、新闻资讯管理、活动管理、统计分析等页面 - 新增非遗相关API接口定义和类型 - 新增IconPreloader图标预加载组件 - 完善非遗管理业务功能模块 --- src/components/common/IconPreloader.vue | 24 + src/service/api/heritage/comments/index.ts | 68 + src/service/api/heritage/comments/types.ts | 89 ++ src/service/api/heritage/events/index.ts | 77 + src/service/api/heritage/events/types.ts | 106 ++ src/service/api/heritage/inheritors/index.ts | 77 + src/service/api/heritage/inheritors/types.ts | 133 ++ src/service/api/heritage/items/index.ts | 77 + src/service/api/heritage/items/types.ts | 134 ++ src/service/api/heritage/news/index.ts | 77 + src/service/api/heritage/news/types.ts | 111 ++ src/service/api/heritage/statistics/index.ts | 56 + src/service/api/heritage/statistics/types.ts | 66 + src/service/api/heritage/users/index.ts | 77 + src/service/api/heritage/users/types.ts | 109 ++ src/views/heritage/events/index.vue | 1235 +++++++++++++++ src/views/heritage/inheritors/index.vue | 1422 ++++++++++++++++++ src/views/heritage/news/index.vue | 1188 +++++++++++++++ src/views/heritage/statistics/index.vue | 715 +++++++++ 19 files changed, 5841 insertions(+) create mode 100644 src/components/common/IconPreloader.vue create mode 100644 src/service/api/heritage/comments/index.ts create mode 100644 src/service/api/heritage/comments/types.ts create mode 100644 src/service/api/heritage/events/index.ts create mode 100644 src/service/api/heritage/events/types.ts create mode 100644 src/service/api/heritage/inheritors/index.ts create mode 100644 src/service/api/heritage/inheritors/types.ts create mode 100644 src/service/api/heritage/items/index.ts create mode 100644 src/service/api/heritage/items/types.ts create mode 100644 src/service/api/heritage/news/index.ts create mode 100644 src/service/api/heritage/news/types.ts create mode 100644 src/service/api/heritage/statistics/index.ts create mode 100644 src/service/api/heritage/statistics/types.ts create mode 100644 src/service/api/heritage/users/index.ts create mode 100644 src/service/api/heritage/users/types.ts create mode 100644 src/views/heritage/events/index.vue create mode 100644 src/views/heritage/inheritors/index.vue create mode 100644 src/views/heritage/news/index.vue create mode 100644 src/views/heritage/statistics/index.vue diff --git a/src/components/common/IconPreloader.vue b/src/components/common/IconPreloader.vue new file mode 100644 index 0000000..1a1f17f --- /dev/null +++ b/src/components/common/IconPreloader.vue @@ -0,0 +1,24 @@ + + + diff --git a/src/service/api/heritage/comments/index.ts b/src/service/api/heritage/comments/index.ts new file mode 100644 index 0000000..898d52e --- /dev/null +++ b/src/service/api/heritage/comments/index.ts @@ -0,0 +1,68 @@ +import { request } from '../../../http' +import type { + CommentAdminBo, + CommentAdminDetailVo, + CommentAdminQueryBo, + PageCommentAdminVo, +} from './types' + +// 重新导出类型供外部使用 +export type { + CommentAdminBo, + CommentAdminDetailVo, + CommentAdminQueryBo, + CommentAdminSearchForm, + CommentAdminVo, + PageCommentAdminVo, +} from './types' + +/** + * 分页查询评论列表 + */ +export function getCommentAdminList(params: CommentAdminQueryBo) { + return request.Get>('/coder/admin/comment/listPage', { params }) +} + +/** + * 查看评论详情 + */ +export function getCommentAdminDetail(id: string) { + return request.Get>(`/coder/admin/comment/detail/${id}`) +} + +/** + * 审核评论 + */ +export function auditComment(data: CommentAdminBo) { + return request.Put>('/coder/admin/comment/audit', data) +} + +/** + * 批量审核评论 + */ +export function batchAuditComments(ids: string[], status: number) { + return request.Put>('/coder/admin/comment/batchAudit', ids, { + params: { status }, + }) +} + +/** + * 删除评论 + */ +export function deleteComment(id: string) { + return request.Delete>(`/coder/admin/comment/delete/${id}`) +} + +/** + * 批量删除评论 + */ +export function batchDeleteComments(ids: string[]) { + return request.Delete>('/coder/admin/comment/batchDelete', { data: ids }) +} + +/** + * 获取待审核评论数量 + */ +export function getPendingCommentCount() { + return request.Get>('/coder/admin/comment/pendingCount') +} diff --git a/src/service/api/heritage/comments/types.ts b/src/service/api/heritage/comments/types.ts new file mode 100644 index 0000000..5db3e3b --- /dev/null +++ b/src/service/api/heritage/comments/types.ts @@ -0,0 +1,89 @@ +/** + * 评论管理查询参数类型 + */ +export interface CommentAdminQueryBo { + pageNum?: number + pageSize?: number + userId?: string + targetType?: string + targetId?: string + content?: string + status?: number + startTime?: string + endTime?: string + userKeyword?: string +} + +/** + * 评论管理列表VO + */ +export interface CommentAdminVo { + id: string + userId: string + username: string + nickname: string + avatar?: string + targetType: string + targetId: string + targetTitle: string + content: string + rating?: number + parentId: string + likeCount: number + status: number + createTime: string + updateTime: string +} + +/** + * 评论管理详情VO + */ +export interface CommentAdminDetailVo { + id: string + userId: string + username: string + nickname: string + avatar?: string + targetType: string + targetId: string + targetTitle: string + content: string + rating?: number + parentId: string + likeCount: number + status: number + createTime: string + updateTime: string +} + +/** + * 评论管理BO(审核) + */ +export interface CommentAdminBo { + id: string + status: number + remark?: string +} + +/** + * 分页结果类型 + */ +export interface PageCommentAdminVo { + records: CommentAdminVo[] + total: number + size: number + current: number + pages: number +} + +/** + * 评论搜索表单类型 + */ +export interface CommentAdminSearchForm { + userId?: string + targetType?: string | '' + targetId?: string + content?: string | '' + status?: number | null + userKeyword?: string | '' +} diff --git a/src/service/api/heritage/events/index.ts b/src/service/api/heritage/events/index.ts new file mode 100644 index 0000000..4e9b109 --- /dev/null +++ b/src/service/api/heritage/events/index.ts @@ -0,0 +1,77 @@ +import { request } from '../../../http' +import type { + EventAdminBo, + EventAdminDetailVo, + EventAdminQueryBo, + PageEventAdminVo, +} from './types' + +// 重新导出类型供外部使用 +export type { + EventAdminBo, + EventAdminDetailVo, + EventAdminQueryBo, + EventAdminSearchForm, + EventAdminVo, + PageEventAdminVo, +} from './types' + +/** + * 分页查询活动列表 + */ +export function getEventAdminList(params: EventAdminQueryBo) { + return request.Get>('/coder/admin/event/listPage', { params }) +} + +/** + * 查看活动详情 + */ +export function getEventAdminDetail(id: string) { + return request.Get>(`/coder/admin/event/detail/${id}`) +} + +/** + * 新增活动 + */ +export function addEventAdmin(data: EventAdminBo) { + return request.Post>('/coder/admin/event/add', data) +} + +/** + * 编辑活动 + */ +export function updateEventAdmin(data: EventAdminBo) { + return request.Put>('/coder/admin/event/edit', data) +} + +/** + * 删除活动 + */ +export function deleteEventAdmin(id: string) { + return request.Delete>(`/coder/admin/event/delete/${id}`) +} + +/** + * 批量删除活动 + */ +export function batchDeleteEventAdmin(ids: string[]) { + return request.Delete>('/coder/admin/event/batchDelete', { data: ids }) +} + +/** + * 修改发布状态 + */ +export function changeEventPublishStatus(id: string, publishStatus: number) { + return request.Put>('/coder/admin/event/changePublishStatus', null, { + params: { id, publishStatus }, + }) +} + +/** + * 修改活动状态 + */ +export function changeEventStatus(id: string, status: string) { + return request.Put>('/coder/admin/event/changeEventStatus', null, { + params: { id, status }, + }) +} diff --git a/src/service/api/heritage/events/types.ts b/src/service/api/heritage/events/types.ts new file mode 100644 index 0000000..80d5834 --- /dev/null +++ b/src/service/api/heritage/events/types.ts @@ -0,0 +1,106 @@ +/** + * 活动管理查询参数类型 + */ +export interface EventAdminQueryBo { + pageNum?: number + pageSize?: number + title?: string + location?: string + status?: string + keyword?: string + publishStatus?: number + startTimeBegin?: string + startTimeEnd?: string + sortField?: string + sortOrder?: string +} + +/** + * 活动管理列表VO + */ +export interface EventAdminVo { + id: string + title: string + summary?: string + coverImage?: string + location?: string + startTime?: string + endTime?: string + maxParticipants?: number + currentParticipants?: number + registrationStart?: string + registrationEnd?: string + status: string + viewCount?: number + publishStatus: number + createBy?: string + createTime?: string + updateBy?: string + updateTime?: string +} + +/** + * 活动管理详情VO + */ +export interface EventAdminDetailVo { + id: string + title: string + summary?: string + content?: string + coverImage?: string + location?: string + startTime?: string + endTime?: string + maxParticipants?: number + currentParticipants?: number + registrationStart?: string + registrationEnd?: string + status: string + viewCount?: number + publishStatus: number + createBy?: string + createTime?: string + updateBy?: string + updateTime?: string +} + +/** + * 活动管理BO(新增/编辑) + */ +export interface EventAdminBo { + id?: string + title: string + summary?: string + content?: string + coverImage?: string + location?: string + startTime?: string + endTime?: string + maxParticipants?: number + registrationStart?: string + registrationEnd?: string + status?: string + publishStatus?: number +} + +/** + * 分页结果类型 + */ +export interface PageEventAdminVo { + records: EventAdminVo[] + total: number + size: number + current: number + pages: number +} + +/** + * 活动搜索表单类型 + */ +export interface EventAdminSearchForm { + title?: string + location?: string + status?: string + keyword?: string + publishStatus?: number +} diff --git a/src/service/api/heritage/inheritors/index.ts b/src/service/api/heritage/inheritors/index.ts new file mode 100644 index 0000000..edab84b --- /dev/null +++ b/src/service/api/heritage/inheritors/index.ts @@ -0,0 +1,77 @@ +import { request } from '../../../http' +import type { + InheritorBo, + InheritorDetailVo, + InheritorQueryBo, + PageInheritorVo, +} from './types' + +// 重新导出类型供外部使用 +export type { + InheritorBo, + InheritorDetailVo, + InheritorQueryBo, + InheritorSearchForm, + InheritorVo, + PageInheritorVo, +} from './types' + +/** + * 分页查询传承人列表 + */ +export function getInheritorList(params: InheritorQueryBo) { + return request.Get>('/coder/admin/inheritor/listPage', { params }) +} + +/** + * 查看传承人详情 + */ +export function getInheritorDetail(id: string) { + return request.Get>(`/coder/admin/inheritor/detail/${id}`) +} + +/** + * 新增传承人 + */ +export function addInheritor(data: InheritorBo) { + return request.Post>('/coder/admin/inheritor/add', data) +} + +/** + * 编辑传承人 + */ +export function updateInheritor(data: InheritorBo) { + return request.Put>('/coder/admin/inheritor/edit', data) +} + +/** + * 删除传承人 + */ +export function deleteInheritor(id: string) { + return request.Delete>(`/coder/admin/inheritor/delete/${id}`) +} + +/** + * 批量删除传承人 + */ +export function batchDeleteInheritors(ids: string[]) { + return request.Delete>('/coder/admin/inheritor/batchDelete', { data: ids }) +} + +/** + * 修改发布状态 + */ +export function changePublishStatus(id: string, publishStatus: number) { + return request.Put>('/coder/admin/inheritor/changePublishStatus', null, { + params: { id, publishStatus }, + }) +} + +/** + * 设置精选状态 + */ +export function setFeatured(id: string, isFeatured: number) { + return request.Put>('/coder/admin/inheritor/setFeatured', null, { + params: { id, isFeatured }, + }) +} diff --git a/src/service/api/heritage/inheritors/types.ts b/src/service/api/heritage/inheritors/types.ts new file mode 100644 index 0000000..070715a --- /dev/null +++ b/src/service/api/heritage/inheritors/types.ts @@ -0,0 +1,133 @@ +/** + * 传承人管理查询参数类型 + */ +export interface InheritorQueryBo { + pageNum?: number + pageSize?: number + name?: string + nameEn?: string + gender?: number + heritageId?: string + heritageName?: string + level?: string + province?: string + city?: string + keyword?: string + publishStatus?: number + isFeatured?: number + sortField?: string + sortOrder?: string +} + +/** + * 传承人管理列表VO + */ +export interface InheritorVo { + id: string + name: string + nameEn?: string + gender?: number + birthYear?: number + avatar?: string + heritageId?: string + heritageName?: string + level?: string + province?: string + city?: string + introduction?: string + viewCount?: number + likeCount?: number + isFeatured: number + sortOrder?: number + publishStatus: number + createBy?: string + createTime?: string + updateBy?: string + updateTime?: string +} + +/** + * 传承人管理详情VO + */ +export interface InheritorDetailVo { + id: string + name: string + nameEn?: string + gender?: number + birthYear?: number + avatar?: string + heritageId?: string + heritageName?: string + level?: string + province?: string + city?: string + introduction?: string + story?: string + achievements?: string + works?: string + images?: string + videoUrl?: string + viewCount?: number + likeCount?: number + isFeatured: number + sortOrder?: number + publishStatus: number + createBy?: string + createTime?: string + updateBy?: string + updateTime?: string +} + +/** + * 传承人管理BO(新增/编辑) + */ +export interface InheritorBo { + id?: string + name: string + nameEn?: string + gender?: number + birthYear?: number + avatar?: string + heritageId?: string + heritageName?: string + level?: string + province?: string + city?: string + introduction?: string + story?: string + achievements?: string + works?: string + images?: string + videoUrl?: string + isFeatured?: number + sortOrder?: number + publishStatus?: number +} + +/** + * 分页结果类型 + */ +export interface PageInheritorVo { + records: InheritorVo[] + total: number + size: number + current: number + pages: number +} + +/** + * 传承人搜索表单类型 + */ +export interface InheritorSearchForm { + name?: string + nameEn?: string + gender?: number + heritageId?: string + heritageName?: string + level?: string + province?: string + city?: string + keyword?: string + publishStatus?: number + isFeatured?: number +} diff --git a/src/service/api/heritage/items/index.ts b/src/service/api/heritage/items/index.ts new file mode 100644 index 0000000..5686995 --- /dev/null +++ b/src/service/api/heritage/items/index.ts @@ -0,0 +1,77 @@ +import { request } from '../../../http' +import type { + HeritageItemBo, + HeritageItemDetailVo, + HeritageItemQueryBo, + PageHeritageItemVo, +} from './types' + +// 重新导出类型供外部使用 +export type { + HeritageItemBo, + HeritageItemDetailVo, + HeritageItemQueryBo, + HeritageItemSearchForm, + HeritageItemVo, + PageHeritageItemVo, +} from './types' + +/** + * 分页查询非遗项目列表 + */ +export function getHeritageItemList(params: HeritageItemQueryBo) { + return request.Get>('/coder/admin/heritage/listPage', { params }) +} + +/** + * 查看非遗项目详情 + */ +export function getHeritageItemDetail(id: string) { + return request.Get>(`/coder/admin/heritage/detail/${id}`) +} + +/** + * 新增非遗项目 + */ +export function addHeritageItem(data: HeritageItemBo) { + return request.Post>('/coder/admin/heritage/add', data) +} + +/** + * 编辑非遗项目 + */ +export function updateHeritageItem(data: HeritageItemBo) { + return request.Put>('/coder/admin/heritage/edit', data) +} + +/** + * 删除非遗项目 + */ +export function deleteHeritageItem(id: string) { + return request.Delete>(`/coder/admin/heritage/delete/${id}`) +} + +/** + * 批量删除非遗项目 + */ +export function batchDeleteHeritageItems(ids: string[]) { + return request.Delete>('/coder/admin/heritage/batchDelete', { data: ids }) +} + +/** + * 修改发布状态 + */ +export function changePublishStatus(id: string, publishStatus: number) { + return request.Put>('/coder/admin/heritage/changePublishStatus', null, { + params: { id, publishStatus }, + }) +} + +/** + * 设置精选状态 + */ +export function setFeatured(id: string, isFeatured: number) { + return request.Put>('/coder/admin/heritage/setFeatured', null, { + params: { id, isFeatured }, + }) +} diff --git a/src/service/api/heritage/items/types.ts b/src/service/api/heritage/items/types.ts new file mode 100644 index 0000000..c5a729a --- /dev/null +++ b/src/service/api/heritage/items/types.ts @@ -0,0 +1,134 @@ +/** + * 非遗项目管理查询参数类型 + */ +export interface HeritageItemQueryBo { + pageNum?: number + pageSize?: number + name?: string + nameEn?: string + category?: string + level?: string + province?: string + city?: string + status?: string + tag?: string + keyword?: string + publishStatus?: number + isFeatured?: number + sortField?: string + sortOrder?: string +} + +/** + * 非遗项目管理列表VO + */ +export interface HeritageItemVo { + id: string + name: string + nameEn?: string + category: string + level: string + province?: string + city?: string + description?: string + coverImage?: string + tags?: string + status: string + viewCount?: number + likeCount?: number + favoriteCount?: number + commentCount?: number + isFeatured: number + sortOrder?: number + publishStatus: number + createBy?: string + createTime?: string + updateBy?: string + updateTime?: string +} + +/** + * 非遗项目管理详情VO + */ +export interface HeritageItemDetailVo { + id: string + name: string + nameEn?: string + category: string + level: string + province?: string + city?: string + description?: string + history?: string + skills?: string + significance?: string + coverImage?: string + images?: string + videoUrl?: string + tags?: string + status: string + viewCount?: number + likeCount?: number + favoriteCount?: number + commentCount?: number + isFeatured: number + sortOrder?: number + publishStatus: number + createBy?: string + createTime?: string + updateBy?: string + updateTime?: string +} + +/** + * 非遗项目管理BO(新增/编辑) + */ +export interface HeritageItemBo { + id?: string + name: string + nameEn?: string + category: string + level: string + province?: string + city?: string + description?: string + history?: string + skills?: string + significance?: string + coverImage?: string + images?: string + videoUrl?: string + tags?: string + status?: string + isFeatured?: number + sortOrder?: number + publishStatus?: number +} + +/** + * 分页结果类型 + */ +export interface PageHeritageItemVo { + records: HeritageItemVo[] + total: number + size: number + current: number + pages: number +} + +/** + * 非遗项目搜索表单类型 + */ +export interface HeritageItemSearchForm { + name?: string + nameEn?: string + category?: string + level?: string + province?: string + city?: string + status?: string + tag?: string + keyword?: string + publishStatus?: number + isFeatured?: number +} diff --git a/src/service/api/heritage/news/index.ts b/src/service/api/heritage/news/index.ts new file mode 100644 index 0000000..63a3bb0 --- /dev/null +++ b/src/service/api/heritage/news/index.ts @@ -0,0 +1,77 @@ +import { request } from '../../../http' +import type { + NewsBo, + NewsDetailVo, + NewsQueryBo, + PageNewsVo, +} from './types' + +// 重新导出类型供外部使用 +export type { + NewsBo, + NewsDetailVo, + NewsQueryBo, + NewsSearchForm, + NewsVo, + PageNewsVo, +} from './types' + +/** + * 分页查询新闻资讯列表 + */ +export function getNewsList(params: NewsQueryBo) { + return request.Get>('/coder/admin/news/listPage', { params }) +} + +/** + * 查看新闻资讯详情 + */ +export function getNewsDetail(id: string) { + return request.Get>(`/coder/admin/news/detail/${id}`) +} + +/** + * 新增新闻资讯 + */ +export function addNews(data: NewsBo) { + return request.Post>('/coder/admin/news/add', data) +} + +/** + * 编辑新闻资讯 + */ +export function updateNews(data: NewsBo) { + return request.Put>('/coder/admin/news/edit', data) +} + +/** + * 删除新闻资讯 + */ +export function deleteNews(id: string) { + return request.Delete>(`/coder/admin/news/delete/${id}`) +} + +/** + * 批量删除新闻资讯 + */ +export function batchDeleteNews(ids: string[]) { + return request.Delete>('/coder/admin/news/batchDelete', { data: ids }) +} + +/** + * 修改发布状态 + */ +export function changePublishStatus(id: string, publishStatus: number) { + return request.Put>('/coder/admin/news/changePublishStatus', null, { + params: { id, publishStatus }, + }) +} + +/** + * 设置置顶状态 + */ +export function setTop(id: string, isTop: number) { + return request.Put>('/coder/admin/news/setTop', null, { + params: { id, isTop }, + }) +} diff --git a/src/service/api/heritage/news/types.ts b/src/service/api/heritage/news/types.ts new file mode 100644 index 0000000..b7f209a --- /dev/null +++ b/src/service/api/heritage/news/types.ts @@ -0,0 +1,111 @@ +/** + * 新闻资讯管理查询参数类型 + */ +export interface NewsQueryBo { + pageNum?: number + pageSize?: number + title?: string + author?: string + source?: string + category?: string + tag?: string + keyword?: string + isTop?: number + publishStatus?: number + publishTimeStart?: string + publishTimeEnd?: string + sortField?: string + sortOrder?: string +} + +/** + * 新闻资讯管理列表VO + */ +export interface NewsVo { + id: string + title: string + summary?: string + coverImage?: string + author?: string + source?: string + category?: string + tags?: string + viewCount?: number + likeCount?: number + isTop: number + publishTime?: string + publishStatus: number + createBy?: string + createTime?: string + updateBy?: string + updateTime?: string +} + +/** + * 新闻资讯管理详情VO + */ +export interface NewsDetailVo { + id: string + title: string + summary?: string + content?: string + coverImage?: string + author?: string + source?: string + category?: string + tags?: string + viewCount?: number + likeCount?: number + isTop: number + publishTime?: string + publishStatus: number + createBy?: string + createTime?: string + updateBy?: string + updateTime?: string +} + +/** + * 新闻资讯管理BO(新增/编辑) + */ +export interface NewsBo { + id?: string + title: string + summary?: string + content?: string + coverImage?: string + author?: string + source?: string + category?: string + tags?: string + isTop?: number + publishTime?: string + publishStatus?: number +} + +/** + * 分页结果类型 + */ +export interface PageNewsVo { + records: NewsVo[] + total: number + size: number + current: number + pages: number +} + +/** + * 新闻资讯搜索表单类型 + */ +export interface NewsSearchForm { + title?: string + author?: string + source?: string + category?: string + tag?: string + keyword?: string + isTop?: number + publishStatus?: number + publishTimeStart?: string + publishTimeEnd?: string +} diff --git a/src/service/api/heritage/statistics/index.ts b/src/service/api/heritage/statistics/index.ts new file mode 100644 index 0000000..df272d9 --- /dev/null +++ b/src/service/api/heritage/statistics/index.ts @@ -0,0 +1,56 @@ +import { request } from '../../../http' +import type { + RankingVo, + StatisticsVo, + TrendVo, +} from './types' + +// 重新导出类型供外部使用 +export type { + RankingVo, + StatisticsVo, + TrendVo, +} from './types' + +/** + * 获取核心统计数据 + */ +export function getStatistics() { + return request.Get>('/coder/admin/statistics/core') +} + +/** + * 获取用户增长趋势 + */ +export function getUserTrend(days: number = 7) { + return request.Get>('/coder/admin/statistics/userTrend', { + params: { days }, + }) +} + +/** + * 获取内容发布趋势 + */ +export function getContentTrend(days: number = 7) { + return request.Get>('/coder/admin/statistics/contentTrend', { + params: { days }, + }) +} + +/** + * 获取热门非遗项目排行榜 + */ +export function getHeritageRanking(type: string = 'view', limit: number = 10) { + return request.Get>('/coder/admin/statistics/heritageRanking', { + params: { type, limit }, + }) +} + +/** + * 获取活跃用户排行榜 + */ +export function getActiveUserRanking(limit: number = 10) { + return request.Get>('/coder/admin/statistics/activeUserRanking', { + params: { limit }, + }) +} diff --git a/src/service/api/heritage/statistics/types.ts b/src/service/api/heritage/statistics/types.ts new file mode 100644 index 0000000..d81f0a3 --- /dev/null +++ b/src/service/api/heritage/statistics/types.ts @@ -0,0 +1,66 @@ +/** + * 统计数据VO + */ +export interface StatisticsVo { + // 非遗项目统计 + heritageTotal: number + heritageTodayCount: number + + // 传承人统计 + inheritorTotal: number + inheritorTodayCount: number + + // 用户统计 + userTotal: number + userTodayCount: number + + // 活动统计 + eventTotal: number + eventTodayCount: number + + // 新闻统计 + newsTotal: number + newsTodayCount: number + + // 评论统计 + commentTotal: number + commentTodayCount: number + commentPendingCount: number + + // 点赞统计 + likeTotal: number + likeTodayCount: number + + // 收藏统计 + favoriteTotal: number + favoriteTodayCount: number + + // 浏览统计 + viewTotal: number + viewTodayCount: number + + // 活动报名统计 + registrationTotal: number + registrationTodayCount: number +} + +/** + * 趋势数据VO + */ +export interface TrendVo { + date: string + value: number +} + +/** + * 排行榜数据VO + */ +export interface RankingVo { + rank: number + id: string + title: string + type: string + coverImage?: string + value: number + valueType: string +} diff --git a/src/service/api/heritage/users/index.ts b/src/service/api/heritage/users/index.ts new file mode 100644 index 0000000..0367315 --- /dev/null +++ b/src/service/api/heritage/users/index.ts @@ -0,0 +1,77 @@ +import { request } from '../../../http' +import type { + PageUserAdminVo, + UserAdminBo, + UserAdminDetailVo, + UserAdminQueryBo, +} from './types' + +// 重新导出类型供外部使用 +export type { + PageUserAdminVo, + UserAdminBo, + UserAdminDetailVo, + UserAdminQueryBo, + UserAdminSearchForm, + UserAdminVo, +} from './types' + +/** + * 分页查询前台用户列表 + */ +export function getUserAdminList(params: UserAdminQueryBo) { + return request.Get>('/coder/admin/user/listPage', { params }) +} + +/** + * 查看前台用户详情 + */ +export function getUserAdminDetail(id: string) { + return request.Get>(`/coder/admin/user/detail/${id}`) +} + +/** + * 新增前台用户 + */ +export function addUserAdmin(data: UserAdminBo) { + return request.Post>('/coder/admin/user/add', data) +} + +/** + * 编辑前台用户 + */ +export function updateUserAdmin(data: UserAdminBo) { + return request.Put>('/coder/admin/user/edit', data) +} + +/** + * 删除前台用户 + */ +export function deleteUserAdmin(id: string) { + return request.Delete>(`/coder/admin/user/delete/${id}`) +} + +/** + * 批量删除前台用户 + */ +export function batchDeleteUserAdmin(ids: string[]) { + return request.Delete>('/coder/admin/user/batchDelete', { data: ids }) +} + +/** + * 修改用户状态 + */ +export function changeUserStatus(id: string, status: number) { + return request.Put>('/coder/admin/user/changeStatus', null, { + params: { id, status }, + }) +} + +/** + * 重置用户密码 + */ +export function resetUserPassword(id: string, newPassword: string) { + return request.Put>('/coder/admin/user/resetPassword', null, { + params: { id, newPassword }, + }) +} diff --git a/src/service/api/heritage/users/types.ts b/src/service/api/heritage/users/types.ts new file mode 100644 index 0000000..1497bc7 --- /dev/null +++ b/src/service/api/heritage/users/types.ts @@ -0,0 +1,109 @@ +/** + * 前台用户管理查询参数类型 + */ +export interface UserAdminQueryBo { + pageNum?: number + pageSize?: number + username?: string + nickname?: string + phone?: string + email?: string + keyword?: string + status?: number + gender?: number + province?: string + city?: string + createTimeBegin?: string + createTimeEnd?: string + sortField?: string + sortOrder?: string +} + +/** + * 前台用户管理列表VO + */ +export interface UserAdminVo { + id: string + username: string + nickname?: string + avatar?: string + email?: string + phone?: string + gender?: number + birthday?: string + province?: string + city?: string + status: number + loginIp?: string + loginTime?: string + createTime?: string + updateTime?: string + remark?: string +} + +/** + * 前台用户管理详情VO + */ +export interface UserAdminDetailVo { + id: string + username: string + nickname?: string + avatar?: string + email?: string + phone?: string + gender?: number + birthday?: string + province?: string + city?: string + status: number + loginIp?: string + loginTime?: string + createTime?: string + updateTime?: string + remark?: string +} + +/** + * 前台用户管理BO(新增/编辑) + */ +export interface UserAdminBo { + id?: string + username: string + password?: string + nickname?: string + avatar?: string + email?: string + phone?: string + gender?: number + birthday?: string + province?: string + city?: string + status?: number + remark?: string +} + +/** + * 分页结果类型 + */ +export interface PageUserAdminVo { + records: UserAdminVo[] + total: number + size: number + current: number + pages: number +} + +/** + * 前台用户搜索表单类型 + */ +export interface UserAdminSearchForm { + username?: string + nickname?: string + phone?: string + email?: string + keyword?: string + status?: number + gender?: number + province?: string + city?: string +} diff --git a/src/views/heritage/events/index.vue b/src/views/heritage/events/index.vue new file mode 100644 index 0000000..d67a5f2 --- /dev/null +++ b/src/views/heritage/events/index.vue @@ -0,0 +1,1235 @@ + + + + + diff --git a/src/views/heritage/inheritors/index.vue b/src/views/heritage/inheritors/index.vue new file mode 100644 index 0000000..45c2303 --- /dev/null +++ b/src/views/heritage/inheritors/index.vue @@ -0,0 +1,1422 @@ + + + + + diff --git a/src/views/heritage/news/index.vue b/src/views/heritage/news/index.vue new file mode 100644 index 0000000..96320ac --- /dev/null +++ b/src/views/heritage/news/index.vue @@ -0,0 +1,1188 @@ + + + + + diff --git a/src/views/heritage/statistics/index.vue b/src/views/heritage/statistics/index.vue new file mode 100644 index 0000000..a71d1d3 --- /dev/null +++ b/src/views/heritage/statistics/index.vue @@ -0,0 +1,715 @@ + + + + +