feat(shop): 添加文章详情页面并优化购物车样式
- 新增文章详情页面组件,用于显示文章内容 - 优化购物车页面样式,增加空购物车状态的透明背景 - 添加多个购物相关 API 接口,包括优惠券、订单等 - 更新环境配置,修改 API 基础 URL - 调整发现页面布局,增加文章详情入口
This commit is contained in:
@@ -2,7 +2,7 @@
|
|||||||
export const ENV_CONFIG = {
|
export const ENV_CONFIG = {
|
||||||
// 开发环境
|
// 开发环境
|
||||||
development: {
|
development: {
|
||||||
API_BASE_URL: 'https://cms-api.websoft.top/api',
|
API_BASE_URL: 'http://127.0.0.1:9200/api',
|
||||||
APP_NAME: '开发环境',
|
APP_NAME: '开发环境',
|
||||||
DEBUG: 'true',
|
DEBUG: 'true',
|
||||||
},
|
},
|
||||||
|
|||||||
3
src/admin/article/index.config.ts
Normal file
3
src/admin/article/index.config.ts
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
export default definePageConfig({
|
||||||
|
navigationBarTitleText: '文章详情'
|
||||||
|
})
|
||||||
53
src/admin/article/index.tsx
Normal file
53
src/admin/article/index.tsx
Normal file
@@ -0,0 +1,53 @@
|
|||||||
|
import Taro from '@tarojs/taro'
|
||||||
|
import {useEffect, useState} from 'react'
|
||||||
|
import {useRouter} from '@tarojs/taro'
|
||||||
|
import {Loading} from '@nutui/nutui-react-taro'
|
||||||
|
import {View, RichText} from '@tarojs/components'
|
||||||
|
import {wxParse} from "@/utils/common";
|
||||||
|
import {getCmsArticle} from "@/api/cms/cmsArticle";
|
||||||
|
import {CmsArticle} from "@/api/cms/cmsArticle/model"
|
||||||
|
import Line from "@/components/Gap";
|
||||||
|
import './index.scss'
|
||||||
|
|
||||||
|
function Detail() {
|
||||||
|
const {params} = useRouter();
|
||||||
|
const [loading, setLoading] = useState<boolean>(true)
|
||||||
|
// 文章详情
|
||||||
|
const [item, setItem] = useState<CmsArticle>()
|
||||||
|
const reload = async () => {
|
||||||
|
const item = await getCmsArticle(Number(params.id))
|
||||||
|
|
||||||
|
if (item) {
|
||||||
|
item.content = wxParse(item.content)
|
||||||
|
setItem(item)
|
||||||
|
Taro.setNavigationBarTitle({
|
||||||
|
title: `${item?.categoryName}`
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
reload().then(() => {
|
||||||
|
setLoading(false)
|
||||||
|
});
|
||||||
|
}, []);
|
||||||
|
|
||||||
|
if (loading) {
|
||||||
|
return (
|
||||||
|
<Loading className={'px-2'}>加载中</Loading>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
return (
|
||||||
|
<div className={'bg-white'}>
|
||||||
|
<div className={'p-4 font-bold text-lg'}>{item?.title}</div>
|
||||||
|
<div className={'text-gray-400 text-sm px-4 '}>{item?.createTime}</div>
|
||||||
|
<View className={'content p-4'}>
|
||||||
|
<RichText nodes={item?.content}/>
|
||||||
|
</View>
|
||||||
|
<Line height={44}/>
|
||||||
|
</div>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
export default Detail
|
||||||
101
src/api/shop/shopCoupon/index.ts
Normal file
101
src/api/shop/shopCoupon/index.ts
Normal file
@@ -0,0 +1,101 @@
|
|||||||
|
import request from '@/utils/request';
|
||||||
|
import type { ApiResult, PageResult } from '@/api/index';
|
||||||
|
import type { ShopCoupon, ShopCouponParam } from './model';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 分页查询优惠券
|
||||||
|
*/
|
||||||
|
export async function pageShopCoupon(params: ShopCouponParam) {
|
||||||
|
const res = await request.get<ApiResult<PageResult<ShopCoupon>>>(
|
||||||
|
'/shop/shop-coupon/page',
|
||||||
|
params
|
||||||
|
);
|
||||||
|
if (res.code === 0) {
|
||||||
|
return res.data;
|
||||||
|
}
|
||||||
|
return Promise.reject(new Error(res.message));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询优惠券列表
|
||||||
|
*/
|
||||||
|
export async function listShopCoupon(params?: ShopCouponParam) {
|
||||||
|
const res = await request.get<ApiResult<ShopCoupon[]>>(
|
||||||
|
'/shop/shop-coupon',
|
||||||
|
params
|
||||||
|
);
|
||||||
|
if (res.code === 0 && res.data) {
|
||||||
|
return res.data;
|
||||||
|
}
|
||||||
|
return Promise.reject(new Error(res.message));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 添加优惠券
|
||||||
|
*/
|
||||||
|
export async function addShopCoupon(data: ShopCoupon) {
|
||||||
|
const res = await request.post<ApiResult<unknown>>(
|
||||||
|
'/shop/shop-coupon',
|
||||||
|
data
|
||||||
|
);
|
||||||
|
if (res.code === 0) {
|
||||||
|
return res.message;
|
||||||
|
}
|
||||||
|
return Promise.reject(new Error(res.message));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 修改优惠券
|
||||||
|
*/
|
||||||
|
export async function updateShopCoupon(data: ShopCoupon) {
|
||||||
|
const res = await request.put<ApiResult<unknown>>(
|
||||||
|
'/shop/shop-coupon',
|
||||||
|
data
|
||||||
|
);
|
||||||
|
if (res.code === 0) {
|
||||||
|
return res.message;
|
||||||
|
}
|
||||||
|
return Promise.reject(new Error(res.message));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除优惠券
|
||||||
|
*/
|
||||||
|
export async function removeShopCoupon(id?: number) {
|
||||||
|
const res = await request.del<ApiResult<unknown>>(
|
||||||
|
'/shop/shop-coupon/' + id
|
||||||
|
);
|
||||||
|
if (res.code === 0) {
|
||||||
|
return res.message;
|
||||||
|
}
|
||||||
|
return Promise.reject(new Error(res.message));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 批量删除优惠券
|
||||||
|
*/
|
||||||
|
export async function removeBatchShopCoupon(data: (number | undefined)[]) {
|
||||||
|
const res = await request.del<ApiResult<unknown>>(
|
||||||
|
'/shop/shop-coupon/batch',
|
||||||
|
{
|
||||||
|
data
|
||||||
|
}
|
||||||
|
);
|
||||||
|
if (res.code === 0) {
|
||||||
|
return res.message;
|
||||||
|
}
|
||||||
|
return Promise.reject(new Error(res.message));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据id查询优惠券
|
||||||
|
*/
|
||||||
|
export async function getShopCoupon(id: number) {
|
||||||
|
const res = await request.get<ApiResult<ShopCoupon>>(
|
||||||
|
'/shop/shop-coupon/' + id
|
||||||
|
);
|
||||||
|
if (res.code === 0 && res.data) {
|
||||||
|
return res.data;
|
||||||
|
}
|
||||||
|
return Promise.reject(new Error(res.message));
|
||||||
|
}
|
||||||
101
src/api/shop/shopDealerApply/index.ts
Normal file
101
src/api/shop/shopDealerApply/index.ts
Normal file
@@ -0,0 +1,101 @@
|
|||||||
|
import request from '@/utils/request';
|
||||||
|
import type { ApiResult, PageResult } from '@/api/index';
|
||||||
|
import type { ShopDealerApply, ShopDealerApplyParam } from './model';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 分页查询分销商申请记录表
|
||||||
|
*/
|
||||||
|
export async function pageShopDealerApply(params: ShopDealerApplyParam) {
|
||||||
|
const res = await request.get<ApiResult<PageResult<ShopDealerApply>>>(
|
||||||
|
'/shop/shop-dealer-apply/page',
|
||||||
|
params
|
||||||
|
);
|
||||||
|
if (res.code === 0) {
|
||||||
|
return res.data;
|
||||||
|
}
|
||||||
|
return Promise.reject(new Error(res.message));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询分销商申请记录表列表
|
||||||
|
*/
|
||||||
|
export async function listShopDealerApply(params?: ShopDealerApplyParam) {
|
||||||
|
const res = await request.get<ApiResult<ShopDealerApply[]>>(
|
||||||
|
'/shop/shop-dealer-apply',
|
||||||
|
params
|
||||||
|
);
|
||||||
|
if (res.code === 0 && res.data) {
|
||||||
|
return res.data;
|
||||||
|
}
|
||||||
|
return Promise.reject(new Error(res.message));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 添加分销商申请记录表
|
||||||
|
*/
|
||||||
|
export async function addShopDealerApply(data: ShopDealerApply) {
|
||||||
|
const res = await request.post<ApiResult<unknown>>(
|
||||||
|
'/shop/shop-dealer-apply',
|
||||||
|
data
|
||||||
|
);
|
||||||
|
if (res.code === 0) {
|
||||||
|
return res.message;
|
||||||
|
}
|
||||||
|
return Promise.reject(new Error(res.message));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 修改分销商申请记录表
|
||||||
|
*/
|
||||||
|
export async function updateShopDealerApply(data: ShopDealerApply) {
|
||||||
|
const res = await request.put<ApiResult<unknown>>(
|
||||||
|
'/shop/shop-dealer-apply',
|
||||||
|
data
|
||||||
|
);
|
||||||
|
if (res.code === 0) {
|
||||||
|
return res.message;
|
||||||
|
}
|
||||||
|
return Promise.reject(new Error(res.message));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除分销商申请记录表
|
||||||
|
*/
|
||||||
|
export async function removeShopDealerApply(id?: number) {
|
||||||
|
const res = await request.del<ApiResult<unknown>>(
|
||||||
|
'/shop/shop-dealer-apply/' + id
|
||||||
|
);
|
||||||
|
if (res.code === 0) {
|
||||||
|
return res.message;
|
||||||
|
}
|
||||||
|
return Promise.reject(new Error(res.message));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 批量删除分销商申请记录表
|
||||||
|
*/
|
||||||
|
export async function removeBatchShopDealerApply(data: (number | undefined)[]) {
|
||||||
|
const res = await request.del<ApiResult<unknown>>(
|
||||||
|
'/shop/shop-dealer-apply/batch',
|
||||||
|
{
|
||||||
|
data
|
||||||
|
}
|
||||||
|
);
|
||||||
|
if (res.code === 0) {
|
||||||
|
return res.message;
|
||||||
|
}
|
||||||
|
return Promise.reject(new Error(res.message));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据id查询分销商申请记录表
|
||||||
|
*/
|
||||||
|
export async function getShopDealerApply(id: number) {
|
||||||
|
const res = await request.get<ApiResult<ShopDealerApply>>(
|
||||||
|
'/shop/shop-dealer-apply/' + id
|
||||||
|
);
|
||||||
|
if (res.code === 0 && res.data) {
|
||||||
|
return res.data;
|
||||||
|
}
|
||||||
|
return Promise.reject(new Error(res.message));
|
||||||
|
}
|
||||||
101
src/api/shop/shopDealerCapital/index.ts
Normal file
101
src/api/shop/shopDealerCapital/index.ts
Normal file
@@ -0,0 +1,101 @@
|
|||||||
|
import request from '@/utils/request';
|
||||||
|
import type { ApiResult, PageResult } from '@/api/index';
|
||||||
|
import type { ShopDealerCapital, ShopDealerCapitalParam } from './model';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 分页查询分销商资金明细表
|
||||||
|
*/
|
||||||
|
export async function pageShopDealerCapital(params: ShopDealerCapitalParam) {
|
||||||
|
const res = await request.get<ApiResult<PageResult<ShopDealerCapital>>>(
|
||||||
|
'/shop/shop-dealer-capital/page',
|
||||||
|
params
|
||||||
|
);
|
||||||
|
if (res.code === 0) {
|
||||||
|
return res.data;
|
||||||
|
}
|
||||||
|
return Promise.reject(new Error(res.message));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询分销商资金明细表列表
|
||||||
|
*/
|
||||||
|
export async function listShopDealerCapital(params?: ShopDealerCapitalParam) {
|
||||||
|
const res = await request.get<ApiResult<ShopDealerCapital[]>>(
|
||||||
|
'/shop/shop-dealer-capital',
|
||||||
|
params
|
||||||
|
);
|
||||||
|
if (res.code === 0 && res.data) {
|
||||||
|
return res.data;
|
||||||
|
}
|
||||||
|
return Promise.reject(new Error(res.message));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 添加分销商资金明细表
|
||||||
|
*/
|
||||||
|
export async function addShopDealerCapital(data: ShopDealerCapital) {
|
||||||
|
const res = await request.post<ApiResult<unknown>>(
|
||||||
|
'/shop/shop-dealer-capital',
|
||||||
|
data
|
||||||
|
);
|
||||||
|
if (res.code === 0) {
|
||||||
|
return res.message;
|
||||||
|
}
|
||||||
|
return Promise.reject(new Error(res.message));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 修改分销商资金明细表
|
||||||
|
*/
|
||||||
|
export async function updateShopDealerCapital(data: ShopDealerCapital) {
|
||||||
|
const res = await request.put<ApiResult<unknown>>(
|
||||||
|
'/shop/shop-dealer-capital',
|
||||||
|
data
|
||||||
|
);
|
||||||
|
if (res.code === 0) {
|
||||||
|
return res.message;
|
||||||
|
}
|
||||||
|
return Promise.reject(new Error(res.message));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除分销商资金明细表
|
||||||
|
*/
|
||||||
|
export async function removeShopDealerCapital(id?: number) {
|
||||||
|
const res = await request.del<ApiResult<unknown>>(
|
||||||
|
'/shop/shop-dealer-capital/' + id
|
||||||
|
);
|
||||||
|
if (res.code === 0) {
|
||||||
|
return res.message;
|
||||||
|
}
|
||||||
|
return Promise.reject(new Error(res.message));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 批量删除分销商资金明细表
|
||||||
|
*/
|
||||||
|
export async function removeBatchShopDealerCapital(data: (number | undefined)[]) {
|
||||||
|
const res = await request.del<ApiResult<unknown>>(
|
||||||
|
'/shop/shop-dealer-capital/batch',
|
||||||
|
{
|
||||||
|
data
|
||||||
|
}
|
||||||
|
);
|
||||||
|
if (res.code === 0) {
|
||||||
|
return res.message;
|
||||||
|
}
|
||||||
|
return Promise.reject(new Error(res.message));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据id查询分销商资金明细表
|
||||||
|
*/
|
||||||
|
export async function getShopDealerCapital(id: number) {
|
||||||
|
const res = await request.get<ApiResult<ShopDealerCapital>>(
|
||||||
|
'/shop/shop-dealer-capital/' + id
|
||||||
|
);
|
||||||
|
if (res.code === 0 && res.data) {
|
||||||
|
return res.data;
|
||||||
|
}
|
||||||
|
return Promise.reject(new Error(res.message));
|
||||||
|
}
|
||||||
101
src/api/shop/shopDealerOrder/index.ts
Normal file
101
src/api/shop/shopDealerOrder/index.ts
Normal file
@@ -0,0 +1,101 @@
|
|||||||
|
import request from '@/utils/request';
|
||||||
|
import type { ApiResult, PageResult } from '@/api/index';
|
||||||
|
import type { ShopDealerOrder, ShopDealerOrderParam } from './model';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 分页查询分销商订单记录表
|
||||||
|
*/
|
||||||
|
export async function pageShopDealerOrder(params: ShopDealerOrderParam) {
|
||||||
|
const res = await request.get<ApiResult<PageResult<ShopDealerOrder>>>(
|
||||||
|
'/shop/shop-dealer-order/page',
|
||||||
|
params
|
||||||
|
);
|
||||||
|
if (res.code === 0) {
|
||||||
|
return res.data;
|
||||||
|
}
|
||||||
|
return Promise.reject(new Error(res.message));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询分销商订单记录表列表
|
||||||
|
*/
|
||||||
|
export async function listShopDealerOrder(params?: ShopDealerOrderParam) {
|
||||||
|
const res = await request.get<ApiResult<ShopDealerOrder[]>>(
|
||||||
|
'/shop/shop-dealer-order',
|
||||||
|
params
|
||||||
|
);
|
||||||
|
if (res.code === 0 && res.data) {
|
||||||
|
return res.data;
|
||||||
|
}
|
||||||
|
return Promise.reject(new Error(res.message));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 添加分销商订单记录表
|
||||||
|
*/
|
||||||
|
export async function addShopDealerOrder(data: ShopDealerOrder) {
|
||||||
|
const res = await request.post<ApiResult<unknown>>(
|
||||||
|
'/shop/shop-dealer-order',
|
||||||
|
data
|
||||||
|
);
|
||||||
|
if (res.code === 0) {
|
||||||
|
return res.message;
|
||||||
|
}
|
||||||
|
return Promise.reject(new Error(res.message));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 修改分销商订单记录表
|
||||||
|
*/
|
||||||
|
export async function updateShopDealerOrder(data: ShopDealerOrder) {
|
||||||
|
const res = await request.put<ApiResult<unknown>>(
|
||||||
|
'/shop/shop-dealer-order',
|
||||||
|
data
|
||||||
|
);
|
||||||
|
if (res.code === 0) {
|
||||||
|
return res.message;
|
||||||
|
}
|
||||||
|
return Promise.reject(new Error(res.message));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除分销商订单记录表
|
||||||
|
*/
|
||||||
|
export async function removeShopDealerOrder(id?: number) {
|
||||||
|
const res = await request.del<ApiResult<unknown>>(
|
||||||
|
'/shop/shop-dealer-order/' + id
|
||||||
|
);
|
||||||
|
if (res.code === 0) {
|
||||||
|
return res.message;
|
||||||
|
}
|
||||||
|
return Promise.reject(new Error(res.message));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 批量删除分销商订单记录表
|
||||||
|
*/
|
||||||
|
export async function removeBatchShopDealerOrder(data: (number | undefined)[]) {
|
||||||
|
const res = await request.del<ApiResult<unknown>>(
|
||||||
|
'/shop/shop-dealer-order/batch',
|
||||||
|
{
|
||||||
|
data
|
||||||
|
}
|
||||||
|
);
|
||||||
|
if (res.code === 0) {
|
||||||
|
return res.message;
|
||||||
|
}
|
||||||
|
return Promise.reject(new Error(res.message));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据id查询分销商订单记录表
|
||||||
|
*/
|
||||||
|
export async function getShopDealerOrder(id: number) {
|
||||||
|
const res = await request.get<ApiResult<ShopDealerOrder>>(
|
||||||
|
'/shop/shop-dealer-order/' + id
|
||||||
|
);
|
||||||
|
if (res.code === 0 && res.data) {
|
||||||
|
return res.data;
|
||||||
|
}
|
||||||
|
return Promise.reject(new Error(res.message));
|
||||||
|
}
|
||||||
101
src/api/shop/shopDealerReferee/index.ts
Normal file
101
src/api/shop/shopDealerReferee/index.ts
Normal file
@@ -0,0 +1,101 @@
|
|||||||
|
import request from '@/utils/request';
|
||||||
|
import type { ApiResult, PageResult } from '@/api/index';
|
||||||
|
import type { ShopDealerReferee, ShopDealerRefereeParam } from './model';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 分页查询分销商推荐关系表
|
||||||
|
*/
|
||||||
|
export async function pageShopDealerReferee(params: ShopDealerRefereeParam) {
|
||||||
|
const res = await request.get<ApiResult<PageResult<ShopDealerReferee>>>(
|
||||||
|
'/shop/shop-dealer-referee/page',
|
||||||
|
params
|
||||||
|
);
|
||||||
|
if (res.code === 0) {
|
||||||
|
return res.data;
|
||||||
|
}
|
||||||
|
return Promise.reject(new Error(res.message));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询分销商推荐关系表列表
|
||||||
|
*/
|
||||||
|
export async function listShopDealerReferee(params?: ShopDealerRefereeParam) {
|
||||||
|
const res = await request.get<ApiResult<ShopDealerReferee[]>>(
|
||||||
|
'/shop/shop-dealer-referee',
|
||||||
|
params
|
||||||
|
);
|
||||||
|
if (res.code === 0 && res.data) {
|
||||||
|
return res.data;
|
||||||
|
}
|
||||||
|
return Promise.reject(new Error(res.message));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 添加分销商推荐关系表
|
||||||
|
*/
|
||||||
|
export async function addShopDealerReferee(data: ShopDealerReferee) {
|
||||||
|
const res = await request.post<ApiResult<unknown>>(
|
||||||
|
'/shop/shop-dealer-referee',
|
||||||
|
data
|
||||||
|
);
|
||||||
|
if (res.code === 0) {
|
||||||
|
return res.message;
|
||||||
|
}
|
||||||
|
return Promise.reject(new Error(res.message));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 修改分销商推荐关系表
|
||||||
|
*/
|
||||||
|
export async function updateShopDealerReferee(data: ShopDealerReferee) {
|
||||||
|
const res = await request.put<ApiResult<unknown>>(
|
||||||
|
'/shop/shop-dealer-referee',
|
||||||
|
data
|
||||||
|
);
|
||||||
|
if (res.code === 0) {
|
||||||
|
return res.message;
|
||||||
|
}
|
||||||
|
return Promise.reject(new Error(res.message));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除分销商推荐关系表
|
||||||
|
*/
|
||||||
|
export async function removeShopDealerReferee(id?: number) {
|
||||||
|
const res = await request.del<ApiResult<unknown>>(
|
||||||
|
'/shop/shop-dealer-referee/' + id
|
||||||
|
);
|
||||||
|
if (res.code === 0) {
|
||||||
|
return res.message;
|
||||||
|
}
|
||||||
|
return Promise.reject(new Error(res.message));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 批量删除分销商推荐关系表
|
||||||
|
*/
|
||||||
|
export async function removeBatchShopDealerReferee(data: (number | undefined)[]) {
|
||||||
|
const res = await request.del<ApiResult<unknown>>(
|
||||||
|
'/shop/shop-dealer-referee/batch',
|
||||||
|
{
|
||||||
|
data
|
||||||
|
}
|
||||||
|
);
|
||||||
|
if (res.code === 0) {
|
||||||
|
return res.message;
|
||||||
|
}
|
||||||
|
return Promise.reject(new Error(res.message));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据id查询分销商推荐关系表
|
||||||
|
*/
|
||||||
|
export async function getShopDealerReferee(id: number) {
|
||||||
|
const res = await request.get<ApiResult<ShopDealerReferee>>(
|
||||||
|
'/shop/shop-dealer-referee/' + id
|
||||||
|
);
|
||||||
|
if (res.code === 0 && res.data) {
|
||||||
|
return res.data;
|
||||||
|
}
|
||||||
|
return Promise.reject(new Error(res.message));
|
||||||
|
}
|
||||||
101
src/api/shop/shopDealerSetting/index.ts
Normal file
101
src/api/shop/shopDealerSetting/index.ts
Normal file
@@ -0,0 +1,101 @@
|
|||||||
|
import request from '@/utils/request';
|
||||||
|
import type { ApiResult, PageResult } from '@/api/index';
|
||||||
|
import type { ShopDealerSetting, ShopDealerSettingParam } from './model';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 分页查询分销商设置表
|
||||||
|
*/
|
||||||
|
export async function pageShopDealerSetting(params: ShopDealerSettingParam) {
|
||||||
|
const res = await request.get<ApiResult<PageResult<ShopDealerSetting>>>(
|
||||||
|
'/shop/shop-dealer-setting/page',
|
||||||
|
params
|
||||||
|
);
|
||||||
|
if (res.code === 0) {
|
||||||
|
return res.data;
|
||||||
|
}
|
||||||
|
return Promise.reject(new Error(res.message));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询分销商设置表列表
|
||||||
|
*/
|
||||||
|
export async function listShopDealerSetting(params?: ShopDealerSettingParam) {
|
||||||
|
const res = await request.get<ApiResult<ShopDealerSetting[]>>(
|
||||||
|
'/shop/shop-dealer-setting',
|
||||||
|
params
|
||||||
|
);
|
||||||
|
if (res.code === 0 && res.data) {
|
||||||
|
return res.data;
|
||||||
|
}
|
||||||
|
return Promise.reject(new Error(res.message));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 添加分销商设置表
|
||||||
|
*/
|
||||||
|
export async function addShopDealerSetting(data: ShopDealerSetting) {
|
||||||
|
const res = await request.post<ApiResult<unknown>>(
|
||||||
|
'/shop/shop-dealer-setting',
|
||||||
|
data
|
||||||
|
);
|
||||||
|
if (res.code === 0) {
|
||||||
|
return res.message;
|
||||||
|
}
|
||||||
|
return Promise.reject(new Error(res.message));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 修改分销商设置表
|
||||||
|
*/
|
||||||
|
export async function updateShopDealerSetting(data: ShopDealerSetting) {
|
||||||
|
const res = await request.put<ApiResult<unknown>>(
|
||||||
|
'/shop/shop-dealer-setting',
|
||||||
|
data
|
||||||
|
);
|
||||||
|
if (res.code === 0) {
|
||||||
|
return res.message;
|
||||||
|
}
|
||||||
|
return Promise.reject(new Error(res.message));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除分销商设置表
|
||||||
|
*/
|
||||||
|
export async function removeShopDealerSetting(id?: number) {
|
||||||
|
const res = await request.del<ApiResult<unknown>>(
|
||||||
|
'/shop/shop-dealer-setting/' + id
|
||||||
|
);
|
||||||
|
if (res.code === 0) {
|
||||||
|
return res.message;
|
||||||
|
}
|
||||||
|
return Promise.reject(new Error(res.message));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 批量删除分销商设置表
|
||||||
|
*/
|
||||||
|
export async function removeBatchShopDealerSetting(data: (number | undefined)[]) {
|
||||||
|
const res = await request.del<ApiResult<unknown>>(
|
||||||
|
'/shop/shop-dealer-setting/batch',
|
||||||
|
{
|
||||||
|
data
|
||||||
|
}
|
||||||
|
);
|
||||||
|
if (res.code === 0) {
|
||||||
|
return res.message;
|
||||||
|
}
|
||||||
|
return Promise.reject(new Error(res.message));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据id查询分销商设置表
|
||||||
|
*/
|
||||||
|
export async function getShopDealerSetting(id: number) {
|
||||||
|
const res = await request.get<ApiResult<ShopDealerSetting>>(
|
||||||
|
'/shop/shop-dealer-setting/' + id
|
||||||
|
);
|
||||||
|
if (res.code === 0 && res.data) {
|
||||||
|
return res.data;
|
||||||
|
}
|
||||||
|
return Promise.reject(new Error(res.message));
|
||||||
|
}
|
||||||
101
src/api/shop/shopDealerUser/index.ts
Normal file
101
src/api/shop/shopDealerUser/index.ts
Normal file
@@ -0,0 +1,101 @@
|
|||||||
|
import request from '@/utils/request';
|
||||||
|
import type { ApiResult, PageResult } from '@/api/index';
|
||||||
|
import type { ShopDealerUser, ShopDealerUserParam } from './model';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 分页查询分销商用户记录表
|
||||||
|
*/
|
||||||
|
export async function pageShopDealerUser(params: ShopDealerUserParam) {
|
||||||
|
const res = await request.get<ApiResult<PageResult<ShopDealerUser>>>(
|
||||||
|
'/shop/shop-dealer-user/page',
|
||||||
|
params
|
||||||
|
);
|
||||||
|
if (res.code === 0) {
|
||||||
|
return res.data;
|
||||||
|
}
|
||||||
|
return Promise.reject(new Error(res.message));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询分销商用户记录表列表
|
||||||
|
*/
|
||||||
|
export async function listShopDealerUser(params?: ShopDealerUserParam) {
|
||||||
|
const res = await request.get<ApiResult<ShopDealerUser[]>>(
|
||||||
|
'/shop/shop-dealer-user',
|
||||||
|
params
|
||||||
|
);
|
||||||
|
if (res.code === 0 && res.data) {
|
||||||
|
return res.data;
|
||||||
|
}
|
||||||
|
return Promise.reject(new Error(res.message));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 添加分销商用户记录表
|
||||||
|
*/
|
||||||
|
export async function addShopDealerUser(data: ShopDealerUser) {
|
||||||
|
const res = await request.post<ApiResult<unknown>>(
|
||||||
|
'/shop/shop-dealer-user',
|
||||||
|
data
|
||||||
|
);
|
||||||
|
if (res.code === 0) {
|
||||||
|
return res.message;
|
||||||
|
}
|
||||||
|
return Promise.reject(new Error(res.message));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 修改分销商用户记录表
|
||||||
|
*/
|
||||||
|
export async function updateShopDealerUser(data: ShopDealerUser) {
|
||||||
|
const res = await request.put<ApiResult<unknown>>(
|
||||||
|
'/shop/shop-dealer-user',
|
||||||
|
data
|
||||||
|
);
|
||||||
|
if (res.code === 0) {
|
||||||
|
return res.message;
|
||||||
|
}
|
||||||
|
return Promise.reject(new Error(res.message));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除分销商用户记录表
|
||||||
|
*/
|
||||||
|
export async function removeShopDealerUser(id?: number) {
|
||||||
|
const res = await request.del<ApiResult<unknown>>(
|
||||||
|
'/shop/shop-dealer-user/' + id
|
||||||
|
);
|
||||||
|
if (res.code === 0) {
|
||||||
|
return res.message;
|
||||||
|
}
|
||||||
|
return Promise.reject(new Error(res.message));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 批量删除分销商用户记录表
|
||||||
|
*/
|
||||||
|
export async function removeBatchShopDealerUser(data: (number | undefined)[]) {
|
||||||
|
const res = await request.del<ApiResult<unknown>>(
|
||||||
|
'/shop/shop-dealer-user/batch',
|
||||||
|
{
|
||||||
|
data
|
||||||
|
}
|
||||||
|
);
|
||||||
|
if (res.code === 0) {
|
||||||
|
return res.message;
|
||||||
|
}
|
||||||
|
return Promise.reject(new Error(res.message));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据id查询分销商用户记录表
|
||||||
|
*/
|
||||||
|
export async function getShopDealerUser(id: number) {
|
||||||
|
const res = await request.get<ApiResult<ShopDealerUser>>(
|
||||||
|
'/shop/shop-dealer-user/' + id
|
||||||
|
);
|
||||||
|
if (res.code === 0 && res.data) {
|
||||||
|
return res.data;
|
||||||
|
}
|
||||||
|
return Promise.reject(new Error(res.message));
|
||||||
|
}
|
||||||
101
src/api/shop/shopDealerWithdraw/index.ts
Normal file
101
src/api/shop/shopDealerWithdraw/index.ts
Normal file
@@ -0,0 +1,101 @@
|
|||||||
|
import request from '@/utils/request';
|
||||||
|
import type { ApiResult, PageResult } from '@/api/index';
|
||||||
|
import type { ShopDealerWithdraw, ShopDealerWithdrawParam } from './model';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 分页查询分销商提现明细表
|
||||||
|
*/
|
||||||
|
export async function pageShopDealerWithdraw(params: ShopDealerWithdrawParam) {
|
||||||
|
const res = await request.get<ApiResult<PageResult<ShopDealerWithdraw>>>(
|
||||||
|
'/shop/shop-dealer-withdraw/page',
|
||||||
|
params
|
||||||
|
);
|
||||||
|
if (res.code === 0) {
|
||||||
|
return res.data;
|
||||||
|
}
|
||||||
|
return Promise.reject(new Error(res.message));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询分销商提现明细表列表
|
||||||
|
*/
|
||||||
|
export async function listShopDealerWithdraw(params?: ShopDealerWithdrawParam) {
|
||||||
|
const res = await request.get<ApiResult<ShopDealerWithdraw[]>>(
|
||||||
|
'/shop/shop-dealer-withdraw',
|
||||||
|
params
|
||||||
|
);
|
||||||
|
if (res.code === 0 && res.data) {
|
||||||
|
return res.data;
|
||||||
|
}
|
||||||
|
return Promise.reject(new Error(res.message));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 添加分销商提现明细表
|
||||||
|
*/
|
||||||
|
export async function addShopDealerWithdraw(data: ShopDealerWithdraw) {
|
||||||
|
const res = await request.post<ApiResult<unknown>>(
|
||||||
|
'/shop/shop-dealer-withdraw',
|
||||||
|
data
|
||||||
|
);
|
||||||
|
if (res.code === 0) {
|
||||||
|
return res.message;
|
||||||
|
}
|
||||||
|
return Promise.reject(new Error(res.message));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 修改分销商提现明细表
|
||||||
|
*/
|
||||||
|
export async function updateShopDealerWithdraw(data: ShopDealerWithdraw) {
|
||||||
|
const res = await request.put<ApiResult<unknown>>(
|
||||||
|
'/shop/shop-dealer-withdraw',
|
||||||
|
data
|
||||||
|
);
|
||||||
|
if (res.code === 0) {
|
||||||
|
return res.message;
|
||||||
|
}
|
||||||
|
return Promise.reject(new Error(res.message));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除分销商提现明细表
|
||||||
|
*/
|
||||||
|
export async function removeShopDealerWithdraw(id?: number) {
|
||||||
|
const res = await request.del<ApiResult<unknown>>(
|
||||||
|
'/shop/shop-dealer-withdraw/' + id
|
||||||
|
);
|
||||||
|
if (res.code === 0) {
|
||||||
|
return res.message;
|
||||||
|
}
|
||||||
|
return Promise.reject(new Error(res.message));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 批量删除分销商提现明细表
|
||||||
|
*/
|
||||||
|
export async function removeBatchShopDealerWithdraw(data: (number | undefined)[]) {
|
||||||
|
const res = await request.del<ApiResult<unknown>>(
|
||||||
|
'/shop/shop-dealer-withdraw/batch',
|
||||||
|
{
|
||||||
|
data
|
||||||
|
}
|
||||||
|
);
|
||||||
|
if (res.code === 0) {
|
||||||
|
return res.message;
|
||||||
|
}
|
||||||
|
return Promise.reject(new Error(res.message));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据id查询分销商提现明细表
|
||||||
|
*/
|
||||||
|
export async function getShopDealerWithdraw(id: number) {
|
||||||
|
const res = await request.get<ApiResult<ShopDealerWithdraw>>(
|
||||||
|
'/shop/shop-dealer-withdraw/' + id
|
||||||
|
);
|
||||||
|
if (res.code === 0 && res.data) {
|
||||||
|
return res.data;
|
||||||
|
}
|
||||||
|
return Promise.reject(new Error(res.message));
|
||||||
|
}
|
||||||
@@ -1,35 +0,0 @@
|
|||||||
import type { PageParam } from '@/api/index';
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 商品优惠券表
|
|
||||||
*/
|
|
||||||
export interface ShopGoodsCoupon {
|
|
||||||
//
|
|
||||||
id?: number;
|
|
||||||
// 商品id
|
|
||||||
goodsId?: number;
|
|
||||||
// 优惠劵id
|
|
||||||
issueCouponId?: number;
|
|
||||||
// 排序(数字越小越靠前)
|
|
||||||
sortNumber?: number;
|
|
||||||
// 状态, 0正常, 1冻结
|
|
||||||
status?: number;
|
|
||||||
// 是否删除, 0否, 1是
|
|
||||||
deleted?: number;
|
|
||||||
// 用户ID
|
|
||||||
userId?: number;
|
|
||||||
// 租户id
|
|
||||||
tenantId?: number;
|
|
||||||
// 注册时间
|
|
||||||
createTime?: string;
|
|
||||||
// 修改时间
|
|
||||||
updateTime?: string;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 商品优惠券表搜索条件
|
|
||||||
*/
|
|
||||||
export interface ShopGoodsCouponParam extends PageParam {
|
|
||||||
id?: number;
|
|
||||||
keywords?: string;
|
|
||||||
}
|
|
||||||
@@ -1,113 +0,0 @@
|
|||||||
import type { PageParam } from '@/api/index';
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 商品评价
|
|
||||||
*/
|
|
||||||
export interface ShopGoodsReview {
|
|
||||||
// 评价ID
|
|
||||||
reviewId?: number;
|
|
||||||
// 商品ID
|
|
||||||
goodsId?: number;
|
|
||||||
// 订单ID
|
|
||||||
orderId?: number;
|
|
||||||
// 用户ID
|
|
||||||
userId?: number;
|
|
||||||
// 用户昵称
|
|
||||||
nickname?: string;
|
|
||||||
// 用户头像
|
|
||||||
avatar?: string;
|
|
||||||
// 评价内容
|
|
||||||
content?: string;
|
|
||||||
// 评分 1-5星
|
|
||||||
rating?: number;
|
|
||||||
// 评价图片,JSON数组格式
|
|
||||||
images?: string;
|
|
||||||
// 是否匿名评价
|
|
||||||
isAnonymous?: boolean;
|
|
||||||
// 商家回复
|
|
||||||
reply?: string;
|
|
||||||
// 商家回复时间
|
|
||||||
replyTime?: string;
|
|
||||||
// 评价状态 0待审核 1已通过 2已拒绝
|
|
||||||
status?: number;
|
|
||||||
// 是否置顶
|
|
||||||
isTop?: boolean;
|
|
||||||
// 点赞数
|
|
||||||
likeCount?: number;
|
|
||||||
// 创建时间
|
|
||||||
createTime?: string;
|
|
||||||
// 更新时间
|
|
||||||
updateTime?: string;
|
|
||||||
// 商品信息
|
|
||||||
goodsName?: string;
|
|
||||||
goodsImage?: string;
|
|
||||||
goodsPrice?: string;
|
|
||||||
// SKU信息
|
|
||||||
skuId?: number;
|
|
||||||
specInfo?: string;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 评价统计
|
|
||||||
*/
|
|
||||||
export interface ReviewStats {
|
|
||||||
// 总评价数
|
|
||||||
totalCount: number;
|
|
||||||
// 好评数
|
|
||||||
goodCount: number;
|
|
||||||
// 中评数
|
|
||||||
mediumCount: number;
|
|
||||||
// 差评数
|
|
||||||
badCount: number;
|
|
||||||
// 好评率
|
|
||||||
goodRate: number;
|
|
||||||
// 平均评分
|
|
||||||
avgRating: number;
|
|
||||||
// 各星级统计
|
|
||||||
ratingStats: {
|
|
||||||
[key: number]: number; // 星级 -> 数量
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 评价查询参数
|
|
||||||
*/
|
|
||||||
export interface ShopGoodsReviewParam extends PageParam {
|
|
||||||
// 商品ID
|
|
||||||
goodsId?: number;
|
|
||||||
// 用户ID
|
|
||||||
userId?: number;
|
|
||||||
// 订单ID
|
|
||||||
orderId?: number;
|
|
||||||
// 评分筛选
|
|
||||||
rating?: number;
|
|
||||||
// 状态筛选
|
|
||||||
status?: number;
|
|
||||||
// 是否有图片
|
|
||||||
hasImages?: boolean;
|
|
||||||
// 排序方式 time:时间 rating:评分 like:点赞数
|
|
||||||
sortBy?: string;
|
|
||||||
// 排序方向 asc:升序 desc:降序
|
|
||||||
sortOrder?: string;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 提交评价请求
|
|
||||||
*/
|
|
||||||
export interface SubmitReviewRequest {
|
|
||||||
// 商品ID
|
|
||||||
goodsId: number;
|
|
||||||
// 订单ID
|
|
||||||
orderId: number;
|
|
||||||
// 评价内容
|
|
||||||
content: string;
|
|
||||||
// 评分
|
|
||||||
rating: number;
|
|
||||||
// 评价图片
|
|
||||||
images?: string[];
|
|
||||||
// 是否匿名
|
|
||||||
isAnonymous?: boolean;
|
|
||||||
// SKU信息
|
|
||||||
skuId?: number;
|
|
||||||
specInfo?: string;
|
|
||||||
}
|
|
||||||
101
src/api/shop/shopUserCoupon/index.ts
Normal file
101
src/api/shop/shopUserCoupon/index.ts
Normal file
@@ -0,0 +1,101 @@
|
|||||||
|
import request from '@/utils/request';
|
||||||
|
import type { ApiResult, PageResult } from '@/api/index';
|
||||||
|
import type { ShopUserCoupon, ShopUserCouponParam } from './model';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 分页查询用户优惠券
|
||||||
|
*/
|
||||||
|
export async function pageShopUserCoupon(params: ShopUserCouponParam) {
|
||||||
|
const res = await request.get<ApiResult<PageResult<ShopUserCoupon>>>(
|
||||||
|
'/shop/shop-user-coupon/page',
|
||||||
|
params
|
||||||
|
);
|
||||||
|
if (res.code === 0) {
|
||||||
|
return res.data;
|
||||||
|
}
|
||||||
|
return Promise.reject(new Error(res.message));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询用户优惠券列表
|
||||||
|
*/
|
||||||
|
export async function listShopUserCoupon(params?: ShopUserCouponParam) {
|
||||||
|
const res = await request.get<ApiResult<ShopUserCoupon[]>>(
|
||||||
|
'/shop/shop-user-coupon',
|
||||||
|
params
|
||||||
|
);
|
||||||
|
if (res.code === 0 && res.data) {
|
||||||
|
return res.data;
|
||||||
|
}
|
||||||
|
return Promise.reject(new Error(res.message));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 添加用户优惠券
|
||||||
|
*/
|
||||||
|
export async function addShopUserCoupon(data: ShopUserCoupon) {
|
||||||
|
const res = await request.post<ApiResult<unknown>>(
|
||||||
|
'/shop/shop-user-coupon',
|
||||||
|
data
|
||||||
|
);
|
||||||
|
if (res.code === 0) {
|
||||||
|
return res.message;
|
||||||
|
}
|
||||||
|
return Promise.reject(new Error(res.message));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 修改用户优惠券
|
||||||
|
*/
|
||||||
|
export async function updateShopUserCoupon(data: ShopUserCoupon) {
|
||||||
|
const res = await request.put<ApiResult<unknown>>(
|
||||||
|
'/shop/shop-user-coupon',
|
||||||
|
data
|
||||||
|
);
|
||||||
|
if (res.code === 0) {
|
||||||
|
return res.message;
|
||||||
|
}
|
||||||
|
return Promise.reject(new Error(res.message));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除用户优惠券
|
||||||
|
*/
|
||||||
|
export async function removeShopUserCoupon(id?: number) {
|
||||||
|
const res = await request.del<ApiResult<unknown>>(
|
||||||
|
'/shop/shop-user-coupon/' + id
|
||||||
|
);
|
||||||
|
if (res.code === 0) {
|
||||||
|
return res.message;
|
||||||
|
}
|
||||||
|
return Promise.reject(new Error(res.message));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 批量删除用户优惠券
|
||||||
|
*/
|
||||||
|
export async function removeBatchShopUserCoupon(data: (number | undefined)[]) {
|
||||||
|
const res = await request.del<ApiResult<unknown>>(
|
||||||
|
'/shop/shop-user-coupon/batch',
|
||||||
|
{
|
||||||
|
data
|
||||||
|
}
|
||||||
|
);
|
||||||
|
if (res.code === 0) {
|
||||||
|
return res.message;
|
||||||
|
}
|
||||||
|
return Promise.reject(new Error(res.message));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据id查询用户优惠券
|
||||||
|
*/
|
||||||
|
export async function getShopUserCoupon(id: number) {
|
||||||
|
const res = await request.get<ApiResult<ShopUserCoupon>>(
|
||||||
|
'/shop/shop-user-coupon/' + id
|
||||||
|
);
|
||||||
|
if (res.code === 0 && res.data) {
|
||||||
|
return res.data;
|
||||||
|
}
|
||||||
|
return Promise.reject(new Error(res.message));
|
||||||
|
}
|
||||||
@@ -60,7 +60,8 @@ export default defineAppConfig({
|
|||||||
'goodsDetail/index',
|
'goodsDetail/index',
|
||||||
'orderConfirm/index',
|
'orderConfirm/index',
|
||||||
'orderConfirmCart/index',
|
'orderConfirmCart/index',
|
||||||
'search/index'
|
'search/index',
|
||||||
|
'shopArticle/index'
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
|||||||
31
src/pages/cart/cart.scss
Normal file
31
src/pages/cart/cart.scss
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
// 购物车页面样式
|
||||||
|
.cart-page {
|
||||||
|
// 当购物车为空时,设置透明背景
|
||||||
|
&.empty {
|
||||||
|
page {
|
||||||
|
background-color: transparent !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cart-empty-container {
|
||||||
|
background-color: transparent !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 空购物车容器样式
|
||||||
|
.cart-empty-container {
|
||||||
|
background-color: transparent !important;
|
||||||
|
|
||||||
|
// 确保 Empty 组件及其子元素也是透明的
|
||||||
|
.nut-empty {
|
||||||
|
background-color: transparent !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nut-empty__image {
|
||||||
|
background-color: transparent !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nut-empty__description {
|
||||||
|
background-color: transparent !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -13,6 +13,7 @@ import {
|
|||||||
import {ArrowLeft, Del, Shopping} from '@nutui/icons-react-taro';
|
import {ArrowLeft, Del, Shopping} from '@nutui/icons-react-taro';
|
||||||
import {View} from '@tarojs/components';
|
import {View} from '@tarojs/components';
|
||||||
import {CartItem, useCart} from "@/hooks/useCart";
|
import {CartItem, useCart} from "@/hooks/useCart";
|
||||||
|
import './cart.scss';
|
||||||
|
|
||||||
function Cart() {
|
function Cart() {
|
||||||
const [statusBarHeight, setStatusBarHeight] = useState<number>(0);
|
const [statusBarHeight, setStatusBarHeight] = useState<number>(0);
|
||||||
@@ -69,6 +70,21 @@ function Cart() {
|
|||||||
});
|
});
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
|
// 根据购物车状态动态设置页面背景色
|
||||||
|
useEffect(() => {
|
||||||
|
if (cartItems.length === 0) {
|
||||||
|
// 购物车为空时设置透明背景
|
||||||
|
Taro.setBackgroundColor({
|
||||||
|
backgroundColor: 'transparent'
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
// 有商品时恢复默认背景
|
||||||
|
Taro.setBackgroundColor({
|
||||||
|
backgroundColor: '#f5f5f5'
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}, [cartItems.length]);
|
||||||
|
|
||||||
// 处理单个商品选择
|
// 处理单个商品选择
|
||||||
const handleItemSelect = (goodsId: number, checked: boolean) => {
|
const handleItemSelect = (goodsId: number, checked: boolean) => {
|
||||||
if (checked) {
|
if (checked) {
|
||||||
@@ -184,7 +200,10 @@ function Cart() {
|
|||||||
<Empty
|
<Empty
|
||||||
description="购物车空空如也"
|
description="购物车空空如也"
|
||||||
actions={[{ text: '去逛逛' }]}
|
actions={[{ text: '去逛逛' }]}
|
||||||
style={{ marginTop: `${statusBarHeight + 50}px` }}
|
style={{
|
||||||
|
marginTop: `${statusBarHeight + 50}px`,
|
||||||
|
backgroundColor: 'transparent'
|
||||||
|
}}
|
||||||
onClick={() => Taro.switchTab({ url: '/pages/index/index' })}
|
onClick={() => Taro.switchTab({ url: '/pages/index/index' })}
|
||||||
/>
|
/>
|
||||||
</>
|
</>
|
||||||
@@ -226,13 +245,20 @@ function Cart() {
|
|||||||
</NavBar>
|
</NavBar>
|
||||||
|
|
||||||
{/* 购物车内容 */}
|
{/* 购物车内容 */}
|
||||||
<View className="pt-24">
|
<View
|
||||||
|
className="pt-24"
|
||||||
|
style={{ backgroundColor: cartItems.length === 0 ? 'transparent' : undefined }}
|
||||||
|
>
|
||||||
{cartItems.length === 0 ? (
|
{cartItems.length === 0 ? (
|
||||||
// 空购物车
|
// 空购物车
|
||||||
<View className="flex flex-col items-center justify-center h-96">
|
<View
|
||||||
|
className="cart-empty-container flex flex-col items-center justify-center h-96"
|
||||||
|
style={{ backgroundColor: 'transparent' }}
|
||||||
|
>
|
||||||
<Empty
|
<Empty
|
||||||
image={<Shopping size={80}/>}
|
image={<Shopping size={80}/>}
|
||||||
description="购物车空空如也"
|
description="购物车空空如也"
|
||||||
|
style={{ backgroundColor: 'transparent' }}
|
||||||
>
|
>
|
||||||
<Button
|
<Button
|
||||||
type="primary"
|
type="primary"
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ import {NavBar, Cell} from '@nutui/nutui-react-taro';
|
|||||||
import {Text} from '@tarojs/components';
|
import {Text} from '@tarojs/components';
|
||||||
import {ArrowRight, ImageRectangle, Coupon, Follow} from '@nutui/icons-react-taro'
|
import {ArrowRight, ImageRectangle, Coupon, Follow} from '@nutui/icons-react-taro'
|
||||||
import './find.scss'
|
import './find.scss'
|
||||||
|
import navTo from "@/utils/common";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 文章终极列表
|
* 文章终极列表
|
||||||
@@ -55,12 +56,18 @@ const Find = () => {
|
|||||||
<Text className={'pl-3'} style={{fontSize: '16px'}}>好物推荐</Text>
|
<Text className={'pl-3'} style={{fontSize: '16px'}}>好物推荐</Text>
|
||||||
</div>
|
</div>
|
||||||
} extra={<ArrowRight color="#cccccc" size={18}/>}/>
|
} extra={<ArrowRight color="#cccccc" size={18}/>}/>
|
||||||
<Cell title={
|
<Cell
|
||||||
|
title={
|
||||||
<div style={{display: 'inline-flex', alignItems: 'center'}}>
|
<div style={{display: 'inline-flex', alignItems: 'center'}}>
|
||||||
<Coupon size={18}/>
|
<Coupon size={18}/>
|
||||||
<span className={'pl-3'} style={{fontSize: '16px'}}>权益中心</span>
|
<span className={'pl-3'} style={{fontSize: '16px'}}>权益中心</span>
|
||||||
</div>
|
</div>
|
||||||
} extra={<ArrowRight color="#cccccc" size={18}/>}/>
|
}
|
||||||
|
extra={<ArrowRight color="#cccccc" size={18}/>}
|
||||||
|
onClick={() => {
|
||||||
|
navTo('/shop/shopArticle/index', true)
|
||||||
|
}}
|
||||||
|
/>
|
||||||
<Cell title={
|
<Cell title={
|
||||||
<div style={{display: 'inline-flex', alignItems: 'center'}}>
|
<div style={{display: 'inline-flex', alignItems: 'center'}}>
|
||||||
<Follow size={18}/>
|
<Follow size={18}/>
|
||||||
|
|||||||
@@ -144,6 +144,17 @@ const Address = () => {
|
|||||||
/>
|
/>
|
||||||
</Cell.Group>
|
</Cell.Group>
|
||||||
))}
|
))}
|
||||||
|
<View
|
||||||
|
className="fixed z-50 bottom-0 left-0 right-0 bg-white border-t border-gray-200 px-4 py-3 safe-area-bottom">
|
||||||
|
<Button
|
||||||
|
type="success"
|
||||||
|
size="large"
|
||||||
|
block
|
||||||
|
className="px-6"
|
||||||
|
onClick={() => Taro.navigateTo({url: '/user/address/add'})}>
|
||||||
|
新增地址
|
||||||
|
</Button>
|
||||||
|
</View>
|
||||||
</>
|
</>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user