Commit 8f54e0eb by chenshu

feat:初始化

parent 985b02a5
...@@ -12,6 +12,7 @@ import { Input, Button, Tree } from "antd"; ...@@ -12,6 +12,7 @@ import { Input, Button, Tree } from "antd";
import "./Classification.less"; import "./Classification.less";
import User from "@/common/js/user"; import User from "@/common/js/user";
import KnowledgeAPI from "@/data-source/knowledge/request-api"; import KnowledgeAPI from "@/data-source/knowledge/request-api";
import Bus from "@/core/bus";
const { Search } = Input; const { Search } = Input;
const { DirectoryTree } = Tree; const { DirectoryTree } = Tree;
...@@ -31,6 +32,11 @@ class Classification extends Component { ...@@ -31,6 +32,11 @@ class Classification extends Component {
componentDidMount() { componentDidMount() {
this.queryCategoryTree(); this.queryCategoryTree();
Bus.bind('knowledgeCategoryTree', this.queryCategoryTree)
}
componentWillUnmount() {
Bus.unbind('knowledgeCategoryTree', this.queryCategoryTree)
} }
shouldComponentUpdate = (nextProps, nextState) => { shouldComponentUpdate = (nextProps, nextState) => {
......
...@@ -127,7 +127,6 @@ class KnowledgeBaseList extends React.Component { ...@@ -127,7 +127,6 @@ class KnowledgeBaseList extends React.Component {
// 预览文件 // 预览文件
handleScanFile = (folder) => { handleScanFile = (folder) => {
console.log(folder);
const { folderFormat, folderSize, ossUrl } = folder; const { folderFormat, folderSize, ossUrl } = folder;
switch (folderFormat) { switch (folderFormat) {
case "PDF": case "PDF":
...@@ -452,7 +451,6 @@ class KnowledgeBaseList extends React.Component { ...@@ -452,7 +451,6 @@ class KnowledgeBaseList extends React.Component {
width: 160, width: 160,
fixed: "right", fixed: "right",
render: (val, record, index) => { render: (val, record, index) => {
console.log(this.props.categoryId);
return this.props.categoryId === "0" ? ( return this.props.categoryId === "0" ? (
<div className="operate"> <div className="operate">
<div <div
...@@ -521,7 +519,6 @@ class KnowledgeBaseList extends React.Component { ...@@ -521,7 +519,6 @@ class KnowledgeBaseList extends React.Component {
// 前往上课数据页面 // 前往上课数据页面
handleLinkToClassData = (item) => { handleLinkToClassData = (item) => {
const { match } = this.props; const { match } = this.props;
console.log(item);
localStorage.setItem("WatchData_CourseName", item.name); localStorage.setItem("WatchData_CourseName", item.name);
window.RCHistory.push({ window.RCHistory.push({
// pathname: `${match.url}/course-data?type=${item.courseType}&id=${item.liveCourseId}`, // pathname: `${match.url}/course-data?type=${item.courseType}&id=${item.liveCourseId}`,
...@@ -553,12 +550,17 @@ class KnowledgeBaseList extends React.Component { ...@@ -553,12 +550,17 @@ class KnowledgeBaseList extends React.Component {
}; };
render() { render() {
const { dataSource = [], totalCount, query, match } = this.props; const { dataSource = [], totalCount, query, match, selectedRowKeys, onSelectChange } = this.props;
const { current, size } = query; const { current, size } = query;
const rowSelection = {
selectedRowKeys,
onChange: onSelectChange,
}
return ( return (
<div className="knowledge-base-list"> <div className="knowledge-base-list">
<Table <Table
rowKey={(record) => record.id} rowKey={(record) => record.id}
rowSelection={rowSelection}
size="middle" size="middle"
dataSource={dataSource} dataSource={dataSource}
columns={this.parseColumns()} columns={this.parseColumns()}
......
...@@ -9,19 +9,27 @@ ...@@ -9,19 +9,27 @@
import React, { useState, useEffect } from "react"; import React, { useState, useEffect } from "react";
import { Button, Menu, Dropdown,message } from "antd"; import { Button, Menu, Dropdown,message, Modal } from "antd";
import SelectPrepareFileModal from "@/modules/prepare-lesson/modal/SelectPrepareFileModal"; import SelectPrepareFileModal from "@/modules/prepare-lesson/modal/SelectPrepareFileModal";
import { DownOutlined } from "@ant-design/icons"; import { DownOutlined } from "@ant-design/icons";
import AddCourse from "../modal/AddCourse"; import AddCourse from "../modal/AddCourse";
import User from "@/common/js/user"; import User from "@/common/js/user";
import Service from "@/common/js/service";
import KnowledgeAPI from "@/data-source/knowledge/request-api"; import KnowledgeAPI from "@/data-source/knowledge/request-api";
import MoveModal from '../../teach-tool/modal/MoveModal';
import Bus from "@/core/bus";
import './KnowledgeBaseOpt.less';
export default function KnowledgeBaseOpt({ export default function KnowledgeBaseOpt({
categoryId, categoryId,
selectedRowKeys,
updateCategoryTree, updateCategoryTree,
onChange, onChange,
onChangeKeys,
}) { }) {
const [modal, setModal] = useState(null); const [modal, setModal] = useState(null);
const [openMoveModal, setOpenMoveModal] = useState(false);
const [data, setData] = useState([]);
const menu = ( const menu = (
<Menu> <Menu>
...@@ -34,6 +42,36 @@ export default function KnowledgeBaseOpt({ ...@@ -34,6 +42,36 @@ export default function KnowledgeBaseOpt({
</Menu> </Menu>
); );
useEffect(() => {
queryCategoryTree();
}, []);
// 查询分类树
function queryCategoryTree() {
let query = {
storeId: User.getStoreId(),
withCount: true,
};
KnowledgeAPI.getCategoryTree(query).then((res) => {
const { categoryList = [] } = res.result;
let list = renderTreeNodes(categoryList);
setData(list);
});
}
function renderTreeNodes(data) {
let newTreeData = data.map((item) => {
item.title = item.categoryName;
item.value = item.id;
item.key = item.id;
if (item.sonCategoryList) {
item.children = renderTreeNodes(item.sonCategoryList);
}
return item;
});
return newTreeData;
};
function handAddCourse() { function handAddCourse() {
let modal = ( let modal = (
<AddCourse <AddCourse
...@@ -86,16 +124,126 @@ export default function KnowledgeBaseOpt({ ...@@ -86,16 +124,126 @@ export default function KnowledgeBaseOpt({
setModal(modal); setModal(modal);
} }
return ( function batchMove() {
<div className="video-course-opt"> if (_.isEmpty(selectedRowKeys)) {
<Dropdown overlay={menu}> message.warning('请先选择要移动的知识');
<Button type="primary" className="mr12"> return null;
添加知识 }
<DownOutlined /> setOpenMoveModal(true);
</Button> }
</Dropdown>
function batchMoveRemote(categoryId) {
const data = {
categoryId,
ids: selectedRowKeys,
storeId: User.getStoreId(),
};
Service.Hades('public/hades/batchMoveKnowledgeCategory', data).then((res) => {
if (res.success) {
message.success('移动成功');
onChange();
Bus.trigger('knowledgeCategoryTree');
clearSelect();
} else {
message.error('移动失败');
}
}).catch(() => {
message.error('移动失败');
})
}
function batchDelete() {
if (_.isEmpty(selectedRowKeys)) {
message.warning('请先选择要删除的知识');
return null;
}
Modal.confirm({
title: "确定要删除知识吗?",
content: "删除后,不可恢复。",
icon: (
<span className="icon iconfont default-confirm-icon">&#xe839; </span>
),
okText: "删除",
cancelText: "取消",
onOk: () => {
const data = {
ids: selectedRowKeys,
storeId: User.getStoreId(),
};
Service.Hades('public/hades/batchDelKnowledge', data).then((res) => {
if (res.success) {
message.success('删除成功');
onChange();
Bus.trigger('knowledgeCategoryTree');
clearSelect();
} else {
message.error('删除失败');
}
}).catch(() => {
message.error('删除失败');
})
},
})
}
function onSelectPaper(keys) {
if (keys.length > 50) {
message.warning('最多只能选择50个知识');
return null;
}
onChangeKeys(keys);
};
function clearSelect() {
onChangeKeys([]);
}
return (
<div className="knowledge-course-opt">
{_.isEmpty(selectedRowKeys) ?
<Dropdown overlay={menu}>
<Button type="primary" className="mr8">
添加知识
<DownOutlined />
</Button>
</Dropdown>
: <div className="select-container">
<span className="con">
<div>
<span className="icon iconfont tip">&#xe6f2;</span>
<span className="text">已选择{selectedRowKeys.length}</span>
</div>
<div>
<span className="clear" onClick={clearSelect}>清空</span>
</div>
</span>
</div>
}
<Button
className="mr8"
onClick={() => {
batchMove();
}}
>批量移动</Button>
<Button
onClick={() => {
batchDelete();
}}
>批量删除</Button>
{modal} {modal}
{openMoveModal &&
<MoveModal
visible={openMoveModal}
title="知识"
data={data}
length={selectedRowKeys.length}
onCancel={() => setOpenMoveModal(false)}
onOk={(categoryId) => {
batchMoveRemote(categoryId);
setOpenMoveModal(false);
}}
/>
}
</div> </div>
); );
} }
.knowledge-course-opt {
display: flex;
.select-container{
margin-right: 24px;
.con{
background: #FFF4DD;
border-radius: 4px;
padding: 3px 16px;
display: inline-flex;
align-items: center;
justify-content: space-between;
.tip{
font-size:14px;
color:#FF9D14;
margin-right:8px;
}
.text{
font-size:14px;
color:#666;
margin-right:30px;
}
.clear{
color:#5289FA;
font-size:14px;
}
}
}
}
\ No newline at end of file
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
* @Copyright: © 2020 杭州杰竞科技有限公司 版权所有 * @Copyright: © 2020 杭州杰竞科技有限公司 版权所有
*/ */
import React from "react"; import React from "react";
import { message } from 'antd'
import KnowledgeBaseFilter from "./components/KnowledgeBaseFilter"; import KnowledgeBaseFilter from "./components/KnowledgeBaseFilter";
import KnowledgeBaseOpt from "./components/KnowledgeBaseOpt"; import KnowledgeBaseOpt from "./components/KnowledgeBaseOpt";
import KnowledgeBaseList from "./components/KnowledgeBaseList"; import KnowledgeBaseList from "./components/KnowledgeBaseList";
...@@ -30,6 +30,7 @@ export default class KnowledgeBase extends React.Component { ...@@ -30,6 +30,7 @@ export default class KnowledgeBase extends React.Component {
totalCount: 0, // 知识库数据总条数 totalCount: 0, // 知识库数据总条数
categoryId: '0', categoryId: '0',
updateCategoryFlag: false, updateCategoryFlag: false,
selectedRowKeys: [],
}; };
} }
...@@ -72,6 +73,15 @@ export default class KnowledgeBase extends React.Component { ...@@ -72,6 +73,15 @@ export default class KnowledgeBase extends React.Component {
}); });
}; };
onSelectChange = (selectedRowKeys) => {
if (selectedRowKeys.length > 50) {
message.warning('最多只能选择50个题目');
return null;
}
console.log(selectedRowKeys, 888888)
this.setState({ selectedRowKeys });
};
render() { render() {
const { const {
dataSource, dataSource,
...@@ -79,6 +89,7 @@ export default class KnowledgeBase extends React.Component { ...@@ -79,6 +89,7 @@ export default class KnowledgeBase extends React.Component {
query, query,
categoryId, categoryId,
updateCategoryFlag, updateCategoryFlag,
selectedRowKeys,
} = this.state; } = this.state;
return ( return (
<div className="page"> <div className="page">
...@@ -105,11 +116,15 @@ export default class KnowledgeBase extends React.Component { ...@@ -105,11 +116,15 @@ export default class KnowledgeBase extends React.Component {
onChange={this.handleFetchScheduleList} onChange={this.handleFetchScheduleList}
updateCategoryTree={this.updateCategoryTree} updateCategoryTree={this.updateCategoryTree}
categoryId={categoryId} categoryId={categoryId}
selectedRowKeys={selectedRowKeys}
onChangeKeys={(keys) => this.setState({ selectedRowKeys: keys })}
/>} />}
{/* 知识库列表模块 */} {/* 知识库列表模块 */}
<KnowledgeBaseList <KnowledgeBaseList
query={query} query={query}
selectedRowKeys={selectedRowKeys}
onSelectChange={this.onSelectChange}
categoryId={categoryId} categoryId={categoryId}
dataSource={dataSource} dataSource={dataSource}
totalCount={totalCount} totalCount={totalCount}
......
.paper-list { .paper-list {
.select-box {
display: flex;
align-items: center;
.select-container{
margin-right: 24px;
.con{
background: #FFF4DD;
border-radius: 4px;
padding: 3px 16px;
display: inline-flex;
align-items: center;
justify-content: space-between;
.tip{
font-size:14px;
color:#FF9D14;
margin-right:8px;
}
.text{
font-size:14px;
color:#666;
margin-right:30px;
}
.clear{
color:#5289FA;
font-size:14px;
}
}
}
}
.ant-radio-wrapper{ .ant-radio-wrapper{
left: -10px; left: -10px;
} }
......
...@@ -524,7 +524,9 @@ class QuestionList extends Component { ...@@ -524,7 +524,9 @@ class QuestionList extends Component {
Service.Hades('public/hades/batchMoveQuestion', data).then((res) => { Service.Hades('public/hades/batchMoveQuestion', data).then((res) => {
if (res.success) { if (res.success) {
message.success('移动成功'); message.success('移动成功');
Bus.trigger('queryCategoryTree', 'init');
this.queryQuestionPageList(); this.queryQuestionPageList();
this.clearSelect();
} else { } else {
message.error('移动失败'); message.error('移动失败');
} }
...@@ -557,7 +559,9 @@ class QuestionList extends Component { ...@@ -557,7 +559,9 @@ class QuestionList extends Component {
Service.Hades('public/hades/batchDeleteQuestion', data).then((res) => { Service.Hades('public/hades/batchDeleteQuestion', data).then((res) => {
if (res.success) { if (res.success) {
message.success('删除成功'); message.success('删除成功');
Bus.trigger('queryCategoryTree', 'init');
this.queryQuestionPageList(); this.queryQuestionPageList();
this.clearSelect();
} else { } else {
message.error('删除失败'); message.error('删除失败');
} }
......
...@@ -39,26 +39,26 @@ ...@@ -39,26 +39,26 @@
} }
.select-container{ .select-container{
.con{ .con {
background: #FFF4DD; background: #FFF4DD;
border-radius: 4px; border-radius: 4px;
padding:6px 16px; padding: 3px 16px;
display: inline-flex; display: inline-flex;
align-items: center; align-items: center;
justify-content: space-between; justify-content: space-between;
.tip{ .tip {
font-size:14px; font-size: 14px;
color:#FF9D14; color: #FF9D14;
margin-right:8px; margin-right: 8px;
} }
.text{ .text {
font-size:14px; font-size: 14px;
color:#666; color: #666;
margin-right:30px; margin-right: 30px;
} }
.clear{ .clear {
color:#5289FA; color: #5289FA;
font-size:14px; font-size: 14px;
} }
} }
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment