+
{
+ ref={ref => {
this.goodCollectionError = ref
}}
/>
@@ -241,12 +244,12 @@ class BrushQuestions1 extends Component {
})}
-
+
{this.total > 0 && (
,
path: '/user-info'
},
- {
- label: '我的收藏',
- key: 2,
- icon:
,
- path: '/personal-center/0'
- },
+ // {
+ // label: '我的收藏',
+ // key: 2,
+ // icon:
,
+ // path: '/personal-center/0'
+ // },
{
label: '我的点赞',
key: 3,
diff --git a/src/views/login/index.tsx b/src/views/login/index.tsx
index 022e5d6..bd0d94b 100644
--- a/src/views/login/index.tsx
+++ b/src/views/login/index.tsx
@@ -66,7 +66,7 @@ const Login = () => {
微信扫码关注公众号
-
获取验证码登录
+
公众号发送 “验证码”开启加薪之路

diff --git a/src/views/personal-center/components/good-bag/index.jsx b/src/views/personal-center/components/good-bag/index.jsx
index d12bfff..18519fb 100644
--- a/src/views/personal-center/components/good-bag/index.jsx
+++ b/src/views/personal-center/components/good-bag/index.jsx
@@ -1,3 +1,4 @@
+import req from '@utils/request'
import { Card, Pagination, Spin } from 'antd'
import React, { Component } from 'react'
import { goodTabType } from '../../constant'
@@ -53,23 +54,47 @@ export default class GoodBag extends Component {
* 获取一级分类数据
*/
getGoodList() {
- this.total = 3
- this.setState({
- goodList: [
- {
- id: 100,
- subjectName: 'Redis支持哪几种数据类型?'
- },
- {
- id: 101,
- subjectName: 'Redis的高级数据类型有什么?'
- },
- {
- id: 102,
- subjectName: 'Redis的优点有什么?'
+ req(
+ {
+ method: 'post',
+ url: '/subjectLiked/getSubjectLikedPage',
+ data: {
+ pageNo: 1,
+ pageSize: 10
}
- ]
+ },
+ '/subject'
+ ).then(res => {
+ if (res.success && res.code === 200) {
+ this.total = res.data?.total || 0
+ this.setState({
+ goodList: res.data.result
+ })
+ } else {
+ this.total = 0
+ this.setState({
+ goodList: []
+ })
+ }
})
+
+ // this.total = 3
+ // this.setState({
+ // goodList: [
+ // {
+ // id: 100,
+ // subjectName: 'Redis支持哪几种数据类型?'
+ // },
+ // {
+ // id: 101,
+ // subjectName: 'Redis的高级数据类型有什么?'
+ // },
+ // {
+ // id: 102,
+ // subjectName: 'Redis的优点有什么?'
+ // }
+ // ]
+ // })
}
/**
diff --git a/src/views/personal-center/components/question-list/index.jsx b/src/views/personal-center/components/question-list/index.jsx
index 617231c..e69e238 100644
--- a/src/views/personal-center/components/question-list/index.jsx
+++ b/src/views/personal-center/components/question-list/index.jsx
@@ -24,12 +24,12 @@ const CollectionQuestion = props => {
return (
handleJump(item.id)}
+ onClick={() => handleJump(item.subjectId)}
>
{item.subjectName}
diff --git a/src/views/personal-center/index.jsx b/src/views/personal-center/index.jsx
index d7b930d..c3352fe 100644
--- a/src/views/personal-center/index.jsx
+++ b/src/views/personal-center/index.jsx
@@ -1,9 +1,4 @@
-import { LikeTwoTone, StarTwoTone } from '@ant-design/icons'
-import { Menu } from 'antd'
-import React, { useEffect, useState } from 'react'
-import { useSelector } from 'react-redux'
-import { useParams } from 'react-router-dom'
-import CollectionBag from './components/collection-bag'
+import React from 'react'
import GoodBag from './components/good-bag'
import './index.less'
@@ -12,86 +7,89 @@ const personList = {
1: '点赞'
}
+// const PersonalCenter = props => {
+// const [currentKeyMap, setCurrentKeyMap] = useState(0)
+// const { userInfo } = useSelector(store => store.userInfo)
+// const [selectedKeys, setSelectedKeys] = useState('0')
+
+// const { tab } = useParams()
+
+// useEffect(() => {
+// setCurrentKeyMap(+tab)
+// setSelectedKeys(tab)
+// }, [tab])
+
+// const handleClick = ({ key }) => {
+// setCurrentKeyMap(Number(key))
+// setSelectedKeys(key)
+// }
+
+// return (
+//
+//
+//
+//
+//

+//
+//
+//
{userInfo.nickName}
+// {/*
+//
+//
+//
+//
+//
+//
+//
*/}
+//
+//
+//
+// {/*
*/}
+// {/*
+//
{inputAmount}
+//
录题
+//
*/}
+//
+//
+//
+//
+//
+//
+//
+//
+//
+// {currentKeyMap === 0 && }
+// {currentKeyMap === 1 && }
+//
+//
+//
+// )
+// }
const PersonalCenter = props => {
- const [currentKeyMap, setCurrentKeyMap] = useState(0)
- const { userInfo } = useSelector(store => store.userInfo)
- const [selectedKeys, setSelectedKeys] = useState('0')
-
- const { tab } = useParams()
-
- useEffect(() => {
- setCurrentKeyMap(+tab)
- setSelectedKeys(tab)
- }, [tab])
-
- const handleClick = ({ key }) => {
- setCurrentKeyMap(Number(key))
- setSelectedKeys(key)
- }
-
- return (
-
-
-
-
-

-
-
-
{userInfo.nickName}
- {/*
-
-
-
-
-
-
-
*/}
-
-
-
- {/*
*/}
- {/*
*/}
-
-
-
-
-
-
-
-
-
- {currentKeyMap === 0 && }
- {currentKeyMap === 1 && }
-
-
-
- )
+ return
}
export default PersonalCenter
diff --git a/src/views/question-bank/components/practice-list/index.jsx b/src/views/question-bank/components/practice-list/index.jsx
index 0ce34b9..e4b63e5 100644
--- a/src/views/question-bank/components/practice-list/index.jsx
+++ b/src/views/question-bank/components/practice-list/index.jsx
@@ -1,84 +1,83 @@
-import React, { Fragment, Component } from 'react';
-import req from '@utils/request';
-import RankingBox from '../ranking-box';
-import { apiName, RankingType } from '../../constant';
-import { mockRankingModuleList } from '../../mock';
+import req from '@utils/request'
+import React, { Component, Fragment } from 'react'
+import { RankingType, apiName } from '../../constant'
+import { mockRankingModuleList } from '../../mock'
+import RankingBox from '../ranking-box'
class PracticeList extends Component {
- constructor(props) {
- super(props);
- this.state = {
- contributionList: mockRankingModuleList[0].rankingList,
- contributeType: 0,
- isLoading: false,
- };
+ constructor(props) {
+ super(props)
+ this.state = {
+ contributionList: mockRankingModuleList[0].rankingList,
+ contributeType: 0,
+ isLoading: false
}
+ }
- componentDidMount() {
- // this.getPracticeRankList();
- }
+ componentDidMount() {
+ this.getPracticeRankList()
+ }
- /**
- * 获得练习榜
- */
- getPracticeRankList() {
- req({
- method: 'post',
- data: {},
- url: apiName.getPracticeRankList,
- })
- .then((res) => {
- if (res.data && res.data.length > 0) {
- this.setState({
- contributionList: res.data,
- isLoading: false,
- });
- } else {
- this.setState({
- contributionList: [],
- isLoading: false,
- });
- }
- })
- .catch((err) => console.log(err));
- }
+ /**
+ * 获得练习榜
+ */
+ getPracticeRankList() {
+ req({
+ method: 'post',
+ url: apiName.getPracticeRankList
+ })
+ .then(res => {
+ if (res.data && res.data.length > 0) {
+ this.setState({
+ contributionList: res.data,
+ isLoading: false
+ })
+ } else {
+ this.setState({
+ contributionList: [],
+ isLoading: false
+ })
+ }
+ })
+ .catch(err => console.log(err))
+ }
- /**
- * 切换排行榜
- * @param {*} index
- * @returns
- */
- onChangeRanking = (index) => {
- console.log(index, 'practice index')
- this.setState({
- contributeType: index,
- });
- };
+ /**
+ * 切换排行榜
+ * @param {*} index
+ * @returns
+ */
+ onChangeRanking = index => {
+ console.log(index, 'practice index')
+ this.setState({
+ contributeType: index
+ })
+ }
- /**
- * 去练题
- */
- onChangeJump = () => {
- this.props.history.push('/practice-questions');
- };
+ /**
+ * 去练题
+ */
+ onChangeJump = () => {
+ this.props.history.push('/practice-questions')
+ }
- render() {
- const { contributionList, isLoading, contributeType } = this.state;
- return (
-
- {contributionList?.length > 0 && (
-
- )}
-
- );
- }
+ render() {
+ const { contributionList, isLoading, contributeType } = this.state
+ return (
+
+ {contributionList?.length > 0 && (
+
+ )}
+
+ )
+ }
}
-export default PracticeList;
+export default PracticeList
diff --git a/src/views/question-bank/components/ranking-box/index.jsx b/src/views/question-bank/components/ranking-box/index.jsx
index 119647b..a38384d 100644
--- a/src/views/question-bank/components/ranking-box/index.jsx
+++ b/src/views/question-bank/components/ranking-box/index.jsx
@@ -29,16 +29,24 @@ export default function RankingBox(props) {
}
// props.onHandleJump && props.onHandleJump()
})
- const tabList = [
- {
- tab: '本月排行',
- key: 'month'
- },
- {
- tab: '总榜',
- key: 'total'
- }
- ]
+ const tabList =
+ rankingType === 1
+ ? [
+ {
+ tab: '本月排行',
+ key: 'month'
+ },
+ {
+ tab: '总榜',
+ key: 'total'
+ }
+ ]
+ : [
+ {
+ tab: '总榜',
+ key: 'total'
+ }
+ ]
// 获得当前下标的数据
let rankingList = contributionList || []
@@ -79,24 +87,24 @@ export default function RankingBox(props) {
{index > 2 && index + 1}
-

+
{item.name} }
+ title={
{item.createUser}
}
content={
-
{item.name}
+
{item.createUser}
{/*
{item.organizationFullName}
*/}
}
>
-
{item.name}
+
{item.createUser}
{/*
{item.organizationName}
*/}
-
🔥 {item.count}
+
🔥 {item.subjectCount}
)
})}
diff --git a/src/views/question-bank/constant.ts b/src/views/question-bank/constant.ts
index c612112..e7765b1 100644
--- a/src/views/question-bank/constant.ts
+++ b/src/views/question-bank/constant.ts
@@ -1,46 +1,49 @@
-
export const apiName = {
- /**
- * 查询分类
- */
- queryPrimaryCategory: '/category/queryPrimaryCategory',
+ /**
+ * 查询分类
+ */
+ queryPrimaryCategory: '/category/queryPrimaryCategory',
- /**
- * 查询大类下分类
- */
- queryCategoryByPrimary: '/category/queryCategoryByPrimary',
+ /**
+ * 查询大类下分类
+ */
+ queryCategoryByPrimary: '/category/queryCategoryByPrimary',
- // 获取题目列表
- getSubjectPage: '/getSubjectPage'
+ // 获取题目列表
+ getSubjectPage: '/getSubjectPage',
-};
+ /**
+ * 练题排行榜
+ */
+ getPracticeRankList: '/getContributeList'
+}
/**
* 模块类型
*/
export const RankingType = {
- /**
- * 贡献榜
- */
- contribution: 1,
- /**
- * 排行榜
- */
- practice: 2,
-};
+ /**
+ * 贡献榜
+ */
+ contribution: 1,
+ /**
+ * 排行榜
+ */
+ practice: 2
+}
/**
* 模块名称
*/
export const RankingTypeText = {
- [RankingType.contribution]: '贡献榜',
- [RankingType.practice]: '综合练习榜',
-};
+ [RankingType.contribution]: '出题贡献榜',
+ [RankingType.practice]: '综合练习榜'
+}
/**
* 对应按钮名字
*/
export const RankingTypeBtnText = {
- [RankingType.contribution]: '去出题',
- [RankingType.practice]: '去练习',
-};
+ [RankingType.contribution]: '去出题',
+ [RankingType.practice]: '去练习'
+}
diff --git a/src/views/question-bank/index.tsx b/src/views/question-bank/index.tsx
index b00e9a5..5fee23c 100644
--- a/src/views/question-bank/index.tsx
+++ b/src/views/question-bank/index.tsx
@@ -132,8 +132,8 @@ const QuestionBank = () => {
-
+
)
diff --git a/src/views/question-bank/mock.ts b/src/views/question-bank/mock.ts
index 474a785..18a8327 100644
--- a/src/views/question-bank/mock.ts
+++ b/src/views/question-bank/mock.ts
@@ -1,580 +1,580 @@
export const mockRankingModuleList = [
- {
+ {
+ id: 1,
+ title: '综合练习榜',
+ rankingList: [
+ {
id: 1,
- title: '综合练习榜',
- rankingList: [
- {
- id: 1,
- wechatName: 'jcdw',
- headImg:
- 'https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fimg1.doubanio.com%2Fview%2Fnote%2Flarge%2Fpublic%2Fp37015927.jpg&refer=http%3A%2F%2Fimg1.doubanio.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=auto?sec=1699286185&t=00db8ff5a1e11783f6c8eba954a5891f',
- name: '鸡翅大王1',
- count: 160,
- },
- {
- id: 2,
- wechatName: 'jcdw1',
- headImg:
- 'https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fimg1.doubanio.com%2Fview%2Fnote%2Flarge%2Fpublic%2Fp37015927.jpg&refer=http%3A%2F%2Fimg1.doubanio.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=auto?sec=1699286185&t=00db8ff5a1e11783f6c8eba954a5891f',
- name: '鸡翅大王2',
- count: 140,
- },
- {
- id: 3,
- wechatName: 'jcdw2',
- headImg:
- 'https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fimg1.doubanio.com%2Fview%2Fnote%2Flarge%2Fpublic%2Fp37015927.jpg&refer=http%3A%2F%2Fimg1.doubanio.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=auto?sec=1699286185&t=00db8ff5a1e11783f6c8eba954a5891f',
- name: '鸡翅大王',
- count: 101,
- },
- {
- id: 4,
- wechatName: 'jcdw3',
- headImg:
- 'https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fimg1.doubanio.com%2Fview%2Fnote%2Flarge%2Fpublic%2Fp37015927.jpg&refer=http%3A%2F%2Fimg1.doubanio.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=auto?sec=1699286185&t=00db8ff5a1e11783f6c8eba954a5891f',
- name: '鸡翅小王',
- count: 100,
- },
- {
- id: 5,
- wechatName: 'jcdw4',
- headImg:
- 'https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fimg1.doubanio.com%2Fview%2Fnote%2Flarge%2Fpublic%2Fp37015927.jpg&refer=http%3A%2F%2Fimg1.doubanio.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=auto?sec=1699286185&t=00db8ff5a1e11783f6c8eba954a5891f',
- name: '鸡翅大王5',
- count: 99,
- },
- ],
- },
- {
+ wechatName: 'jcdw',
+ headImg:
+ 'https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fimg1.doubanio.com%2Fview%2Fnote%2Flarge%2Fpublic%2Fp37015927.jpg&refer=http%3A%2F%2Fimg1.doubanio.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=auto?sec=1699286185&t=00db8ff5a1e11783f6c8eba954a5891f',
+ name: '鸡翅大王1',
+ count: 160
+ },
+ {
id: 2,
- title: '贡献榜',
- rankingList: [
- {
- id: 1,
- wechatName: 'jcdw5',
- headImg:
- 'https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fimg1.doubanio.com%2Fview%2Fnote%2Flarge%2Fpublic%2Fp37015927.jpg&refer=http%3A%2F%2Fimg1.doubanio.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=auto?sec=1699286185&t=00db8ff5a1e11783f6c8eba954a5891f',
- name: '鸡翅小王',
- count: 160,
- },
- {
- id: 2,
- wechatName: 'jcdw6',
- headImg:
- 'https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fimg1.doubanio.com%2Fview%2Fnote%2Flarge%2Fpublic%2Fp37015927.jpg&refer=http%3A%2F%2Fimg1.doubanio.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=auto?sec=1699286185&t=00db8ff5a1e11783f6c8eba954a5891f',
- name: '鸡翅大王2',
- count: 150,
- },
- {
- id: 3,
- wechatName: 'jcdw7',
- headImg:
- 'https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fimg1.doubanio.com%2Fview%2Fnote%2Flarge%2Fpublic%2Fp37015927.jpg&refer=http%3A%2F%2Fimg1.doubanio.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=auto?sec=1699286185&t=00db8ff5a1e11783f6c8eba954a5891f',
- name: '鸡翅大王',
- count: 101,
- },
- {
- id: 4,
- wechatName: 'jcdw8',
- headImg:
- 'https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fimg1.doubanio.com%2Fview%2Fnote%2Flarge%2Fpublic%2Fp37015927.jpg&refer=http%3A%2F%2Fimg1.doubanio.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=auto?sec=1699286185&t=00db8ff5a1e11783f6c8eba954a5891f',
- name: '鸡翅大王4',
- count: 100,
- },
- {
- id: 5,
- wechatName: 'jcdw9',
- headImg:
- 'https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fimg1.doubanio.com%2Fview%2Fnote%2Flarge%2Fpublic%2Fp37015927.jpg&refer=http%3A%2F%2Fimg1.doubanio.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=auto?sec=1699286185&t=00db8ff5a1e11783f6c8eba954a5891f',
- name: '鸡翅大王5',
- count: 99,
- },
- ],
- },
-];
+ wechatName: 'jcdw1',
+ headImg:
+ 'https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fimg1.doubanio.com%2Fview%2Fnote%2Flarge%2Fpublic%2Fp37015927.jpg&refer=http%3A%2F%2Fimg1.doubanio.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=auto?sec=1699286185&t=00db8ff5a1e11783f6c8eba954a5891f',
+ name: '鸡翅大王2',
+ count: 140
+ },
+ {
+ id: 3,
+ wechatName: 'jcdw2',
+ headImg:
+ 'https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fimg1.doubanio.com%2Fview%2Fnote%2Flarge%2Fpublic%2Fp37015927.jpg&refer=http%3A%2F%2Fimg1.doubanio.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=auto?sec=1699286185&t=00db8ff5a1e11783f6c8eba954a5891f',
+ name: '鸡翅大王',
+ count: 101
+ },
+ {
+ id: 4,
+ wechatName: 'jcdw3',
+ headImg:
+ 'https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fimg1.doubanio.com%2Fview%2Fnote%2Flarge%2Fpublic%2Fp37015927.jpg&refer=http%3A%2F%2Fimg1.doubanio.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=auto?sec=1699286185&t=00db8ff5a1e11783f6c8eba954a5891f',
+ name: '鸡翅小王',
+ count: 100
+ },
+ {
+ id: 5,
+ wechatName: 'jcdw4',
+ headImg:
+ 'https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fimg1.doubanio.com%2Fview%2Fnote%2Flarge%2Fpublic%2Fp37015927.jpg&refer=http%3A%2F%2Fimg1.doubanio.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=auto?sec=1699286185&t=00db8ff5a1e11783f6c8eba954a5891f',
+ name: '鸡翅大王5',
+ count: 99
+ }
+ ]
+ },
+ {
+ id: 2,
+ title: '贡献榜',
+ rankingList: [
+ {
+ id: 1,
+ wechatName: 'jcdw5',
+ createUserAvatar:
+ 'https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fimg1.doubanio.com%2Fview%2Fnote%2Flarge%2Fpublic%2Fp37015927.jpg&refer=http%3A%2F%2Fimg1.doubanio.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=auto?sec=1699286185&t=00db8ff5a1e11783f6c8eba954a5891f',
+ createUser: '鸡翅小王',
+ subjectCount: 160
+ },
+ {
+ id: 2,
+ wechatName: 'jcdw6',
+ createUserAvatar:
+ 'https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fimg1.doubanio.com%2Fview%2Fnote%2Flarge%2Fpublic%2Fp37015927.jpg&refer=http%3A%2F%2Fimg1.doubanio.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=auto?sec=1699286185&t=00db8ff5a1e11783f6c8eba954a5891f',
+ createUser: '鸡翅大王2',
+ subjectCount: 150
+ },
+ {
+ id: 3,
+ wechatName: 'jcdw7',
+ createUserAvatar:
+ 'https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fimg1.doubanio.com%2Fview%2Fnote%2Flarge%2Fpublic%2Fp37015927.jpg&refer=http%3A%2F%2Fimg1.doubanio.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=auto?sec=1699286185&t=00db8ff5a1e11783f6c8eba954a5891f',
+ createUser: '鸡翅大王',
+ subjectCount: 101
+ },
+ {
+ id: 4,
+ wechatName: 'jcdw8',
+ createUserAvatar:
+ 'https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fimg1.doubanio.com%2Fview%2Fnote%2Flarge%2Fpublic%2Fp37015927.jpg&refer=http%3A%2F%2Fimg1.doubanio.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=auto?sec=1699286185&t=00db8ff5a1e11783f6c8eba954a5891f',
+ createUser: '鸡翅大王4',
+ subjectCount: 100
+ },
+ {
+ id: 5,
+ wechatName: 'jcdw9',
+ createUserAvatar:
+ 'https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fimg1.doubanio.com%2Fview%2Fnote%2Flarge%2Fpublic%2Fp37015927.jpg&refer=http%3A%2F%2Fimg1.doubanio.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=auto?sec=1699286185&t=00db8ff5a1e11783f6c8eba954a5891f',
+ createUser: '鸡翅大王5',
+ subjectCount: 99
+ }
+ ]
+ }
+]
export const mockDataList = [
- {
- questionTitle: '什么是防抖和节流?有什么区别?如何实现',
- tags: [
- { name: '排序', id: 590 },
- { name: '数学', id: 5050 },
- { name: '穷举', id: 596 },
- { name: '贪心', id: 592 },
- { name: '二分', id: 5058 },
- ],
- id: 0,
- grade: 1,
- questionType: 6,
- difficulty: 1
- },
- {
- questionTitle: '非空数组,某元素只出现1次,其余出现2次,找到出现1次的元素',
- tags: [
- { name: '数学', id: 5050 },
- { name: '穷举', id: 596 },
- ],
- id: 1,
- grade: 2,
- questionType: 6,
- difficulty: 1
- },
- {
- questionTitle: 'Proxy、Observable的区别',
- tags: [
- { name: '贪心', id: 592 },
- { name: '二分', id: 5058 },
- ],
- id: 2,
- grade: 3,
- questionType: 3,
- },
- {
- questionTitle: '谈谈浏览器的回流与重绘,如何优化dom渲染呢',
- tags: [
- { name: '字符串', id: 579 },
- { name: '模拟', id: 595 },
- ],
- id: 3,
- grade: 1,
- questionType: 1,
- },
- {
- questionTitle: 'API指标有哪些,为什么有白屏现象,考虑哪些方向优化',
- tags: [
- { name: '字符串', id: 579 },
- { name: '模拟', id: 595 },
- ],
- id: 4,
- grade: 2,
- questionType: 4,
- },
- {
- questionTitle: '将两个升序链表合并为一个新的升序链表并返回',
- tags: [{ name: '数学', id: 5050 }],
- id: 5,
- grade: 1,
- questionType: 2,
- },
- {
- questionTitle: '对MVP架构的理解',
- tags: [
- { name: '递归', id: 591 },
- { name: '动态规划', id: 593 },
- ],
- id: 6,
- grade: 3,
- questionType: 5,
- },
- {
- questionTitle: 'SPA页面的前端路由实现方案',
- tags: [
- { name: '排序', id: 590 },
- { name: '数组', id: 578 },
- ],
- id: 7,
- grade: 2,
- questionType: 1,
- },
- {
- questionTitle: '怎么看 nodejs 可支持高并发',
- tags: [
- { name: '数学', id: 5050 },
- { name: '模拟', id: 595 },
- ],
- id: 8,
- grade: 2,
- questionType: 2,
- },
- {
- questionTitle: '二叉树遍历',
- tags: [
- { name: '树', id: 583 },
- { name: '搜索', id: 3381 },
- ],
- id: 9,
- grade: 3,
- questionType: 4,
- },
- {
- questionTitle: '玛雅人的密码',
- tags: [
- { name: '图', id: 584 },
- { name: '搜索', id: 3381 },
- ],
- id: 10,
- grade: 1,
- questionType: 3,
- },
- { questionTitle: '求最大最小数', tags: [], id: 11, grade: 1, questionType: 1 },
- {
- questionTitle: '最小邮票数',
- tags: [{ name: '动态规划', id: 593 }],
- id: 12,
- grade: 1,
- questionType: 1,
- },
- { questionTitle: 'abc', tags: [{ name: '穷举', id: 596 }], id: 13, grade: 1, questionType: 5 },
- {
- questionTitle: '求root(N, k)',
- tags: [
- { name: '递归', id: 591 },
- { name: '数学', id: 5050 },
- { name: '二分', id: 5058 },
- ],
- id: 14,
- grade: 1,
- questionType: 3,
- },
- {
- questionTitle: 'n的阶乘',
- tags: [{ name: '数学', id: 5050 }],
- id: 15,
- grade: 1,
- questionType: 3,
- },
- {
- questionTitle: '特殊乘法',
- tags: [
- { name: '模拟', id: 595 },
- { name: '数组', id: 578 },
- { name: '数学', id: 5050 },
- ],
- id: 16,
- grade: 1,
- questionType: 3,
- },
- {
- questionTitle: '今年的第几天?',
- tags: [
- { name: '递归', id: 591 },
- { name: '数学', id: 5050 },
- { name: '穷举', id: 596 },
- ],
- id: 17,
- grade: 1,
- questionType: 2,
- },
- {
- questionTitle: '完数VS盈数',
- tags: [{ name: '数学', id: 5050 }],
- id: 18,
- grade: 1,
- questionType: 3,
- },
- {
- questionTitle: '递推数列',
- tags: [
- { name: '动态规划', id: 593 },
- { name: '数学', id: 5050 },
- ],
- id: 19,
- grade: 1,
- questionType: 1,
- },
- { questionTitle: '最大序列和', tags: [{ name: '动态规划', id: 593 }], id: 20, grade: 1 },
- {
- questionTitle: '最小花费',
- tags: [
- { name: '动态规划', id: 593 },
- { name: '图', id: 584 },
- ],
- id: 21,
- grade: 1,
- questionType: 2,
- },
- { questionTitle: 'N的阶乘', tags: [{ name: '数学', id: 5050 }], id: 22, grade: 1 },
- {
- questionTitle: '剩下的树',
- tags: [
- { name: '数组', id: 578 },
- { name: '数学', id: 5050 },
- { name: '哈希', id: 585 },
- { name: '栈', id: 581 },
- ],
- id: 23,
- grade: 1,
- questionType: 5,
- },
- {
- questionTitle: '10进制 VS 2进制',
- tags: [
- { name: '数学', id: 5050 },
- { name: '位运算', id: 5074 },
- ],
- id: 24,
- grade: 1,
- questionType: 3,
- },
- {
- questionTitle: '查找学生信息',
- tags: [
- { name: '数组', id: 578 },
- { name: '模拟', id: 595 },
- ],
- id: 25,
- grade: 1,
- questionType: 2,
- },
-];
+ {
+ questionTitle: '什么是防抖和节流?有什么区别?如何实现',
+ tags: [
+ { name: '排序', id: 590 },
+ { name: '数学', id: 5050 },
+ { name: '穷举', id: 596 },
+ { name: '贪心', id: 592 },
+ { name: '二分', id: 5058 }
+ ],
+ id: 0,
+ grade: 1,
+ questionType: 6,
+ difficulty: 1
+ },
+ {
+ questionTitle: '非空数组,某元素只出现1次,其余出现2次,找到出现1次的元素',
+ tags: [
+ { name: '数学', id: 5050 },
+ { name: '穷举', id: 596 }
+ ],
+ id: 1,
+ grade: 2,
+ questionType: 6,
+ difficulty: 1
+ },
+ {
+ questionTitle: 'Proxy、Observable的区别',
+ tags: [
+ { name: '贪心', id: 592 },
+ { name: '二分', id: 5058 }
+ ],
+ id: 2,
+ grade: 3,
+ questionType: 3
+ },
+ {
+ questionTitle: '谈谈浏览器的回流与重绘,如何优化dom渲染呢',
+ tags: [
+ { name: '字符串', id: 579 },
+ { name: '模拟', id: 595 }
+ ],
+ id: 3,
+ grade: 1,
+ questionType: 1
+ },
+ {
+ questionTitle: 'API指标有哪些,为什么有白屏现象,考虑哪些方向优化',
+ tags: [
+ { name: '字符串', id: 579 },
+ { name: '模拟', id: 595 }
+ ],
+ id: 4,
+ grade: 2,
+ questionType: 4
+ },
+ {
+ questionTitle: '将两个升序链表合并为一个新的升序链表并返回',
+ tags: [{ name: '数学', id: 5050 }],
+ id: 5,
+ grade: 1,
+ questionType: 2
+ },
+ {
+ questionTitle: '对MVP架构的理解',
+ tags: [
+ { name: '递归', id: 591 },
+ { name: '动态规划', id: 593 }
+ ],
+ id: 6,
+ grade: 3,
+ questionType: 5
+ },
+ {
+ questionTitle: 'SPA页面的前端路由实现方案',
+ tags: [
+ { name: '排序', id: 590 },
+ { name: '数组', id: 578 }
+ ],
+ id: 7,
+ grade: 2,
+ questionType: 1
+ },
+ {
+ questionTitle: '怎么看 nodejs 可支持高并发',
+ tags: [
+ { name: '数学', id: 5050 },
+ { name: '模拟', id: 595 }
+ ],
+ id: 8,
+ grade: 2,
+ questionType: 2
+ },
+ {
+ questionTitle: '二叉树遍历',
+ tags: [
+ { name: '树', id: 583 },
+ { name: '搜索', id: 3381 }
+ ],
+ id: 9,
+ grade: 3,
+ questionType: 4
+ },
+ {
+ questionTitle: '玛雅人的密码',
+ tags: [
+ { name: '图', id: 584 },
+ { name: '搜索', id: 3381 }
+ ],
+ id: 10,
+ grade: 1,
+ questionType: 3
+ },
+ { questionTitle: '求最大最小数', tags: [], id: 11, grade: 1, questionType: 1 },
+ {
+ questionTitle: '最小邮票数',
+ tags: [{ name: '动态规划', id: 593 }],
+ id: 12,
+ grade: 1,
+ questionType: 1
+ },
+ { questionTitle: 'abc', tags: [{ name: '穷举', id: 596 }], id: 13, grade: 1, questionType: 5 },
+ {
+ questionTitle: '求root(N, k)',
+ tags: [
+ { name: '递归', id: 591 },
+ { name: '数学', id: 5050 },
+ { name: '二分', id: 5058 }
+ ],
+ id: 14,
+ grade: 1,
+ questionType: 3
+ },
+ {
+ questionTitle: 'n的阶乘',
+ tags: [{ name: '数学', id: 5050 }],
+ id: 15,
+ grade: 1,
+ questionType: 3
+ },
+ {
+ questionTitle: '特殊乘法',
+ tags: [
+ { name: '模拟', id: 595 },
+ { name: '数组', id: 578 },
+ { name: '数学', id: 5050 }
+ ],
+ id: 16,
+ grade: 1,
+ questionType: 3
+ },
+ {
+ questionTitle: '今年的第几天?',
+ tags: [
+ { name: '递归', id: 591 },
+ { name: '数学', id: 5050 },
+ { name: '穷举', id: 596 }
+ ],
+ id: 17,
+ grade: 1,
+ questionType: 2
+ },
+ {
+ questionTitle: '完数VS盈数',
+ tags: [{ name: '数学', id: 5050 }],
+ id: 18,
+ grade: 1,
+ questionType: 3
+ },
+ {
+ questionTitle: '递推数列',
+ tags: [
+ { name: '动态规划', id: 593 },
+ { name: '数学', id: 5050 }
+ ],
+ id: 19,
+ grade: 1,
+ questionType: 1
+ },
+ { questionTitle: '最大序列和', tags: [{ name: '动态规划', id: 593 }], id: 20, grade: 1 },
+ {
+ questionTitle: '最小花费',
+ tags: [
+ { name: '动态规划', id: 593 },
+ { name: '图', id: 584 }
+ ],
+ id: 21,
+ grade: 1,
+ questionType: 2
+ },
+ { questionTitle: 'N的阶乘', tags: [{ name: '数学', id: 5050 }], id: 22, grade: 1 },
+ {
+ questionTitle: '剩下的树',
+ tags: [
+ { name: '数组', id: 578 },
+ { name: '数学', id: 5050 },
+ { name: '哈希', id: 585 },
+ { name: '栈', id: 581 }
+ ],
+ id: 23,
+ grade: 1,
+ questionType: 5
+ },
+ {
+ questionTitle: '10进制 VS 2进制',
+ tags: [
+ { name: '数学', id: 5050 },
+ { name: '位运算', id: 5074 }
+ ],
+ id: 24,
+ grade: 1,
+ questionType: 3
+ },
+ {
+ questionTitle: '查找学生信息',
+ tags: [
+ { name: '数组', id: 578 },
+ { name: '模拟', id: 595 }
+ ],
+ id: 25,
+ grade: 1,
+ questionType: 2
+ }
+]
/**
* 一级分类
*/
export const mockTabList = [
- { id: 1, levelName: '全部', count: 100 },
- { id: 2, levelName: '前端', count: 1001 },
- { id: 3, levelName: '后端', count: 1005 },
- { id: 4, levelName: '测试', count: 1100 },
- { id: 5, levelName: '人工智能', count: 1200 },
- { id: 6, levelName: '产品', count: 1 },
- { id: 7, levelName: '视觉', count: 100 },
- { id: 8, levelName: '产品', count: 1 },
- { id: 9, levelName: '视觉', count: 100 },
- { id: 10, levelName: '产品', count: 1 },
- { id: 11, levelName: '视觉', count: 100 },
-];
+ { id: 1, levelName: '全部', count: 100 },
+ { id: 2, levelName: '前端', count: 1001 },
+ { id: 3, levelName: '后端', count: 1005 },
+ { id: 4, levelName: '测试', count: 1100 },
+ { id: 5, levelName: '人工智能', count: 1200 },
+ { id: 6, levelName: '产品', count: 1 },
+ { id: 7, levelName: '视觉', count: 100 },
+ { id: 8, levelName: '产品', count: 1 },
+ { id: 9, levelName: '视觉', count: 100 },
+ { id: 10, levelName: '产品', count: 1 },
+ { id: 11, levelName: '视觉', count: 100 }
+]
// 二级数据
export const mockCategoryList = {
- // 全部
- 1: [
+ // 全部
+ 1: [
+ {
+ id: 1,
+ levelName: '算法',
+ childrenLevelList: [
+ { id: 1, levelName: '双指针', count: 107 },
+ { id: 2, levelName: '同向双指针', count: 57 },
+ { id: 3, levelName: '相向双指针', count: 31 },
+ { id: 4, levelName: '二分法', count: 95 },
+ { id: 5, levelName: '二分答案', count: 28 },
+ { id: 6, levelName: '分治法', count: 77 },
+ { id: 7, levelName: '宽度优先搜索', count: 135 },
+ { id: 8, levelName: '深度优先搜索/回溯法', count: 10 },
+ { id: 9, levelName: '背包型动态规划', count: 224 },
+ { id: 10, levelName: '状态压缩动态规划', count: 240 },
+ { id: 11, levelName: '拓扑排序', count: 28 },
+ { id: 12, levelName: '坐标型动态规划', count: 40 },
+ { id: 13, levelName: '划分型动态规划', count: 15 },
+ { id: 14, levelName: '记忆化搜索', count: 23 },
+ { id: 15, levelName: '区间型动态规划', count: 22 },
+ { id: 16, levelName: '动态规划', count: 3 },
+ { id: 17, levelName: '博弈型动态规划', count: 4 },
+ { id: 18, levelName: '匹配型动态规划', count: 15 },
+ { id: 19, levelName: '树型动态规划', count: 4 },
+ { id: 20, levelName: '排序算法', count: 83 },
+ { id: 21, levelName: '外排序算法', count: 2 },
+ { id: 22, levelName: '快速选择算法', count: 12 },
+ { id: 23, levelName: '欧拉路径', count: 1 },
+ { id: 24, levelName: '模拟法', count: 282 },
+ { id: 25, levelName: '扫描线算法', count: 19 },
+ { id: 26, levelName: '枚举法', count: 109 },
+ { id: 27, levelName: '最短路', count: 6 },
+ { id: 28, levelName: '贪心法', count: 85 },
+ { id: 29, levelName: '最小生成树', count: 3 }
+ ]
+ },
+ {
+ id: 2,
+ levelName: '数据结构',
+ childrenLevelList: [
+ { id: 1, levelName: '数组', count: 179 },
+ { id: 2, levelName: '前缀和数组', count: 41 },
+ { id: 3, levelName: '字符串', count: 257 },
+ { id: 4, levelName: '链表', count: 52 },
+ { id: 5, levelName: '双向链表', count: 1 },
+ { id: 6, levelName: '队列', count: 18 },
+ { id: 7, levelName: '单调队列', count: 3 },
+ { id: 8, levelName: '双向队列', count: 3 },
+ { id: 9, levelName: '栈', count: 74 },
+ { id: 10, levelName: '单调栈', count: 27 },
+ { id: 11, levelName: '二叉树', count: 120 },
+ { id: 12, levelName: '树', count: 5 },
+ { id: 13, levelName: '二叉搜索树', count: 30 },
+ { id: 14, levelName: '迭代器', count: 6 },
+ { id: 15, levelName: '堆', count: 45 },
+ { id: 16, levelName: '图', count: 17 },
+ { id: 17, levelName: '二分图', count: 5 },
+ { id: 18, levelName: '哈希表', count: 156 },
+ { id: 19, levelName: '字典树', count: 19 },
+ { id: 20, levelName: '并查集', count: 36 },
+ { id: 21, levelName: '树状数组', count: 7 },
+ { id: 22, levelName: '线段树', count: 21 },
+ { id: 23, levelName: '平衡树', count: 7 }
+ ]
+ },
+ {
+ id: 3,
+ levelName: 'SQL 基础语法',
+ childrenLevelList: [
+ { id: 1, levelName: '比较运算符', count: 52 },
+ { id: 2, levelName: '嵌套查询', count: 35 },
+ { id: 3, levelName: '基础语法', count: 27 },
+ { id: 4, levelName: '逻辑运算符', count: 25 },
+ { id: 5, levelName: 'GROUP BY', count: 18 },
+ { id: 6, levelName: '算术运算符', count: 17 },
+ { id: 7, levelName: 'IN', count: 17 },
+ { id: 8, levelName: 'ORDER BY', count: 16 },
+ { id: 9, levelName: 'AS', count: 15 },
+ { id: 10, levelName: 'HAVING', count: 8 },
+ { id: 11, levelName: 'SELECT', count: 7 },
+ { id: 12, levelName: 'DISTINCT', count: 6 },
+ { id: 13, levelName: 'LIKE', count: 5 },
+ { id: 14, levelName: 'LIMIT', count: 4 },
+ { id: 15, levelName: 'IS NULL', count: 4 },
+ { id: 16, levelName: 'UNION', count: 3 },
+ { id: 17, levelName: '约束', count: 3 },
+ { id: 18, levelName: 'IFNULL/COLLAPSE', count: 2 },
+ { id: 19, levelName: 'ANY', count: 2 },
+ { id: 20, levelName: 'ALL', count: 2 }
+ ]
+ }
+ ],
+ // 前端
+ 2: [
+ {
+ id: 1,
+ levelName: '移动端',
+ childrenLevelList: [
{
- id: 1,
- levelName: '算法',
- childrenLevelList: [
- { id: 1, levelName: '双指针', count: 107 },
- { id: 2, levelName: '同向双指针', count: 57 },
- { id: 3, levelName: '相向双指针', count: 31 },
- { id: 4, levelName: '二分法', count: 95 },
- { id: 5, levelName: '二分答案', count: 28 },
- { id: 6, levelName: '分治法', count: 77 },
- { id: 7, levelName: '宽度优先搜索', count: 135 },
- { id: 8, levelName: '深度优先搜索/回溯法', count: 10 },
- { id: 9, levelName: '背包型动态规划', count: 224 },
- { id: 10, levelName: '状态压缩动态规划', count: 240 },
- { id: 11, levelName: '拓扑排序', count: 28 },
- { id: 12, levelName: '坐标型动态规划', count: 40 },
- { id: 13, levelName: '划分型动态规划', count: 15 },
- { id: 14, levelName: '记忆化搜索', count: 23 },
- { id: 15, levelName: '区间型动态规划', count: 22 },
- { id: 16, levelName: '动态规划', count: 3 },
- { id: 17, levelName: '博弈型动态规划', count: 4 },
- { id: 18, levelName: '匹配型动态规划', count: 15 },
- { id: 19, levelName: '树型动态规划', count: 4 },
- { id: 20, levelName: '排序算法', count: 83 },
- { id: 21, levelName: '外排序算法', count: 2 },
- { id: 22, levelName: '快速选择算法', count: 12 },
- { id: 23, levelName: '欧拉路径', count: 1 },
- { id: 24, levelName: '模拟法', count: 282 },
- { id: 25, levelName: '扫描线算法', count: 19 },
- { id: 26, levelName: '枚举法', count: 109 },
- { id: 27, levelName: '最短路', count: 6 },
- { id: 28, levelName: '贪心法', count: 85 },
- { id: 29, levelName: '最小生成树', count: 3 },
- ],
+ id: 1,
+ levelName: 'IOSIOSIOSIOS',
+ count: 13
},
{
- id: 2,
- levelName: '数据结构',
- childrenLevelList: [
- { id: 1, levelName: '数组', count: 179 },
- { id: 2, levelName: '前缀和数组', count: 41 },
- { id: 3, levelName: '字符串', count: 257 },
- { id: 4, levelName: '链表', count: 52 },
- { id: 5, levelName: '双向链表', count: 1 },
- { id: 6, levelName: '队列', count: 18 },
- { id: 7, levelName: '单调队列', count: 3 },
- { id: 8, levelName: '双向队列', count: 3 },
- { id: 9, levelName: '栈', count: 74 },
- { id: 10, levelName: '单调栈', count: 27 },
- { id: 11, levelName: '二叉树', count: 120 },
- { id: 12, levelName: '树', count: 5 },
- { id: 13, levelName: '二叉搜索树', count: 30 },
- { id: 14, levelName: '迭代器', count: 6 },
- { id: 15, levelName: '堆', count: 45 },
- { id: 16, levelName: '图', count: 17 },
- { id: 17, levelName: '二分图', count: 5 },
- { id: 18, levelName: '哈希表', count: 156 },
- { id: 19, levelName: '字典树', count: 19 },
- { id: 20, levelName: '并查集', count: 36 },
- { id: 21, levelName: '树状数组', count: 7 },
- { id: 22, levelName: '线段树', count: 21 },
- { id: 23, levelName: '平衡树', count: 7 },
- ],
+ id: 2,
+ levelName: '安卓',
+ count: 130
},
{
- id: 3,
- levelName: 'SQL 基础语法',
- childrenLevelList: [
- { id: 1, levelName: '比较运算符', count: 52 },
- { id: 2, levelName: '嵌套查询', count: 35 },
- { id: 3, levelName: '基础语法', count: 27 },
- { id: 4, levelName: '逻辑运算符', count: 25 },
- { id: 5, levelName: 'GROUP BY', count: 18 },
- { id: 6, levelName: '算术运算符', count: 17 },
- { id: 7, levelName: 'IN', count: 17 },
- { id: 8, levelName: 'ORDER BY', count: 16 },
- { id: 9, levelName: 'AS', count: 15 },
- { id: 10, levelName: 'HAVING', count: 8 },
- { id: 11, levelName: 'SELECT', count: 7 },
- { id: 12, levelName: 'DISTINCT', count: 6 },
- { id: 13, levelName: 'LIKE', count: 5 },
- { id: 14, levelName: 'LIMIT', count: 4 },
- { id: 15, levelName: 'IS NULL', count: 4 },
- { id: 16, levelName: 'UNION', count: 3 },
- { id: 17, levelName: '约束', count: 3 },
- { id: 18, levelName: 'IFNULL/COLLAPSE', count: 2 },
- { id: 19, levelName: 'ANY', count: 2 },
- { id: 20, levelName: 'ALL', count: 2 },
- ],
- },
- ],
- // 前端
- 2: [
+ id: 3,
+ levelName: '鸿蒙',
+ count: 134
+ }
+ ]
+ },
+ {
+ id: 2,
+ levelName: '框架',
+ childrenLevelList: [
{
- id: 1,
- levelName: '移动端',
- childrenLevelList: [
- {
- id: 1,
- levelName: 'IOSIOSIOSIOS',
- count: 13,
- },
- {
- id: 2,
- levelName: '安卓',
- count: 130,
- },
- {
- id: 3,
- levelName: '鸿蒙',
- count: 134,
- },
- ],
+ id: 1,
+ levelName: 'Vue.js',
+ count: 13
},
{
- id: 2,
- levelName: '框架',
- childrenLevelList: [
- {
- id: 1,
- levelName: 'Vue.js',
- count: 13,
- },
- {
- id: 2,
- levelName: 'React.js',
- count: 13,
- },
- {
- id: 3,
- levelName: 'Bootstrap',
- count: 13,
- },
- ],
+ id: 2,
+ levelName: 'React.js',
+ count: 13
},
{
- id: 3,
- levelName: '小程序',
- childrenLevelList: [
- { id: 1, levelName: '微信小程序', count: 13 },
- { id: 2, levelName: '京东小程序', count: 13 },
- { id: 3, levelName: '支付宝小程序', count: 13 },
- { id: 4, levelName: '百度小程序', count: 13 },
- { id: 5, levelName: 'QQ小程序', count: 13 },
- ],
- },
- ],
- // 后端
- 3: [
+ id: 3,
+ levelName: 'Bootstrap',
+ count: 13
+ }
+ ]
+ },
+ {
+ id: 3,
+ levelName: '小程序',
+ childrenLevelList: [
+ { id: 1, levelName: '微信小程序', count: 13 },
+ { id: 2, levelName: '京东小程序', count: 13 },
+ { id: 3, levelName: '支付宝小程序', count: 13 },
+ { id: 4, levelName: '百度小程序', count: 13 },
+ { id: 5, levelName: 'QQ小程序', count: 13 }
+ ]
+ }
+ ],
+ // 后端
+ 3: [
+ {
+ id: 1,
+ levelName: '框架',
+ childrenLevelList: [
{
- id: 1,
- levelName: '框架',
- childrenLevelList: [
- {
- id: 1,
- levelName: 'Spring框架',
- count: 17,
- },
- {
- id: 2,
- levelName: 'Struts框架',
- count: 127,
- },
- {
- id: 3,
- levelName: 'Hibernate框架',
- count: 170,
- },
- ],
+ id: 1,
+ levelName: 'Spring框架',
+ count: 17
},
{
- id: 2,
- levelName: 'SSM框架组合',
- childrenLevelList: [
- {
- id: 1,
- levelName: 'SpringMVC框架',
- count: 170,
- },
- {
- id: 2,
- levelName: 'Mybatis框架',
- count: 1,
- },
- ],
- },
- ],
- // 测试
- 4: [
- {
- id: 1,
- levelName: '自动化测试',
- childrenLevelList: [
- {
- id: 1,
- levelName: '管理工具',
- count: 16,
- },
- {
- id: 2,
- levelName: 'UI自动化',
- count: 16,
- },
- {
- id: 3,
- levelName: '接口自动化',
- count: 16,
- },
- ],
- },
- ],
- // 人工智能
- 5: [
- {
- id: 1,
- levelName: '数据处理',
- childrenLevelList: [
- { id: 1, levelName: '工具库', count: 107 },
- { id: 2, levelName: '数据预处理', count: 127 },
- { id: 3, levelName: 'Numpy', count: 170 },
- { id: 4, levelName: 'Matplotlib', count: 170 },
- { id: 5, levelName: 'Pandas', count: 170 },
- ],
+ id: 2,
+ levelName: 'Struts框架',
+ count: 127
},
{
- id: 2,
- levelName: '机器学习',
- childrenLevelList: [
- { id: 1, levelName: '工具库', count: 170 },
- { id: 2, levelName: '分类', count: 1 },
- { id: 3, levelName: '模型', count: 170 },
- { id: 4, levelName: '决策树', count: 170 },
- ],
+ id: 3,
+ levelName: 'Hibernate框架',
+ count: 170
+ }
+ ]
+ },
+ {
+ id: 2,
+ levelName: 'SSM框架组合',
+ childrenLevelList: [
+ {
+ id: 1,
+ levelName: 'SpringMVC框架',
+ count: 170
},
- ],
- // 产品
- 6: [],
- // 视觉
- 7: [],
-};
+ {
+ id: 2,
+ levelName: 'Mybatis框架',
+ count: 1
+ }
+ ]
+ }
+ ],
+ // 测试
+ 4: [
+ {
+ id: 1,
+ levelName: '自动化测试',
+ childrenLevelList: [
+ {
+ id: 1,
+ levelName: '管理工具',
+ count: 16
+ },
+ {
+ id: 2,
+ levelName: 'UI自动化',
+ count: 16
+ },
+ {
+ id: 3,
+ levelName: '接口自动化',
+ count: 16
+ }
+ ]
+ }
+ ],
+ // 人工智能
+ 5: [
+ {
+ id: 1,
+ levelName: '数据处理',
+ childrenLevelList: [
+ { id: 1, levelName: '工具库', count: 107 },
+ { id: 2, levelName: '数据预处理', count: 127 },
+ { id: 3, levelName: 'Numpy', count: 170 },
+ { id: 4, levelName: 'Matplotlib', count: 170 },
+ { id: 5, levelName: 'Pandas', count: 170 }
+ ]
+ },
+ {
+ id: 2,
+ levelName: '机器学习',
+ childrenLevelList: [
+ { id: 1, levelName: '工具库', count: 170 },
+ { id: 2, levelName: '分类', count: 1 },
+ { id: 3, levelName: '模型', count: 170 },
+ { id: 4, levelName: '决策树', count: 170 }
+ ]
+ }
+ ],
+ // 产品
+ 6: [],
+ // 视觉
+ 7: []
+}
diff --git a/src/views/search-details/index.jsx b/src/views/search-details/index.jsx
index 0801755..9be38d3 100644
--- a/src/views/search-details/index.jsx
+++ b/src/views/search-details/index.jsx
@@ -1,93 +1,57 @@
import { ExclamationCircleOutlined } from '@ant-design/icons'
import { queryParse } from '@utils'
+import req from '@utils/request'
import { Card, Input, Pagination, Skeleton, message } from 'antd'
import React, { useEffect, useState } from 'react'
import { useNavigate } from 'react-router-dom'
+
import './index.less'
const { Search } = Input
-const mockList = [
- {
- id: 100,
- subjectName: 'Redis支持哪几种数据类型?',
- subjectDifficult: 1,
- subjectType: 4,
- subjectScore: 1,
- subjectParse: '解析什么',
- subjectAnswer:
- '
- String(字符串)
- List(列表)
- Hash(字典)
- Set(集合)
- Sorted Set(有序集合)
String
String是简单的 key-value 键值对,value 不仅可以是 String,也可以是数字。String在redis内部存储默认就是一个字符串,被redisObject所引用,当遇到incr,decr等操作时会转成数值型进行计算,此时redisObject的encoding字段为int。
List
Redis列表是简单的字符串列表,可以类比到C++中的std::list,简单的说就是一个链表或者说是一个队列。可以从头部或尾部向Redis列表添加元素。列表的最大长度为2^32 - 1,也即每个列表支持超过40亿个元素。
Redis list的实现为一个双向链表,即可以支持反向查找和遍历,更方便操作,不过带来了部分额外的内存开销,Redis内部的很多实现,包括发送缓冲队列等也都是用的这个数据结构。
Hash
Redis Hash对应Value内部实际就是一个HashMap,实际这里会有2种不同实现,这个Hash的成员比较少时Redis为了节省内存会采用类似一维数组的方式来紧凑存储,而不会采用真正的HashMap结构,对应的value redisObject的encoding为zipmap,当成员数量增大时会自动转成真正的HashMap。
Set
set 的内部实现是一个 value永远为null的HashMap,实际就是通过计算hash的方式来快速排重的,这也是set能提供判断一个成员是否在集合内的原因。
Sorted Set
Redis有序集合类似Redis集合,不同的是增加了一个功能,即集合是有序的。一个有序集合的每个成员带有分数,用于进行排序。
Redis有序集合添加、删除和测试的时间复杂度均为O(1)(固定时间,无论里面包含的元素集合的数量)。列表的最大长度为2^32- 1元素(4294967295,超过40亿每个元素的集合)。
Redis sorted set的内部使用HashMap和跳跃表(SkipList)来保证数据的存储和有序,HashMap里放的是成员到score的映射,而跳跃表里存放的是所有的成员,排序依据是HashMap里存的score,使用跳跃表的结构可以获得比较高的查找效率,并且在实现上比较简单。
',
- labelName: ['Redis']
- },
- {
- id: 101,
- subjectName: 'Redis的高级数据类型有什么?',
- subjectDifficult: 2,
- subjectType: 4,
- subjectScore: 1,
- subjectParse: '解析什么',
- subjectAnswer:
- '
bitmap:bitmap是一种位数据类型,常常用于统计,大家比较知名的就是布隆过滤器。也可以统计一些大数据量的东西,比如每天有多少优惠券被使用。
hyperloglog:用于基数统计,基数是数据集去重后元素个数,运用了LogLog的算法。{1,3,5,7,5,7,8} 基数集:{1,3,5,7,8} 基数:5
geo:应用于地理位置计算,主要是经纬度的计算,常见的就是附近的人,可以以当前人的坐标获取周围附近的成员,可以计算经纬度,计算地理位置
',
- labelName: ['Redis']
- },
- {
- id: 102,
- subjectName: 'Redis的优点有什么?',
- subjectDifficult: 1,
- subjectType: 4,
- subjectScore: 1,
- subjectParse: '解析什么',
- subjectAnswer:
- '
(1) 速度快,因为数据存在内存中,类似于HashMap,HashMap的优势就是查找和操作的时间复杂度都是O(1)
(2) 支持丰富数据类型,支持string,list,set,Zset,hash等
(3) 支持事务,操作都是原子性,所谓的原子性就是对数据的更改要么全部执行,要么全部不执行
(4) 丰富的特性:可用于缓存,消息,按key设置过期时间,过期后将会自动删除
',
- labelName: ['Redis']
- },
- {
- id: 103,
- subjectName: 'Redis相比Memcached有哪些优势?',
- subjectDifficult: 1,
- subjectType: 4,
- subjectScore: 1,
- subjectParse: '解析什么',
- subjectAnswer:
- '
(1) Memcached所有的值均是简单的字符串,redis作为其替代者,支持更为丰富的数据类型
(2) Redis的速度比Memcached快很多
(3) Redis可以持久化其数据
',
- labelName: ['Redis']
- },
- {
- id: 106,
- subjectName: 'redis过期策略都有哪些?',
- subjectDifficult: 1,
- subjectType: 4,
- subjectScore: 1,
- subjectParse: '解析什么',
- subjectAnswer:
- '
noeviction: 当内存不足以容纳新写入数据时,新写入操作会报错。
allkeys-lru:当内存不足以容纳新写入数据时,在键空间中,移除最近最少使用的 key。
allkeys-random:当内存不足以容纳新写入数据时,在键空间中,随机移除某个 key,这个一般没人用吧,为啥要随机,肯定是把最近最少使用的 key 给干掉啊。
volatile-lru:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,移除最近最少使用的 key。
volatile-random:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,随机移除某个 key。
volatile-ttl:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,有更早过期时间的 key 优先移除。
',
- labelName: ['Redis']
- }
-]
-
-const defaultValue = queryParse(location.search).t
-
const SearchDetails = () => {
+ const defaultValue = queryParse(location.search).t
+
const navigate = useNavigate()
const [isShowSkeleton, setIsShowSkeleton] = useState(true)
- const [questionList, setQuestionList] = useState(mockList)
+ const [questionList, setQuestionList] = useState()
const [total, setTotal] = useState(0)
const [pageIndex, setPageIndex] = useState(0)
- const [searchValue, setSearchValue] = useState(defaultValue)
+ const [searchValue, setSearchValue] = useState()
+
+ useEffect(() => {
+ setSearchValue(defaultValue)
+ }, [])
const searchSubject = () => {
setIsShowSkeleton(false)
+ req({
+ method: 'post',
+ url: '/getSubjectPageBySearch',
+ data: {
+ pageSize: 10,
+ pageNo: pageIndex,
+ keyWord: searchValue
+ }
+ }).then(res => {
+ if (res.success && res.data) {
+ setTotal(res.data.total)
+ setQuestionList(res.data.result)
+ }
+ })
}
const handleJump = id => {
navigate('/brush-question/' + id)
}
- const onChangePagination = () => {}
+ const onChangePagination = curPage => {
+ setPageIndex(curPage)
+ }
useEffect(() => {
searchSubject()
- }, [searchValue])
+ }, [searchValue, pageIndex])
return (
@@ -97,9 +61,8 @@ const SearchDetails = () => {
placeholder='请输入感兴趣的内容'
onSearch={value => {
if (value) {
- // this.state.searchText = value
- // this.pageIndex = 1
- // this.searchSubject()
+ setSearchValue(value)
+ setPageIndex(1)
} else {
message.info('搜索词不能为空')
}
@@ -117,13 +80,7 @@ const SearchDetails = () => {
>
-
{
- // this.onTabChange(key, 'key')
- // }}
- >
+
{questionList?.length > 0 ? (
questionList.map((item, index) => {
@@ -133,7 +90,7 @@ const SearchDetails = () => {
handleJump(item.id)}
+ onClick={() => handleJump(item.subjectId)}
dangerouslySetInnerHTML={{
__html: item.subjectName
}}
@@ -141,7 +98,7 @@ const SearchDetails = () => {
handleJump(item.id)}
+ onClick={() => handleJump(item.subjectId)}
dangerouslySetInnerHTML={{
__html: item.subjectAnswer + '...'
}}
@@ -181,7 +138,7 @@ const SearchDetails = () => {
- {total > 20 && (
+ {total > 10 && (
{
current={pageIndex}
defaultCurrent={1}
total={total}
- defaultPageSize={20}
+ defaultPageSize={10}
onChange={onChangePagination}
/>
)}