Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
A
admin
概览
概览
详情
活动
周期分析
版本库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
统计图
问题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程表
图表
维基
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
iuav
admin
Commits
4c27b645
提交
4c27b645
authored
6月 03, 2023
作者:
ZhangLingKun
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
功能:eslint --fix prettier:fix
上级
f2e8dae7
全部展开
隐藏空白字符变更
内嵌
并排
正在显示
17 个修改的文件
包含
219 行增加
和
288 行删除
+219
-288
.env.development
env/.env.development
+1
-0
index.ts
src/api/index.ts
+1
-1
categoryManage.ts
src/api/modules/categoryManage.ts
+21
-25
index.tsx
src/components/viewer/index.tsx
+3
-8
index.ts
src/events/index.ts
+1
-1
index.tsx
src/pages/categoryManage/components/EditableCell/index.tsx
+5
-10
index.scss
src/pages/categoryManage/components/addCgyDailog/index.scss
+18
-20
index.tsx
src/pages/categoryManage/components/addCgyDailog/index.tsx
+47
-68
index.tsx
...ges/categoryManage/components/addOrEditDec copy/index.tsx
+31
-46
index.tsx
src/pages/categoryManage/components/addOrEditDec/index.tsx
+31
-46
index.tsx
...pages/categoryManage/components/deleteCgyDailog/index.tsx
+2
-2
index.scss
src/pages/categoryManage/detail/index.scss
+34
-35
index.tsx
src/pages/categoryManage/detail/index.tsx
+0
-0
index.scss
src/pages/categoryManage/index.scss
+2
-2
index.tsx
src/pages/categoryManage/index.tsx
+2
-3
index.scss
src/pages/customManage/customMoney/index.scss
+19
-20
router.tsx
src/router/router.tsx
+1
-1
没有找到文件。
env/.env.development
浏览文件 @
4c27b645
#请求接口地址
#VITE_REQUEST_BASE_URL='https://www.iuav.shop'
#VITE_REQUEST_BASE_URL='https://test.iuav.shop'
VITE_REQUEST_BASE_URL='/api'
#旧版接口地址
#VITE_REQUEST_BASE_URL='https://iuav.mmcuav.cn'
...
...
src/api/index.ts
浏览文件 @
4c27b645
...
...
@@ -15,5 +15,5 @@ export {
CommonAPI
,
CouponManageAPI
,
MakeManageAPI
,
CategoryManageAPI
CategoryManageAPI
,
};
src/api/modules/categoryManage.ts
浏览文件 @
4c27b645
import
axios
from
"../request"
;
import
axios
from
'../request'
;
import
{
PaginationEntity
}
from
'~/common/interface/PaginationEntity'
;
export
class
CategoryManageAPI
{
// 分类管理
// 分类目录
static
directoryList
=
()
=>
{
return
axios
.
get
(
"uavgoods/directory/directoryList"
);
return
axios
.
get
(
'uavgoods/directory/directoryList'
);
};
// 新增或编辑目录
static
addOrEditDirectory
=
(
data
:
{
id
?:
number
;
directoryName
:
string
}[]
)
=>
{
return
axios
.
post
(
"uavgoods/directory/addOrEditDirectory"
,
data
);
static
addOrEditDirectory
=
(
data
:
{
id
?:
number
;
directoryName
:
string
}[])
=>
{
return
axios
.
post
(
'uavgoods/directory/addOrEditDirectory'
,
data
);
};
// 删除目录
static
removeDirectory
=
(
id
:
number
)
=>
{
return
axios
.
get
(
"uavgoods/directory/removeDirectory"
,
{
params
:
{
id
}
});
return
axios
.
get
(
'uavgoods/directory/removeDirectory'
,
{
params
:
{
id
}
});
};
// 分类新增
static
addClassification
=
(
data
:
object
):
any
=>
{
return
axios
.
post
(
"uavgoods/mgoods/addClassification"
,
data
);
return
axios
.
post
(
'uavgoods/mgoods/addClassification'
,
data
);
};
// 分类列表
...
...
@@ -32,71 +30,69 @@ export class CategoryManageAPI {
// PC端-根据分类信息新增自定义规格-下拉选项 (只查产品类型)
static
getProductTypeInfoList
=
():
any
=>
{
return
axios
.
get
(
"uavgoods/mgoods/getGoodsTypeInfoList"
);
return
axios
.
get
(
'uavgoods/mgoods/getGoodsTypeInfoList'
);
};
// 所有分类信息
static
getGoodsTypeListByOneLevel
=
():
any
=>
{
return
axios
.
get
(
"uavgoods/mgoods/listGoodsTypeListByOneLevel"
);
return
axios
.
get
(
'uavgoods/mgoods/listGoodsTypeListByOneLevel'
);
};
// 分类修改
static
updateClassification
=
(
data
:
object
):
any
=>
{
return
axios
.
post
(
"uavgoods/mgoods/updateClassification"
,
data
);
return
axios
.
post
(
'uavgoods/mgoods/updateClassification'
,
data
);
};
// 删除分类
static
deleteGoodsTypeByOneLevel
=
(
params
:
object
):
any
=>
{
return
axios
.
get
(
"uavgoods/mgoods/deleteGoodsTypeByOneLevel"
,
{
params
});
return
axios
.
get
(
'uavgoods/mgoods/deleteGoodsTypeByOneLevel'
,
{
params
});
};
// 删除子分类
static
deleteGoodsTypeByChildren
=
(
params
:
object
):
any
=>
{
return
axios
.
get
(
"uavgoods/mgoods/deleteGoodsTypeByChildren"
,
{
params
});
return
axios
.
get
(
'uavgoods/mgoods/deleteGoodsTypeByChildren'
,
{
params
});
};
// 查询二级分类
static
listGoodsTypeListByTwoLevel
=
(
params
:
object
):
any
=>
{
return
axios
.
get
(
"uavgoods/mgoods/listGoodsTypeListByTwoLevel"
,
{
params
});
return
axios
.
get
(
'uavgoods/mgoods/listGoodsTypeListByTwoLevel'
,
{
params
});
};
// 查询其它服务
static
listOtherService
=
():
any
=>
{
return
axios
.
get
(
"uavgoods/mgoods/listOtherService"
);
return
axios
.
get
(
'uavgoods/mgoods/listOtherService'
);
};
// 分类上下移动
static
exchangeSortType
=
(
params
:
object
):
any
=>
{
return
axios
.
get
(
"uavgoods/mgoods/exchangeSortType"
,
{
params
});
return
axios
.
get
(
'uavgoods/mgoods/exchangeSortType'
,
{
params
});
};
// 分类详情
static
getGoodsTypeDetail
=
(
obj
:
{
id
:
number
}
&
Pick
<
PaginationEntity
,
"pageNo"
|
"pageSize"
>
obj
:
{
id
:
number
}
&
Pick
<
PaginationEntity
,
'pageNo'
|
'pageSize'
>
,
)
=>
{
return
axios
.
get
(
"uavgoods/mgoods/getGoodsTypeDetail"
,
{
params
:
obj
});
return
axios
.
get
(
'uavgoods/mgoods/getGoodsTypeDetail'
,
{
params
:
obj
});
};
// 分类详情-安全编码开发修改
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
)
=>
{
return
axios
.
get
(
"uavgoods/mgoods/exchangeGoodsInfo"
,
{
return
axios
.
get
(
'uavgoods/mgoods/exchangeGoodsInfo'
,
{
params
:
{
firstId
,
secondId
},
});
};
// 分类详情-图片上传
static
cateGoryDetailUpload
=
(
data
:
FormData
)
=>
{
return
axios
.
post
(
"ossservlet/upload/imgOss"
,
data
);
return
axios
.
post
(
'ossservlet/upload/imgOss'
,
data
);
};
// 行业分享码
static
getAppletQRCode
(
params
:
{
page
:
string
;
scene
:
string
})
{
return
axios
.
get
(
"malluser/wechat/getAppletQRCode"
,
{
params
});
return
axios
.
get
(
'malluser/wechat/getAppletQRCode'
,
{
params
});
}
}
src/components/viewer/index.tsx
浏览文件 @
4c27b645
import
Viewer
from
"react-viewer"
;
import
React
from
"react"
;
import
Viewer
from
'react-viewer'
;
import
React
from
'react'
;
interface
propsType
{
visible
:
boolean
;
...
...
@@ -8,12 +8,7 @@ interface propsType {
setVisible
:
Function
;
}
const
Index
:
React
.
FC
<
propsType
>
=
({
visible
,
currentImgList
,
activeViewerIndex
,
setVisible
,
})
=>
{
const
Index
:
React
.
FC
<
propsType
>
=
({
visible
,
currentImgList
,
activeViewerIndex
,
setVisible
})
=>
{
return
(
<
Viewer
visible=
{
visible
}
...
...
src/events/index.ts
浏览文件 @
4c27b645
import
{
EventEmitter
}
from
"events"
;
import
{
EventEmitter
}
from
'events'
;
class
QcEventEmitter
extends
EventEmitter
{}
...
...
src/pages/categoryManage/components/EditableCell/index.tsx
浏览文件 @
4c27b645
import
{
Form
,
Input
,
InputNumber
}
from
"antd"
;
import
{
Form
,
Input
,
InputNumber
}
from
'antd'
;
interface
Item
{
key
:
string
;
...
...
@@ -10,7 +10,7 @@ interface EditableCellProps extends React.HTMLAttributes<HTMLElement> {
editing
:
boolean
;
dataIndex
:
string
;
title
:
any
;
inputType
:
"textarea"
|
"text"
;
inputType
:
'textarea'
|
'text'
;
record
:
Item
;
index
:
number
;
children
:
React
.
ReactNode
;
...
...
@@ -26,13 +26,8 @@ const EditableCell: React.FC<EditableCellProps> = ({
...
restProps
})
=>
{
const
inputNode
=
dataIndex
===
"desc"
?
(
<
Input
.
TextArea
maxLength=
{
70
}
showCount
rows=
{
5
}
placeholder=
{
`请输入${title}`
}
/>
dataIndex
===
'desc'
?
(
<
Input
.
TextArea
maxLength=
{
70
}
showCount
rows=
{
5
}
placeholder=
{
`请输入${title}`
}
/>
)
:
(
<
Input
placeholder=
{
`请输入${title}`
}
maxLength=
{
15
}
/>
);
...
...
@@ -44,7 +39,7 @@ const EditableCell: React.FC<EditableCellProps> = ({
style=
{
{
margin
:
0
}
}
rules=
{
[
{
required
:
dataIndex
!==
"desc"
,
required
:
dataIndex
!==
'desc'
,
message
:
`请输入${title}`
,
},
]
}
...
...
src/pages/categoryManage/components/addCgyDailog/index.scss
浏览文件 @
4c27b645
.img-wrap
{
.img-content
{
width
:
50%
;
height
:
50%
;
position
:
relative
;
.img
{
width
:
100%
;
width
:
100%
;
}
.delete-img
{
position
:
absolute
;
top
:
0
;
right
:
0
;
transform
:
translate
(
25%
,-
25%
);
width
:
20px
;
height
:
20px
;
}
.img-wrap
{
.img-content
{
width
:
50%
;
height
:
50%
;
position
:
relative
;
.img
{
width
:
100%
;
width
:
100%
;
}
}
\ No newline at end of file
.delete-img
{
position
:
absolute
;
top
:
0
;
right
:
0
;
transform
:
translate
(
25%
,
-25%
);
width
:
20px
;
height
:
20px
;
}
}
}
src/pages/categoryManage/components/addCgyDailog/index.tsx
浏览文件 @
4c27b645
import
React
,
{
useEffect
,
useImperativeHandle
,
useState
}
from
"react"
;
import
{
Modal
,
Form
,
Input
,
Row
,
Col
,
Upload
,
message
,
Button
}
from
"antd"
;
import
{
LoadingOutlined
,
PlusOutlined
,
UploadOutlined
,
}
from
"@ant-design/icons"
;
import
Cookies
from
"js-cookie"
;
import
{
uploadImgURL
}
from
"~/api/request"
;
import
events
from
"~/events"
;
import
deletePng
from
"~/assets/image/delete.png"
;
import
"./index.scss"
;
import
React
,
{
useEffect
,
useImperativeHandle
,
useState
}
from
'react'
;
import
{
Modal
,
Form
,
Input
,
Row
,
Col
,
Upload
,
message
,
Button
}
from
'antd'
;
import
{
LoadingOutlined
,
PlusOutlined
,
UploadOutlined
}
from
'@ant-design/icons'
;
import
Cookies
from
'js-cookie'
;
import
{
uploadImgURL
}
from
'~/api/request'
;
import
events
from
'~/events'
;
import
deletePng
from
'~/assets/image/delete.png'
;
import
'./index.scss'
;
function
Index
(
props
:
any
)
{
const
headers
:
any
=
{
token
:
Cookies
.
get
(
"SXTB-TOKEN"
),
token
:
Cookies
.
get
(
'SXTB-TOKEN'
),
};
const
[
form
]
=
Form
.
useForm
();
const
[
imageUrl
,
setImageUrl
]
=
useState
(
""
);
const
[
imageUrl
,
setImageUrl
]
=
useState
(
''
);
const
[
fileList
,
setFileList
]:
any
=
useState
([]);
useEffect
(()
=>
{
events
.
addListener
(
"removeFileList"
,
()
=>
{
events
.
addListener
(
'removeFileList'
,
()
=>
{
// console.log("执行了");
setFileList
([]);
setImageUrl
(
""
);
setImageUrl
(
''
);
});
events
.
addListener
(
"setImgFile"
,
(
str
)
=>
{
events
.
addListener
(
'setImgFile'
,
(
str
)
=>
{
setImageUrl
(
str
);
form
.
setFieldsValue
({
icon
:
str
});
});
...
...
@@ -38,34 +34,34 @@ function Index(props: any) {
function
onFinishFailed
()
{}
function
getBase64
(
img
:
any
,
callback
:
Function
)
{
const
reader
=
new
FileReader
();
reader
.
addEventListener
(
"load"
,
()
=>
callback
(
reader
.
result
));
reader
.
addEventListener
(
'load'
,
()
=>
callback
(
reader
.
result
));
reader
.
readAsDataURL
(
img
);
}
function
handleChange
(
val
:
any
)
{
// console.log("上传图片-->", val);
if
(
!
[
"image/jpg"
,
"image/jpeg"
,
"image/png"
].
includes
(
val
.
file
.
type
))
{
message
.
error
(
"请上传图片格式为jpg,jpeg,png的图片"
);
form
.
setFieldsValue
({
icon
:
""
});
if
(
!
[
'image/jpg'
,
'image/jpeg'
,
'image/png'
].
includes
(
val
.
file
.
type
))
{
message
.
error
(
'请上传图片格式为jpg,jpeg,png的图片'
);
form
.
setFieldsValue
({
icon
:
''
});
setFileList
([]);
return
;
}
const
limitM
=
2
;
const
isLimit
=
val
.
file
.
size
/
1024
/
1024
<=
limitM
;
if
(
!
isLimit
)
{
message
.
error
(
"图片最大上传2M"
);
form
.
setFieldsValue
({
icon
:
""
});
message
.
error
(
'图片最大上传2M'
);
form
.
setFieldsValue
({
icon
:
''
});
setFileList
([]);
return
;
}
if
(
val
.
file
.
status
==
"error"
)
{
message
.
error
(
"服务器异常"
);
if
(
val
.
file
.
status
==
'error'
)
{
message
.
error
(
'服务器异常'
);
setFileList
([]);
form
.
setFieldsValue
({
icon
:
""
});
}
else
if
(
val
.
file
.
response
&&
val
.
file
.
response
.
code
!=
"200"
)
{
form
.
setFieldsValue
({
icon
:
''
});
}
else
if
(
val
.
file
.
response
&&
val
.
file
.
response
.
code
!=
'200'
)
{
message
.
error
(
val
.
file
.
response
.
message
);
setFileList
([]);
form
.
setFieldsValue
({
icon
:
""
});
}
else
if
(
val
.
file
.
status
===
"done"
)
{
form
.
setFieldsValue
({
icon
:
''
});
}
else
if
(
val
.
file
.
status
===
'done'
)
{
setImageUrl
(
val
.
file
.
response
.
result
[
0
]);
setFileList
(
val
.
fileList
);
form
.
setFieldsValue
({
icon
:
val
.
file
.
response
.
result
[
0
]
});
...
...
@@ -82,7 +78,7 @@ function Index(props: any) {
};
// 图片删除
const
deleteImg
=
()
=>
{
setImageUrl
(
""
);
setImageUrl
(
''
);
form
.
setFieldsValue
({
icon
:
undefined
});
setFileList
([]);
};
...
...
@@ -94,29 +90,29 @@ function Index(props: any) {
onCancel=
{
()
=>
props
.
handleCancel
()
}
>
<
Form
name=
"basic"
name=
'basic'
labelCol=
{
{
span
:
4
}
}
wrapperCol=
{
{
span
:
16
}
}
initialValues=
{
{
remember
:
true
}
}
onFinish=
{
onFinish
}
onFinishFailed=
{
onFinishFailed
}
autoComplete=
"off"
autoComplete=
'off'
form=
{
form
}
>
<
Form
.
Item
label=
"分类名称"
name=
"groupName"
rules=
{
[{
required
:
true
,
message
:
"请输入分类名称"
}]
}
label=
'分类名称'
name=
'groupName'
rules=
{
[{
required
:
true
,
message
:
'请输入分类名称'
}]
}
>
<
Input
placeholder=
"请输入分类名称"
maxLength=
{
15
}
allowClear
/>
<
Input
placeholder=
'请输入分类名称'
maxLength=
{
15
}
allowClear
/>
</
Form
.
Item
>
<
Form
.
Item
label=
"分类描述"
name=
"description"
rules=
{
[{
required
:
false
,
message
:
"请输入分类描述"
}]
}
label=
'分类描述'
name=
'description'
rules=
{
[{
required
:
false
,
message
:
'请输入分类描述'
}]
}
>
<
Input
.
TextArea
placeholder=
"请输入分类描述"
placeholder=
'请输入分类描述'
showCount
rows=
{
3
}
maxLength=
{
70
}
...
...
@@ -124,51 +120,34 @@ function Index(props: any) {
/>
</
Form
.
Item
>
<
Form
.
Item
label=
"分类图标"
name=
"icon"
rules=
{
[{
required
:
true
,
message
:
"请上传分类图标"
}]
}
label=
'分类图标'
name=
'icon'
rules=
{
[{
required
:
true
,
message
:
'请上传分类图标'
}]
}
>
{
imageUrl
?
(
<
div
className=
"img-wrap"
>
<
div
className=
"img-content"
>
<
img
src=
{
imageUrl
}
className=
"img"
onClick=
{
()
=>
props
.
imgClick
(
imageUrl
)
}
/>
<
img
src=
{
deletePng
}
alt=
""
className=
"delete-img"
onClick=
{
deleteImg
}
/>
<
div
className=
'img-wrap'
>
<
div
className=
'img-content'
>
<
img
src=
{
imageUrl
}
className=
'img'
onClick=
{
()
=>
props
.
imgClick
(
imageUrl
)
}
/>
<
img
src=
{
deletePng
}
alt=
''
className=
'delete-img'
onClick=
{
deleteImg
}
/>
</
div
>
</
div
>
)
:
(
<
Upload
// className="avatar-uploader"
name=
"uploadFile"
name=
'uploadFile'
fileList=
{
fileList
}
action=
{
uploadImgURL
}
maxCount=
{
1
}
beforeUpload=
{
beforeUpload
}
onChange=
{
handleChange
}
headers=
{
headers
}
accept=
"image/*"
accept=
'image/*'
>
{
fileList
.
length
>=
1
?
(
""
)
:
(
<
Button
icon=
{
<
UploadOutlined
/>
}
>
上传
</
Button
>
)
}
{
fileList
.
length
>=
1
?
''
:
<
Button
icon=
{
<
UploadOutlined
/>
}
>
上传
</
Button
>
}
</
Upload
>
)
}
</
Form
.
Item
>
<
Form
.
Item
label=
"备注"
name=
"remark"
rules=
{
[{
required
:
false
,
message
:
"请输入备注"
}]
}
>
<
Form
.
Item
label=
'备注'
name=
'remark'
rules=
{
[{
required
:
false
,
message
:
'请输入备注'
}]
}
>
<
Input
.
TextArea
rows=
{
5
}
maxLength=
{
150
}
showCount
/>
</
Form
.
Item
>
</
Form
>
...
...
src/pages/categoryManage/components/addOrEditDec copy/index.tsx
浏览文件 @
4c27b645
import
{
Modal
,
Form
,
Input
,
Button
,
Row
,
Col
,
message
}
from
"antd"
;
import
React
,
{
useEffect
,
useState
}
from
"react"
;
import
{
Modal
,
Form
,
Input
,
Button
,
Row
,
Col
,
message
}
from
'antd'
;
import
React
,
{
useEffect
,
useState
}
from
'react'
;
import
{
PlusOutlined
,
MinusOutlined
}
from
"@ant-design/icons"
;
import
{
PropsType
}
from
"~/common/interface/modal"
;
import
{
categoryDec
}
from
"~/api/modules/goods"
;
import
{
CategoryManageAPI
}
from
"~/api"
;
import
{
PlusOutlined
,
MinusOutlined
}
from
'@ant-design/icons'
;
import
{
PropsType
}
from
'~/common/interface/modal'
;
import
{
categoryDec
}
from
'~/api/modules/goods'
;
import
{
CategoryManageAPI
}
from
'~/api'
;
interface
selfPropsType
{
directoryList
:
categoryDec
[];
...
...
@@ -20,54 +20,45 @@ const AddOrEditDec: React.FC<PropsType & selfPropsType> = ({
})
=>
{
const
[
form
]
=
Form
.
useForm
<
any
>
();
// 表单目录标题列表
const
[
addOrEditDirectoryList
,
setAddOrEditDirectoryList
]
=
useState
<
categoryDec
[]
>
([]);
const
[
addOrEditDirectoryList
,
setAddOrEditDirectoryList
]
=
useState
<
categoryDec
[]
>
([]);
// 是否点击删除按钮
const
[
isClickDle
,
setIsClickDle
]
=
useState
<
boolean
>
(
false
);
useEffect
(()
=>
{
if
(
directoryList
.
length
!=
0
&&
!
isClickDle
)
{
setAddOrEditDirectoryList
(
directoryList
);
const
defaultFormValue
=
directoryList
.
reduce
(
(
pre
:
any
,
cur
:
categoryDec
)
=>
{
Object
.
keys
(
cur
).
map
((
item
:
string
)
=>
{
if
(
item
===
"id"
)
{
pre
[
cur
[
item
]]
=
cur
.
sortName
;
}
});
return
pre
;
},
{}
);
const
defaultFormValue
=
directoryList
.
reduce
((
pre
:
any
,
cur
:
categoryDec
)
=>
{
Object
.
keys
(
cur
).
map
((
item
:
string
)
=>
{
if
(
item
===
'id'
)
{
pre
[
cur
[
item
]]
=
cur
.
sortName
;
}
});
return
pre
;
},
{});
form
.
setFieldsValue
(
defaultFormValue
);
}
},
[
directoryList
]);
// 新增或修改目录
const
addDirectoryTitle
=
()
=>
{
const
decList
:
categoryDec
[]
=
[...
addOrEditDirectoryList
].
sort
(
(
a
:
categoryDec
,
b
:
categoryDec
)
=>
a
.
id
-
b
.
id
(
a
:
categoryDec
,
b
:
categoryDec
)
=>
a
.
id
-
b
.
id
,
);
setAddOrEditDirectoryList
([
...
addOrEditDirectoryList
,
{
id
:
decList
[
decList
.
length
-
1
].
id
+
1
,
defaultType
:
1
,
sortName
:
""
,
sortName
:
''
,
},
]);
};
// 删除目录
const
deleteDirectory
=
async
(
id
:
number
)
=>
{
const
bol
:
boolean
=
directoryList
.
some
(
(
item
:
categoryDec
)
=>
item
.
id
===
id
);
const
index
=
addOrEditDirectoryList
.
findIndex
(
(
item
:
categoryDec
)
=>
item
.
id
===
id
);
const
bol
:
boolean
=
directoryList
.
some
((
item
:
categoryDec
)
=>
item
.
id
===
id
);
const
index
=
addOrEditDirectoryList
.
findIndex
((
item
:
categoryDec
)
=>
item
.
id
===
id
);
if
(
bol
)
{
const
res
:
any
=
await
CategoryManageAPI
.
removeDirectory
(
id
);
if
(
res
.
code
===
"200"
)
{
message
.
success
(
"删除成功"
);
if
(
res
.
code
===
'200'
)
{
message
.
success
(
'删除成功'
);
setIsClickDle
(
true
);
refreshDec
(
id
);
}
else
{
...
...
@@ -83,9 +74,7 @@ const AddOrEditDec: React.FC<PropsType & selfPropsType> = ({
const
directorySureEvent
=
()
=>
{
form
.
validateFields
().
then
(
async
(
value
:
any
)
=>
{
const
requestList
=
Object
.
keys
(
value
).
reduce
((
pre
:
any
,
cur
:
string
)
=>
{
const
bol
:
boolean
=
directoryList
.
some
(
(
item
:
any
)
=>
item
.
id
===
Number
(
cur
)
);
const
bol
:
boolean
=
directoryList
.
some
((
item
:
any
)
=>
item
.
id
===
Number
(
cur
));
if
(
bol
)
{
pre
.
push
({
id
:
Number
(
cur
),
...
...
@@ -99,8 +88,8 @@ const AddOrEditDec: React.FC<PropsType & selfPropsType> = ({
return
pre
;
},
[]);
const
res
:
any
=
await
CategoryManageAPI
.
addOrEditDirectory
(
requestList
);
if
(
res
.
code
===
"200"
)
{
message
.
success
(
"操作成功"
);
if
(
res
.
code
===
'200'
)
{
message
.
success
(
'操作成功'
);
form
.
resetFields
();
setIsClickDle
(
false
);
handleOk
();
...
...
@@ -116,39 +105,35 @@ const AddOrEditDec: React.FC<PropsType & selfPropsType> = ({
};
return
(
<
Modal
title=
"目录管理"
title=
'目录管理'
visible=
{
isModalVisible
}
onOk=
{
directorySureEvent
}
onCancel=
{
directoryCancel
}
>
<
Form
form=
{
form
}
labelCol=
{
{
span
:
6
}
}
wrapperCol=
{
{
span
:
16
}
}
>
<
Form
.
Item
label=
"添加目录"
labelCol=
{
{
span
:
4
}
}
wrapperCol=
{
{
span
:
16
}
}
>
<
Form
.
Item
label=
'添加目录'
labelCol=
{
{
span
:
4
}
}
wrapperCol=
{
{
span
:
16
}
}
>
<
Button
icon=
{
<
PlusOutlined
/>
}
onClick=
{
addDirectoryTitle
}
/>
</
Form
.
Item
>
{
addOrEditDirectoryList
.
map
((
item
:
categoryDec
)
=>
(
<
Row
key=
{
item
.
id
}
gutter=
{
{
xs
:
8
,
sm
:
16
,
md
:
24
}
}
>
<
Col
span=
{
16
}
>
<
Form
.
Item
label=
"目录名称"
label=
'目录名称'
name=
{
item
.
id
}
rules=
{
[{
required
:
true
,
message
:
"请输入目录名称"
}]
}
rules=
{
[{
required
:
true
,
message
:
'请输入目录名称'
}]
}
>
<
Input
placeholder=
"请输入目录名称"
maxLength=
{
30
}
/>
<
Input
placeholder=
'请输入目录名称'
maxLength=
{
30
}
/>
</
Form
.
Item
>
</
Col
>
<
Col
>
{
item
.
defaultType
?
(
<
Button
icon=
{
<
MinusOutlined
/>
}
type=
"primary"
type=
'primary'
onClick=
{
()
=>
deleteDirectory
(
item
.
id
)
}
/>
)
:
(
""
''
)
}
</
Col
>
</
Row
>
...
...
src/pages/categoryManage/components/addOrEditDec/index.tsx
浏览文件 @
4c27b645
import
{
Modal
,
Form
,
Input
,
Button
,
Row
,
Col
,
message
}
from
"antd"
;
import
React
,
{
useEffect
,
useState
}
from
"react"
;
import
{
Modal
,
Form
,
Input
,
Button
,
Row
,
Col
,
message
}
from
'antd'
;
import
React
,
{
useEffect
,
useState
}
from
'react'
;
import
{
PlusOutlined
,
MinusOutlined
}
from
"@ant-design/icons"
;
import
{
PropsType
}
from
"~/common/interface/modal"
;
import
{
categoryDec
}
from
"~/api/modules/goods"
;
import
{
CategoryManageAPI
}
from
"~/api"
;
import
{
PlusOutlined
,
MinusOutlined
}
from
'@ant-design/icons'
;
import
{
PropsType
}
from
'~/common/interface/modal'
;
import
{
categoryDec
}
from
'~/api/modules/goods'
;
import
{
CategoryManageAPI
}
from
'~/api'
;
interface
selfPropsType
{
directoryList
:
categoryDec
[];
...
...
@@ -20,54 +20,45 @@ const AddOrEditDec: React.FC<PropsType & selfPropsType> = ({
})
=>
{
const
[
form
]
=
Form
.
useForm
<
any
>
();
// 表单目录标题列表
const
[
addOrEditDirectoryList
,
setAddOrEditDirectoryList
]
=
useState
<
categoryDec
[]
>
([]);
const
[
addOrEditDirectoryList
,
setAddOrEditDirectoryList
]
=
useState
<
categoryDec
[]
>
([]);
// 是否点击删除按钮
const
[
isClickDle
,
setIsClickDle
]
=
useState
<
boolean
>
(
false
);
useEffect
(()
=>
{
if
(
directoryList
.
length
!=
0
&&
!
isClickDle
)
{
setAddOrEditDirectoryList
(
directoryList
);
const
defaultFormValue
=
directoryList
.
reduce
(
(
pre
:
any
,
cur
:
categoryDec
)
=>
{
Object
.
keys
(
cur
).
map
((
item
:
string
)
=>
{
if
(
item
===
"id"
)
{
pre
[
cur
[
item
]]
=
cur
.
sortName
;
}
});
return
pre
;
},
{}
);
const
defaultFormValue
=
directoryList
.
reduce
((
pre
:
any
,
cur
:
categoryDec
)
=>
{
Object
.
keys
(
cur
).
map
((
item
:
string
)
=>
{
if
(
item
===
'id'
)
{
pre
[
cur
[
item
]]
=
cur
.
sortName
;
}
});
return
pre
;
},
{});
form
.
setFieldsValue
(
defaultFormValue
);
}
},
[
directoryList
]);
// 新增或修改目录
const
addDirectoryTitle
=
()
=>
{
const
decList
:
categoryDec
[]
=
[...
addOrEditDirectoryList
].
sort
(
(
a
:
categoryDec
,
b
:
categoryDec
)
=>
a
.
id
-
b
.
id
(
a
:
categoryDec
,
b
:
categoryDec
)
=>
a
.
id
-
b
.
id
,
);
setAddOrEditDirectoryList
([
...
addOrEditDirectoryList
,
{
id
:
decList
[
decList
.
length
-
1
].
id
+
1
,
defaultType
:
1
,
sortName
:
""
,
sortName
:
''
,
},
]);
};
// 删除目录
const
deleteDirectory
=
async
(
id
:
number
)
=>
{
const
bol
:
boolean
=
directoryList
.
some
(
(
item
:
categoryDec
)
=>
item
.
id
===
id
);
const
index
=
addOrEditDirectoryList
.
findIndex
(
(
item
:
categoryDec
)
=>
item
.
id
===
id
);
const
bol
:
boolean
=
directoryList
.
some
((
item
:
categoryDec
)
=>
item
.
id
===
id
);
const
index
=
addOrEditDirectoryList
.
findIndex
((
item
:
categoryDec
)
=>
item
.
id
===
id
);
if
(
bol
)
{
const
res
:
any
=
await
CategoryManageAPI
.
removeDirectory
(
id
);
if
(
res
.
code
===
"200"
)
{
message
.
success
(
"删除成功"
);
if
(
res
.
code
===
'200'
)
{
message
.
success
(
'删除成功'
);
setIsClickDle
(
true
);
refreshDec
(
id
);
}
else
{
...
...
@@ -83,9 +74,7 @@ const AddOrEditDec: React.FC<PropsType & selfPropsType> = ({
const
directorySureEvent
=
()
=>
{
form
.
validateFields
().
then
(
async
(
value
:
any
)
=>
{
const
requestList
=
Object
.
keys
(
value
).
reduce
((
pre
:
any
,
cur
:
string
)
=>
{
const
bol
:
boolean
=
directoryList
.
some
(
(
item
:
any
)
=>
item
.
id
===
Number
(
cur
)
);
const
bol
:
boolean
=
directoryList
.
some
((
item
:
any
)
=>
item
.
id
===
Number
(
cur
));
if
(
bol
)
{
pre
.
push
({
id
:
Number
(
cur
),
...
...
@@ -99,8 +88,8 @@ const AddOrEditDec: React.FC<PropsType & selfPropsType> = ({
return
pre
;
},
[]);
const
res
:
any
=
await
CategoryManageAPI
.
addOrEditDirectory
(
requestList
);
if
(
res
.
code
===
"200"
)
{
message
.
success
(
"操作成功"
);
if
(
res
.
code
===
'200'
)
{
message
.
success
(
'操作成功'
);
form
.
resetFields
();
setIsClickDle
(
false
);
handleOk
();
...
...
@@ -116,39 +105,35 @@ const AddOrEditDec: React.FC<PropsType & selfPropsType> = ({
};
return
(
<
Modal
title=
"目录管理"
title=
'目录管理'
visible=
{
isModalVisible
}
onOk=
{
directorySureEvent
}
onCancel=
{
directoryCancel
}
>
<
Form
form=
{
form
}
labelCol=
{
{
span
:
6
}
}
wrapperCol=
{
{
span
:
16
}
}
>
<
Form
.
Item
label=
"添加目录"
labelCol=
{
{
span
:
4
}
}
wrapperCol=
{
{
span
:
16
}
}
>
<
Form
.
Item
label=
'添加目录'
labelCol=
{
{
span
:
4
}
}
wrapperCol=
{
{
span
:
16
}
}
>
<
Button
icon=
{
<
PlusOutlined
/>
}
onClick=
{
addDirectoryTitle
}
/>
</
Form
.
Item
>
{
addOrEditDirectoryList
.
map
((
item
:
categoryDec
)
=>
(
<
Row
key=
{
item
.
id
}
gutter=
{
{
xs
:
8
,
sm
:
16
,
md
:
24
}
}
>
<
Col
span=
{
16
}
>
<
Form
.
Item
label=
"目录名称"
label=
'目录名称'
name=
{
item
.
id
}
rules=
{
[{
required
:
true
,
message
:
"请输入目录名称"
}]
}
rules=
{
[{
required
:
true
,
message
:
'请输入目录名称'
}]
}
>
<
Input
placeholder=
"请输入目录名称"
maxLength=
{
30
}
/>
<
Input
placeholder=
'请输入目录名称'
maxLength=
{
30
}
/>
</
Form
.
Item
>
</
Col
>
<
Col
>
{
item
.
defaultType
?
(
<
Button
icon=
{
<
MinusOutlined
/>
}
type=
"primary"
type=
'primary'
onClick=
{
()
=>
deleteDirectory
(
item
.
id
)
}
/>
)
:
(
""
''
)
}
</
Col
>
</
Row
>
...
...
src/pages/categoryManage/components/deleteCgyDailog/index.tsx
浏览文件 @
4c27b645
import
{
Modal
}
from
"antd"
;
import
{
Modal
}
from
'antd'
;
function
Index
(
props
:
any
)
{
return
(
<
Modal
title=
"分类删除"
title=
'分类删除'
visible=
{
props
.
isDeleteVisable
}
onOk=
{
()
=>
props
.
deleteHandleOk
()
}
onCancel=
{
()
=>
props
.
deleteHandleCancel
()
}
...
...
src/pages/categoryManage/detail/index.scss
浏览文件 @
4c27b645
.category-detail
{
min-height
:
100vh
;
background-color
:
#fff
;
padding
:
40px
;
box-sizing
:
border-box
;
&
-head
{
display
:
flex
;
justify-content
:
space-between
;
align-items
:
center
;
}
&
-title
{
font-size
:
17px
;
font-weight
:
bold
;
.category-detail
{
min-height
:
100vh
;
background-color
:
#fff
;
padding
:
40px
;
box-sizing
:
border-box
;
&
-head
{
display
:
flex
;
justify-content
:
space-between
;
align-items
:
center
;
}
&
-title
{
font-size
:
17px
;
font-weight
:
bold
;
}
&
-form
,
&
-option
,
&
-table
{
margin-top
:
20px
;
}
}
.add-goods
{
&
-select
{
margin-top
:
10px
;
&
-value
{
display
:
flex
;
}
&
-form
,
&
-option
,
&
-table
{
margin-top
:
20px
;
&
-list
{
height
:
300px
;
overflow-y
:
auto
;
border
:
1px
solid
#ccc
;
margin-top
:
10px
;
}
}
}
.add-goods
{
&
-select
{
margin-top
:
10px
;
&
-value
{
display
:
flex
;
}
&
-list
{
height
:
300px
;
overflow-y
:
auto
;
border
:
1px
solid
#ccc
;
margin-top
:
10px
;
}
}
.goods-img
{
width
:
40px
;
height
:
40px
;
}
.goods-img
{
width
:
40px
;
height
:
40px
;
}
\ No newline at end of file
src/pages/categoryManage/detail/index.tsx
浏览文件 @
4c27b645
差异被折叠。
点击展开。
src/pages/categoryManage/index.scss
浏览文件 @
4c27b645
...
...
@@ -23,14 +23,14 @@
justify-content
:
flex-end
;
flex-wrap
:
wrap
;
}
.share-code
{
.share-code
{
text-align
:
center
;
img
{
width
:
50%
;
height
:
50%
;
margin-bottom
:
10px
;
}
.ant-btn
span
{
.ant-btn
span
{
text-decoration
:
underline
;
}
}
src/pages/categoryManage/index.tsx
浏览文件 @
4c27b645
import
{
FC
,
useEffect
,
useState
,
useRef
}
from
'react'
;
import
{
Button
,
Table
,
Form
,
message
,
Tooltip
,
Checkbox
,
Card
,
Modal
}
from
'antd'
;
import
{
CardTabListType
}
from
'antd/lib/card/Card'
;
import
{
Router
}
from
'react-router-dom'
;
import
{
Router
}
from
'react-router-dom'
;
import
FileSaver
from
'file-saver'
;
import
qs
from
'query-string'
;
import
{
...
...
@@ -21,13 +21,12 @@ import DeleteCgyDailog from './components/deleteCgyDailog';
import
EditableCell
from
'./components/EditableCell'
;
import
AddOrEditDec
from
'./components/addOrEditDec'
;
import
{
CategoryManageAPI
}
from
'~/api'
;
import
{
categoryEntity
,
categoryDec
}
from
'~/api/interface/categoryManage'
import
{
categoryEntity
,
categoryDec
}
from
'~/api/interface/categoryManage'
;
import
Viewer
from
'~/components/viewer'
;
import
useOption
from
'~/common/hook/optionHook'
;
import
'./index.scss'
;
import
events
from
'~/events'
;
const
Category
:
FC
=
(
props
:
any
)
=>
{
const
baseRef
:
any
=
useRef
();
// 分类目录
...
...
src/pages/customManage/customMoney/index.scss
浏览文件 @
4c27b645
.from-table-wrap
{
.from-table-wrap
{
position
:
relative
;
//padding: 15px 0 0 0;
.header-view
{
.header-view
{
position
:
relative
;
width
:
100%
;
min-height
:
60px
;
...
...
@@ -14,18 +14,18 @@
flex-wrap
:
wrap
;
padding
:
15px
20px
5px
20px
;
margin
:
0
0
10px
0
;
.ant-select-selector
{
.ant-select-selector
{
min-width
:
200px
;
}
.ant-row
{
margin-bottom
:
10px
;
.ant-row
{
margin-bottom
:
10px
;
}
.add-button
{
.add-button
{
margin-right
:
15px
;
}
}
}
.detail-wrap
{
.detail-wrap
{
position
:
relative
;
width
:
100%
;
min-height
:
60px
;
...
...
@@ -33,31 +33,31 @@
background
:
#fff
;
border-radius
:
8px
;
padding
:
20px
25px
;
.ant-descriptions
:nth-child
(
1
)
{
.ant-descriptions-view
{
.ant-descriptions
:nth-child
(
1
)
{
.ant-descriptions-view
{
max-width
:
600px
;
}
}
}
.custom-class
{
.custom-class
{
margin-top
:
10vh
;
.ant-message-notice-content
{
.ant-message-notice-content
{
padding
:
15px
30px
;
position
:
relative
;
pointer-events
:none
;
span
[
role
=
"img"
]
{
pointer-events
:
none
;
span
[
role
=
'img'
]
{
display
:
none
;
}
}
.ant-message-notice-content
:after
{
.ant-message-notice-content
:after
{
position
:
absolute
;
pointer-events
:auto
;
pointer-events
:
auto
;
left
:
100%
;
top
:
0px
;
content
:
"X"
;
border
:
1px
solid
rgba
(
128
,
129
,
133
,
0
.25
);
content
:
'X'
;
border
:
1px
solid
rgba
(
128
,
129
,
133
,
0
.25
);
width
:
15px
;
height
:
15px
;
display
:
flex
;
...
...
@@ -65,9 +65,8 @@
align-items
:
center
;
border-radius
:
50%
;
font-weight
:
900
;
transform
:
scale
(
1
.3
,
1
.1
)
translateX
(
-2px
);
color
:
rgba
(
128
,
129
,
133
,
0
.6
);
transform
:
scale
(
1
.3
,
1
.1
)
translateX
(
-2px
);
color
:
rgba
(
128
,
129
,
133
,
0
.6
);
cursor
:
pointer
;
}
}
src/router/router.tsx
浏览文件 @
4c27b645
...
...
@@ -75,7 +75,7 @@ const SplitCouponOperate = React.lazy(
const
CouponDetailed
=
React
.
lazy
(()
=>
import
(
'src/pages/couponManage/couponDetailed'
));
//优惠券明细
// 分类管理
const
CategoryList
=
React
.
lazy
(()
=>
import
(
'src/pages/categoryManage/index'
))
const
CategoryList
=
React
.
lazy
(()
=>
import
(
'src/pages/categoryManage/index'
))
;
export
interface
RouteObjectType
{
path
:
AgnosticIndexRouteObject
[
'path'
];
element
:
any
;
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论