Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
A
admin
概览
概览
详情
活动
周期分析
版本库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
统计图
问题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程表
图表
维基
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
iuav
admin
Commits
a8f737ae
提交
a8f737ae
authored
7月 06, 2023
作者:
龚洪江
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
修复:产品价格配置
上级
267240fc
隐藏空白字符变更
内嵌
并排
正在显示
19 个修改的文件
包含
649 行增加
和
422 行删除
+649
-422
categoryManage.ts
src/api/interface/categoryManage.ts
+7
-10
goodsType.ts
src/api/interface/goodsType.ts
+3
-0
mallManageType.ts
src/api/interface/mallManageType.ts
+3
-0
produceManageType.ts
src/api/interface/produceManageType.ts
+1
-1
categoryManage.ts
src/api/modules/categoryManage.ts
+17
-34
goodsAPI.ts
src/api/modules/goodsAPI.ts
+5
-0
mallManage.ts
src/api/modules/mallManage.ts
+4
-0
index.tsx
...ponents/goods/commonAddOrEdit/addOrEditSkuModal/index.tsx
+3
-3
index.tsx
src/components/goods/commonAddOrEdit/stockSku/index.tsx
+0
-6
index.tsx
src/pages/categoryManage/category/detail/index.tsx
+88
-263
index.tsx
src/pages/categoryManage/directoryManage/index.tsx
+11
-24
index.tsx
...ges/mallManage/mallGoods/goodsAddOrEditOrDetail/index.tsx
+0
-1
index.tsx
src/pages/mallManage/mallGoods/goodsList/index.tsx
+123
-10
index.tsx
...duceDetail/components/addOrEditProduceSpecModal/index.tsx
+3
-0
index.tsx
...oduceDetail/components/setProduceSpecPriceModal/index.tsx
+134
-50
index.tsx
src/pages/mallManage/produceManage/produceDetail/index.tsx
+1
-0
index.tsx
...ages/mallManage/rentGoods/rentAddOrEditOrDetail/index.tsx
+0
-1
index.tsx
src/pages/mallManage/rentGoods/rentList/index.tsx
+124
-10
index.tsx
src/pages/mallManage/serviceManage/serviceList/index.tsx
+122
-9
没有找到文件。
src/api/interface/categoryManage.ts
浏览文件 @
a8f737ae
// 分类详情
import
{
InterFunction
,
InterItemFunction
}
from
'~/api/interface'
;
export
interface
GoodsInfo
{
goodsId
:
number
;
goodsImg
:
string
;
goodsName
:
string
;
shelfStatus
:
number
;
showCode
:
number
;
}
// 分类列表
export
interface
categoryEntity
{
id
:
number
;
...
...
@@ -75,3 +65,10 @@ export type directoryProductType = InterFunction<
type
:
number
;
}[]
>
;
//分类-详情
export
type
categoryDetailsType
=
InterFunction
<
{
id
:
number
},
{
classifyName
:
string
;
description
:
string
;
icon
:
string
;
id
:
number
;
remark
:
string
}
>
;
//分类-关联列表
export
type
categoryRelevantType
=
InterFunction
<
{
id
:
number
;
type
:
number
},
any
>
;
src/api/interface/goodsType.ts
浏览文件 @
a8f737ae
...
...
@@ -21,6 +21,7 @@ export type listGoodsType = InterItemFunction<
imgUrl
:
string
;
isCoupons
:
number
;
status
:
number
;
id
:
number
;
}[]
>
;
//商品-新增
...
...
@@ -100,3 +101,5 @@ export type skuUnitType = InterFunction<any, { id: number; unitName: string }[]>
export
type
batchOnShelfOrTakeDownType
=
InterFunction
<
{
goodsIds
:
number
[];
status
:
number
},
any
>
;
//商品批量删除
export
type
batchRemoveWareInfoType
=
InterFunction
<
number
[],
any
>
;
//商品-上下移动
export
type
exchangeGoodsInfoType
=
InterFunction
<
{
firstId
:
number
;
secondId
:
number
},
any
>
;
src/api/interface/mallManageType.ts
浏览文件 @
a8f737ae
...
...
@@ -144,6 +144,7 @@ export type serviceType = InterItemFunction<
industryId
:
number
;
id
:
number
;
companyId
:
number
;
sort
:
number
;
}[]
>
;
//服务-上下架-批量
...
...
@@ -171,3 +172,5 @@ export type serviceDetailType = InterFunction<
companyName
:
string
;
}
>
;
//服务-上下移动
export
type
exChangeServiceType
=
InterFunction
<
{
id
:
number
;
sort
:
number
}[],
any
>
;
src/api/interface/produceManageType.ts
浏览文件 @
a8f737ae
...
...
@@ -140,7 +140,7 @@ export type editProductSpecPriceType = InterFunction<
productSpecId
?:
number
;
specPrice
:
{
cooperationTag
:
number
;
price
:
number
}[];
type
:
number
;
},
}
[]
,
null
>
;
//加盟标签-列表
...
...
src/api/modules/categoryManage.ts
浏览文件 @
a8f737ae
import
axios
from
'../request'
;
import
{
categoryDetailsType
,
categoryListType
,
categoryRelevantType
,
directoryListType
,
directoryPageListType
,
GoodsInfo
,
}
from
'~/api/interface/categoryManage'
;
export
class
CategoryManageAPI
{
...
...
@@ -24,9 +25,12 @@ export class CategoryManageAPI {
return
axios
.
get
(
'/pms/classify/getDirectoryList'
,
{
params
});
};
// 新增或编辑目录
static
addOrEditDirectory
=
(
data
:
{
id
?:
number
;
directoryName
:
string
;
type
:
number
;
show
:
number
[]
},
)
=>
{
static
addOrEditDirectory
=
(
data
:
{
id
?:
number
;
directoryName
:
string
;
type
:
number
;
show
:
number
[];
})
=>
{
return
axios
.
post
(
'/pms/classify/addOrEditDirectory'
,
data
);
};
...
...
@@ -49,16 +53,6 @@ export class CategoryManageAPI {
return
axios
.
post
(
'/pms/classify/getClassificationList'
,
data
);
};
// PC端-根据分类信息新增自定义规格-下拉选项 (只查产品类型)
static
getProductTypeInfoList
=
():
any
=>
{
return
axios
.
get
(
'uavgoods/mgoods/getGoodsTypeInfoList'
);
};
// 所有分类信息
static
getGoodsTypeListByOneLevel
=
():
any
=>
{
return
axios
.
get
(
'uavgoods/mgoods/listGoodsTypeListByOneLevel'
);
};
// 分类修改
static
updateClassification
=
(
data
:
object
):
any
=>
{
return
axios
.
post
(
'/pms/classify/updateClassification'
,
data
);
...
...
@@ -69,35 +63,20 @@ export class CategoryManageAPI {
return
axios
.
get
(
'/pms/classify/deleteRelevantBusiness'
,
{
params
});
};
// 删除子分类
static
deleteGoodsTypeByChildren
=
(
params
:
object
):
any
=>
{
return
axios
.
get
(
'uavgoods/mgoods/deleteGoodsTypeByChildren'
,
{
params
});
};
// 查询二级分类
static
listGoodsTypeListByTwoLevel
=
(
params
:
object
):
any
=>
{
return
axios
.
get
(
'uavgoods/mgoods/listGoodsTypeListByTwoLevel'
,
{
params
});
};
// 查询其它服务
static
listOtherService
=
():
any
=>
{
return
axios
.
get
(
'uavgoods/mgoods/listOtherService'
);
};
// 分类上下移动
static
exchangeSortType
=
(
params
:
object
):
any
=>
{
return
axios
.
get
(
'/pms/classify/exchangeSortType'
,
{
params
});
};
// 分类详情
static
getGoodsTypeDetail
=
(
obj
:
{
id
:
number
}
)
=>
{
return
axios
.
get
(
'/pms/classify/getClassifyDetails'
,
{
params
:
obj
});
static
getGoodsTypeDetail
:
categoryDetailsType
=
(
params
)
=>
{
return
axios
.
get
(
'/pms/classify/getClassifyDetails'
,
{
params
});
};
// 分类详情-安全编码开发修改
static
updateIsShowCode
=
(
params
:
Pick
<
GoodsInfo
,
'goodsId'
|
'showCode'
>
)
=>
{
return
axios
.
get
(
'uavgoods/appgoods/updateIsShowCode'
,
{
params
});
};
//
static updateIsShowCode = (params: Pick<GoodsInfo, 'goodsId' | 'showCode'>) => {
//
return axios.get('uavgoods/appgoods/updateIsShowCode', { params });
//
};
// 分类详情-商品排序
static
exchangeGoodsInfo
=
(
firstId
:
number
,
secondId
:
number
)
=>
{
...
...
@@ -114,4 +93,8 @@ export class CategoryManageAPI {
static
getAppletQRCode
(
params
:
{
page
:
string
;
scene
:
string
})
{
return
axios
.
get
(
'malluser/wechat/getAppletQRCode'
,
{
params
});
}
// 分类关联列表
static
getRelevantBusiness
:
categoryRelevantType
=
(
params
)
=>
{
return
axios
.
get
(
'/pms/classify/queryRelevantBusiness'
,
{
params
});
};
}
src/api/modules/goodsAPI.ts
浏览文件 @
a8f737ae
...
...
@@ -4,6 +4,7 @@ import {
batchRemoveWareInfoType
,
detailGoodsType
,
editGoodsType
,
exchangeGoodsInfoType
,
listGoodsType
,
otherServiceType
,
skuUnitType
,
...
...
@@ -43,5 +44,9 @@ class GoodsAPI {
static
batchRemoveWareInfo
:
batchRemoveWareInfoType
=
(
data
)
=>
{
return
axios
.
post
(
'/pms/goods/batchRemoveWareInfo'
,
data
);
};
// 商品-上下移动
static
exchangeGoodsInfo
:
exchangeGoodsInfoType
=
(
params
)
=>
{
return
axios
.
get
(
'/pms/goods/exchangeGoodsInfo'
,
{
params
});
};
}
export
default
GoodsAPI
;
src/api/modules/mallManage.ts
浏览文件 @
a8f737ae
...
...
@@ -12,6 +12,7 @@ import {
batchUpAndDownWorkServiceType
,
deleteServiceType
,
serviceDetailType
,
exChangeServiceType
,
}
from
'~/api/interface/mallManageType'
;
export
class
MallManageAPI
{
...
...
@@ -52,4 +53,7 @@ export class MallManageAPI {
// 服务-详情
static
getServiceDetail
:
serviceDetailType
=
(
params
)
=>
axios
.
get
(
'/pms/backstage/work/queryWorkService'
,
{
params
});
// 服务-上下移
static
exChangeService
:
exChangeServiceType
=
(
data
)
=>
axios
.
post
(
'/pms/backstage/work/exchange'
,
data
);
}
src/components/goods/commonAddOrEdit/addOrEditSkuModal/index.tsx
浏览文件 @
a8f737ae
...
...
@@ -206,11 +206,11 @@ const AddOrEditSkuModal: React.FC<ModalProps & selfProps> = ({
);
};
//产品-规格
const
getProductSpecList
=
(
productSkuId
:
number
)
=>
{
const
getProductSpecList
=
(
productSkuId
:
number
,
isDetail
?:
boolean
)
=>
{
ProduceManageAPI
.
listPageProductSpec
({
pageNo
:
1
,
pageSize
:
9999
,
productSkuId
}).
then
(
({
result
})
=>
{
setProductSpecList
(
result
.
list
||
[]);
if
(
result
.
list
)
{
if
(
result
.
list
&&
!
isDetail
)
{
const
ids
:
number
[]
=
result
.
list
.
reduce
((
pre
:
number
[],
cur
)
=>
{
return
cur
.
priceList
||
goodsType
===
1
?
[...
pre
,
cur
.
id
]
:
pre
;
},
[]);
...
...
@@ -380,7 +380,7 @@ const AddOrEditSkuModal: React.FC<ModalProps & selfProps> = ({
if
(
Object
.
keys
(
curtRowData
).
length
!==
0
)
{
setDialogTitle
(
'编辑'
);
if
(
!
curtRowData
.
flag
)
{
getProductSpecList
(
curtRowData
.
skuId
as
number
);
getProductSpecList
(
curtRowData
.
skuId
as
number
,
true
);
}
const
specIds
:
number
[]
=
curtRowData
.
specIds
&&
curtRowData
.
specIds
.
map
((
i
:
any
)
=>
i
.
mallSpecId
);
...
...
src/components/goods/commonAddOrEdit/stockSku/index.tsx
浏览文件 @
a8f737ae
...
...
@@ -5,10 +5,6 @@ import './index.scss';
import
{
ColumnsType
}
from
'antd/es/table'
;
import
{
customizeEntity
,
skuUnitType
,
specEntity
}
from
'~/api/interface/goodsType'
;
import
{
InterDataType
}
from
'~/api/interface'
;
import
{
categoryListType
}
from
'~/api/interface/categoryManage'
;
//分类返回类型
type
categoryType
=
InterDataType
<
categoryListType
>
[
'list'
];
//产品-规格单位返回类型
type
unitType
=
InterDataType
<
skuUnitType
>
;
...
...
@@ -16,7 +12,6 @@ type unitType = InterDataType<skuUnitType>;
interface
selfProps
{
addOrEditSku
:
(
record
?:
specEntity
)
=>
void
;
specData
:
specEntity
[];
categoryList
:
categoryType
;
skuUnitList
:
unitType
;
deleteSku
:
(
record
:
specEntity
)
=>
void
;
isDetail
:
boolean
;
...
...
@@ -25,7 +20,6 @@ interface selfProps {
const
StockSku
:
React
.
FC
<
selfProps
>
=
({
addOrEditSku
,
specData
,
categoryList
,
skuUnitList
,
deleteSku
,
isDetail
,
...
...
src/pages/categoryManage/category/detail/index.tsx
浏览文件 @
a8f737ae
/*
* ~Author: 龚洪江
* ~Date: 2022-07-22 15:13:52
* ~LastEditors: 龚洪江
* ~LastEditTime: 2022-08-12 10:29:36
* ~FilePath: \code\mmc-store\src\pages\goodsManage\children\category\detail\index.tsx
* ~Description:
*
* Copyright (c) 2022 by 龚洪江 2238959530~qq.com, All Rights Reserved.
*/
import
{
FC
,
useState
,
useEffect
}
from
'react'
;
import
{
Form
,
Upload
,
Button
,
Table
,
Modal
,
Input
,
Switch
,
message
}
from
'antd'
;
import
{
useState
,
useEffect
}
from
'react'
;
import
{
Form
,
Upload
,
Button
,
Table
,
Input
,
message
}
from
'antd'
;
import
type
{
UploadFile
}
from
'antd/es/upload/interface'
;
import
type
{
ColumnsType
,
ColumnType
}
from
'antd/es/table'
;
import
type
{
ColumnsType
}
from
'antd/es/table'
;
import
type
{
TableRowSelection
}
from
'antd/es/table/interface'
;
import
{
ArrowUpOutlined
,
ArrowDownOutlined
,
SearchOutlined
}
from
'@ant-design/icons'
;
import
qs
from
'query-string'
;
import
Viewer
from
'~/components/viewer'
;
import
{
ArrowUpOutlined
,
ArrowDownOutlined
}
from
'@ant-design/icons'
;
import
{
PaginationEntity
}
from
'~/common/interface/PaginationEntity'
;
import
{
categoryDetailEntity
,
GoodsInfo
}
from
'~/api/modules/goods'
;
import
{
CategoryManageAPI
}
from
'~/api'
;
import
useOption
from
'~/common/hook/optionHook'
;
import
'./index.scss'
;
import
{
useLocation
,
useParams
,
useNavigate
}
from
'react-router-dom'
;
import
{
useParams
,
useNavigate
,
useSearchParams
}
from
'react-router-dom'
;
import
{
InterDataType
}
from
'~/api/interface'
;
import
{
categoryDetailsType
}
from
'~/api/interface/categoryManage'
;
const
CategoryDetail
:
FC
=
(
props
:
any
)
=>
{
//分类详情返回类型
type
detailType
=
InterDataType
<
categoryDetailsType
>
;
const
CategoryDetail
=
()
=>
{
const
[
selectedRowKeys
,
setSelectedRowKeys
]
=
useState
<
React
.
Key
[]
>
([]);
const
[
addModalVisible
,
setModalVisible
]
=
useState
<
boolean
>
(
false
);
// 分页数据
const
[
detailData
,
setDetailData
]
=
useState
<
categoryDetailEntity
>
(
null
!
);
const
[
detailData
,
setDetailData
]
=
useState
<
detailType
>
(
null
!
);
// 全部商品数据
const
[
allGoodsInfo
,
setAllGoodsInfo
]
=
useState
<
GoodsInfo
[]
>
([]);
const
[
allGoodsInfo
,
setAllGoodsInfo
]
=
useState
<
any
>
([]);
const
[
categoryId
,
setCategoryId
]
=
useState
<
number
>
(
0
);
const
[
isEdit
,
setIsEdit
]
=
useState
<
boolean
>
(
false
);
const
[
detailForm
]
=
Form
.
useForm
<
Pick
<
categoryDetailEntity
,
'description'
|
'classifyName'
|
'icon'
>>
();
const
[
detailForm
]
=
Form
.
useForm
<
any
>
();
const
[
fileList
,
setFileList
]
=
useState
<
any
>
([]);
const
[
goodsInfo
,
setGoodsInfo
]
=
useState
<
GoodsInfo
[]
>
([]);
const
[
viewerVisible
,
setViewerVisible
]
=
useState
<
boolean
>
(
false
);
const
[
goodsInfo
,
setGoodsInfo
]
=
useState
<
any
>
([]);
const
[
pagination
,
setPagination
]
=
useState
<
Pick
<
PaginationEntity
,
'pageNo'
|
'pageSize'
>>
({
pageNo
:
1
,
pageSize
:
10
,
});
const
[
total
,
setTotal
]
=
useState
<
number
>
(
0
);
// 当前放大图片
const
[
currentImgList
,
setcurrentImgList
]:
any
=
useState
([]);
const
[
sortTypeId
,
setSortTypeId
]
=
useState
<
number
>
(
-
1
);
const
[
pid
,
setPid
]
=
useState
<
number
>
(
-
1
);
const
{
id
}
=
useParams
();
const
_id
=
Number
(
id
);
const
location
=
useLocation
();
const
searchParams
:
any
=
new
URLSearchParams
(
location
.
search
);
const
params
=
useParams
();
const
[
searchParams
]
=
useSearchParams
();
const
navigate
=
useNavigate
();
const
columns
:
ColumnsType
<
GoodsInfo
>
=
[
const
columns
:
ColumnsType
<
any
>
=
[
{
title
:
'序号'
,
align
:
'center'
,
render
:
(
text
:
string
,
record
:
GoodsInfo
,
index
:
number
)
=>
{
render
:
(
_text
:
string
,
_record
,
index
:
number
)
=>
{
return
(
pagination
.
pageNo
-
1
)
*
pagination
.
pageSize
+
index
+
1
;
},
},
...
...
@@ -68,100 +52,54 @@ const CategoryDetail: FC = (props: any) => {
{
title
:
'商品图片'
,
align
:
'center'
,
render
:
(
text
:
string
,
record
:
GoodsInfo
,
index
:
number
)
=>
{
return
(
<
img
className=
'goods-img'
src=
{
record
.
goodsImg
}
onClick=
{
()
=>
showViewerEvent
(
record
.
goodsImg
)
}
/>
);
render
:
(
text
:
string
,
record
,
index
:
number
)
=>
{
return
<
img
className=
'goods-img'
src=
{
record
.
goodsImg
}
/>;
},
},
{
title
:
'状态'
,
align
:
'center'
,
render
:
(
text
:
string
,
record
:
GoodsInfo
,
index
:
number
)
=>
{
render
:
(
text
:
string
,
record
,
index
:
number
)
=>
{
return
<
div
>
{
record
.
shelfStatus
?
'上架'
:
'下架'
}
</
div
>;
},
},
{
title
:
'安全编码开关'
,
align
:
'center'
,
render
:
(
text
:
string
,
record
:
GoodsInfo
,
index
:
number
)
=>
{
return
(
btnCode
&&
(
<
Switch
checked=
{
!!
record
.
showCode
}
onChange=
{
(
checked
,
e
)
=>
switchChangeEvent
(
checked
,
e
,
record
,
index
)
}
/>
)
);
},
},
// {
// title: "操作",
// align: "center",
// filterDropdownVisible:false,
// render: (text: string, record: GoodsInfo, index: number) => {
// return (
// <Button type="link" danger onClick={() => deleteGoods(record)}>
// 删除
// </Button>
// );
// },
// },
];
// 按钮权限
const
btnUpperDown
=
useOption
(
22109
);
const
btnChange
=
useOption
(
22110
);
const
btnCode
=
useOption
(
22111
);
useEffect
(()
=>
{
// 分页数据
getGoodsTypeDetail
(
_id
);
},
[
pagination
]);
useEffect
(()
=>
{
// 全部数据
getAllGoodsTypeDetail
(
_id
);
setSortTypeId
(
Number
(
searchParams
.
directoryId
));
setPid
(
Number
(
searchParams
.
pid
));
setCategoryId
(
_id
);
// getAllGoodsTypeDetail(_id);
getGoodsTypeDetail
(
Number
(
params
.
id
));
setSortTypeId
(
Number
(
searchParams
.
get
(
'directoryId'
)));
setPid
(
Number
(
searchParams
.
get
(
'pid'
)));
setCategoryId
(
Number
(
params
.
id
));
},
[]);
const
backRoute
=
()
=>
{
navigate
(
-
1
);
};
// 关联商品新增
const
addModalShowEvent
=
()
=>
{
setModalVisible
(
true
);
};
const
addConnectGoods
=
()
=>
{
setModalVisible
(
false
);
};
const
cancelHandle
=
()
=>
{
setModalVisible
(
false
);
};
// 分页数据
const
getGoodsTypeDetail
=
async
(
id
:
number
)
=>
{
const
res
:
any
=
await
CategoryManageAPI
.
getGoodsTypeDetail
({
id
,
...
pagination
});
detailForm
.
setFieldsValue
({
classifyName
:
res
.
result
.
classifyName
?
res
.
result
.
classifyName
:
undefined
,
description
:
res
.
result
.
description
?
res
.
result
.
description
:
undefined
,
icon
:
res
.
result
.
icon
?
res
.
result
.
icon
:
''
,
// 分类详情数据
const
getGoodsTypeDetail
=
(
id
:
number
)
=>
{
CategoryManageAPI
.
getGoodsTypeDetail
({
id
,
...
pagination
}).
then
(({
result
})
=>
{
detailForm
.
setFieldsValue
({
classifyName
:
result
.
classifyName
||
undefined
,
description
:
result
.
description
||
undefined
,
icon
:
result
.
icon
||
''
,
});
if
(
result
.
icon
)
{
setFileList
([
{
id
:
new
Date
().
getTime
(),
status
:
'done'
,
url
:
result
.
icon
,
},
]);
}
setDetailData
(
result
);
});
if
(
res
.
result
.
icon
)
{
setFileList
([
{
id
:
new
Date
().
getTime
(),
status
:
'done'
,
url
:
res
.
result
.
icon
,
},
]);
}
setDetailData
(
res
.
result
);
setGoodsInfo
(
res
.
result
.
goodsInfo
||
[]);
setTotal
(
res
.
result
.
totalCount
);
};
//分类关联-数据
const
getRelevantBusiness
=
(
id
:
number
,
type
:
number
)
=>
{
CategoryManageAPI
.
getRelevantBusiness
({
id
,
type
});
};
// 全部数据
const
getAllGoodsTypeDetail
=
async
(
id
:
number
)
=>
{
...
...
@@ -212,64 +150,26 @@ const CategoryDetail: FC = (props: any) => {
return
true
;
};
// const iconValidator=(rule:any,value:any)=>{
// console.log('数据--->',value)
// }
const
onPreview
=
(
file
:
UploadFile
)
=>
{
showViewerEvent
(
file
.
url
as
string
);
};
// 安全编码
const
switchChangeEvent
=
async
(
checked
:
boolean
,
e
:
React
.
MouseEvent
<
HTMLButtonElement
>
,
record
:
GoodsInfo
,
index
:
number
,
)
=>
{
record
.
showCode
=
checked
?
1
:
0
;
// goodsInfo.splice(index, 1, record);
// setDetailData({ ...detailData });
// setGoodsInfo([...goodsInfo]);
const
res
:
any
=
await
CategoryManageAPI
.
updateIsShowCode
({
goodsId
:
record
.
goodsId
,
showCode
:
record
.
showCode
,
});
if
(
res
.
code
===
'200'
)
{
message
.
success
(
'修改成功'
);
getGoodsTypeDetail
(
_id
);
}
};
// 商品删除
const
deleteGoods
=
(
record
:
GoodsInfo
)
=>
{};
// 修改详情
const
changeDetailInfo
=
()
=>
{
setIsEdit
(
true
);
};
const
sureChangeDetailInfo
=
()
=>
{
detailForm
.
validateFields
()
.
then
(
async
(
value
:
Pick
<
categoryDetailEntity
,
'description'
|
'classifyName'
|
'icon'
>
)
=>
{
// console.log("数据--->", value);
const
res
=
await
CategoryManageAPI
.
updateClassification
({
// description:value.description,
// classifyName:value.classifyName,
// icon:fileList.length?fileList[0].url:'',
...
value
,
sortTypeId
,
pid
,
id
:
categoryId
,
});
if
(
res
.
code
===
'200'
)
{
message
.
success
(
'修改成功'
);
getGoodsTypeDetail
(
categoryId
);
setIsEdit
(
false
);
}
else
{
message
.
error
(
res
.
message
);
}
detailForm
.
validateFields
().
then
(
async
(
value
:
any
)
=>
{
const
res
=
await
CategoryManageAPI
.
updateClassification
({
...
value
,
sortTypeId
,
pid
,
id
:
categoryId
,
});
if
(
res
.
code
===
'200'
)
{
message
.
success
(
'修改成功'
);
getGoodsTypeDetail
(
categoryId
);
setIsEdit
(
false
);
}
else
{
message
.
error
(
res
.
message
);
}
});
};
// 上移
const
shiftGoods
=
async
()
=>
{
...
...
@@ -277,11 +177,9 @@ const CategoryDetail: FC = (props: any) => {
message
.
warning
(
'请先选择商品'
);
}
else
{
const
allIndex
:
number
=
allGoodsInfo
.
findIndex
(
(
item
:
GoodsInfo
)
=>
item
.
goodsId
===
selectedRowKeys
[
0
],
);
const
index
:
number
=
goodsInfo
.
findIndex
(
(
item
:
GoodsInfo
)
=>
item
.
goodsId
===
selectedRowKeys
[
0
],
(
item
:
any
)
=>
item
.
goodsId
===
selectedRowKeys
[
0
],
);
const
index
:
number
=
goodsInfo
.
findIndex
((
item
:
any
)
=>
item
.
goodsId
===
selectedRowKeys
[
0
]);
if
(
index
===
0
&&
pagination
.
pageNo
===
1
)
{
message
.
warning
(
'已经到最上面了!'
);
}
else
{
...
...
@@ -296,10 +194,6 @@ const CategoryDetail: FC = (props: any) => {
}
setPagination
({
...
pagination
});
getAllGoodsTypeDetail
(
categoryId
);
// let obj: GoodsInfo = goodsInfo[index];
// goodsInfo.splice(index, 1, goodsInfo[index - 1]);
// goodsInfo.splice(index - 1, 1, obj);
// setGoodsInfo([...goodsInfo]);
}
}
}
...
...
@@ -310,11 +204,9 @@ const CategoryDetail: FC = (props: any) => {
message
.
warning
(
'请先选择商品'
);
}
else
{
const
allIndex
:
number
=
allGoodsInfo
.
findIndex
(
(
item
:
GoodsInfo
)
=>
item
.
goodsId
===
selectedRowKeys
[
0
],
);
const
index
:
number
=
goodsInfo
.
findIndex
(
(
item
:
GoodsInfo
)
=>
item
.
goodsId
===
selectedRowKeys
[
0
],
(
item
:
any
)
=>
item
.
goodsId
===
selectedRowKeys
[
0
],
);
const
index
:
number
=
goodsInfo
.
findIndex
((
item
:
any
)
=>
item
.
goodsId
===
selectedRowKeys
[
0
]);
if
(
allIndex
===
allGoodsInfo
.
length
-
1
)
{
message
.
warning
(
'已经到最下面了!'
);
}
else
{
...
...
@@ -329,10 +221,6 @@ const CategoryDetail: FC = (props: any) => {
}
setPagination
({
...
pagination
});
getAllGoodsTypeDetail
(
categoryId
);
// let obj: GoodsInfo = goodsInfo[index];
// goodsInfo.splice(index, 1, goodsInfo[index + 1]);
// goodsInfo.splice(index + 1, 1, obj);
// setGoodsInfo([...goodsInfo]);
}
}
}
...
...
@@ -341,17 +229,10 @@ const CategoryDetail: FC = (props: any) => {
const
paginationChange
=
(
pageNo
:
number
,
pageSize
:
number
)
=>
{
setPagination
({
pageNo
,
pageSize
});
};
const
showViewerEvent
=
(
src
:
string
)
=>
{
setcurrentImgList
([{
src
}]);
setViewerVisible
(
true
);
};
const
setVisibleEvent
=
()
=>
{
setViewerVisible
(
false
);
};
const
onSelectChange
=
(
newSelectedRowKeys
:
React
.
Key
[])
=>
{
setSelectedRowKeys
(
newSelectedRowKeys
);
};
const
rowSelection
:
TableRowSelection
<
GoodsInfo
>
=
{
const
rowSelection
:
TableRowSelection
<
any
>
=
{
selectedRowKeys
,
onChange
:
onSelectChange
,
type
:
'radio'
,
...
...
@@ -362,18 +243,12 @@ const CategoryDetail: FC = (props: any) => {
<
div
className=
'category-detail-head'
>
<
div
className=
'category-detail-title'
>
一、基本信息
</
div
>
<
div
className=
'category-detail-head-option'
>
{
isEdit
?
(
<
Button
type=
'primary'
style=
{
{
marginRight
:
'10px'
}
}
onClick=
{
sureChangeDetailInfo
}
>
保存
</
Button
>
)
:
btnChange
?
(
<
Button
type=
'primary'
style=
{
{
marginRight
:
'10px'
}
}
onClick=
{
changeDetailInfo
}
>
修改
</
Button
>
)
:
(
''
)
}
<
Button
type=
'primary'
style=
{
{
marginRight
:
'10px'
}
}
onClick=
{
sureChangeDetailInfo
}
>
保存
</
Button
>
<
Button
type=
'primary'
style=
{
{
marginRight
:
'10px'
}
}
onClick=
{
changeDetailInfo
}
>
修改
</
Button
>
<
Button
type=
'primary'
onClick=
{
backRoute
}
>
返回
</
Button
>
...
...
@@ -396,7 +271,7 @@ const CategoryDetail: FC = (props: any) => {
{
isEdit
?
(
<
Input
placeholder=
'请输入分类描述'
disabled=
{
!
isEdit
}
maxLength=
{
70
}
/>
)
:
(
<
span
>
{
detailData
?.
description
}
</
span
>
<
span
>
{
detailData
?.
description
||
'暂无'
}
</
span
>
)
}
</
Form
.
Item
>
{
detailData
?.
icon
?
(
...
...
@@ -412,7 +287,6 @@ const CategoryDetail: FC = (props: any) => {
fileList=
{
fileList
}
customRequest=
{
selfUploadRequest
}
onRemove=
{
onRemove
}
onPreview=
{
onPreview
}
maxCount=
{
1
}
accept=
'image/*'
beforeUpload=
{
beforeUpload
}
...
...
@@ -430,37 +304,23 @@ const CategoryDetail: FC = (props: any) => {
二、关联商品
</
div
>
<
div
className=
'category-detail-option'
>
{
btnUpperDown
?
(
<>
<
Button
icon=
{
<
ArrowUpOutlined
/>
}
type=
'primary'
style=
{
{
marginRight
:
'10px'
}
}
onClick=
{
shiftGoods
}
/>
<
Button
icon=
{
<
ArrowDownOutlined
/>
}
type=
'primary'
style=
{
{
marginRight
:
'10px'
}
}
onClick=
{
downGoods
}
/>
</>
)
:
(
''
)
}
{
/* <Button type="primary" onClick={addModalShowEvent}>
添加
</Button> */
}
<
Button
icon=
{
<
ArrowUpOutlined
/>
}
type=
'primary'
style=
{
{
marginRight
:
'10px'
}
}
onClick=
{
shiftGoods
}
/>
<
Button
icon=
{
<
ArrowDownOutlined
/>
}
type=
'primary'
style=
{
{
marginRight
:
'10px'
}
}
onClick=
{
downGoods
}
/>
</
div
>
<
div
className=
'category-detail-table'
>
<
Table
size=
'small'
columns=
{
Number
(
searchParams
.
directoryId
)
===
1
?
columns
.
filter
((
item
:
ColumnType
<
GoodsInfo
>
)
=>
item
.
title
!=
'安全编码开关'
)
:
columns
}
columns=
{
columns
}
dataSource=
{
goodsInfo
}
pagination=
{
{
total
,
...
...
@@ -475,41 +335,6 @@ const CategoryDetail: FC = (props: any) => {
rowSelection=
{
rowSelection
}
/>
</
div
>
<
Modal
visible=
{
addModalVisible
}
title=
'关联商品新增'
onOk=
{
addConnectGoods
}
onCancel=
{
cancelHandle
}
>
{
/* <Form form={connectForm}>
<Form.Item label="商品">
<Select placeholder="请选择商品" mode="multiple">
<Select.Option value={1}>{1}</Select.Option>
<Select.Option value={2}>{2}</Select.Option>
</Select>
</Form.Item>
</Form> */
}
<
div
className=
'add-goods'
>
<
div
>
<
Input
suffix=
{
<
SearchOutlined
/>
}
placeholder=
'请输入商品名称'
/>
</
div
>
<
div
className=
'add-goods-select'
>
<
div
className=
'add-goods-select-value'
>
<
div
className=
'label'
>
您选择的商品是:
</
div
>
<
div
className=
'select-value'
/>
</
div
>
<
div
className=
'add-goods-select-list'
/>
</
div
>
</
div
>
</
Modal
>
{
/* 图片放大 */
}
<
Viewer
visible=
{
viewerVisible
}
currentImgList=
{
currentImgList
}
activeViewerIndex=
{
0
}
setVisible=
{
setVisibleEvent
}
/>
</
div
>
);
};
...
...
src/pages/categoryManage/directoryManage/index.tsx
浏览文件 @
a8f737ae
import
{
DeleteOutlined
,
EditOutlined
,
PlusOutlined
}
from
'@ant-design/icons'
;
import
{
Tag
,
Space
,
Button
,
Table
,
Pagination
,
message
,
Modal
}
from
'antd'
;
import
{
Space
,
Button
,
Table
,
message
,
Modal
}
from
'antd'
;
import
{
ColumnsType
,
TablePaginationConfig
}
from
'antd/es/table'
;
import
type
{
FilterValue
,
SorterResult
}
from
'antd/es/table/interface'
;
import
{
FC
,
useEffect
,
useState
}
from
'react'
;
import
{
useEffect
,
useState
}
from
'react'
;
import
{
CategoryManageAPI
}
from
'~/api'
;
import
{
category
Entity
,
category
Dec
}
from
'~/api/interface/categoryManage'
;
import
{
categoryDec
}
from
'~/api/interface/categoryManage'
;
import
AddOrEditDec
from
'./components/addOrEditDec'
;
interface
DataType
{
title
:
string
;
dataIndex
:
string
;
key
:
string
;
align
:
string
;
}
const
typeOptions
=
[
{
value
:
0
,
...
...
@@ -29,7 +21,7 @@ const typeOptions = [
},
{
value
:
3
,
label
:
'飞手
服务
分类'
,
label
:
'飞手
培训
分类'
,
},
{
value
:
4
,
...
...
@@ -37,7 +29,7 @@ const typeOptions = [
},
];
const
DirectoryManage
:
FC
=
(
props
:
any
)
=>
{
const
DirectoryManage
=
(
)
=>
{
const
[
data
,
setData
]
=
useState
<
categoryDec
[]
>
();
//table数据
const
[
loading
,
setLoading
]
=
useState
(
false
);
//table获取数据的loading
const
[
pagination
,
setPagination
]
=
useState
<
TablePaginationConfig
>
({
...
...
@@ -52,7 +44,7 @@ const DirectoryManage: FC = (props: any) => {
const
[
isAddOrEditDecModal
,
setIsAddOrEditDecModal
]
=
useState
<
boolean
>
(
false
);
const
[
editData
,
setEditData
]
=
useState
<
categoryDec
|
null
>
(
null
);
const
columns
:
ColumnsType
<
DataType
>
=
[
const
columns
:
ColumnsType
<
categoryDec
>
=
[
{
title
:
'目录名称'
,
dataIndex
:
'directoryName'
,
...
...
@@ -70,7 +62,7 @@ const DirectoryManage: FC = (props: any) => {
});
return
<
div
>
{
find
?.
label
}
</
div
>;
},
}
/*
}
/*
{
title: '目录类型',
dataIndex: 'directoryType',
...
...
@@ -132,7 +124,7 @@ const DirectoryManage: FC = (props: any) => {
pageNo
:
pagination
!
.
current
!
,
pageSize
:
pagination
!
.
pageSize
!
,
})
.
then
((
res
)
=>
{
.
then
((
res
:
any
)
=>
{
setData
(
res
.
result
?.
list
.
map
((
item
:
categoryDec
)
=>
{
if
(
item
.
pid
)
{
...
...
@@ -151,7 +143,7 @@ const DirectoryManage: FC = (props: any) => {
total
:
res
.
result
.
totalCount
,
});
})
.
catch
((
err
)
=>
{
.
catch
(()
=>
{
setData
([]);
setLoading
(
false
);
});
...
...
@@ -163,7 +155,7 @@ const DirectoryManage: FC = (props: any) => {
title
:
'目录删除'
,
content
:
'确认删除该目录?'
,
onOk
()
{
CategoryManageAPI
.
removeDirectory
(
id
).
then
((
res
)
=>
{
CategoryManageAPI
.
removeDirectory
(
id
).
then
((
res
:
any
)
=>
{
if
(
res
.
code
==
200
)
{
message
.
success
(
'删除成功'
);
getDirectoryList
();
...
...
@@ -175,13 +167,8 @@ const DirectoryManage: FC = (props: any) => {
});
};
const
handleTableChange
=
(
pagination
:
TablePaginationConfig
,
filters
:
Record
<
string
,
FilterValue
>
,
sorter
:
SorterResult
<
DataType
>
,
)
=>
{
const
handleTableChange
=
(
pagination
:
TablePaginationConfig
)
=>
{
setPagination
(
pagination
);
// `dataSource` is useless since `pageSize` changed
if
(
pagination
.
pageSize
!==
pagination
?.
pageSize
)
{
setData
([]);
...
...
src/pages/mallManage/mallGoods/goodsAddOrEditOrDetail/index.tsx
浏览文件 @
a8f737ae
...
...
@@ -271,7 +271,6 @@ const GoodsAddOrEditOrDetail = () => {
<
StockSku
addOrEditSku=
{
addOrEditSkuShowEvent
}
specData=
{
specData
}
categoryList=
{
categoryList
}
skuUnitList=
{
skuUnitList
}
deleteSku=
{
deleteSkuEvent
}
isDetail=
{
isDetail
}
...
...
src/pages/mallManage/mallGoods/goodsList/index.tsx
浏览文件 @
a8f737ae
...
...
@@ -19,7 +19,7 @@ import qs from 'query-string';
//商品返回类型
type
goodsType
=
InterDataType
<
listGoodsType
>
[
'list'
];
//商品列表筛选类型
type
goodsSearchParameters
=
Omit
<
InterReqType
<
listGoodsType
>
,
'
pageNo'
|
'pageSize'
|
'
goodsType'
>
;
type
goodsSearchParameters
=
Omit
<
InterReqType
<
listGoodsType
>
,
'goodsType'
>
;
const
GoodsList
=
()
=>
{
//筛选ref
...
...
@@ -101,12 +101,16 @@ const GoodsList = () => {
},
];
const
[
tableData
,
setTableData
]
=
useState
<
goodsType
>
([]);
const
[
allGoods
,
setAllGoods
]
=
useState
<
goodsType
>
([]);
const
[
loading
,
setLoading
]
=
useState
<
boolean
>
(
false
);
//分页
const
[
pagination
,
setPagination
]
=
useState
<
PaginationProps
&
{
totalCount
:
number
}
>
({
const
[
pagination
,
setPagination
]
=
useState
<
PaginationProps
&
{
totalCount
:
number
;
totalPage
:
number
}
>
({
pageNo
:
1
,
pageSize
:
10
,
totalCount
:
0
,
totalPage
:
1
,
});
//筛选
const
[
query
,
setQuery
]
=
useState
<
goodsSearchParameters
>
({
status
:
undefined
});
...
...
@@ -126,6 +130,7 @@ const GoodsList = () => {
}),
);
getGoodsList
(
query
);
getGoodsList
({
...
query
,
pageNo
:
1
,
pageSize
:
9999
},
true
);
setQuery
(
query
);
setActiveTabKey
(
key
);
};
...
...
@@ -141,6 +146,7 @@ const GoodsList = () => {
}),
);
getGoodsList
(
query
);
getGoodsList
({
...
query
,
pageNo
:
1
,
pageSize
:
9999
},
true
);
};
//筛选
const
searchSuccess
=
(
data
:
any
)
=>
{
...
...
@@ -148,6 +154,10 @@ const GoodsList = () => {
pagination
.
pageSize
=
10
;
setQuery
({
...
filterObjAttr
(
data
,
[
'time'
]),
status
:
query
.
status
});
getGoodsList
({
...
filterObjAttr
(
data
,
[
'time'
]),
status
:
query
.
status
});
getGoodsList
(
{
...
filterObjAttr
(
data
,
[
'time'
]),
status
:
query
.
status
,
pageSize
:
9999
,
pageNo
:
1
},
true
,
);
setSearchParams
(
qs
.
stringify
({
pageNo
:
1
,
...
...
@@ -158,7 +168,7 @@ const GoodsList = () => {
);
};
//商品列表
const
getGoodsList
=
(
query
?:
goodsSearchParameters
)
=>
{
const
getGoodsList
=
(
query
?:
goodsSearchParameters
,
isAll
?:
boolean
)
=>
{
setLoading
(
true
);
GoodsAPI
.
getGoodsList
({
pageNo
:
pagination
.
pageNo
,
...
...
@@ -167,9 +177,14 @@ const GoodsList = () => {
...
query
,
}).
then
(({
result
})
=>
{
setLoading
(
false
);
setTableData
(
result
.
list
||
[]);
pagination
.
totalCount
=
result
.
totalCount
;
setPagination
(
pagination
);
if
(
isAll
)
{
setAllGoods
(
result
.
list
||
[]);
}
else
{
setTableData
(
result
.
list
||
[]);
pagination
.
totalCount
=
result
.
totalCount
;
pagination
.
totalPage
=
result
.
totalPage
;
setPagination
(
pagination
);
}
});
};
//新增商品
...
...
@@ -241,11 +256,97 @@ const GoodsList = () => {
},
});
};
//上移
const
upGoodsClick
=
()
=>
{
if
(
selectedRowKeys
.
length
===
0
)
{
message
.
warning
(
'请选择商品'
);
}
else
if
(
selectedRowKeys
.
length
>
1
)
{
message
.
warning
(
'最多选择一个商品'
);
}
else
{
const
index
=
tableData
.
findIndex
((
v
)
=>
v
.
id
===
selectedRowKeys
[
0
]);
const
allIndex
=
allGoods
.
findIndex
((
v
)
=>
v
.
id
===
selectedRowKeys
[
0
]);
if
(
index
===
0
&&
pagination
.
pageNo
===
1
)
{
message
.
warning
(
'位置已到最前列,无法上移'
);
}
else
{
const
exReqData
=
index
===
0
?
allGoods
.
filter
((
_v
,
index
)
=>
index
===
allIndex
-
1
||
index
===
allIndex
)
.
map
((
v
)
=>
({
id
:
v
.
id
}))
:
tableData
.
filter
((
_v
,
i
)
=>
index
-
1
===
i
||
index
===
i
)
.
map
((
v
)
=>
({
id
:
v
.
id
}));
GoodsAPI
.
exchangeGoodsInfo
({
firstId
:
exReqData
[
0
].
id
,
secondId
:
exReqData
[
1
].
id
}).
then
(
({
code
})
=>
{
if
(
code
===
'200'
)
{
message
.
success
(
'上移成功'
);
if
(
index
===
0
&&
pagination
.
pageNo
!==
1
)
{
pagination
.
pageNo
-=
1
;
setSearchParams
(
qs
.
stringify
({
pageNo
:
pagination
.
pageNo
,
pageSize
:
pagination
.
pageSize
,
...
query
,
status
:
query
.
status
===
undefined
?
'all'
:
query
.
status
,
}),
);
}
getGoodsList
(
query
);
getGoodsList
({
...
query
,
pageNo
:
1
,
pageSize
:
9999
},
true
);
}
},
);
}
}
};
//下移
const
downGoodsClick
=
()
=>
{
if
(
selectedRowKeys
.
length
===
0
)
{
message
.
warning
(
'请选择商品'
);
}
else
if
(
selectedRowKeys
.
length
>
1
)
{
message
.
warning
(
'最多选择一个商品'
);
}
else
{
const
index
=
tableData
.
findIndex
((
v
)
=>
v
.
id
===
selectedRowKeys
[
0
]);
const
allIndex
=
allGoods
.
findIndex
((
v
)
=>
v
.
id
===
selectedRowKeys
[
0
]);
if
(
index
===
tableData
.
length
-
1
&&
pagination
.
pageNo
===
pagination
.
totalPage
)
{
message
.
warning
(
'位置已到最后,无法下移'
);
}
else
{
const
exReqData
=
index
===
tableData
.
length
-
1
?
allGoods
.
filter
((
_v
,
index
)
=>
index
===
allIndex
+
1
||
index
===
allIndex
)
.
map
((
v
)
=>
({
id
:
v
.
id
}))
:
tableData
.
filter
((
_v
,
i
)
=>
index
+
1
===
i
||
index
===
i
)
.
map
((
v
)
=>
({
id
:
v
.
id
}));
GoodsAPI
.
exchangeGoodsInfo
({
firstId
:
exReqData
[
0
].
id
,
secondId
:
exReqData
[
1
].
id
}).
then
(
({
code
})
=>
{
if
(
code
===
'200'
)
{
message
.
success
(
'下移成功'
);
if
(
index
===
tableData
.
length
-
1
&&
pagination
.
pageNo
!==
pagination
.
totalPage
)
{
pagination
.
pageNo
+=
1
;
setSearchParams
(
qs
.
stringify
({
pageNo
:
pagination
.
pageNo
,
pageSize
:
pagination
.
pageSize
,
...
query
,
status
:
query
.
status
===
undefined
?
'all'
:
query
.
status
,
}),
);
}
getGoodsList
(
query
);
getGoodsList
({
...
query
,
pageNo
:
1
,
pageSize
:
9999
},
true
);
}
},
);
}
}
};
useEffect
(()
=>
{
getDirectoryList
();
pagination
.
pageNo
=
Number
(
searchParams
.
get
(
'pageNo'
)
||
1
);
pagination
.
pageSize
=
Number
(
searchParams
.
get
(
'pageSize'
)
||
10
);
getGoodsList
(
{
const
queryObj
=
{
goodsName
:
searchParams
.
get
(
'goodsName'
)
||
undefined
,
directoryId
:
searchParams
.
get
(
'directoryId'
)
?
Number
(
searchParams
.
get
(
'directoryId'
))
...
...
@@ -256,7 +357,9 @@ const GoodsList = () => {
searchParams
.
get
(
'status'
)
===
'all'
||
searchParams
.
get
(
'status'
)
===
null
?
undefined
:
Number
(
searchParams
.
get
(
'status'
)),
});
};
getGoodsList
(
queryObj
);
getGoodsList
({
...
queryObj
,
pageNo
:
1
,
pageSize
:
9999
},
true
);
setActiveTabKey
(
searchParams
.
get
(
'status'
)
===
'all'
||
searchParams
.
get
(
'status'
)
===
null
?
'1'
...
...
@@ -288,10 +391,20 @@ const GoodsList = () => {
/>
<
Card
tabList=
{
tabList
}
activeTabKey=
{
activeTabKey
}
onTabChange=
{
onTabChange
}
>
<
div
className=
'header-operate'
style=
{
{
marginBottom
:
'10px'
}
}
>
<
Button
type=
'primary'
style=
{
{
marginRight
:
'10px'
}
}
icon=
{
<
ArrowUpOutlined
/>
}
>
<
Button
type=
'primary'
style=
{
{
marginRight
:
'10px'
}
}
icon=
{
<
ArrowUpOutlined
/>
}
onClick=
{
upGoodsClick
}
>
上移
</
Button
>
<
Button
type=
'primary'
style=
{
{
marginRight
:
'10px'
}
}
icon=
{
<
ArrowDownOutlined
/>
}
>
<
Button
type=
'primary'
style=
{
{
marginRight
:
'10px'
}
}
icon=
{
<
ArrowDownOutlined
/>
}
onClick=
{
downGoodsClick
}
>
下移
</
Button
>
{
activeTabKey
!==
'2'
&&
(
...
...
src/pages/mallManage/produceManage/produceDetail/components/addOrEditProduceSpecModal/index.tsx
浏览文件 @
a8f737ae
...
...
@@ -86,6 +86,9 @@ const AddOrEditProduceSpecModal: FC<ModalProps & PropsType> = ({
url
:
data
.
specImage
,
},
]);
}
else
{
form
.
resetFields
();
setFileList
([]);
}
},
[
data
]);
return
(
...
...
src/pages/mallManage/produceManage/produceDetail/components/setProduceSpecPriceModal/index.tsx
浏览文件 @
a8f737ae
import
React
,
{
FC
,
useEffect
,
useState
}
from
'react'
;
import
{
Form
,
Input
,
message
,
Modal
,
Select
,
Row
,
Col
,
Button
,
ModalProps
}
from
'antd'
;
import
{
ProduceManageAPI
}
from
'~/api'
;
import
{
InterDataType
}
from
'~/api/interface'
;
import
{
cooperationTagType
,
ProductSpecListType
}
from
'~/api/interface/produceManageType'
;
import
{
filterObjAttr
}
from
'~/utils'
;
import
{
InterDataType
,
InterReqType
}
from
'~/api/interface'
;
import
{
cooperationTagType
,
editProductSpecPriceType
,
ProductSpecListType
,
}
from
'~/api/interface/produceManageType'
;
import
_
from
'lodash'
;
//加盟标签返回类型
type
cooperationTagResponseType
=
InterDataType
<
cooperationTagType
>
;
//产品规格返回类型
type
specType
=
InterDataType
<
ProductSpecListType
>
[
'list'
][
0
];
//配置价格参数类型
type
setPriceParametersType
=
InterReqType
<
editProductSpecPriceType
>
;
interface
PropsType
{
onCancel
:
()
=>
void
;
...
...
@@ -16,6 +22,25 @@ interface PropsType {
type
:
number
;
//产品所属类型
}
const
rentDateData
=
[
{
value
:
0
,
label
:
'1-7天'
,
},
{
value
:
1
,
label
:
'8-15天'
,
},
{
value
:
2
,
label
:
'16-30天'
,
},
{
value
:
3
,
label
:
'31天以上'
,
},
];
const
{
Option
}
=
Select
;
const
SetProduceSpecPriceModal
:
FC
<
ModalProps
&
PropsType
>
=
({
open
,
onCancel
,
data
,
type
})
=>
{
...
...
@@ -25,42 +50,50 @@ const SetProduceSpecPriceModal: FC<ModalProps & PropsType> = ({ open, onCancel,
const
[
tagInfoList
,
setTagInfoList
]
=
useState
<
cooperationTagResponseType
>
([]);
// 选择的列表
const
[
selectList
,
setSelectList
]
=
useState
<
number
[]
>
([]);
//是否编辑
const
[
isEdit
,
setIsEdit
]
=
useState
<
boolean
>
(
false
);
//配置价格参数
const
[
priceParameters
,
setPriceParameters
]
=
useState
<
setPriceParametersType
>
([]);
//当前租期
const
[
currentLeaseTerm
,
setCurrentLeaseTerm
]
=
useState
<
number
>
(
0
);
// 获取当前规格的价格
const
getProductSpecPrice
=
(
type
:
number
,
productSpecId
?:
number
,
leaseTerm
?:
number
)
=>
{
ProduceManageAPI
.
getProductSpecPrice
({
type
,
productSpecId
,
leaseTerm
}).
then
(({
result
})
=>
{
setIsEdit
(
!!
result
.
length
);
const
levelNumber
:
number
[]
=
result
const
priceInfoList
=
type
===
1
?
//租赁
rentDateData
.
map
((
v
)
=>
{
const
specPrice
=
result
.
filter
((
i
)
=>
i
.
leaseTerm
===
v
.
value
)
//type 判断商城商品
.
map
((
v
)
=>
({
cooperationTag
:
v
.
cooperationTag
,
id
:
v
.
id
,
price
:
v
.
price
}));
return
{
leaseTerm
:
v
.
value
,
productSpecId
:
data
?.
id
,
specPrice
,
type
:
type
,
};
})
:
//销售商品
[
{
productSpecId
:
data
?.
id
,
specPrice
:
result
.
map
((
v
)
=>
({
cooperationTag
:
v
.
cooperationTag
,
id
:
v
.
id
,
price
:
v
.
price
,
})),
type
:
type
,
},
];
setPriceParameters
(
priceInfoList
);
const
levelNumber
:
number
[]
=
priceInfoList
[
0
].
specPrice
.
filter
((
v
)
=>
v
.
cooperationTag
!=
0
)
.
map
((
v
)
=>
v
.
cooperationTag
);
const
Obj
:
any
=
result
.
reduce
((
pre
:
any
,
cur
)
=>
{
const
Obj
:
any
=
priceInfoList
[
0
].
specPrice
.
reduce
((
pre
:
any
,
cur
)
=>
{
pre
[
cur
.
cooperationTag
]
=
cur
.
price
;
return
{
...
pre
};
},
{});
if
(
result
.
length
)
{
//没有设置价格的清空
const
setDefaultObj
=
tagInfoList
.
reduce
((
pre
:
any
,
cur
)
=>
{
if
(
!
Object
.
keys
(
Obj
).
includes
(
cur
.
id
.
toString
()))
{
pre
[
cur
.
id
]
=
undefined
;
}
return
pre
;
},
{});
form
.
setFieldsValue
({
...
Obj
,
level
:
levelNumber
,
...
setDefaultObj
});
}
else
{
//如果没有返回价格,清楚上一次选择的租期价格
const
defaultObj
=
tagInfoList
.
reduce
((
pre
:
any
,
cur
)
=>
{
pre
[
cur
.
id
]
=
undefined
;
return
pre
;
},
{});
form
.
setFieldsValue
({
0
:
undefined
,
level
:
undefined
,
...
defaultObj
,
});
}
const
arr
=
result
form
.
setFieldsValue
({
...
Obj
,
level
:
levelNumber
});
const
arr
=
priceInfoList
[
0
].
specPrice
.
map
((
i
)
=>
{
return
i
.
cooperationTag
;
})
...
...
@@ -94,23 +127,29 @@ const SetProduceSpecPriceModal: FC<ModalProps & PropsType> = ({ open, onCancel,
form
.
validateFields
()
.
then
(
async
(
values
)
=>
{
const
specPrice
=
Object
.
keys
(
filterObjAttr
(
values
,
[
'leaseTerm'
,
'level'
])).
reduce
(
(
pre
:
any
,
cur
:
string
)
=>
{
const
specPrice
=
Object
.
getOwnPropertyNames
(
values
)
.
filter
((
v
)
=>
!
[
'leaseTerm'
,
'level'
].
includes
(
v
))
.
reduce
((
pre
:
any
,
cur
:
string
)
=>
{
return
[...
pre
,
{
price
:
values
[
cur
],
cooperationTag
:
Number
(
cur
)
}];
},
[],
);
ProduceManageAPI
[
isEdit
?
'editProductSpecPrice'
:
'setProductSpecPrice'
]({
specPrice
,
productSpecId
:
data
?.
id
,
type
:
type
,
leaseTerm
:
values
.
leaseTerm
,
}).
then
(({
code
})
=>
{
if
(
code
===
'200'
)
{
message
.
success
(
'操作成功'
);
handleClosed
();
},
[]);
if
(
priceParameters
)
{
priceParameters
[
currentLeaseTerm
].
specPrice
=
specPrice
;
const
obj
=
priceParameters
.
filter
((
v
)
=>
v
.
specPrice
.
length
)
.
find
((
v
)
=>
v
.
specPrice
.
some
((
v
)
=>
v
.
price
===
undefined
));
if
(
obj
&&
!
_
.
isNull
(
obj
.
leaseTerm
))
{
return
message
.
warning
(
`
${
rentDateData
[
obj
.
leaseTerm
!
].
label
}
存在价格未配置`
);
}
});
setPriceParameters
([...
priceParameters
]);
ProduceManageAPI
[
'editProductSpecPrice'
](
priceParameters
.
filter
((
v
)
=>
v
.
specPrice
.
length
),
).
then
(({
code
})
=>
{
if
(
code
===
'200'
)
{
message
.
success
(
'操作成功'
);
handleClosed
();
}
});
}
})
.
catch
((
err
)
=>
{
message
.
warning
(
err
.
errorFields
[
0
].
errors
[
0
]).
then
();
...
...
@@ -132,7 +171,51 @@ const SetProduceSpecPriceModal: FC<ModalProps & PropsType> = ({ open, onCancel,
};
//租期选择
const
rentDateChange
=
(
value
:
string
)
=>
{
getProductSpecPrice
(
type
,
data
?.
id
,
Number
(
value
));
const
values
=
form
.
getFieldsValue
();
const
specPrice
=
Object
.
getOwnPropertyNames
(
values
)
.
filter
((
v
)
=>
!
[
'leaseTerm'
,
'level'
].
includes
(
v
))
.
reduce
((
pre
:
any
,
cur
:
string
)
=>
{
return
[...
pre
,
{
price
:
values
[
cur
],
cooperationTag
:
Number
(
cur
)
}];
},
[]);
if
(
priceParameters
)
{
priceParameters
[
currentLeaseTerm
].
specPrice
=
specPrice
;
setPriceParameters
([...
priceParameters
]);
}
setCurrentLeaseTerm
(
Number
(
value
));
if
(
priceParameters
&&
priceParameters
[
Number
(
value
)].
specPrice
.
length
)
{
const
Obj
:
any
=
priceParameters
[
Number
(
value
)].
specPrice
.
reduce
((
pre
:
any
,
cur
)
=>
{
pre
[
cur
.
cooperationTag
]
=
cur
.
price
;
return
{
...
pre
};
},
{});
const
levelNumber
:
number
[]
=
priceParameters
[
Number
(
value
)].
specPrice
.
filter
((
v
)
=>
v
.
cooperationTag
!=
0
)
.
map
((
v
)
=>
v
.
cooperationTag
);
//没有设置价格的清空
const
setDefaultObj
=
tagInfoList
.
reduce
((
pre
:
any
,
cur
)
=>
{
if
(
!
Object
.
keys
(
Obj
).
includes
(
cur
.
id
.
toString
()))
{
pre
[
cur
.
id
]
=
undefined
;
}
return
pre
;
},
{});
form
.
setFieldsValue
({
...
Obj
,
level
:
levelNumber
,
...
setDefaultObj
});
const
arr
=
priceParameters
[
Number
(
value
)].
specPrice
.
map
((
i
)
=>
{
return
i
.
cooperationTag
;
})
.
filter
((
i
:
number
)
=>
i
!==
0
);
setSelectList
(
arr
);
}
else
{
const
defaultObj
=
tagInfoList
.
reduce
((
pre
:
any
,
cur
)
=>
{
pre
[
cur
.
id
]
=
undefined
;
return
pre
;
},
{});
form
.
setFieldsValue
({
0
:
undefined
,
level
:
undefined
,
...
defaultObj
,
});
setSelectList
([]);
}
};
// componentsDidMounted
useEffect
(()
=>
{
...
...
@@ -167,10 +250,11 @@ const SetProduceSpecPriceModal: FC<ModalProps & PropsType> = ({ open, onCancel,
rules=
{
[{
required
:
true
,
message
:
'请选择租期'
}]
}
>
<
Select
onChange=
{
rentDateChange
}
>
<
Select
.
Option
value=
{
0
}
>
1-7天
</
Select
.
Option
>
<
Select
.
Option
value=
{
1
}
>
8-15天
</
Select
.
Option
>
<
Select
.
Option
value=
{
2
}
>
16-30天
</
Select
.
Option
>
<
Select
.
Option
value=
{
3
}
>
31天以上
</
Select
.
Option
>
{
rentDateData
.
map
((
v
)
=>
(
<
Select
.
Option
value=
{
v
.
value
}
key=
{
v
.
value
}
>
{
v
.
label
}
</
Select
.
Option
>
))
}
</
Select
>
</
Form
.
Item
>
)
}
...
...
src/pages/mallManage/produceManage/produceDetail/index.tsx
浏览文件 @
a8f737ae
...
...
@@ -163,6 +163,7 @@ function ProduceDetail() {
};
const
produceSpecPriceModalCancel
=
()
=>
{
setProduceSpecPriceModalShow
(
false
);
setAddEditData
(
undefined
);
};
// 返回上一页
const
handleBack
=
()
=>
{
...
...
src/pages/mallManage/rentGoods/rentAddOrEditOrDetail/index.tsx
浏览文件 @
a8f737ae
...
...
@@ -271,7 +271,6 @@ const GoodsAddOrEditOrDetail = () => {
<
StockSku
addOrEditSku=
{
addOrEditSkuShowEvent
}
specData=
{
specData
}
categoryList=
{
categoryList
}
skuUnitList=
{
skuUnitList
}
deleteSku=
{
deleteSkuEvent
}
isDetail=
{
isDetail
}
...
...
src/pages/mallManage/rentGoods/rentList/index.tsx
浏览文件 @
a8f737ae
...
...
@@ -19,7 +19,7 @@ import qs from 'query-string';
//商品返回类型
type
goodsType
=
InterDataType
<
listGoodsType
>
[
'list'
];
//商品列表筛选类型
type
goodsSearchParameters
=
Omit
<
InterReqType
<
listGoodsType
>
,
'
pageNo'
|
'pageSize'
|
'
goodsType'
>
;
type
goodsSearchParameters
=
Omit
<
InterReqType
<
listGoodsType
>
,
'goodsType'
>
;
const
RentList
=
()
=>
{
//筛选ref
const
searchRef
=
useRef
();
...
...
@@ -100,12 +100,16 @@ const RentList = () => {
},
];
const
[
tableData
,
setTableData
]
=
useState
<
goodsType
>
([]);
const
[
allRentGoods
,
setAllRentGoods
]
=
useState
<
goodsType
>
([]);
const
[
loading
,
setLoading
]
=
useState
<
boolean
>
(
false
);
//分页
const
[
pagination
,
setPagination
]
=
useState
<
PaginationProps
&
{
totalCount
:
number
}
>
({
const
[
pagination
,
setPagination
]
=
useState
<
PaginationProps
&
{
totalCount
:
number
;
totalPage
:
number
}
>
({
pageNo
:
1
,
pageSize
:
10
,
totalCount
:
0
,
totalPage
:
1
,
});
//筛选
const
[
query
,
setQuery
]
=
useState
<
goodsSearchParameters
>
({
status
:
undefined
});
...
...
@@ -125,6 +129,7 @@ const RentList = () => {
}),
);
getGoodsList
(
query
);
getGoodsList
({
...
query
,
pageNo
:
1
,
pageSize
:
9999
},
true
);
setQuery
(
query
);
setActiveTabKey
(
key
);
};
...
...
@@ -140,6 +145,7 @@ const RentList = () => {
}),
);
getGoodsList
(
query
);
getGoodsList
({
...
query
,
pageNo
:
1
,
pageSize
:
9999
},
true
);
};
//筛选
const
searchSuccess
=
(
data
:
any
)
=>
{
...
...
@@ -147,6 +153,10 @@ const RentList = () => {
pagination
.
pageSize
=
10
;
setQuery
({
...
filterObjAttr
(
data
,
[
'time'
]),
status
:
query
.
status
});
getGoodsList
({
...
filterObjAttr
(
data
,
[
'time'
]),
status
:
query
.
status
});
getGoodsList
(
{
...
filterObjAttr
(
data
,
[
'time'
]),
status
:
query
.
status
,
pageNo
:
1
,
pageSize
:
9999
},
true
,
);
setSearchParams
(
qs
.
stringify
({
pageNo
:
1
,
...
...
@@ -157,7 +167,7 @@ const RentList = () => {
);
};
//商品列表
const
getGoodsList
=
(
query
?:
goodsSearchParameters
)
=>
{
const
getGoodsList
=
(
query
?:
goodsSearchParameters
,
isAll
?:
boolean
)
=>
{
setLoading
(
true
);
GoodsAPI
.
getGoodsList
({
pageNo
:
pagination
.
pageNo
,
...
...
@@ -166,9 +176,14 @@ const RentList = () => {
...
query
,
}).
then
(({
result
})
=>
{
setLoading
(
false
);
setTableData
(
result
.
list
||
[]);
pagination
.
totalCount
=
result
.
totalCount
;
setPagination
(
pagination
);
if
(
isAll
)
{
setAllRentGoods
(
result
.
list
||
[]);
}
else
{
setTableData
(
result
.
list
||
[]);
pagination
.
totalCount
=
result
.
totalCount
;
pagination
.
totalPage
=
result
.
totalPage
;
setPagination
(
pagination
);
}
});
};
//新增商品
...
...
@@ -238,11 +253,98 @@ const RentList = () => {
},
});
};
//上移
const
upGoodsRentClick
=
()
=>
{
if
(
selectedRowKeys
.
length
===
0
)
{
message
.
warning
(
'请选择商品'
);
}
else
if
(
selectedRowKeys
.
length
>
1
)
{
message
.
warning
(
'最多选择一个商品'
);
}
else
{
const
index
=
tableData
.
findIndex
((
v
)
=>
v
.
id
===
selectedRowKeys
[
0
]);
const
allIndex
=
allRentGoods
.
findIndex
((
v
)
=>
v
.
id
===
selectedRowKeys
[
0
]);
if
(
index
===
0
&&
pagination
.
pageNo
===
1
)
{
message
.
warning
(
'位置已到最前列,无法上移'
);
}
else
{
const
exReqData
=
index
===
0
?
allRentGoods
.
filter
((
_v
,
index
)
=>
index
===
allIndex
-
1
||
index
===
allIndex
)
.
map
((
v
)
=>
({
id
:
v
.
id
}))
:
tableData
.
filter
((
_v
,
i
)
=>
index
-
1
===
i
||
index
===
i
)
.
map
((
v
)
=>
({
id
:
v
.
id
}));
GoodsAPI
.
exchangeGoodsInfo
({
firstId
:
exReqData
[
0
].
id
,
secondId
:
exReqData
[
1
].
id
}).
then
(
({
code
})
=>
{
if
(
code
===
'200'
)
{
message
.
success
(
'上移成功'
);
if
(
index
===
0
&&
pagination
.
pageNo
!==
1
)
{
pagination
.
pageNo
-=
1
;
setSearchParams
(
qs
.
stringify
({
pageNo
:
pagination
.
pageNo
,
pageSize
:
pagination
.
pageSize
,
...
query
,
status
:
query
.
status
===
undefined
?
'all'
:
query
.
status
,
}),
);
}
getGoodsList
(
query
);
getGoodsList
({
...
query
,
pageNo
:
1
,
pageSize
:
9999
},
true
);
}
},
);
}
}
};
//下移
const
downRentGoodsClick
=
()
=>
{
if
(
selectedRowKeys
.
length
===
0
)
{
message
.
warning
(
'请选择商品'
);
}
else
if
(
selectedRowKeys
.
length
>
1
)
{
message
.
warning
(
'最多选择一个商品'
);
}
else
{
const
index
=
tableData
.
findIndex
((
v
)
=>
v
.
id
===
selectedRowKeys
[
0
]);
const
allIndex
=
allRentGoods
.
findIndex
((
v
)
=>
v
.
id
===
selectedRowKeys
[
0
]);
if
(
index
===
tableData
.
length
-
1
&&
pagination
.
pageNo
===
pagination
.
totalPage
)
{
message
.
warning
(
'位置已到最后,无法下移'
);
}
else
{
const
exReqData
=
index
===
tableData
.
length
-
1
?
allRentGoods
.
filter
((
_v
,
index
)
=>
index
===
allIndex
+
1
||
index
===
allIndex
)
.
map
((
v
)
=>
({
id
:
v
.
id
}))
:
tableData
.
filter
((
_v
,
i
)
=>
index
+
1
===
i
||
index
===
i
)
.
map
((
v
)
=>
({
id
:
v
.
id
}));
GoodsAPI
.
exchangeGoodsInfo
({
firstId
:
exReqData
[
0
].
id
,
secondId
:
exReqData
[
1
].
id
}).
then
(
({
code
})
=>
{
if
(
code
===
'200'
)
{
message
.
success
(
'下移成功'
);
if
(
index
===
tableData
.
length
-
1
&&
pagination
.
pageNo
!==
pagination
.
totalPage
)
{
pagination
.
pageNo
+=
1
;
setSearchParams
(
qs
.
stringify
({
pageNo
:
pagination
.
pageNo
,
pageSize
:
pagination
.
pageSize
,
...
query
,
status
:
query
.
status
===
undefined
?
'all'
:
query
.
status
,
}),
);
}
getGoodsList
(
query
);
getGoodsList
({
...
query
,
pageNo
:
1
,
pageSize
:
9999
},
true
);
}
},
);
}
}
};
useEffect
(()
=>
{
getDirectoryList
();
pagination
.
pageNo
=
Number
(
searchParams
.
get
(
'pageNo'
)
||
1
);
pagination
.
pageSize
=
Number
(
searchParams
.
get
(
'pageSize'
)
||
10
);
getGoodsList
(
{
const
queryObj
=
{
goodsName
:
searchParams
.
get
(
'goodsName'
)
||
undefined
,
directoryId
:
searchParams
.
get
(
'directoryId'
)
?
Number
(
searchParams
.
get
(
'directoryId'
))
...
...
@@ -253,7 +355,9 @@ const RentList = () => {
searchParams
.
get
(
'status'
)
===
'all'
||
searchParams
.
get
(
'status'
)
===
null
?
undefined
:
Number
(
searchParams
.
get
(
'status'
)),
});
};
getGoodsList
(
queryObj
);
getGoodsList
({
...
queryObj
,
pageSize
:
9999
,
pageNo
:
1
},
true
);
setActiveTabKey
(
searchParams
.
get
(
'status'
)
===
'all'
||
searchParams
.
get
(
'status'
)
===
null
?
'1'
...
...
@@ -285,10 +389,20 @@ const RentList = () => {
/>
<
Card
tabList=
{
tabList
}
activeTabKey=
{
activeTabKey
}
onTabChange=
{
onTabChange
}
>
<
div
className=
'header-operate'
style=
{
{
marginBottom
:
'10px'
}
}
>
<
Button
type=
'primary'
style=
{
{
marginRight
:
'10px'
}
}
icon=
{
<
ArrowUpOutlined
/>
}
>
<
Button
type=
'primary'
style=
{
{
marginRight
:
'10px'
}
}
icon=
{
<
ArrowUpOutlined
/>
}
onClick=
{
upGoodsRentClick
}
>
上移
</
Button
>
<
Button
type=
'primary'
style=
{
{
marginRight
:
'10px'
}
}
icon=
{
<
ArrowDownOutlined
/>
}
>
<
Button
type=
'primary'
style=
{
{
marginRight
:
'10px'
}
}
icon=
{
<
ArrowDownOutlined
/>
}
onClick=
{
downRentGoodsClick
}
>
下移
</
Button
>
{
activeTabKey
!==
'2'
&&
(
...
...
src/pages/mallManage/serviceManage/serviceList/index.tsx
浏览文件 @
a8f737ae
...
...
@@ -23,7 +23,7 @@ type categoryType = InterDataType<categoryListType>['list'];
//服务返回类型
type
serviceListType
=
InterDataType
<
serviceType
>
[
'list'
];
//服务列表请求类型
type
serviceParametersType
=
Omit
<
InterReqType
<
serviceType
>
,
'pageSize'
|
'pageNo'
>
;
type
serviceParametersType
=
InterReqType
<
serviceType
>
;
const
ServiceList
:
FC
<
any
>
=
()
=>
{
const
searchRef
=
useRef
<
any
>
();
...
...
@@ -133,14 +133,18 @@ const ServiceList: FC<any> = () => {
},
];
const
[
loading
,
setLoading
]
=
useState
<
boolean
>
(
false
);
const
[
tableData
,
setTableData
]
=
useState
<
serviceListType
>
([]);
const
[
tableData
,
setTableData
]
=
useState
<
serviceListType
>
([]);
//表格数据
const
[
allServiceData
,
setAllServiceData
]
=
useState
<
serviceListType
>
([]);
const
[
currentServiceData
,
setCurrentServiceData
]
=
useState
<
serviceListType
[
0
]
>
();
// 表格多选
const
[
selectedRowKeys
,
setSelectedRowKeys
]
=
useState
<
React
.
Key
[]
>
([]);
const
[
pagination
,
setPagination
]
=
useState
<
PaginationProps
&
{
totalCount
:
number
}
>
({
const
[
pagination
,
setPagination
]
=
useState
<
PaginationProps
&
{
totalCount
:
number
;
totalPage
:
number
}
>
({
pageNo
:
1
,
pageSize
:
10
,
totalCount
:
0
,
totalPage
:
1
,
});
//筛选
const
[
query
,
setQuery
]
=
useState
<
serviceParametersType
>
({
...
...
@@ -166,6 +170,15 @@ const ServiceList: FC<any> = () => {
);
setActiveTabKey
(
key
);
getServiceList
({
...
query
,
displayState
:
key
===
'1'
?
undefined
:
key
===
'2'
?
0
:
1
});
getServiceList
(
{
...
query
,
displayState
:
key
===
'1'
?
undefined
:
key
===
'2'
?
0
:
1
,
pageNo
:
1
,
pageSize
:
9999
,
},
true
,
);
};
//新增服务
const
addOrEditServiceModalShow
=
(
record
?:
serviceListType
[
0
])
=>
{
...
...
@@ -182,7 +195,7 @@ const ServiceList: FC<any> = () => {
getServiceList
(
query
);
};
//服务-列表
const
getServiceList
=
(
query
?:
serviceParametersType
)
=>
{
const
getServiceList
=
(
query
?:
serviceParametersType
,
isAll
?:
boolean
)
=>
{
setLoading
(
true
);
MallManageAPI
.
getServiceList
({
pageNo
:
pagination
.
pageNo
,
...
...
@@ -190,9 +203,14 @@ const ServiceList: FC<any> = () => {
...
query
,
}).
then
(({
result
})
=>
{
setLoading
(
false
);
setTableData
(
result
.
list
||
[]);
pagination
.
totalCount
=
result
.
totalCount
;
setPagination
(
pagination
);
if
(
isAll
)
{
setAllServiceData
(
result
.
list
||
[]);
}
else
{
setTableData
(
result
.
list
||
[]);
pagination
.
totalCount
=
result
.
totalCount
;
pagination
.
totalPage
=
result
.
totalPage
;
setPagination
(
pagination
);
}
});
};
//行业分类列表
...
...
@@ -283,6 +301,7 @@ const ServiceList: FC<any> = () => {
}),
);
getServiceList
(
query
);
getServiceList
({
...
query
,
pageNo
:
1
,
pageSize
:
9999
},
true
);
};
// 表格多选事件
const
onSelectChange
=
(
newSelectedRowKeys
:
React
.
Key
[])
=>
{
...
...
@@ -302,6 +321,7 @@ const ServiceList: FC<any> = () => {
);
setQuery
(
data
);
getServiceList
(
data
);
getServiceList
({
...
data
,
pageNo
:
1
,
pageSize
:
9999
},
true
);
};
//预览视频
const
previewVideo
=
(
url
:
string
)
=>
{
...
...
@@ -311,6 +331,88 @@ const ServiceList: FC<any> = () => {
const
previewCancel
=
()
=>
{
setPreviewShow
(
false
);
};
//上移
const
upServiceClick
=
()
=>
{
if
(
selectedRowKeys
.
length
===
0
)
{
message
.
warning
(
'请选择服务'
);
}
else
if
(
selectedRowKeys
.
length
>
1
)
{
message
.
warning
(
'最多选择一个服务'
);
}
else
{
const
index
=
tableData
.
findIndex
((
v
)
=>
v
.
id
===
selectedRowKeys
[
0
]);
const
allIndex
=
allServiceData
.
findIndex
((
v
)
=>
v
.
id
===
selectedRowKeys
[
0
]);
if
(
index
===
0
&&
pagination
.
pageNo
===
1
)
{
message
.
warning
(
'位置已到最前列,无法上移'
);
}
else
{
const
exReqData
=
index
===
0
?
allServiceData
.
filter
((
_v
,
index
)
=>
index
===
allIndex
-
1
||
index
===
allIndex
)
.
map
((
v
)
=>
({
id
:
v
.
id
,
sort
:
v
.
sort
}))
:
tableData
.
filter
((
_v
,
i
)
=>
index
-
1
===
i
||
index
===
i
)
.
map
((
v
)
=>
({
id
:
v
.
id
,
sort
:
v
.
sort
}));
MallManageAPI
.
exChangeService
(
exReqData
).
then
(({
code
})
=>
{
if
(
code
===
'200'
)
{
message
.
success
(
'上移成功'
);
if
(
index
===
0
&&
pagination
.
pageNo
!==
1
)
{
pagination
.
pageNo
-=
1
;
setSearchParams
(
qs
.
stringify
({
...
query
,
pageNo
:
pagination
.
pageNo
,
pageSize
:
pagination
.
pageSize
,
displayState
:
query
.
displayState
===
undefined
?
'all'
:
query
.
displayState
,
}),
);
}
getServiceList
(
query
);
getServiceList
({
...
query
,
pageNo
:
1
,
pageSize
:
9999
},
true
);
}
});
}
}
};
//下移
const
downServiceClick
=
()
=>
{
if
(
selectedRowKeys
.
length
===
0
)
{
message
.
warning
(
'请选择服务'
);
}
else
if
(
selectedRowKeys
.
length
>
1
)
{
message
.
warning
(
'最多选择一个服务'
);
}
else
{
const
index
=
tableData
.
findIndex
((
v
)
=>
v
.
id
===
selectedRowKeys
[
0
]);
const
allIndex
=
allServiceData
.
findIndex
((
v
)
=>
v
.
id
===
selectedRowKeys
[
0
]);
if
(
index
===
tableData
.
length
-
1
&&
pagination
.
pageNo
===
pagination
.
totalPage
)
{
message
.
warning
(
'位置已到最后,无法下移'
);
}
else
{
const
exReqData
=
index
===
tableData
.
length
-
1
?
allServiceData
.
filter
((
_v
,
index
)
=>
index
===
allIndex
+
1
||
index
===
allIndex
)
.
map
((
v
)
=>
({
id
:
v
.
id
,
sort
:
v
.
sort
}))
:
tableData
.
filter
((
_v
,
i
)
=>
index
+
1
===
i
||
index
===
i
)
.
map
((
v
)
=>
({
id
:
v
.
id
,
sort
:
v
.
sort
}));
MallManageAPI
.
exChangeService
(
exReqData
).
then
(({
code
})
=>
{
if
(
code
===
'200'
)
{
message
.
success
(
'下移成功'
);
if
(
index
===
tableData
.
length
-
1
&&
pagination
.
pageNo
!==
pagination
.
totalPage
)
{
pagination
.
pageNo
+=
1
;
setSearchParams
(
qs
.
stringify
({
...
query
,
pageNo
:
pagination
.
pageNo
,
pageSize
:
pagination
.
pageSize
,
displayState
:
query
.
displayState
===
undefined
?
'all'
:
query
.
displayState
,
}),
);
}
getServiceList
(
query
);
getServiceList
({
...
query
,
pageNo
:
1
,
pageSize
:
9999
},
true
);
}
});
}
}
};
useEffect
(()
=>
{
pagination
.
pageNo
=
Number
(
searchParams
.
get
(
'pageNo'
)
||
1
);
pagination
.
pageSize
=
Number
(
searchParams
.
get
(
'pageSize'
)
||
10
);
...
...
@@ -345,6 +447,7 @@ const ServiceList: FC<any> = () => {
:
'3'
,
);
getServiceList
(
queryObj
);
getServiceList
({
...
queryObj
,
pageNo
:
1
,
pageSize
:
9999
},
true
);
getIndustryCategoryList
();
getApplicationCategoryList
();
},
[]);
...
...
@@ -367,10 +470,20 @@ const ServiceList: FC<any> = () => {
/>
<
Card
tabList=
{
tabList
}
activeTabKey=
{
activeTabKey
}
onTabChange=
{
onTabChange
}
>
<
div
className=
'header-operate'
style=
{
{
marginBottom
:
'10px'
}
}
>
<
Button
type=
'primary'
style=
{
{
marginRight
:
'10px'
}
}
icon=
{
<
ArrowUpOutlined
/>
}
>
<
Button
type=
'primary'
style=
{
{
marginRight
:
'10px'
}
}
icon=
{
<
ArrowUpOutlined
/>
}
onClick=
{
upServiceClick
}
>
上移
</
Button
>
<
Button
type=
'primary'
style=
{
{
marginRight
:
'10px'
}
}
icon=
{
<
ArrowDownOutlined
/>
}
>
<
Button
type=
'primary'
style=
{
{
marginRight
:
'10px'
}
}
icon=
{
<
ArrowDownOutlined
/>
}
onClick=
{
downServiceClick
}
>
下移
</
Button
>
{
activeTabKey
!==
'2'
?
(
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论