将 web-admin 从子模块改为仓库内普通目录,便于单仓克隆与维护。
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
1 parent
2e9d020d50
commit
c87732fcd5
515 files changed
+74372
-1
No files matched your search
@@ -0,0 +1,825 @@
|
||||
import request from '@/utils/http'
|
||||
|
||||
/**
|
||||
* 获取用户列表
|
||||
*/
|
||||
export function fetchUserList(params: {
|
||||
page?: number
|
||||
pageSize?: number
|
||||
keyword?: string
|
||||
role?: string
|
||||
roleIn?: string
|
||||
regionId?: string
|
||||
isActive?: boolean
|
||||
}) {
|
||||
return request.get<{
|
||||
list: Api.User.UserItem[]
|
||||
total: number
|
||||
page: number
|
||||
pageSize: number
|
||||
totalPages: number
|
||||
}>({
|
||||
url: '/web/admin/users',
|
||||
params
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取用户详情
|
||||
*/
|
||||
export function fetchUserDetail(id: string) {
|
||||
return request.get<Api.User.UserDetail>({
|
||||
url: `/web/admin/users/${id}`
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 创建用户
|
||||
*/
|
||||
export function fetchCreateUser(data: {
|
||||
username: string
|
||||
password: string
|
||||
realName: string
|
||||
phone?: string
|
||||
role: string
|
||||
regionId?: string
|
||||
regionIds?: string[]
|
||||
avatarUrl?: string | null
|
||||
}) {
|
||||
return request.post({
|
||||
url: '/web/admin/users',
|
||||
data
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 更新用户
|
||||
*/
|
||||
export function fetchUpdateUser(id: string, data: Partial<{
|
||||
realName: string
|
||||
phone?: string
|
||||
role: string
|
||||
regionId?: string
|
||||
regionIds?: string[]
|
||||
isActive: boolean
|
||||
avatarUrl?: string | null
|
||||
}>) {
|
||||
return request.put({
|
||||
url: `/web/admin/users/${id}`,
|
||||
params: data
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 可授权菜单 code 列表
|
||||
*/
|
||||
export function fetchAssignableMenuCodes() {
|
||||
return request.get<{
|
||||
list: Array<{
|
||||
id: string
|
||||
code: string
|
||||
name: string
|
||||
parentId?: string
|
||||
sortOrder?: number
|
||||
}>
|
||||
}>({
|
||||
url: '/web/admin/menus/assignable-codes'
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取用户菜单授权
|
||||
*/
|
||||
export function fetchUserMenuScopes(userId: string) {
|
||||
return request.get<{
|
||||
userId: string
|
||||
menuCodes: string[]
|
||||
}>({
|
||||
url: `/web/admin/users/${userId}/menu-scopes`
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 更新用户菜单授权(全量覆盖)
|
||||
*/
|
||||
export function fetchUpdateUserMenuScopes(userId: string, menuCodes: string[]) {
|
||||
return request.post({
|
||||
url: `/web/admin/users/${userId}/menu-scopes`,
|
||||
data: { menuCodes }
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除用户
|
||||
*/
|
||||
export function fetchDeleteUser(id: string) {
|
||||
return request.del({
|
||||
url: `/web/admin/users/${id}`
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 重置用户密码
|
||||
*/
|
||||
export function fetchResetPassword(id: string) {
|
||||
return request.post({
|
||||
url: `/web/admin/users/${id}/reset-password`
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改用户密码
|
||||
*/
|
||||
export function fetchChangePassword(data: {
|
||||
oldPassword: string
|
||||
newPassword: string
|
||||
}) {
|
||||
return request.post({
|
||||
url: '/web/admin/users/change-password',
|
||||
params: data
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取区域列表
|
||||
*/
|
||||
export function fetchRegionList(params?: {
|
||||
page?: number
|
||||
pageSize?: number
|
||||
keyword?: string
|
||||
isActive?: boolean
|
||||
}) {
|
||||
return request.get<{
|
||||
list: Api.Region.RegionItem[]
|
||||
total: number
|
||||
page: number
|
||||
pageSize: number
|
||||
totalPages: number
|
||||
}>({
|
||||
url: '/web/admin/regions',
|
||||
params
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取启用的区域列表
|
||||
*/
|
||||
export function fetchActiveRegions() {
|
||||
// 简单缓存:区域列表变化频率低,避免页面间重复请求导致“区域加载慢”
|
||||
// 5 分钟 TTL;需要实时刷新时可在调用方自行绕过(后续可升级为 Pinia store)
|
||||
const now = Date.now()
|
||||
const anyFn = fetchActiveRegions as any
|
||||
const cache = anyFn.__cache as undefined | { ts: number; data: Api.Region.RegionItem[] }
|
||||
if (cache && now - cache.ts < 5 * 60 * 1000) return Promise.resolve(cache.data)
|
||||
|
||||
return request.get<Api.Region.RegionItem[]>({
|
||||
url: '/web/admin/regions/active'
|
||||
}).then((data) => {
|
||||
anyFn.__cache = { ts: now, data: data || [] }
|
||||
return data
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取所有未删除的区域(包含禁用态 isActive=0)
|
||||
* 用于后台各模块“区域 tab”展示全量范围。
|
||||
*/
|
||||
export async function fetchNotDeletedRegions() {
|
||||
const now = Date.now()
|
||||
const anyFn = fetchNotDeletedRegions as any
|
||||
const cache = anyFn.__cache as undefined | { ts: number; data: Api.Region.RegionItem[] }
|
||||
if (cache && now - cache.ts < 5 * 60 * 1000) return cache.data
|
||||
|
||||
// 注意:后端 `GET /web/admin/regions` 的 pageSize 有上限(<=100),不能一次性拉太大。
|
||||
const pageSize = 100
|
||||
const all: Api.Region.RegionItem[] = []
|
||||
let page = 1
|
||||
|
||||
while (true) {
|
||||
const res: any = await fetchRegionList({ page, pageSize })
|
||||
const list: Api.Region.RegionItem[] = Array.isArray(res?.list) ? res.list : []
|
||||
all.push(...list)
|
||||
|
||||
const total = Number(res?.total ?? 0)
|
||||
// 没有更多数据:直接退出(避免死循环)
|
||||
if (!total || all.length >= total || list.length < pageSize) break
|
||||
page++
|
||||
}
|
||||
|
||||
anyFn.__cache = { ts: now, data: all }
|
||||
return all
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取区域详情
|
||||
*/
|
||||
export function fetchRegionDetail(id: string) {
|
||||
return request.get<Api.Region.RegionDetail>({
|
||||
url: `/web/admin/regions/${id}`
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 创建区域
|
||||
*/
|
||||
export function fetchCreateRegion(data: {
|
||||
name: string
|
||||
code: string
|
||||
description?: string
|
||||
sortOrder?: number
|
||||
/** 预计配送时长(分钟) */
|
||||
expectedDeliveryMinutes?: number | null
|
||||
/** 计划到货前未送达时预警提前时间(分钟) */
|
||||
deliveryWarnAdvanceMinutes?: number | null
|
||||
}) {
|
||||
return request.post({
|
||||
url: '/web/admin/regions',
|
||||
params: data
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 更新区域
|
||||
*/
|
||||
export function fetchUpdateRegion(id: string, data: Partial<{
|
||||
name: string
|
||||
code: string
|
||||
description?: string
|
||||
sortOrder?: number
|
||||
isActive?: boolean
|
||||
expectedDeliveryMinutes?: number | null
|
||||
deliveryWarnAdvanceMinutes?: number | null
|
||||
}>) {
|
||||
return request.put({
|
||||
url: `/web/admin/regions/${id}`,
|
||||
params: data
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除区域
|
||||
*/
|
||||
export function fetchDeleteRegion(id: string) {
|
||||
return request.del({
|
||||
url: `/web/admin/regions/${id}`
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取商品分类列表
|
||||
*/
|
||||
export function fetchCategoryList(params?: {
|
||||
page?: number
|
||||
pageSize?: number
|
||||
keyword?: string
|
||||
isActive?: boolean
|
||||
}) {
|
||||
return request.get<{
|
||||
list: Api.Category.CategoryItem[]
|
||||
total: number
|
||||
page: number
|
||||
pageSize: number
|
||||
totalPages: number
|
||||
}>({
|
||||
url: '/web/admin/categories',
|
||||
params
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取商品分类树
|
||||
*/
|
||||
export function fetchCategoryTree() {
|
||||
return request.get<any[]>({
|
||||
url: '/web/admin/categories/tree'
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 创建商品分类
|
||||
*/
|
||||
export function fetchCreateCategory(data: {
|
||||
name: string
|
||||
parentId?: string
|
||||
sortOrder?: number
|
||||
imageUrl?: string
|
||||
/** 价格系数,百分比点数(如 5 表示 5%) */
|
||||
priceCoefficient?: number
|
||||
}) {
|
||||
return request.post({
|
||||
url: '/web/admin/categories',
|
||||
params: data
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 更新商品分类
|
||||
*/
|
||||
export function fetchUpdateCategory(id: string, data: Partial<{
|
||||
name: string
|
||||
parentId?: string
|
||||
sortOrder?: number
|
||||
isActive?: boolean
|
||||
imageUrl?: string
|
||||
priceCoefficient?: number
|
||||
}>) {
|
||||
return request.put({
|
||||
url: `/web/admin/categories/${id}`,
|
||||
params: data
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除商品分类
|
||||
*/
|
||||
export function fetchDeleteCategory(id: string) {
|
||||
return request.del({
|
||||
url: `/web/admin/categories/${id}`
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 上传商品分类图片(MinIO)并返回图片URL
|
||||
*/
|
||||
export function fetchUploadCategoryImage(data: FormData) {
|
||||
return request.post({
|
||||
url: '/web/admin/categories/upload-image',
|
||||
data
|
||||
})
|
||||
}
|
||||
|
||||
/** 上传用户头像,返回 MinIO 等存储后的 URL,供写入 avatarUrl */
|
||||
export function fetchUploadUserAvatar(data: FormData) {
|
||||
return request.post<{ url: string }>({
|
||||
url: '/web/admin/users/upload-avatar',
|
||||
data
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取商品单位列表
|
||||
*/
|
||||
export function fetchUnitList(params?: {
|
||||
page?: number
|
||||
pageSize?: number
|
||||
keyword?: string
|
||||
isActive?: boolean
|
||||
}) {
|
||||
return request.get<{
|
||||
list: Api.Unit.UnitItem[]
|
||||
total: number
|
||||
page: number
|
||||
pageSize: number
|
||||
totalPages: number
|
||||
}>({
|
||||
url: '/web/admin/units',
|
||||
params
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 创建商品单位
|
||||
*/
|
||||
export function fetchCreateUnit(data: {
|
||||
name: string
|
||||
code: string
|
||||
}) {
|
||||
return request.post({
|
||||
url: '/web/admin/units',
|
||||
params: data
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 更新商品单位
|
||||
*/
|
||||
export function fetchUpdateUnit(id: string, data: Partial<{
|
||||
name: string
|
||||
code: string
|
||||
isActive?: boolean
|
||||
}>) {
|
||||
return request.put({
|
||||
url: `/web/admin/units/${id}`,
|
||||
params: data
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除商品单位
|
||||
*/
|
||||
export function fetchDeleteUnit(id: string) {
|
||||
return request.del({
|
||||
url: `/web/admin/units/${id}`
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取商品列表
|
||||
*/
|
||||
export function fetchProductList(params?: {
|
||||
page?: number
|
||||
pageSize?: number
|
||||
keyword?: string
|
||||
categoryId?: string
|
||||
isActive?: boolean
|
||||
}) {
|
||||
return request.get<{
|
||||
list: Api.Product.ProductItem[]
|
||||
total: number
|
||||
page: number
|
||||
pageSize: number
|
||||
totalPages: number
|
||||
}>({
|
||||
url: '/web/admin/products',
|
||||
params
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取商品详情
|
||||
*/
|
||||
export function fetchProductDetail(id: string) {
|
||||
return request.get<Api.Product.ProductDetail>({
|
||||
url: `/web/admin/products/${id}`
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 商品在各启用区域的当前生效价(来自该区域生效中的价格清单)
|
||||
*/
|
||||
export function fetchProductRegionPrices(productId: string) {
|
||||
return request.get<{
|
||||
list: Array<{
|
||||
regionId: string
|
||||
regionName: string
|
||||
price: number | null
|
||||
unitId?: string | null
|
||||
unitName?: string | null
|
||||
}>
|
||||
}>({
|
||||
url: `/web/admin/products/${productId}/region-prices`
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 创建商品
|
||||
*/
|
||||
export function fetchCreateProduct(data: {
|
||||
name: string
|
||||
skuCode?: string
|
||||
categoryId?: string
|
||||
unitId?: string
|
||||
measureValue?: number | null
|
||||
description?: string
|
||||
imageUrl?: string
|
||||
/** 调价系数(%):百分比点数,5 表示 5% */
|
||||
priceCoefficient?: number
|
||||
isActive?: boolean
|
||||
detailContent?: string
|
||||
}) {
|
||||
return request.post({
|
||||
url: '/web/admin/products',
|
||||
params: data
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 更新商品
|
||||
*/
|
||||
export function fetchUpdateProduct(id: string, data: Partial<{
|
||||
name: string
|
||||
skuCode?: string
|
||||
categoryId?: string
|
||||
unitId?: string
|
||||
measureValue?: number | null
|
||||
description?: string
|
||||
imageUrl?: string
|
||||
priceCoefficient?: number
|
||||
isActive?: boolean
|
||||
detailContent?: string
|
||||
}>) {
|
||||
return request.put({
|
||||
url: `/web/admin/products/${id}`,
|
||||
params: data
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除商品
|
||||
*/
|
||||
export function fetchDeleteProduct(id: string) {
|
||||
return request.del({
|
||||
url: `/web/admin/products/${id}`
|
||||
})
|
||||
}
|
||||
|
||||
// ========== 商品轮播图 ==========
|
||||
|
||||
/**
|
||||
* 获取商品轮播图列表
|
||||
*/
|
||||
export function fetchProductBannerList(productId: string) {
|
||||
return request.get<{
|
||||
list: Api.Product.ProductBanner[]
|
||||
total: number
|
||||
}>({
|
||||
url: `/web/admin/product-banners/product/${productId}`
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 批量添加商品轮播图
|
||||
*/
|
||||
export function fetchCreateProductBanners(productId: string, items: Api.Product.ProductBannerCreate[]) {
|
||||
return request.post({
|
||||
url: `/web/admin/product-banners/product/${productId}`,
|
||||
params: items
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 更新轮播图
|
||||
*/
|
||||
export function fetchUpdateProductBanner(id: string, data: Partial<Api.Product.ProductBannerUpdate>) {
|
||||
return request.put({
|
||||
url: `/web/admin/product-banners/${id}`,
|
||||
params: data
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 更新轮播图排序
|
||||
*/
|
||||
export function fetchUpdateProductBannerSort(productId: string, items: { id: string; sortOrder: number }[]) {
|
||||
return request.put({
|
||||
url: `/web/admin/product-banners/product/${productId}/sort`,
|
||||
params: { items }
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除轮播图
|
||||
*/
|
||||
export function fetchDeleteProductBanner(id: string) {
|
||||
return request.del({
|
||||
url: `/web/admin/product-banners/${id}`
|
||||
})
|
||||
}
|
||||
|
||||
// ========== 商品详情媒体 ==========
|
||||
|
||||
/**
|
||||
* 获取商品详情媒体列表
|
||||
*/
|
||||
export function fetchProductDetailMediaList(productId: string) {
|
||||
return request.get<{
|
||||
list: Api.Product.ProductDetailMedia[]
|
||||
total: number
|
||||
}>({
|
||||
url: `/web/admin/product-detail-media/product/${productId}`
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 批量添加商品详情媒体
|
||||
*/
|
||||
export function fetchCreateProductDetailMedia(productId: string, items: Api.Product.ProductDetailMediaCreate[]) {
|
||||
return request.post({
|
||||
url: `/web/admin/product-detail-media/product/${productId}`,
|
||||
params: items
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 更新详情媒体
|
||||
*/
|
||||
export function fetchUpdateProductDetailMedia(id: string, data: Partial<Api.Product.ProductDetailMediaUpdate>) {
|
||||
return request.put({
|
||||
url: `/web/admin/product-detail-media/${id}`,
|
||||
params: data
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 更新详情媒体排序
|
||||
*/
|
||||
export function fetchUpdateProductDetailMediaSort(productId: string, items: { id: string; sortOrder: number }[]) {
|
||||
return request.put({
|
||||
url: `/web/admin/product-detail-media/product/${productId}/sort`,
|
||||
params: { items }
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除详情媒体
|
||||
*/
|
||||
export function fetchDeleteProductDetailMedia(id: string) {
|
||||
return request.del({
|
||||
url: `/web/admin/product-detail-media/${id}`
|
||||
})
|
||||
}
|
||||
|
||||
// ========== 商品参数模板 ==========
|
||||
|
||||
/**
|
||||
* 获取参数模板列表
|
||||
*/
|
||||
export function fetchProductParameterList(params?: {
|
||||
page?: number
|
||||
pageSize?: number
|
||||
keyword?: string
|
||||
isActive?: number
|
||||
}) {
|
||||
return request.get<{
|
||||
list: Api.Product.ProductParameter[]
|
||||
total: number
|
||||
page: number
|
||||
pageSize: number
|
||||
}>({
|
||||
url: '/web/admin/product-parameters',
|
||||
params
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取参数模板简洁列表
|
||||
*/
|
||||
export function fetchProductParameterSimple() {
|
||||
return request.get<{
|
||||
list: Api.Product.ProductParameterSimple[]
|
||||
total: number
|
||||
}>({
|
||||
url: '/web/admin/product-parameters/simple'
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取参数模板详情
|
||||
*/
|
||||
export function fetchProductParameterDetail(id: string) {
|
||||
return request.get<Api.Product.ProductParameter>({
|
||||
url: `/web/admin/product-parameters/${id}`
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 创建参数模板
|
||||
*/
|
||||
export function fetchCreateProductParameter(data: Api.Product.ProductParameterCreate) {
|
||||
return request.post({
|
||||
url: '/web/admin/product-parameters',
|
||||
params: data
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 更新参数模板
|
||||
*/
|
||||
export function fetchUpdateProductParameter(id: string, data: Partial<Api.Product.ProductParameterUpdate>) {
|
||||
return request.put({
|
||||
url: `/web/admin/product-parameters/${id}`,
|
||||
params: data
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除参数模板
|
||||
*/
|
||||
export function fetchDeleteProductParameter(id: string) {
|
||||
return request.del({
|
||||
url: `/web/admin/product-parameters/${id}`
|
||||
})
|
||||
}
|
||||
|
||||
// ========== 分类参数关联 ==========
|
||||
|
||||
/**
|
||||
* 获取分类关联的参数列表
|
||||
*/
|
||||
export function fetchCategoryParameters(categoryId: string) {
|
||||
return request.get<{
|
||||
list: Api.Product.CategoryParameter[]
|
||||
total: number
|
||||
}>({
|
||||
url: `/web/admin/categories/${categoryId}/parameters`
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 更新分类关联的参数
|
||||
*/
|
||||
export function fetchUpdateCategoryParameters(categoryId: string, items: Api.Product.CategoryParameterCreate[]) {
|
||||
return request.put({
|
||||
url: `/web/admin/categories/${categoryId}/parameters`,
|
||||
params: { items }
|
||||
})
|
||||
}
|
||||
|
||||
// ========== 商品参数值 ==========
|
||||
|
||||
/**
|
||||
* 获取商品参数值列表
|
||||
*/
|
||||
export function fetchProductParameterValues(productId: string) {
|
||||
return request.get<{
|
||||
list: Api.Product.ProductParameterValue[]
|
||||
total: number
|
||||
}>({
|
||||
url: `/web/admin/product-parameter-values/product/${productId}`
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 批量保存商品参数值
|
||||
*/
|
||||
export function fetchSaveProductParameterValues(productId: string, values: Api.Product.ProductParameterValueCreate[]) {
|
||||
return request.post({
|
||||
url: `/web/admin/product-parameter-values/product/${productId}`,
|
||||
params: { productId, values }
|
||||
})
|
||||
}
|
||||
|
||||
// ========== 售后评价 ==========
|
||||
|
||||
/**
|
||||
* 获取评价列表
|
||||
*/
|
||||
export function fetchReviewList(params?: {
|
||||
page?: number
|
||||
pageSize?: number
|
||||
productId?: string
|
||||
productName?: string
|
||||
userName?: string
|
||||
status?: string
|
||||
rating?: number
|
||||
startDate?: string
|
||||
endDate?: string
|
||||
}) {
|
||||
return request.get<{
|
||||
list: Api.Product.ProductReview[]
|
||||
total: number
|
||||
page: number
|
||||
pageSize: number
|
||||
}>({
|
||||
url: '/web/admin/reviews',
|
||||
params
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取评价统计
|
||||
*/
|
||||
export function fetchReviewStatistics(productId?: string) {
|
||||
return request.get<Api.Product.ProductReviewStatistics>({
|
||||
url: '/web/admin/reviews/statistics',
|
||||
params: { productId }
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取评价详情
|
||||
*/
|
||||
export function fetchReviewDetail(id: string) {
|
||||
return request.get<Api.Product.ProductReview>({
|
||||
url: `/web/admin/reviews/${id}`
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 审核通过评价
|
||||
*/
|
||||
export function fetchApproveReview(id: string) {
|
||||
return request.put({
|
||||
url: `/web/admin/reviews/${id}/approve`
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 拒绝评价
|
||||
*/
|
||||
export function fetchRejectReview(id: string, rejectReason: string) {
|
||||
return request.put({
|
||||
url: `/web/admin/reviews/${id}/reject`,
|
||||
params: { rejectReason }
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 回复评价
|
||||
*/
|
||||
export function fetchReplyReview(id: string, replyContent: string) {
|
||||
return request.put({
|
||||
url: `/web/admin/reviews/${id}/reply`,
|
||||
params: { replyContent }
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 置顶/取消置顶评价
|
||||
*/
|
||||
export function fetchToggleReviewTop(id: string, isTop: number) {
|
||||
return request.put({
|
||||
url: `/web/admin/reviews/${id}/top`,
|
||||
params: { isTop }
|
||||
})
|
||||
}
|
||||
Reference in new issue
Block a user