提交 e604c922 作者: 龚洪江

功能:商品新增,商品编辑(联调完成)

上级 d500c2d9
...@@ -80,9 +80,10 @@ type categoryItemType = { ...@@ -80,9 +80,10 @@ type categoryItemType = {
createTime: string; createTime: string;
icon: string; icon: string;
description: string; description: string;
subDTOList: (Omit<categoryItemType, 'createTime' | 'icon' | 'subDTOList'> & { subDTOList: (Omit<categoryItemType, 'createTime' | 'icon' | 'subDTOList' | 'sort'> & {
categoryPrimaryId: number; categoryPrimaryId: number;
})[]; })[];
sort: number;
}; };
export type categoryListRespType = InterItemFunction<{ id?: number }, categoryItemType[]>; export type categoryListRespType = InterItemFunction<{ id?: number }, categoryItemType[]>;
//分类管理-1级分类新增(新) //分类管理-1级分类新增(新)
...@@ -106,6 +107,9 @@ export type updatePrimaryCategoryType = InterFunction< ...@@ -106,6 +107,9 @@ export type updatePrimaryCategoryType = InterFunction<
>; >;
//分类管理-1级分类删除(新) //分类管理-1级分类删除(新)
export type deletePrimaryCategoryType = InterFunction<{ id: number }, any>; export type deletePrimaryCategoryType = InterFunction<{ id: number }, any>;
//分类管理-1级分类交换顺序(新)
export type exchangeType = InterFunction<{ id: number; sort: number }[], any>;
//分类管理-2级分类新增(新) //分类管理-2级分类新增(新)
export type addSubCategoryType = InterFunction< export type addSubCategoryType = InterFunction<
{ {
......
...@@ -127,6 +127,7 @@ export type addMallGoodsType = InterFunction< ...@@ -127,6 +127,7 @@ export type addMallGoodsType = InterFunction<
specValueImage: string; specValueImage: string;
specValueName: string; specValueName: string;
stock?: number; stock?: number;
goodsSpecId?: number;
}[]; }[];
id: any; id: any;
mallGoodsId: number; mallGoodsId: number;
...@@ -164,6 +165,7 @@ export type editMallGoodsType = InterFunction< ...@@ -164,6 +165,7 @@ export type editMallGoodsType = InterFunction<
specValueImage: string; specValueImage: string;
specValueName: string; specValueName: string;
stock?: number; stock?: number;
goodsSpecId: number;
}[]; }[];
id: any; id: any;
mallGoodsId: number; mallGoodsId: number;
......
...@@ -7,8 +7,10 @@ import { ...@@ -7,8 +7,10 @@ import {
categoryListType, categoryListType,
categoryRelevantType, categoryRelevantType,
deletePrimaryCategoryType, deletePrimaryCategoryType,
deleteSubCategoryType,
directoryListType, directoryListType,
directoryPageListType, directoryPageListType,
exchangeType,
updatePrimaryCategoryType, updatePrimaryCategoryType,
updateSubCategoryType, updateSubCategoryType,
} from '~/api/interface/categoryManage'; } from '~/api/interface/categoryManage';
...@@ -116,6 +118,8 @@ export class CategoryManageAPI { ...@@ -116,6 +118,8 @@ export class CategoryManageAPI {
// 分类管理-1级分类删除(新) // 分类管理-1级分类删除(新)
static deletePrimaryCategory: deletePrimaryCategoryType = (params) => static deletePrimaryCategory: deletePrimaryCategoryType = (params) =>
axios.get('/pms/category/deletePrimaryCategory', { params }); axios.get('/pms/category/deletePrimaryCategory', { params });
//分类管理-1级分类交换顺序
static exchangeCategory: exchangeType = (data) => axios.post('/pms/category/exchange', data);
// 分类管理-2级分类新增(新) // 分类管理-2级分类新增(新)
static addSubCategory: addSubCategoryType = (data) => static addSubCategory: addSubCategoryType = (data) =>
axios.post('/pms/category/addSubCategory', data); axios.post('/pms/category/addSubCategory', data);
...@@ -123,6 +127,6 @@ export class CategoryManageAPI { ...@@ -123,6 +127,6 @@ export class CategoryManageAPI {
static updateSubCategory: updateSubCategoryType = (data) => static updateSubCategory: updateSubCategoryType = (data) =>
axios.post('/pms/category/updateSubCategory', data); axios.post('/pms/category/updateSubCategory', data);
// 分类管理-2级分类删除(新) // 分类管理-2级分类删除(新)
static deleteSubCategory: deletePrimaryCategoryType = (params) => static deleteSubCategory: deleteSubCategoryType = (params) =>
axios.get('/pms/category/deleteSubCategory', { params }); axios.get('/pms/category/deleteSubCategory', { params });
} }
import SearchBox from '~/components/search-box'; import SearchBox from '~/components/search-box';
import { Button, Checkbox, Form, Image, message, Modal, Table, Tooltip } from 'antd'; import { Button, Form, Image, message, Modal, Radio, Table, Tooltip } from 'antd';
import { import {
ArrowDownOutlined, ArrowDownOutlined,
ArrowUpOutlined, ArrowUpOutlined,
...@@ -14,6 +14,7 @@ import { CategoryManageAPI } from '~/api'; ...@@ -14,6 +14,7 @@ import { CategoryManageAPI } from '~/api';
import EditableCell from '~/components/EditableCell'; import EditableCell from '~/components/EditableCell';
import AddOrEditCategoryModal from './components/addOrEditCategoryModal'; import AddOrEditCategoryModal from './components/addOrEditCategoryModal';
import './index.scss'; import './index.scss';
import _ from 'lodash';
type EditableTableProps = Parameters<typeof Table>[0]; type EditableTableProps = Parameters<typeof Table>[0];
type ColumnTypes = Exclude<EditableTableProps['columns'], undefined>; type ColumnTypes = Exclude<EditableTableProps['columns'], undefined>;
...@@ -147,6 +148,7 @@ const CategoryList = () => { ...@@ -147,6 +148,7 @@ const CategoryList = () => {
}; };
}); });
const [tableData, setTableData] = useState<categoryType>([]); const [tableData, setTableData] = useState<categoryType>([]);
const [allTableData, setAllTableData] = useState<categoryType>([]);
//分页 //分页
const [pagination, setPagination] = useState<PaginationProps & { totalCount: number }>({ const [pagination, setPagination] = useState<PaginationProps & { totalCount: number }>({
pageNo: 1, pageNo: 1,
...@@ -155,16 +157,21 @@ const CategoryList = () => { ...@@ -155,16 +157,21 @@ const CategoryList = () => {
}); });
//获取分类列表 //获取分类列表
const getCategoryList = () => { const getCategoryList = (query?: PaginationProps, isAll?: boolean) => {
setLoading(true); setLoading(true);
CategoryManageAPI.getCategoryRespList({ CategoryManageAPI.getCategoryRespList({
pageNo: pagination.pageNo, pageNo: pagination.pageNo,
pageSize: pagination.pageSize, pageSize: pagination.pageSize,
...query,
}).then(({ result }) => { }).then(({ result }) => {
setLoading(false); setLoading(false);
setTableData(result.list ? [...result.list] : []); if (isAll) {
pagination.totalCount = result.totalCount; setAllTableData(result.list ? [...result.list] : []);
setPagination(pagination); } else {
setTableData(result.list ? [...result.list] : []);
pagination.totalCount = result.totalCount;
setPagination(pagination);
}
}); });
}; };
const paginationChange = (pageNo: number, pageSize: number) => { const paginationChange = (pageNo: number, pageSize: number) => {
...@@ -182,6 +189,7 @@ const CategoryList = () => { ...@@ -182,6 +189,7 @@ const CategoryList = () => {
setSelectedRowKeys([...selectedRowKeys, record.id]); setSelectedRowKeys([...selectedRowKeys, record.id]);
} }
}; };
//新增、编辑分类弹窗 //新增、编辑分类弹窗
const addOrEditCategoryModalShowClick = (record?: categoryType[0] | any) => { const addOrEditCategoryModalShowClick = (record?: categoryType[0] | any) => {
if (record && !record.subDTOList) { if (record && !record.subDTOList) {
...@@ -306,9 +314,74 @@ const CategoryList = () => { ...@@ -306,9 +314,74 @@ const CategoryList = () => {
} }
} }
}; };
// 切换排序
const handleSort = _.debounce(async (from: 'up' | 'down') => {
if (selectedRowKeys.length === 0) {
message.warning('请选择需要排序的数据').then();
return;
}
// 当前选项
const id = selectedRowKeys.at(-1);
// 当前索引
const index = allTableData.findIndex((i) => i.id === id);
// 当前表格中的索引
const tableIndex = tableData.findIndex((i) => i.id === id);
// 第一条数据不能上移
if (index === 0 && from === 'up') {
message.warning('已是第一条数据').then();
return;
}
// 最后一条数据不能下移
if (index === allTableData.length - 1 && from === 'down') {
message.warning('已是最后一条数据').then();
return;
}
// 转换位置
const res = await CategoryManageAPI.exchangeCategory(
from === 'up'
? [
{ id: allTableData[index - 1].id, sort: allTableData[index - 1].sort },
{ id: allTableData[index].id, sort: allTableData[index].sort },
]
: [
{ id: allTableData[index + 1].id, sort: allTableData[index + 1].sort },
{ id: allTableData[index].id, sort: allTableData[index].sort },
],
);
if (res && res.code === '200') {
message.success('操作成功').then();
// 如果是当前页的第一条数据
if (tableIndex === 0 && from === 'up') {
paginationChange(pagination.pageNo - 1, pagination.pageSize);
getCategoryList({ pageNo: 1, pageSize: 9999 }, true);
return;
}
// 如果是当前页的最后一条数据
if (tableIndex === tableData.length - 1 && from === 'down') {
paginationChange(pagination.pageNo + 1, pagination.pageSize);
getCategoryList({ pageNo: 1, pageSize: 9999 }, true);
return;
}
paginationChange(pagination.pageNo, pagination.pageSize);
getCategoryList({ pageNo: 1, pageSize: 9999 }, true);
}
}, 500);
//防抖
// const debounce:<T extends ()=>T>= (func: T, delay: number)=> {
// let timeout: NodeJS.Timeout;
//
// return function (this: ThisParameterType<T>, ...args: Parameters<T>): ReturnType<T> {
// clearTimeout(timeout);
//
// timeout = setTimeout(() => {
// func.apply(this, args);
// }, delay);
// } as T;
// }
useEffect(() => { useEffect(() => {
getCategoryList(); getCategoryList();
getCategoryList({ pageNo: 1, pageSize: 99999 }, true);
}, []); }, []);
return ( return (
...@@ -323,8 +396,16 @@ const CategoryList = () => { ...@@ -323,8 +396,16 @@ const CategoryList = () => {
> >
新增分类 新增分类
</Button> </Button>
<Button icon={<ArrowUpOutlined />} type='primary'></Button> <Button
<Button icon={<ArrowDownOutlined />} type='primary'></Button> icon={<ArrowUpOutlined />}
type='primary'
onClick={() => handleSort('up')}
></Button>
<Button
icon={<ArrowDownOutlined />}
type='primary'
onClick={() => handleSort('down')}
></Button>
</> </>
} }
/> />
...@@ -336,7 +417,7 @@ const CategoryList = () => { ...@@ -336,7 +417,7 @@ const CategoryList = () => {
hideSelectAll: true, hideSelectAll: true,
renderCell: (_checked: boolean, record: categoryType[0]) => { renderCell: (_checked: boolean, record: categoryType[0]) => {
return ( return (
<>{record.subDTOList ? <Checkbox onChange={() => onSelectChange(record)} /> : ''}</> <>{record.subDTOList ? <Radio onChange={() => onSelectChange(record)} /> : ''}</>
); );
}, },
}} }}
......
...@@ -239,7 +239,7 @@ function CustomListView() { ...@@ -239,7 +239,7 @@ function CustomListView() {
label: '手机号', label: '手机号',
name: 'phoneNum', name: 'phoneNum',
type: 'input', type: 'input',
placeholder: '请输入用户账号', placeholder: '请输入手机号',
}, },
{ {
label: '来源', label: '来源',
......
...@@ -175,6 +175,7 @@ const BaseInfo = forwardRef<any, selfProps>((_props, ref) => { ...@@ -175,6 +175,7 @@ const BaseInfo = forwardRef<any, selfProps>((_props, ref) => {
listType='picture-card' listType='picture-card'
onChange={(fileList) => uploadSuccess(fileList, 'subImgList')} onChange={(fileList) => uploadSuccess(fileList, 'subImgList')}
defaultFileList={subFileList} defaultFileList={subFileList}
fileLength={4}
> >
<UploadOutlined /> <UploadOutlined />
</Uploader> </Uploader>
......
...@@ -6,7 +6,6 @@ import { InterDataType, InterReqType } from '~/api/interface'; ...@@ -6,7 +6,6 @@ import { InterDataType, InterReqType } from '~/api/interface';
import { addMallGoodsType, skuUnitType } from '~/api/interface/goodsType'; import { addMallGoodsType, skuUnitType } from '~/api/interface/goodsType';
import { filterObjAttr } from '~/utils'; import { filterObjAttr } from '~/utils';
import { isEmptyBol, regPriceNumber } from '~/utils/validateUtils'; import { isEmptyBol, regPriceNumber } from '~/utils/validateUtils';
import _ from 'lodash';
type EditableTableProps = Parameters<typeof Table>[0]; type EditableTableProps = Parameters<typeof Table>[0];
type ColumnTypes = Exclude<EditableTableProps['columns'], undefined>; type ColumnTypes = Exclude<EditableTableProps['columns'], undefined>;
...@@ -108,7 +107,6 @@ const SkuAddOrEditModal: FC<ModalProps & selfProps> = ({ ...@@ -108,7 +107,6 @@ const SkuAddOrEditModal: FC<ModalProps & selfProps> = ({
editable: true, editable: true,
dataIndex: 'specValueImage', dataIndex: 'specValueImage',
inputType: 'uploader', inputType: 'uploader',
rules: [{ required: true, message: '请上传图片' }],
}, },
{ {
title: '选项名称', title: '选项名称',
...@@ -123,7 +121,6 @@ const SkuAddOrEditModal: FC<ModalProps & selfProps> = ({ ...@@ -123,7 +121,6 @@ const SkuAddOrEditModal: FC<ModalProps & selfProps> = ({
align: 'center', align: 'center',
editable: true, editable: true,
dataIndex: 'partNo', dataIndex: 'partNo',
rules: [{ required: true, message: '请输入料号' }],
maxLength: 30, maxLength: 30,
}, },
{ {
...@@ -147,7 +144,7 @@ const SkuAddOrEditModal: FC<ModalProps & selfProps> = ({ ...@@ -147,7 +144,7 @@ const SkuAddOrEditModal: FC<ModalProps & selfProps> = ({
editable: true, editable: true,
align: 'center', align: 'center',
dataIndex: 'stock', dataIndex: 'stock',
rules: [{ required: false, validator: stockPriceValidator }], rules: [{ required: true, validator: stockPriceValidator }],
inputType: 'number', inputType: 'number',
}, },
{ {
...@@ -350,7 +347,7 @@ const SkuAddOrEditModal: FC<ModalProps & selfProps> = ({ ...@@ -350,7 +347,7 @@ const SkuAddOrEditModal: FC<ModalProps & selfProps> = ({
<Form <Form
labelCol={{ span: 2 }} labelCol={{ span: 2 }}
wrapperCol={{ span: 22 }} wrapperCol={{ span: 22 }}
initialValues={{ chooseType: 0, must: 0 }} initialValues={{ chooseType: 0, must: 0, skuUnitId: skuUnitList[0]?.id || undefined }}
form={goodsSpecForm} form={goodsSpecForm}
> >
<Form.Item <Form.Item
......
import { Button, Popconfirm, Table } from 'antd'; import { Button, Popconfirm, Table, Tag } from 'antd';
import { PlusOutlined } from '@ant-design/icons'; import { PlusOutlined } from '@ant-design/icons';
import { ColumnsType } from 'antd/es/table'; import { ColumnsType } from 'antd/es/table';
import { FC } from 'react'; import { FC } from 'react';
...@@ -54,6 +54,17 @@ const SkuInfo: FC<selfProps> = ({ ...@@ -54,6 +54,17 @@ const SkuInfo: FC<selfProps> = ({
render: (text: number) => skuUnitList.find((v) => v.id === text)?.unitName || '', render: (text: number) => skuUnitList.find((v) => v.id === text)?.unitName || '',
}, },
{ {
title: '规格值',
align: 'center',
dataIndex: 'goodsSpecValuesList',
render: (text: goodsSpecType['goodsSpecValuesList']) =>
text.map((v) => (
<Tag key={v.id}>
{v.specValueName}({v.partNo})
</Tag>
)),
},
{
title: '操作', title: '操作',
align: 'center', align: 'center',
render: (_text: string, record) => ( render: (_text: string, record) => (
......
...@@ -159,6 +159,9 @@ const GoodsAddOrEditOrDetail = () => { ...@@ -159,6 +159,9 @@ const GoodsAddOrEditOrDetail = () => {
.find((j) => j.id === v.id) .find((j) => j.id === v.id)
?.goodsSpecValuesList.find((k) => k.id === i.id)?.id ?.goodsSpecValuesList.find((k) => k.id === i.id)?.id
: undefined, : undefined,
goodsSpecId: goodsDetailsInfo
? goodsDetailsInfo.goodsSpecList.find((i) => i.id === v.id)?.id
: undefined,
})), })),
})); }));
const addGoodsEditReq = { const addGoodsEditReq = {
...@@ -241,13 +244,14 @@ const GoodsAddOrEditOrDetail = () => { ...@@ -241,13 +244,14 @@ const GoodsAddOrEditOrDetail = () => {
下一步 下一步
</Button> </Button>
) : ( ) : (
<Button type='primary' onClick={saveGoods}> ''
保存
</Button>
)} )}
</div> </div>
<div className='back-btn'> <div className='back-btn'>
<Button type='primary' onClick={backRoute}> <Button type='primary' onClick={saveGoods} style={{ marginRight: '10px' }}>
保存
</Button>
<Button type='default' onClick={backRoute}>
返回 返回
</Button> </Button>
</div> </div>
......
.goods-detail{
position: relative;
&-info{
margin-bottom: 20px;
}
&-sku{
.sku-title{
line-height: 50px;
font-weight: bold;
font-size: 14px;
}
}
&-introduce{
.introduce-title{
line-height: 50px;
font-weight: bold;
font-size: 14px;
}
}
&-operate{
position: absolute;
right: 0;
top: 0;
}
}
import { useSearchParams, useNavigate } from 'react-router-dom';
import { useEffect, useState } from 'react';
import GoodsAPI from '~/api/modules/goodsAPI';
import { InterDataType } from '~/api/interface';
import { mallGoodsDetailsType, skuUnitType } from '~/api/interface/goodsType';
import { Badge, Button, Descriptions, Image, Table, Tag } from 'antd';
import { CategoryManageAPI } from '~/api';
import { categoryListRespType } from '~/api/interface/categoryManage';
import './index.scss';
import { ColumnsType } from 'antd/es/table';
//详情返回类型
type detailType = InterDataType<mallGoodsDetailsType>;
//分类返回类型
type categoryType = InterDataType<categoryListRespType>['list'];
//单位返回类型
type unitType = InterDataType<skuUnitType>;
const GoodsDetails = () => { const GoodsDetails = () => {
return <div className='goods-detail'></div>; const [searchParams] = useSearchParams();
const navigate = useNavigate();
//分类列表
const [categoryList, setCategoryList] = useState<categoryType>([]);
//单位列表
const [skuUnitList, setSkuUnitList] = useState<unitType>([]);
const [goodsInfoDetails, setGoodsInfoDetails] = useState<detailType>();
const tableColumns: ColumnsType<detailType['goodsSpecList'][0]> = [
{
title: '序号',
align: 'center',
render: (_text: string, _record, index: number) => index + 1,
},
{
title: '规格名称',
align: 'center',
dataIndex: 'specName',
},
{
title: '选择方式',
align: 'center',
dataIndex: 'chooseType',
render: (text: number) => (text ? '多选' : '单选'),
},
{
title: '是否必选',
align: 'center',
dataIndex: 'must',
render: (text: number) => (text ? '必选' : '非必选'),
},
{
title: '规格单位',
align: 'center',
dataIndex: 'skuUnitId',
render: (text: number) => skuUnitList.find((v) => v.id === text)?.unitName || '',
},
{
title: '规格值',
align: 'center',
dataIndex: 'goodsSpecValuesList',
render: (text: detailType['goodsSpecList'][0]['goodsSpecValuesList']) =>
text.map((v) => (
<Tag key={v.id}>
{v.specValueName}({v.partNo})
</Tag>
)),
},
];
const getGoodsDetails = (id: number) => {
GoodsAPI.getMallGoodsDetails({ id }).then(({ result }) => {
setGoodsInfoDetails(result);
});
};
//分类列表
const getCategoryList = () => {
CategoryManageAPI.getCategoryRespList({ pageNo: 1, pageSize: 99999 }).then(({ result }) => {
setCategoryList(result.list || []);
});
};
//单位列表
const getSkuUnit = () => {
GoodsAPI.getSkuUnit().then(({ result }) => {
setSkuUnitList(result || []);
});
};
//返回
const backRoute = () => {
navigate(-1);
};
useEffect(() => {
getGoodsDetails(Number(searchParams.get('id')));
getCategoryList();
getSkuUnit();
}, []);
return (
<div className='goods-detail'>
<div className='goods-detail-info'>
<Descriptions title='基本信息' bordered>
<Descriptions.Item label='商品名称'>{goodsInfoDetails?.tradeName}</Descriptions.Item>
<Descriptions.Item label='商品副图'>
{goodsInfoDetails?.resourcesList
.filter((v) => v.type === 1)
.map((v) => (
<Image src={v.url} width={50} height={50} key={v.id} />
))}
</Descriptions.Item>
<Descriptions.Item label='商品主图'>
{goodsInfoDetails?.resourcesList
.filter((v) => v.type === 0)
.map((v) => (
<Image src={v.url} width={50} height={50} key={v.id} />
))}
</Descriptions.Item>
<Descriptions.Item label='商品标签'>
{goodsInfoDetails?.goodsLabel || '暂无'}
</Descriptions.Item>
<Descriptions.Item label='商品分类'>
{categoryList
.reduce((pre: string[], cur) => {
if (cur.id === goodsInfoDetails?.categoryPrimaryId) {
pre.push(cur.name);
if (goodsInfoDetails?.categorySubId) {
pre.push(
cur.subDTOList.find((v) => v.id === goodsInfoDetails?.categorySubId)?.name ||
'',
);
}
}
return pre;
}, [])
.join('/')}
</Descriptions.Item>
<Descriptions.Item label='商品状态'>
<Badge
status={goodsInfoDetails?.shelfStatus ? 'processing' : 'default'}
text={goodsInfoDetails?.shelfStatus ? '上架中' : '已下架'}
/>
</Descriptions.Item>
<Descriptions.Item label='商品视频' span={1}>
{goodsInfoDetails?.resourcesList
.filter((v) => v.type === 2)
.map((v) => (
<video
src={v.url}
key={v.id}
style={{ width: '200px', height: '200px' }}
controls
/>
))}
</Descriptions.Item>
<Descriptions.Item label='商品描述'>{goodsInfoDetails?.description}</Descriptions.Item>
</Descriptions>
</div>
<div className='goods-detail-sku'>
<div className='sku-title'>商品规格</div>
<Table
bordered
columns={tableColumns}
dataSource={goodsInfoDetails?.goodsSpecList}
rowKey='id'
pagination={false}
></Table>
</div>
<div className='goods-detail-introduce'>
<div className='introduce-title'>商品详情</div>
<div
className='introduce-content'
dangerouslySetInnerHTML={{ __html: goodsInfoDetails?.goodsDetails || '' }}
></div>
</div>
<div className='goods-detail-operate'>
<Button type='primary' onClick={backRoute}>
返回
</Button>
</div>
</div>
);
}; };
export default GoodsDetails; export default GoodsDetails;
...@@ -205,10 +205,10 @@ const GoodsList = () => { ...@@ -205,10 +205,10 @@ const GoodsList = () => {
}; };
//商品详情 //商品详情
const toGoodsDetail = (id: number) => { const toGoodsDetail = (id: number) => {
// navigate({ navigate({
// pathname: '/mallManage/mallGoods/detail', pathname: '/mallManage/mallGoods/detail',
// search: `id=${id}&isDetail=1`, search: `id=${id}`,
// }); });
}; };
// 表格多选事件 // 表格多选事件
const onSelectChange = (newSelectedRowKeys: React.Key[]) => { const onSelectChange = (newSelectedRowKeys: React.Key[]) => {
...@@ -253,8 +253,6 @@ const GoodsList = () => { ...@@ -253,8 +253,6 @@ const GoodsList = () => {
const upGoodsClick = () => { const upGoodsClick = () => {
if (selectedRowKeys.length === 0) { if (selectedRowKeys.length === 0) {
message.warning('请选择商品'); message.warning('请选择商品');
} else if (selectedRowKeys.length > 1) {
message.warning('最多选择一个商品');
} else { } else {
const index = tableData.findIndex((v) => v.id === selectedRowKeys[0]); const index = tableData.findIndex((v) => v.id === selectedRowKeys[0]);
const allIndex = allGoods.findIndex((v) => v.id === selectedRowKeys[0]); const allIndex = allGoods.findIndex((v) => v.id === selectedRowKeys[0]);
...@@ -296,8 +294,6 @@ const GoodsList = () => { ...@@ -296,8 +294,6 @@ const GoodsList = () => {
const downGoodsClick = () => { const downGoodsClick = () => {
if (selectedRowKeys.length === 0) { if (selectedRowKeys.length === 0) {
message.warning('请选择商品'); message.warning('请选择商品');
} else if (selectedRowKeys.length > 1) {
message.warning('最多选择一个商品');
} else { } else {
const index = tableData.findIndex((v) => v.id === selectedRowKeys[0]); const index = tableData.findIndex((v) => v.id === selectedRowKeys[0]);
const allIndex = allGoods.findIndex((v) => v.id === selectedRowKeys[0]); const allIndex = allGoods.findIndex((v) => v.id === selectedRowKeys[0]);
...@@ -335,7 +331,6 @@ const GoodsList = () => { ...@@ -335,7 +331,6 @@ const GoodsList = () => {
} }
} }
}; };
//分类列表 //分类列表
const getCategoryList = () => { const getCategoryList = () => {
CategoryManageAPI.getCategoryRespList({ pageNo: 1, pageSize: 99999 }).then(({ result }) => { CategoryManageAPI.getCategoryRespList({ pageNo: 1, pageSize: 99999 }).then(({ result }) => {
......
...@@ -91,7 +91,9 @@ const RentAddOrEditOrDetailView = React.lazy( ...@@ -91,7 +91,9 @@ const RentAddOrEditOrDetailView = React.lazy(
const MallGoodsView = React.lazy(() => import('~/pages/mallManage/mallGoods/goodsList')); //商城商品 const MallGoodsView = React.lazy(() => import('~/pages/mallManage/mallGoods/goodsList')); //商城商品
const MallAddOrEditOrDetailView = React.lazy( const MallAddOrEditOrDetailView = React.lazy(
() => import('~/pages/mallManage/mallGoods/goodsAddOrEditOrDetail'), () => import('~/pages/mallManage/mallGoods/goodsAddOrEditOrDetail'),
); //商城商品新增、编辑、详情 ); //商城商品新增、编辑、租赁商品详情
const MallGoodsDetailsView = React.lazy(() => import('~/pages/mallManage/mallGoods/goodsDetails')); //商城商品(新)
const ProduceListView = React.lazy(() => import('~/pages/mallManage/produceManage/produceList')); //产品列表 const ProduceListView = React.lazy(() => import('~/pages/mallManage/produceManage/produceList')); //产品列表
const ProduceDetailView = React.lazy( const ProduceDetailView = React.lazy(
() => import('~/pages/mallManage/produceManage/produceDetail'), () => import('~/pages/mallManage/produceManage/produceDetail'),
...@@ -579,7 +581,7 @@ export const routerList: Array<RouteObjectType> = [ ...@@ -579,7 +581,7 @@ export const routerList: Array<RouteObjectType> = [
}, },
{ {
path: '/mallManage/mallGoods/detail', path: '/mallManage/mallGoods/detail',
element: withLoadingComponent(<MallAddOrEditOrDetailView />), element: withLoadingComponent(<MallGoodsDetailsView />),
errorElement: <ErrorPage />, errorElement: <ErrorPage />,
meta: { meta: {
id: 10146, id: 10146,
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论