Browse Source

update:SHProductVO & add:shopee-product api

dev
powersir 11 months ago
parent
commit
26f9fb4858
4 changed files with 320 additions and 74 deletions
  1. +1
    -0
      src/models/index.ts
  2. +245
    -21
      src/models/platform-product.data.ts
  3. +41
    -53
      src/pages/custom/platform-product/shopee/index.tsx
  4. +33
    -0
      src/request/service/shopee-product.ts

+ 1
- 0
src/models/index.ts View File

@@ -16,6 +16,7 @@ export * from './category.data.ts'
export * from './material-classify.data.ts'
export * from './goods-classify.data.ts'
export * from './goods-attr.data.ts'
export * from './shopee-product.data.ts'

export interface ResponseDTO<T>{
code: number;


+ 245
- 21
src/models/platform-product.data.ts View File

@@ -1,32 +1,256 @@
/**
* SHProductVO 虾皮商品
*/
export interface SHProductVO {
/**
* 品牌id(类目属性冗余过来,这个必填)
*/
brandId: number;
/**
* 类目id
*/
catePubId: string;
/**
* 类目名称
*/
catePubName: string;
/**
* 项目状况,可以是新的或二手的
*/
conditionVal?: string;
/**
* 创建时间
*/
createTime: Date;
/**
* 保证发货订单的天数
*/
daysToShip?: number;
/**
* 是否删除 0:未删除 1:删除
*/
deleted: boolean;
/**
* 描述-需要确认大小
*/
description: string;
/**
* description_type(正常,扩展)--- 不要了,白名单卖家字段关联,那个先不管
*/
descriptionType?: string;
/**
* 虾皮折扣活动ID
*/
discountId?: number;
/**
* (仅适用于 BR 本地卖家)全球贸易项目代码。如果已上传,请通过get_item_base_info api 检查项目的gtin_code
*/
gtinCode?: string;
/**
* 自增id
*/
id: number;
/**
* 图片
*/
imgUrl: string;
/**
* 产品备货数量
*/
inventory?: number;
/**
* 商品是否为预购商品(0.否 1.是)
*/
isPreOrder: number;
/**
* 是否已刊登到店铺1: 是, 2: 否 3.仍需手动重新刊登
*/
isPublish: string;
/**
* 此字段仅适用于印度尼西亚和马来西亚的本地卖家。使用此字段可确定产品是否为危险产品。0 表示非危险品,1 表示危险品。有关更多信息,请访问市场相应的卖家教育中心。)
*/
itemDangerous?: string;
/**
* 产品id
*/
itemId?: number;
/**
* 产品名称
*/
itemName: string;
/**
* 产品状态(UNLIST:下架状态; NORMAL:上架状态)
*/
itemStatus?: string;
/**
* 产品价格
*/
originalPrice?: number;
/**
* 单价折扣
*/
priceDiscount?: number;
/**
* 刊登失败原因
*/
publishErrInfo?: string;
/**
* 刊登时间
*/
publishTime?: Date;
/**
* 用于错误跟踪的 API 请求的标识符
*/
requestId?: string;
/**
* 店铺id
*/
shopId: number;
/**
* 尺码ID
*/
sizeId?: number;
/**
* 产品spu编码
*/
spuCode: string;
/**
* 成品spuCode
*/
tbSpuCodes: string[];
/**
* 模版Id
*/
templateId: number;
/**
* 模版名称
*/
templateName: string;
}


export interface SHProductPageReqVO extends PageParam {
/**
* 品牌id(类目属性冗余过来,这个必填)
*/
brandId?: number;
/**
* 类目id
*/
catePubId?: string;
/**
* 项目状况,可以是新的或二手的
*/
conditionVal?: string;
/**
* 创建时间
*/
createTime?: string[];
/**
* 保证发货订单的天数
*/
daysToShip?: number;
/**
* 描述-需要确认大小
*/
description?: string;
/**
* description_type(正常,扩展)--- 不要了,白名单卖家字段关联,那个先不管
*/
descriptionType?: string;
/**
* 虾皮折扣活动ID
*/
discountId?: number;
/**
* (仅适用于 BR 本地卖家)全球贸易项目代码。如果已上传,请通过get_item_base_info api 检查项目的gtin_code
*/
gtinCode?: string;
/**
* 产品备货数量
*/
inventory?: number;
/**
* 商品是否为预购商品(0.否 1.是)
*/
isPreOrder?: number;
/**
* 是否已刊登到店铺1: 是, 2: 否 3.仍需手动重新刊登
*/
isPublish?: string;
/**
* 此字段仅适用于印度尼西亚和马来西亚的本地卖家。使用此字段可确定产品是否为危险产品。0 表示非危险品,1 表示危险品。有关更多信息,请访问市场相应的卖家教育中心。)
*/
itemDangerous?: string;
/**
* 产品id
*/
itemId?: number;
/**
* 产品名称
*/
itemName?: string;
/**
* 产品状态(UNLIST:下架状态; NORMAL:上架状态)
*/
itemStatus?: string;
/**
* 产品价格
*/
originalPrice?: number;
/**
* 单价折扣
*/
priceDiscount?: number;
/**
* 刊登失败原因
*/
publishErrInfo?: string;
/**
* 刊登时间
*/
publishTime?: string[];
/**
* 用于错误跟踪的 API 请求的标识符
*/
requestId?: string;
/**
* 店铺id
*/
shopId?: number;
/**
* 尺码ID
*/
sizeId?: number;
/**
* 产品spu编码
*/
spuCode?: string;
/**
* 模版Id
*/
templateId?: number;
}

export interface UpdateSHProductNameReqVO {
id: number;
spuCode: string;
gpts: ProductKeywordGpt[];
}

export interface ProductKeywordGpt {
dynamicTableName: string;
id: number;
idList: string[],
keyword: string;
keywordType: number;
lang: string;
spuCode: string;
tableName: string;
}

export interface ShpopeeProductVO {
catePubId: string;
catePubName: string;
export interface UpdateSHProductPriceReqVO {
id: number;
imgUrl: string;
isDelete: number;
isPublish: number;
itemId: number;
itemName: string;
originalPrice: number;
publishErrInfo: string;
publishTime: string;
requestId: string;
spuCode: string;
tbProductKeywordGpts: ProductKeywordGpt[];
tbSpuCodes: string[],
templateId: number;
templateName: string;
}


export interface UpdateSHProductDescReqVO {
id: number;
description: string;
}

+ 41
- 53
src/pages/custom/platform-product/shopee/index.tsx View File

@@ -1,18 +1,17 @@
import React, { useEffect, useState } from 'react';
import { Space, Table, Form, Button, Card, Input, TreeSelect, Image } from 'antd';
import type { ColumnsType } from 'antd/es/table';
import { t } from '@/utils/i18n';
import React, { useState } from 'react';
import { useNavigate } from 'react-router-dom';
import {
ExclamationCircleFilled,
PlusOutlined,
CarryOutOutlined,
SearchOutlined,
UndoOutlined
} from '@ant-design/icons';
import { antdUtils } from '@/utils/antd';
import { ShpopeeProductVO } from '@/models';
import mockData from '../../../../../mock/shopeeProduct.json'
import { useSetState } from 'ahooks';
import { SHProductVO, SHProductPageReqVO } from '@/models';
import { useRequest } from '@/hooks/use-request';
import shopeeProductService from '@/request/service/shopee-product';

const treeData = [
{
@@ -55,35 +54,28 @@ const treeData = [

export default () => {

const showDeleteConfirm = (item: ShpopeeProductVO) => {
antdUtils.modal?.confirm({
title: `确认删除编码为: ${item.spuCode} 的产品吗?`,
icon: <ExclamationCircleFilled />,
content: `请注意删除以后不可恢复!`,
okText: '删除',
okType: 'danger',
cancelText: '取消',
onOk() {
return new Promise((resolve, reject) => {
setTimeout(() => {
antdUtils.message?.open({
type: 'success',
content: '删除成功',
});
resolve(null)
}, 1000);
const [dataSource, setDataSource] = useState<SHProductVO[]>([]);
const [searchFrom] = Form.useForm();
const [searchState, setSearchState] = useSetState<SHProductPageReqVO>({});
const [total, setTotal] = useState(0);

}).catch(() => antdUtils.message?.open({
type: 'error',
content: '操作失败',
}));
},
onCancel() {
},
});
};
const { runAsync: getPageApi } = useRequest(shopeeProductService.pageApi, { manual: true });
const { runAsync: batchUpdateNameApi } = useRequest(shopeeProductService.batchUpdateNameApi, { manual: true });
const { runAsync: batchUpdateDescApi } = useRequest(shopeeProductService.batchUpdateDescApi, { manual: true });
const { runAsync: batchUpdatePriceApi } = useRequest(shopeeProductService.batchUpdatePriceApi, { manual: true });

const columns: ColumnsType<ShpopeeProductVO> = [
const load = async () => {
searchFrom.setFieldValue("pageSize", searchState.pageSize);
searchFrom.setFieldValue("pageNo", searchState.pageNo);
//TODO: merge search params
const [error, { data }] = await getPageApi(searchFrom.getFieldsValue());
if (!error) {
setDataSource(data.list);
setTotal(data.total);
}
}

const columns: ColumnsType<SHProductVO> = [
{
title: '缩略图',
dataIndex: 'imgUrl',
@@ -127,30 +119,17 @@ export default () => {
title: '刊登时间',
key: 'publishTime',
dataIndex: 'publishTime'
},
{
title: t("QkOmYwne" /* 操作 */),
key: 'action',
render: (_, record) => (
<Space size="middle">
<a onClick={() => {
}}>编辑</a>
<a onClick={() => {
showDeleteConfirm(record)
}}>删除</a>
</Space>
),
},
}
];

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();
}, [searchFrom, searchState]);

return (
<div>
<div>
@@ -182,8 +161,17 @@ export default () => {
</div>
</Card>
<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={mockData as ShpopeeProductVO[]} 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>
</div>


+ 33
- 0
src/request/service/shopee-product.ts View File

@@ -0,0 +1,33 @@
import request from '@/request';
import {
SHProductVO,
SHProductPageReqVO,
UpdateSHProductNameReqVO,
UpdateSHProductPriceReqVO,
UpdateSHProductDescReqVO,
PageData
} from '@/models';

const BASE_URL = '/admin-api/shopee/product';

export default {

pageApi: (params: SHProductPageReqVO) => {
return request.get<PageData<SHProductVO>>(`${BASE_URL}/page`, { params });
},

//批量修改标题
batchUpdateNameApi: (data: UpdateSHProductNameReqVO[]) => {
return request.put(`${BASE_URL}/batchUpdateName`, data);
},

//批量修改价格
batchUpdatePriceApi: (data: UpdateSHProductPriceReqVO[]) => {
return request.put(`${BASE_URL}/batchUpdatePrice`, data);
},

//批量修改描述
batchUpdateDescApi: (data: UpdateSHProductDescReqVO[]) => {
return request.put(`${BASE_URL}/batchUpdateDesc`, data);
}
}

Loading…
Cancel
Save