Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
A
admin-ci-test
概览
概览
详情
活动
周期分析
版本库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
统计图
问题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程表
图表
维基
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
test-ci
admin-ci-test
Commits
41a0d3f0
提交
41a0d3f0
authored
9月 23, 2023
作者:
龚洪江
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
功能:话题列表
上级
e7d18ee9
隐藏空白字符变更
内嵌
并排
正在显示
10 个修改的文件
包含
469 行增加
和
11 行删除
+469
-11
forumManageType.ts
src/api/interface/forumManageType.ts
+87
-1
forumManageAPI.ts
src/api/modules/forumManageAPI.ts
+14
-0
index.tsx
src/pages/dataDashboards/components/joinInfo/index.tsx
+11
-1
index.tsx
src/pages/dataDashboards/components/tradeInfo/index.tsx
+10
-0
index.tsx
src/pages/dataDashboards/components/userInfo/index.tsx
+10
-0
index.tsx
src/pages/forumManage/dynamicList/index.tsx
+7
-1
index.tsx
.../forumManage/topicList/components/addTopicModal/index.tsx
+136
-0
index.tsx
src/pages/forumManage/topicList/index.tsx
+167
-3
index.tsx
...resourceManage/materielManage/comp/addEditModal/index.tsx
+12
-5
dictionary.ts
src/utils/dictionary.ts
+15
-0
没有找到文件。
src/api/interface/forumManageType.ts
浏览文件 @
41a0d3f0
...
...
@@ -8,6 +8,7 @@ export type forumListType = InterListFunction<
description
:
string
;
mediaVO
:
null
;
show
:
number
;
gambitName
:
string
[];
userBaseInfo
:
{
nickName
:
string
;
userImg
:
string
;
...
...
@@ -55,4 +56,89 @@ export type checkDynamicType = InterFunction<
>
;
// 话题-列表
export
type
listGambitType
=
InterFunction
<
any
,
any
>
;
export
type
listGambitType
=
InterListFunction
<
{
/**
* 话题名称
*/
gambitName
?:
string
;
/**
* 话题属性 1普通 2热门 3推荐
*/
gambitProperty
?:
number
;
},
{
/**
* 话题参与讨论数量
*/
discussionCount
?:
number
;
/**
* 话题封面
*/
gambitCover
?:
string
;
/**
* 话题图标
*/
gambitIcon
?:
string
;
/**
* 话题名称
*/
gambitName
?:
string
;
/**
* 话题属性
*/
gambitProperty
?:
number
;
id
:
number
;
/**
* 贴子数
*/
postCount
?:
number
;
}
>
;
// 话题-新增
export
type
addGambitType
=
InterFunction
<
{
/**
* 话题封面
*/
gambitCover
:
string
;
/**
* 话题图标
*/
gambitIcon
:
string
;
/**
* 话题名称
*/
gambitName
:
string
;
/**
* 话题属性 话题属性 1普通 2热门 3推荐
*/
gambitProperty
:
number
;
},
any
>
;
// 话题-删除
export
type
deleteGambitType
=
InterFunction
<
{
id
:
number
},
any
>
;
// 话题-编辑
export
type
updateGambitType
=
InterFunction
<
{
/**
* 话题封面
*/
gambitCover
:
string
;
/**
* 话题图标
*/
gambitIcon
:
string
;
/**
* 话题名称
*/
gambitName
:
string
;
/**
* 话题属性 话题属性 1普通 2热门 3推荐
*/
gambitProperty
:
number
;
id
?:
number
;
},
any
>
;
src/api/modules/forumManageAPI.ts
浏览文件 @
41a0d3f0
import
{
addGambitType
,
checkDynamicType
,
deleteForumType
,
deleteGambitType
,
forumDetailType
,
forumListType
,
hiddenForumType
,
likeUserInfoType
,
listGambitType
,
updateGambitType
,
}
from
'~/api/interface/forumManageType'
;
import
axios
from
'~/api/request'
;
...
...
@@ -27,4 +31,14 @@ export class ForumManageAPI {
// 动态审核
static
checkDynamic
:
checkDynamicType
=
(
params
)
=>
axios
.
get
(
'/release/backstage/forum/checkDynamic'
,
{
params
});
// 话题-列表
static
getTopicList
:
listGambitType
=
(
data
)
=>
axios
.
post
(
'/release/gambit/listGambit'
,
data
);
// 话题-新增
static
addGambit
:
addGambitType
=
(
data
)
=>
axios
.
post
(
'/release/gambit/insertGambit'
,
data
);
// 话题-删除
static
deleteGambit
:
deleteGambitType
=
(
params
)
=>
axios
.
get
(
'/release/gambit/deleteGambit'
,
{
params
});
// 话题-编辑
static
updateGambit
:
updateGambitType
=
(
data
)
=>
axios
.
post
(
'/release/gambit/updateGambit'
,
data
);
}
src/pages/dataDashboards/components/joinInfo/index.tsx
浏览文件 @
41a0d3f0
...
...
@@ -7,6 +7,8 @@ import { InterDataType } from '~/api/interface';
import
{
userJoinReportDataType
}
from
'~/api/interface/dataDashboardsType'
;
// 数据看板-加盟返回类型
type
joinReportDataType
=
InterDataType
<
userJoinReportDataType
>
;
let
timer
:
any
;
const
JoinInfo
=
()
=>
{
const
[
joinReportDataType
,
setJoinReportDataType
]
=
useState
<
joinReportDataType
>
();
const
[
listingProducts
,
setListingProducts
]
=
useState
<
{
label
:
string
;
value
:
number
}[]
>
([]);
...
...
@@ -59,7 +61,7 @@ const JoinInfo = () => {
series
:
[
{
type
:
'pie'
,
radius
:
[
'40%'
,
'
7
0%'
],
radius
:
[
'40%'
,
'
6
0%'
],
avoidLabelOverlap
:
false
,
itemStyle
:
{
normal
:
{
...
...
@@ -93,8 +95,16 @@ const JoinInfo = () => {
});
};
// 定时刷新数据
const
refreshData
=
()
=>
{
if
(
timer
)
clearInterval
(
timer
);
timer
=
setInterval
(()
=>
{
getUserJoinReportData
();
},
600000
);
};
useEffect
(()
=>
{
getUserJoinReportData
();
refreshData
();
},
[]);
return
(
<
div
className=
'join-info'
>
...
...
src/pages/dataDashboards/components/tradeInfo/index.tsx
浏览文件 @
41a0d3f0
...
...
@@ -8,6 +8,8 @@ import dayjs from 'dayjs';
// 数据看板-订单数据返回类型
type
orderDataType
=
InterDataType
<
orderReportDataType
>
;
let
timer
:
any
;
const
TradeInfo
=
()
=>
{
const
[
orderData
,
setOrderData
]
=
useState
<
orderDataType
>
();
// 表格数据
...
...
@@ -82,9 +84,17 @@ const TradeInfo = () => {
}
});
};
// 定时刷新数据
const
refreshData
=
()
=>
{
if
(
timer
)
clearInterval
(
timer
);
timer
=
setInterval
(()
=>
{
getOrderReportData
();
},
600000
);
};
useEffect
(()
=>
{
getOrderReportData
();
refreshData
();
},
[]);
return
(
...
...
src/pages/dataDashboards/components/userInfo/index.tsx
浏览文件 @
41a0d3f0
...
...
@@ -9,6 +9,7 @@ type userInfoDataType = InterDataType<userReportDataType>;
// 数据报表-信息发布返回类型
type
releaseReportData
=
InterDataType
<
releaseReportDataType
>
;
let
timer
:
any
;
const
UserInfo
=
()
=>
{
const
[
userReportData
,
setUserReportData
]
=
useState
<
userInfoDataType
>
();
const
[
releaseReportData
,
setReleaseReportData
]
=
useState
<
releaseReportData
>
();
...
...
@@ -28,10 +29,19 @@ const UserInfo = () => {
}
});
};
// 定时刷新数据
const
refreshData
=
()
=>
{
if
(
timer
)
clearInterval
(
timer
);
timer
=
setInterval
(()
=>
{
getUserReportData
();
getReleaseReportData
();
},
600000
);
};
useEffect
(()
=>
{
getUserReportData
();
getReleaseReportData
();
refreshData
();
},
[]);
return
(
<
div
className=
'user-info'
>
...
...
src/pages/forumManage/dynamicList/index.tsx
浏览文件 @
41a0d3f0
import
SearchBox
,
{
searchColumns
}
from
'~/components/search-box'
;
import
{
Button
,
message
,
Modal
,
Table
,
Tooltip
}
from
'antd'
;
import
{
Button
,
message
,
Modal
,
Table
,
T
ag
,
T
ooltip
}
from
'antd'
;
import
{
ColumnsType
}
from
'antd/es/table'
;
import
{
useEffect
,
useState
}
from
'react'
;
import
DynamicDetailModal
from
'./components/dynamicDetailModal'
;
...
...
@@ -44,6 +44,12 @@ const DynamicList = () => {
),
},
{
title
:
'话题'
,
align
:
'center'
,
dataIndex
:
'gambitName'
,
render
:
(
text
:
string
[])
=>
text
?.
map
((
v
,
index
)
=>
<
Tag
key=
{
index
}
>
{
v
}
</
Tag
>),
},
{
title
:
'作者(用户名称)'
,
align
:
'center'
,
render
:
(
_text
:
string
,
record
)
=>
(
...
...
src/pages/forumManage/topicList/components/addTopicModal/index.tsx
0 → 100644
浏览文件 @
41a0d3f0
import
{
Form
,
Input
,
message
,
Modal
,
ModalProps
,
Select
}
from
'antd'
;
import
{
FC
,
useEffect
,
useState
}
from
'react'
;
import
{
Uploader
}
from
'~/components/uploader'
;
import
{
UploadOutlined
}
from
'@ant-design/icons'
;
import
{
InterListType
,
InterReqType
}
from
'~/api/interface'
;
import
{
addGambitType
,
listGambitType
}
from
'~/api/interface/forumManageType'
;
import
{
gambitPropertyList
}
from
'~/utils/dictionary'
;
import
{
ForumManageAPI
}
from
'~/api'
;
// 新增话题参数类型
type
addTopicParams
=
Exclude
<
InterReqType
<
addGambitType
>
,
undefined
>
;
// 话题列表返回类型
type
topicListType
=
InterListType
<
listGambitType
>
;
interface
selfProps
{
onOk
:
()
=>
void
;
onCancel
:
()
=>
void
;
currentTopicItem
:
topicListType
[
0
]
|
undefined
;
}
const
AddTopicModal
:
FC
<
ModalProps
&
selfProps
>
=
({
open
,
onCancel
,
onOk
,
currentTopicItem
})
=>
{
const
[
form
]
=
Form
.
useForm
<
addTopicParams
>
();
const
[
gambitIconFileList
,
setGambitIconFileList
]
=
useState
<
any
>
([]);
const
[
gambitCoverFileList
,
setGambitCoverFileList
]
=
useState
<
any
>
([]);
const
handleOk
=
()
=>
{
form
.
validateFields
().
then
((
values
)
=>
{
ForumManageAPI
[
currentTopicItem
?
'updateGambit'
:
'addGambit'
]({
...
values
,
gambitName
:
'#'
+
values
.
gambitName
+
'#'
,
id
:
currentTopicItem
?
currentTopicItem
.
id
:
undefined
,
}).
then
(({
code
})
=>
{
if
(
code
===
'200'
)
{
message
.
success
(
currentTopicItem
?
'编辑成功'
:
'新增成功'
);
form
.
resetFields
();
setGambitIconFileList
([]);
setGambitCoverFileList
([]);
onOk
();
}
});
});
};
const
handleCancel
=
()
=>
{
form
.
resetFields
();
setGambitIconFileList
([]);
setGambitCoverFileList
([]);
onCancel
();
};
// 图标上传成功
const
gambitIconUploadSuccess
=
(
value
:
any
)
=>
{
setGambitIconFileList
(
value
);
form
.
setFieldValue
(
'gambitIcon'
,
value
.
length
?
value
[
0
].
url
:
undefined
);
};
// 封面上传成功
const
gambitCoverUploadSuccess
=
(
value
:
any
)
=>
{
setGambitCoverFileList
(
value
);
form
.
setFieldValue
(
'gambitCover'
,
value
.
length
?
value
[
0
].
url
:
undefined
);
};
useEffect
(()
=>
{
if
(
currentTopicItem
)
{
form
.
setFieldsValue
({
gambitCover
:
currentTopicItem
.
gambitCover
||
undefined
,
gambitIcon
:
currentTopicItem
.
gambitIcon
||
undefined
,
gambitName
:
currentTopicItem
.
gambitName
,
gambitProperty
:
currentTopicItem
.
gambitProperty
,
});
setGambitIconFileList
(
currentTopicItem
.
gambitIcon
?
[
{
id
:
Math
.
random
(),
uid
:
Math
.
random
(),
name
:
'icon'
,
url
:
currentTopicItem
.
gambitIcon
,
},
]
:
[],
);
setGambitCoverFileList
(
currentTopicItem
.
gambitCover
?
[
{
id
:
Math
.
random
(),
uid
:
Math
.
random
(),
name
:
'icon'
,
url
:
currentTopicItem
.
gambitCover
,
},
]
:
[],
);
}
},
[
currentTopicItem
]);
return
(
<
Modal
title=
'新增话题'
open=
{
open
}
onOk=
{
handleOk
}
onCancel=
{
handleCancel
}
>
<
Form
labelCol=
{
{
span
:
4
}
}
wrapperCol=
{
{
span
:
15
}
}
form=
{
form
}
>
<
Form
.
Item
label=
'名称'
name=
'gambitName'
rules=
{
[{
required
:
true
,
message
:
'请输入名称'
}]
}
>
<
Input
placeholder=
'请输入名称'
maxLength=
{
30
}
/>
</
Form
.
Item
>
<
Form
.
Item
label=
'图标'
name=
'gambitIcon'
>
<
Uploader
fileUpload
listType=
'picture-card'
fileLength=
{
1
}
onChange=
{
gambitIconUploadSuccess
}
defaultFileList=
{
gambitIconFileList
}
>
<
UploadOutlined
/>
</
Uploader
>
</
Form
.
Item
>
<
Form
.
Item
label=
'封面'
name=
'gambitCover'
>
<
Uploader
fileUpload
listType=
'picture-card'
fileLength=
{
1
}
onChange=
{
gambitCoverUploadSuccess
}
defaultFileList=
{
gambitCoverFileList
}
>
<
UploadOutlined
/>
</
Uploader
>
</
Form
.
Item
>
<
Form
.
Item
label=
'属性'
name=
'gambitProperty'
rules=
{
[{
required
:
true
,
message
:
'请选择属性'
}]
}
>
<
Select
placeholder=
'请选择属性'
options=
{
gambitPropertyList
}
></
Select
>
</
Form
.
Item
>
</
Form
>
</
Modal
>
);
};
export
default
AddTopicModal
;
src/pages/forumManage/topicList/index.tsx
浏览文件 @
41a0d3f0
import
{
Tabl
e
}
from
'antd'
;
import
{
Button
,
Table
,
Image
,
Tag
,
Modal
,
messag
e
}
from
'antd'
;
import
SearchBox
from
'~/components/search-box'
;
import
AddTopicModal
from
'./components/addTopicModal'
;
import
{
useEffect
,
useState
}
from
'react'
;
import
{
ForumManageAPI
}
from
'~/api'
;
import
{
InterListType
,
InterReqListType
,
PaginationProps
}
from
'~/api/interface'
;
import
{
listGambitType
}
from
'~/api/interface/forumManageType'
;
import
{
ColumnsType
}
from
'antd/es/table/InternalTable'
;
import
{
gambitPropertyList
}
from
'~/utils/dictionary'
;
// 话题列表返回类型
type
topicListType
=
InterListType
<
listGambitType
>
;
// 话题列表参数类型
type
topicParameters
=
InterReqListType
<
listGambitType
>
;
const
TopicList
=
()
=>
{
const
tableColumns
:
ColumnsType
<
topicListType
[
0
]
>
=
[
{
title
:
'名称'
,
align
:
'center'
,
dataIndex
:
'gambitName'
,
},
{
title
:
'属性'
,
align
:
'center'
,
dataIndex
:
'gambitProperty'
,
render
:
(
text
:
number
)
=>
(
<
Tag
>
{
gambitPropertyList
.
find
((
v
)
=>
v
.
value
===
text
)?.
label
}
</
Tag
>
),
},
{
title
:
'图标'
,
align
:
'center'
,
dataIndex
:
'gambitIcon'
,
render
:
(
text
:
string
)
=>
<
Image
src=
{
text
}
width=
{
50
}
height=
{
50
}
/>,
},
{
title
:
'封面'
,
align
:
'center'
,
dataIndex
:
'gambitCover'
,
render
:
(
text
:
string
)
=>
<
Image
src=
{
text
}
width=
{
50
}
height=
{
50
}
/>,
},
{
title
:
'操作'
,
align
:
'center'
,
width
:
'20%'
,
render
:
(
_text
:
any
,
record
)
=>
(
<>
<
Button
type=
'link'
onClick=
{
()
=>
addTopicModalShowClick
(
record
)
}
>
编辑
</
Button
>
<
Button
type=
'link'
onClick=
{
()
=>
deleteTopic
(
record
)
}
>
删除
</
Button
>
</>
),
},
];
const
[
addTopicModalShow
,
setAddTopicModalShow
]
=
useState
<
boolean
>
(
false
);
const
[
pagination
,
setPagination
]
=
useState
<
PaginationProps
&
{
totalCount
:
number
}
>
({
pageNo
:
1
,
pageSize
:
10
,
totalCount
:
0
,
});
const
[
query
,
setQuery
]
=
useState
<
topicParameters
>
();
const
[
tableData
,
setTableData
]
=
useState
<
topicListType
>
([]);
const
[
currentTopicItem
,
setCurrentTopicItem
]
=
useState
<
topicListType
[
0
]
>
();
// 筛选
const
searchSuccess
=
(
value
:
topicParameters
)
=>
{
pagination
.
pageSize
=
10
;
pagination
.
pageNo
=
1
;
setQuery
(
value
);
getTopicList
(
value
);
};
// 获取话题列表
const
getTopicList
=
(
query
?:
topicParameters
)
=>
{
ForumManageAPI
.
getTopicList
({
pageNo
:
pagination
.
pageNo
,
pageSize
:
pagination
.
pageSize
,
...
query
,
}).
then
(({
result
})
=>
{
setTableData
(
result
.
list
||
[]);
pagination
.
totalCount
=
result
.
totalCount
;
setPagination
({
...
pagination
});
});
};
// 分页
const
paginationChange
=
(
pageNo
:
number
,
pageSize
:
number
)
=>
{
pagination
.
pageNo
=
pageNo
;
pagination
.
pageSize
=
pageSize
;
getTopicList
(
query
);
};
// 新建话题弹窗
const
addTopicModalShowClick
=
(
record
?:
topicListType
[
0
])
=>
{
setCurrentTopicItem
(
record
?
{
...
record
}
:
undefined
);
setAddTopicModalShow
(
true
);
};
const
addTopicModalCancel
=
()
=>
{
setAddTopicModalShow
(
false
);
};
const
addTopicModalShowOk
=
()
=>
{
getTopicList
();
setAddTopicModalShow
(
false
);
};
// 删除话题
const
deleteTopic
=
(
record
:
topicListType
[
0
])
=>
{
Modal
.
confirm
({
title
:
'删除话题'
,
content
:
'确认删除该话题?'
,
onOk
:
()
=>
{
ForumManageAPI
.
deleteGambit
({
id
:
record
.
id
}).
then
(({
code
})
=>
{
if
(
code
===
'200'
)
{
message
.
success
(
'删除成功'
);
getTopicList
();
}
});
},
});
};
useEffect
(()
=>
{
getTopicList
();
},
[]);
return
(
<
div
className=
'topic-list'
>
<
SearchBox
/>
<
Table
bordered
/>
<
SearchBox
search=
{
[
{
label
:
'名称'
,
type
:
'input'
,
name
:
'gambitName'
,
placeholder
:
'请输入名称'
,
},
{
label
:
'属性'
,
type
:
'Select'
,
name
:
'gambitProperty'
,
options
:
gambitPropertyList
,
placeholder
:
'请选择属性'
,
},
]
}
child=
{
<
Button
type=
'primary'
onClick=
{
()
=>
addTopicModalShowClick
()
}
>
新建
</
Button
>
}
searchData=
{
searchSuccess
}
/>
<
Table
bordered
dataSource=
{
tableData
}
rowKey=
'id'
columns=
{
tableColumns
}
pagination=
{
{
total
:
pagination
.
totalCount
,
pageSize
:
pagination
.
pageSize
,
current
:
pagination
.
pageNo
,
showSizeChanger
:
true
,
showQuickJumper
:
true
,
onChange
:
(
page
:
number
,
pageSize
:
number
)
=>
paginationChange
(
page
,
pageSize
),
showTotal
:
(
total
,
range
)
=>
`当前 ${range[0]}-${range[1]} 条记录 / 共 ${total} 条数据`
,
}
}
/>
<
AddTopicModal
open=
{
addTopicModalShow
}
onCancel=
{
addTopicModalCancel
}
onOk=
{
addTopicModalShowOk
}
currentTopicItem=
{
currentTopicItem
}
/>
</
div
>
);
};
...
...
src/pages/resourceManage/materielManage/comp/addEditModal/index.tsx
浏览文件 @
41a0d3f0
...
...
@@ -47,11 +47,14 @@ const AddEditModal: React.FC<propType> = (props) => {
const
[
form
]
=
Form
.
useForm
<
ReqType
>
();
// 上传图片
const
[
bannerTypeValue
,
setBannerTypeValue
]
=
useState
(
0
);
// 封面图文件
const
[
bannerImgFileList
,
setBannerImgFileList
]
=
useState
<
any
>
([]);
// 是否有效
const
[
validTime
,
setValidTime
]
=
useState
<
number
>
(
0
);
// 关闭弹窗
const
handleCancel
=
()
=>
{
setBannerTypeValue
(
0
);
setBannerImgFileList
([]);
form
.
resetFields
();
closed
();
};
...
...
@@ -93,6 +96,9 @@ const AddEditModal: React.FC<propType> = (props) => {
if
(
!
open
)
return
;
if
(
!
data
)
return
;
form
.
setFieldsValue
(
data
);
setBannerImgFileList
([
{
id
:
Math
.
random
(),
uid
:
Math
.
random
(),
name
:
'bannerImg'
,
url
:
data
?.
bannerImg
},
]);
setBannerTypeValue
(
data
?.
bannerType
);
if
(
data
?.
endTime
&&
data
?.
startTime
)
{
setValidTime
(
1
);
...
...
@@ -180,8 +186,11 @@ const AddEditModal: React.FC<propType> = (props) => {
fileLength=
{
1
}
fileSize=
{
10
}
fileType=
{
[
'image/png'
,
'image/jpeg'
,
'image/jpg'
,
'image/gif'
,
'image/bmp'
]
}
onChange=
{
(
e
)
=>
form
.
setFieldValue
(
'bannerImg'
,
e
[
0
].
url
)
}
defaultFileList=
{
data
?.
bannerImg
?
[{
url
:
data
?.
bannerImg
}]
:
[]
}
onChange=
{
(
e
)
=>
{
setBannerImgFileList
(
e
);
form
.
setFieldValue
(
'bannerImg'
,
e
[
0
].
url
);
}
}
defaultFileList=
{
bannerImgFileList
}
>
<
PlusOutlined
/>
</
Uploader
>
...
...
@@ -235,9 +244,7 @@ const AddEditModal: React.FC<propType> = (props) => {
wrapperCol=
{
{
span
:
20
}
}
>
<
RichText
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore
value=
{
form
.
getFieldValue
(
'textContent'
)
}
richTextContent=
{
form
.
getFieldValue
(
'textContent'
)
}
onChange=
{
(
e
)
=>
form
.
setFieldValue
(
'textContent'
,
e
)
}
height=
{
250
}
/>
...
...
src/utils/dictionary.ts
浏览文件 @
41a0d3f0
...
...
@@ -187,3 +187,18 @@ export const fileTypeList = [
value
:
'application/vnd.openxmlformats-officedocument.presentationml.presentation'
,
},
];
// 话题-属性字典
export
const
gambitPropertyList
=
[
{
label
:
'普通'
,
value
:
1
,
},
{
label
:
'热门'
,
value
:
2
,
},
{
label
:
'推荐'
,
value
:
3
,
},
];
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论