@@ -16,7 +16,7 @@ export * from './category.data.ts' | |||||
export * from './material-classify.data.ts' | export * from './material-classify.data.ts' | ||||
export * from './goods-classify.data.ts' | export * from './goods-classify.data.ts' | ||||
export * from './goods-attr.data.ts' | export * from './goods-attr.data.ts' | ||||
export * from './shopee-product.data.ts' | |||||
export * from './platform-template.data.ts' | |||||
export interface ResponseDTO<T>{ | export interface ResponseDTO<T>{ | ||||
code: number; | code: number; | ||||
@@ -1,4 +1,3 @@ | |||||
//数据字典 | //数据字典 | ||||
export interface DataDictVO{ | export interface DataDictVO{ | ||||
description: string; | description: string; | ||||
@@ -16,13 +15,325 @@ export interface DataDictDetailVO { | |||||
} | } | ||||
export interface ShopeeTemplateVO { | |||||
/** | |||||
* TemplateInfoVO,模板数据 | |||||
*/ | |||||
export interface TemplateInfoVO { | |||||
/** | |||||
* 背景ids | |||||
*/ | |||||
backgroupIds?: number[]; | |||||
/** | |||||
* 类别 | |||||
*/ | |||||
catePubId: string; | |||||
/** | |||||
* 每天最大刊登量 | |||||
*/ | |||||
dayMaxPublishNumber?: number; | |||||
/** | |||||
* 模版id | |||||
*/ | |||||
id: number; | id: number; | ||||
categoryName: string; | |||||
createName: string; | |||||
createTime: string; | |||||
/** | |||||
* 图片信息 | |||||
*/ | |||||
imageInfo: TemplateImgVO[]; | |||||
/** | |||||
* 物流渠道 | |||||
*/ | |||||
logistics: TemplateLogisticsVO[]; | |||||
/** | |||||
* 素材组ids | |||||
*/ | |||||
materialClassifyIds?: number[]; | |||||
/** | |||||
* 店铺最大上架数量 | |||||
*/ | |||||
maxPrintCount: number; | |||||
/** | |||||
* 产品价格 | |||||
*/ | |||||
originalPrice: number; | |||||
/** | |||||
* 平台编码 | |||||
*/ | |||||
platformCode: string; | platformCode: string; | ||||
remark: string; | |||||
shopName: string; | |||||
/** | |||||
* 单价折扣 | |||||
*/ | |||||
priceDiscount?: number; | |||||
/** | |||||
* 变种比例 | |||||
*/ | |||||
proportion?: number; | |||||
/** | |||||
* 模板备注 | |||||
*/ | |||||
remark?: string; | |||||
/** | |||||
* 店铺id | |||||
*/ | |||||
shopId: number; | |||||
/** | |||||
* 类目属性 | |||||
*/ | |||||
templateAttrs: TemplateAttrInfoVO[]; | |||||
templateDimension: TemplateDimensionVO; | |||||
/** | |||||
* 模板名称编码 | |||||
*/ | |||||
templateName: string; | templateName: string; | ||||
templateProduct: TemplateProductVO; | |||||
templateSkuSpace?: TemplateSkuSpaceVO; | |||||
/** | |||||
* 图片信息 | |||||
*/ | |||||
videoInfo: TemplateVideoVO[]; | |||||
} | |||||
/** | |||||
* TemplateImgVO,模板图片信息 | |||||
*/ | |||||
export interface TemplateImgVO { | |||||
/** | |||||
* 图片id | |||||
*/ | |||||
id?: number; | |||||
/** | |||||
* 图片Url信息 | |||||
*/ | |||||
url: string; | |||||
} | |||||
/** | |||||
* TemplateLogisticsVO,模板物流通道 | |||||
*/ | |||||
export interface TemplateLogisticsVO { | |||||
/** | |||||
* 是否为此项目启用通道(0.否 1.是) | |||||
*/ | |||||
enabled: number; | |||||
/** | |||||
* 是否为买家支付运费(0.否 1.是) | |||||
*/ | |||||
isFree?: number; | |||||
/** | |||||
* 频道的 ID | |||||
*/ | |||||
logisticId: number; | |||||
/** | |||||
* 运费 | |||||
*/ | |||||
shippingFee?: number; | |||||
/** | |||||
* 大小 ID | |||||
*/ | |||||
sizeId?: number; | |||||
} | |||||
/** | |||||
* TemplateAttrInfoVO,模板属性信息封装VO | |||||
*/ | |||||
export interface TemplateAttrInfoVO { | |||||
templateAttr: TemplateAttrVO; | |||||
/** | |||||
* 模板属性值信息 | |||||
*/ | |||||
templateAttrVals: TemplateAttrValVO[]; | |||||
} | |||||
/** | |||||
* TemplateAttrVO,模板属性信息 | |||||
*/ | |||||
export interface TemplateAttrVO { | |||||
/** | |||||
* 属性ID | |||||
*/ | |||||
attrId: number; | |||||
/** | |||||
* 属性名称 | |||||
*/ | |||||
attrName: string; | |||||
} | |||||
/** | |||||
* TemplateAttrValVO,模板属性值信息 | |||||
*/ | |||||
export interface TemplateAttrValVO { | |||||
/** | |||||
* 属性值ID | |||||
*/ | |||||
attrValId: number; | |||||
/** | |||||
* 属性值名称 | |||||
*/ | |||||
attrValName: string; | |||||
/** | |||||
* 价值单位(仅限定量属性) | |||||
*/ | |||||
valueUnit?: string; | |||||
} | |||||
/** | |||||
* TemplateDimensionVO,模板包装尺寸 | |||||
*/ | |||||
export interface TemplateDimensionVO { | |||||
/** | |||||
* 包装高度,单位为厘米 | |||||
*/ | |||||
packageHeight: number; | |||||
/** | |||||
* 包装长度,单位为厘米 | |||||
*/ | |||||
packageLength: number; | |||||
/** | |||||
* 包装宽度,单位为厘米 | |||||
*/ | |||||
packageWidth: number; | |||||
/** | |||||
* 重量,单位为千克 | |||||
*/ | |||||
weight: number; | |||||
} | |||||
/** | |||||
* TemplateProductVO,模板产品信息 | |||||
*/ | |||||
export interface TemplateProductVO { | |||||
/** | |||||
* 品牌ID | |||||
*/ | |||||
brandId?: number; | |||||
/** | |||||
* 品牌名称 | |||||
*/ | |||||
brandName?: string; | |||||
/** | |||||
* 项目的状况,可以是二手的或新的 | |||||
*/ | |||||
conditionVal?: string; | |||||
/** | |||||
* 保证发货数量 | |||||
*/ | |||||
daysToShip?: number; | |||||
/** | |||||
* 描述数据字典ID | |||||
*/ | |||||
description: string; | |||||
/** | |||||
* 产品Id | |||||
*/ | |||||
id: number; | |||||
/** | |||||
* 商品是否为预购商品(0.否 1.是) | |||||
*/ | |||||
isPreOrder: number; | |||||
/** | |||||
* 产品名称数据字典ID | |||||
*/ | |||||
itemName: string; | |||||
/** | |||||
* 产品状态 | |||||
*/ | |||||
itemStatus: string; | |||||
} | |||||
/** | |||||
* TemplateSkuSpaceVO,模板sku | |||||
*/ | |||||
export interface TemplateSkuSpaceVO { | |||||
/** | |||||
* 销售数量 | |||||
*/ | |||||
inventory?: number; | |||||
/** | |||||
* 价格 | |||||
*/ | |||||
originalPrice?: number; | |||||
/** | |||||
* 尺码 | |||||
*/ | |||||
sizeId?: number; | |||||
/** | |||||
* 批发价格 | |||||
*/ | |||||
templateWholesale?: TemplateWholesaleVO[]; | |||||
} | |||||
/** | |||||
* TemplateWholesaleVO,模板批发价格 | |||||
*/ | |||||
export interface TemplateWholesaleVO { | |||||
/** | |||||
* 此层的最大计数 | |||||
*/ | |||||
maxCount: number; | |||||
/** | |||||
* 此层的最小计数 | |||||
*/ | |||||
minCount: number; | |||||
/** | |||||
* 价格 | |||||
*/ | |||||
unitPrice: number; | |||||
} | |||||
/** | |||||
* TemplateVideoVO,模板视频信息 | |||||
*/ | |||||
export interface TemplateVideoVO { | |||||
/** | |||||
* 视频id | |||||
*/ | |||||
id?: number; | |||||
/** | |||||
* 视频信息 | |||||
*/ | |||||
url: string; | |||||
} | |||||
//模板分页请求参数 | |||||
export interface TemplateInfoPageReqVO extends PageParam { | |||||
/** | |||||
* 背景id(a,b,c) | |||||
*/ | |||||
backgroupIds?: string; | |||||
/** | |||||
* 类目id | |||||
*/ | |||||
catePubId?: string; | |||||
/** | |||||
* 创建时间 | |||||
*/ | |||||
createTime?: string[]; | |||||
/** | |||||
* 素材id(a,b,c) | |||||
*/ | |||||
materialClassifyIds?: string; | |||||
/** | |||||
* 最大上刊数量 | |||||
*/ | |||||
maxPrintCount?: number; | |||||
/** | |||||
* 平台编码 | |||||
*/ | |||||
platformCode?: string; | |||||
/** | |||||
* 变种比例 | |||||
*/ | |||||
proportion?: number; | |||||
/** | |||||
* 备注 | |||||
*/ | |||||
remark?: string; | |||||
/** | |||||
* 店铺id | |||||
*/ | |||||
shopId?: number; | |||||
/** | |||||
* 模板名称 | |||||
*/ | |||||
templateName?: string; | |||||
} | } |
@@ -1,7 +1,7 @@ | |||||
import React, { useState, useEffect } from 'react'; | |||||
import { Space, Table, Form, Button, Card, Input, TreeSelect } from 'antd'; | import { Space, Table, Form, Button, Card, Input, TreeSelect } from 'antd'; | ||||
import type { ColumnsType } from 'antd/es/table'; | import type { ColumnsType } from 'antd/es/table'; | ||||
import { t } from '@/utils/i18n'; | import { t } from '@/utils/i18n'; | ||||
import React, { useState } from 'react'; | |||||
import { useNavigate } from 'react-router-dom'; | import { useNavigate } from 'react-router-dom'; | ||||
import { | import { | ||||
ExclamationCircleFilled, | ExclamationCircleFilled, | ||||
@@ -11,7 +11,10 @@ import { | |||||
UndoOutlined | UndoOutlined | ||||
} from '@ant-design/icons'; | } from '@ant-design/icons'; | ||||
import { antdUtils } from '@/utils/antd'; | import { antdUtils } from '@/utils/antd'; | ||||
import { ShopeeTemplateVO } from '@/models'; | |||||
import { useSetState } from 'ahooks'; | |||||
import { useRequest } from '@/hooks/use-request'; | |||||
import platformShopService from '@/request/service/platform-template'; | |||||
import { TemplateInfoVO, TemplateInfoPageReqVO } from '@/models'; | |||||
const treeData = [ | const treeData = [ | ||||
{ | { | ||||
@@ -53,42 +56,38 @@ const treeData = [ | |||||
]; | ]; | ||||
export default () => { | export default () => { | ||||
const data: ShopeeTemplateVO[] = [ | |||||
{ | |||||
"id": 78, | |||||
"platformCode": "Shopee", | |||||
"shopName": "Trista", | |||||
"categoryName": "T-Shirts", | |||||
"templateName": "T-SHIRT", | |||||
"remark": "1", | |||||
"createName": "admin", | |||||
"createTime": "2023-06-15 14:45:15" | |||||
}, | |||||
{ | |||||
"id": 77, | |||||
"platformCode": "Shopee", | |||||
"shopName": "Trista", | |||||
"categoryName": "T-Shirts", | |||||
"templateName": "T-SHIRT", | |||||
"remark": "1", | |||||
"createName": "admin", | |||||
"createTime": "2023-06-15 14:44:46" | |||||
}, | |||||
{ | |||||
"id": 76, | |||||
"platformCode": "Shopee", | |||||
"shopName": "Trista", | |||||
"categoryName": "T-Shirts", | |||||
"templateName": "T-SHIRT", | |||||
"remark": "", | |||||
"createName": "admin", | |||||
"createTime": "2023-06-15 14:42:24" | |||||
const [dataSource, setDataSource] = useState<TemplateInfoVO[]>([]); | |||||
const [total, setTotal] = useState(0); | |||||
const [searchFrom] = Form.useForm(); | |||||
const [searchState, setSearchState] = useSetState<TemplateInfoPageReqVO>({ | |||||
pageNo: 1, | |||||
pageSize: 10 | |||||
}); | |||||
const [treeLine, setTreeLine] = useState(true); | |||||
const [showLeafIcon, setShowLeafIcon] = useState(false); | |||||
const [showIcon, setShowIcon] = useState<boolean>(false); | |||||
//获取分页数据 | |||||
const { runAsync: getPageApi } = useRequest(platformShopService.pageApi, { manual: true }); | |||||
//删除数据 | |||||
const { runAsync: deleteApi } = useRequest(platformShopService.deleteApi, { manual: true }); | |||||
//加载数据 | |||||
const load = async () => { | |||||
const [error, { code, data, msg }] = await getPageApi(searchState); | |||||
if (error || code !== 0) { | |||||
antdUtils.message?.open({ type: 'error', content: msg ?? '操作失败' }) | |||||
} else { | |||||
setDataSource(data.list); | |||||
setTotal(data.total); | |||||
} | } | ||||
]; | |||||
}; | |||||
const showDeleteConfirm = (item: ShopeeTemplateVO) => { | |||||
const showDeleteConfirm = (item: TemplateInfoVO) => { | |||||
antdUtils.modal?.confirm({ | antdUtils.modal?.confirm({ | ||||
title: `确认删除标题为: ${item.shopName} 的模板吗?`, | |||||
title: `确认删除标题为: ${item.templateName} 的模板吗?`, | |||||
icon: <ExclamationCircleFilled />, | icon: <ExclamationCircleFilled />, | ||||
content: `请注意删除以后不可恢复!`, | content: `请注意删除以后不可恢复!`, | ||||
okText: '删除', | okText: '删除', | ||||
@@ -114,7 +113,7 @@ export default () => { | |||||
}); | }); | ||||
}; | }; | ||||
const columns: ColumnsType<ShopeeTemplateVO> = [ | |||||
const columns: ColumnsType<TemplateInfoVO> = [ | |||||
{ | { | ||||
title: '店铺', | title: '店铺', | ||||
dataIndex: 'shopName', | dataIndex: 'shopName', | ||||
@@ -162,13 +161,9 @@ export default () => { | |||||
}, | }, | ||||
]; | ]; | ||||
const [searchFrom] = Form.useForm(); | |||||
const navigate = useNavigate(); | |||||
const [treeLine, setTreeLine] = useState(true); | |||||
const [showLeafIcon, setShowLeafIcon] = useState(false); | |||||
const [showIcon, setShowIcon] = useState<boolean>(false); | |||||
useEffect(() => { | |||||
load(); | |||||
}, []) | |||||
return ( | return ( | ||||
<div> | <div> | ||||
@@ -204,8 +199,18 @@ export default () => { | |||||
</div> | </div> | ||||
</Card> | </Card> | ||||
<Card className='mt-[4px] dark:bg-[rgb(33,41,70)] bg-white roundle-lg px[12px]'> | <Card className='mt-[4px] dark:bg-[rgb(33,41,70)] bg-white roundle-lg px[12px]'> | ||||
<Table rowKey="id" scroll={{ x: true }} columns={columns} dataSource={data} className='bg-transparent' | |||||
pagination={{ position: ['bottomRight'] }} | |||||
<Table | |||||
rowKey="id" | |||||
scroll={{ x: true }} | |||||
columns={columns} | |||||
dataSource={dataSource} | |||||
className='bg-transparent' | |||||
pagination={{ | |||||
position: ['bottomRight'], | |||||
current: searchState.pageNo, | |||||
pageSize: searchState.pageSize, | |||||
total | |||||
}} | |||||
/> | /> | ||||
</Card> | </Card> | ||||
</div> | </div> | ||||
@@ -0,0 +1,35 @@ | |||||
import request from '@/request'; | |||||
import { | |||||
TemplateInfoVO, | |||||
TemplateInfoPageReqVO, | |||||
PageData | |||||
} from '@/models'; | |||||
const BASE_URL = '/admin-api/template/platform'; | |||||
export default { | |||||
//获得模版分页 | |||||
pageApi: (params: TemplateInfoPageReqVO) => { | |||||
return request.get<PageData<TemplateInfoVO>>(`${BASE_URL}/page`, { params }); | |||||
}, | |||||
//创建模版 | |||||
createApi: (data: TemplateInfoVO) => { | |||||
return request.post(`${BASE_URL}`, data); | |||||
}, | |||||
//修改模版 | |||||
updateApi: (data: TemplateInfoVO) => { | |||||
return request.put(`${BASE_URL}`, data); | |||||
}, | |||||
//获得模版 | |||||
getApi: (id: number) => { | |||||
return request.get(`${BASE_URL}/get?id=${id}`); | |||||
}, | |||||
//删除模版 | |||||
deleteApi: (id: number) => { | |||||
return request.delete(`${BASE_URL}/delete?id=${id}`); | |||||
}, | |||||
} |