Commit 59f967da by zangsuyun

feat:知识库导出

parent 0ee2f02b
......@@ -3,7 +3,7 @@
* @Author: zangsuyun
* @Date: 2021-03-19 18:09:35
* @LastEditors: zangsuyun
* @LastEditTime: 2021-03-27 15:42:54
* @LastEditTime: 2021-03-30 09:51:00
* @Copyright: © 2020 杭州杰竞科技有限公司 版权所有
*/
import Service from "@/common/js/service";
......@@ -69,8 +69,22 @@ class KnowledgeAPI {
queryPageKnowledgeFolderWatchInfo = (params: object) => {
return Service.Hades("public/hades/queryPageKnowledgeFolderWatchInfo", params);
}
// 资料观看记录导出
exportFolderLearnSync = (params: object) => {
return Service.Hades("public/knowledge/exportFolderLearnSync", params);
}
// 直播观看记录导出
exportLiveLearnSync = (params: object) => {
return Service.Hades("public/knowledge/exportLiveLearnSync", params);
}
//图文课观看记录导出
exportPicLearnSync = (params: object) => {
return Service.Hades("public/knowledge/exportPicLearnSync", params);
}
// 视频课观看记录导出
exportVideoLearnSync = (params: object) => {
return Service.Hades("public/knowledge/exportVideoLearnSync", params);
}
}
......
......@@ -3,7 +3,7 @@
* @Author: zangsuyun
* @Date: 2021-03-19 18:05:23
* @LastEditors: zangsuyun
* @LastEditTime: 2021-03-29 10:01:15
* @LastEditTime: 2021-03-29 16:33:46
* @Copyright: © 2020 杭州杰竞科技有限公司 版权所有
*/
......@@ -11,7 +11,7 @@ import React, { Component } from "react";
import { Input, Button, Tree } from "antd";
import "./Classification.less";
import User from "@/common/js/user";
import KnowledgeAPL from "@/data-source/knowledge/request-api";
import KnowledgeAPI from "@/data-source/knowledge/request-api";
const { Search } = Input;
const { DirectoryTree } = Tree;
......@@ -72,18 +72,10 @@ class Classification extends Component {
// 查询分类树
queryCategoryTree = (categoryName) => {
let query = {
// source: 0,
// categoryName,
storeId: User.getStoreId(),
withCount: true,
};
// let query = {
// source: 0,
// categoryName,
// userId: User.getStoreUserId(),
// tenantId: User.getStoreId(),
// };
KnowledgeAPL.getCategoryTree(query).then((res) => {
KnowledgeAPI.getCategoryTree(query).then((res) => {
const { categoryList = [], noCategoryCnt = 0 } = res.result;
let str = "未分类";
if (categoryName) {
......
......@@ -3,7 +3,7 @@
* @Author: zangsuyun
* @Date: 2021-03-15 16:51:40
* @LastEditors: zangsuyun
* @LastEditTime: 2021-03-25 11:17:15
* @LastEditTime: 2021-03-30 10:33:10
* @Copyright: © 2020 杭州杰竞科技有限公司 版权所有
*/
......@@ -177,8 +177,8 @@ class CourseData extends React.Component {
handleExportV5 = () => {
const { id, storeId } = this.state;
CourseService.exportStudentCourseData({
id: id,
KnowledgeAPI.exportLiveLearnSync({
knowledgeId: id,
exportLiveType: "VISITOR",
storeId,
}).then((res) => {
......
......@@ -3,7 +3,7 @@
* @Author: zangsuyun
* @Date: 2021-03-12 14:49:40
* @LastEditors: zangsuyun
* @LastEditTime: 2021-03-25 17:54:33
* @LastEditTime: 2021-03-30 10:45:21
* @Copyright: © 2020 杭州杰竞科技有限公司 版权所有
*/
......@@ -284,7 +284,6 @@ class KnowledgeBaseList extends React.Component {
title: "创建人",
key: "createName",
dataIndex: "createName",
// width: 100,
render: (val) => {
return (
<div>
......@@ -298,8 +297,7 @@ class KnowledgeBaseList extends React.Component {
},
},
{
title: "观看数据",
// width: 100,
title: "观看用户数",
key: "watchUserCount",
dataIndex: "watchUserCount",
render: (val, item) => {
......
......@@ -14,7 +14,7 @@ import SelectPrepareFileModal from "@/modules/prepare-lesson/modal/SelectPrepare
import { DownOutlined } from "@ant-design/icons";
import AddCourse from "../modal/AddCourse";
import User from "@/common/js/user";
import KnowledgeAPL from "@/data-source/knowledge/request-api";
import KnowledgeAPI from "@/data-source/knowledge/request-api";
export default function KnowledgeBaseOpt({
categoryId,
......@@ -56,7 +56,7 @@ export default function KnowledgeBaseOpt({
createId: User.getUserId(),
type: "FOLDER",
};
KnowledgeAPL.addKnowledge(params).then(({ success }) => {
KnowledgeAPI.addKnowledge(params).then(({ success }) => {
if (success) {
message.success("新增成功");
onChange();
......
......@@ -4,7 +4,7 @@ import { Table, Button, Modal, message } from 'antd';
import dealTimeDuration from "../../course-manage/utils/dealTimeDuration";
import { PageControl } from "@/components";
// import './DataList.less';
import KnowledgeAPL from "@/data-source/knowledge/request-api";
import KnowledgeAPI from "@/data-source/knowledge/request-api";
import User from '@/common/js/user';
const liveTypeMap = {
......@@ -16,14 +16,14 @@ const liveTypeMap = {
class PlaybackData extends React.Component {
constructor(props) {
super(props);
const courseId = getParameterByName("id"); // 课程ID
const id = getParameterByName("id"); // 课程ID
this.state = {
playbackData: [],
current: 1,
size: 10,
total: 0,
id: courseId,
id: id,
storeId: User.getStoreId()
}
}
......@@ -40,7 +40,7 @@ class PlaybackData extends React.Component {
size
}
KnowledgeAPL.queryPageKnowledgeReplayRecordPage(params).then((res) => {
KnowledgeAPI.queryPageKnowledgeReplayRecordPage(params).then((res) => {
if (res.result) {
const { records = [], current, size, total } = res.result;
this.setState({
......@@ -88,10 +88,10 @@ class PlaybackData extends React.Component {
}
// 导出
handleplaybackExport() {
const { storeId, liveCourseId } = this.state;
const { storeId, id } = this.state;
CourseService.exportPlayBackCourseData({
liveCourseId,
KnowledgeAPI.exportLiveLearnSync({
knowledgeId: id,
exportLiveType: "PLAY_BACK",
storeId
}).then((res) => {
......
......@@ -56,7 +56,7 @@ class WatchData extends React.Component {
)}
{type !== "LIVE" && (
<WatchDataModal type="videoCourseList" data={id} type={type}/>
<WatchDataModal type="videoCourseList" id={id} type={type}/>
)}
</div>
</div>
......
......@@ -3,7 +3,7 @@
* @Author: zangsuyun
* @Date: 2021-03-16 10:18:31
* @LastEditors: zangsuyun
* @LastEditTime: 2021-03-27 15:50:18
* @LastEditTime: 2021-03-30 10:17:59
* @Copyright: © 2020 杭州杰竞科技有限公司 版权所有
*/
......@@ -37,7 +37,7 @@ class WatchDataModal extends React.Component {
// 获取观看视频数据列表
handleFetchDataList = () => {
const { query, size, totalCount } = this.state;
const id = this.props.data;
const { id, type } = this.props;
const params = {
...query,
......@@ -45,7 +45,6 @@ class WatchDataModal extends React.Component {
id,
storeId: User.getStoreId(),
};
const { type } = this.props;
type === "FOLDER"
? KnowledgeAPI.queryPageKnowledgeFolderWatchInfo(params).then((res) => {
const { result = {} } = res;
......@@ -149,23 +148,45 @@ class WatchDataModal extends React.Component {
};
handleExportV5 = () => {
// const { liveCourseId, storeId } = this.state;
// CourseService.exportStudentCourseData({
// liveCourseId: liveCourseId,
// exportLiveType: "VISITOR",
// storeId,
// }).then((res) => {
// const link = res.result;
// this.setState({
// link
// });
// document.getElementById("loadExcel").click();
const { query } = this.state;
const { id, type } = this.props;
// if (res.success) {
message.success("导出成功!");
// }
// });
const params = {
...query,
knowledgeId: id,
storeId: User.getStoreId(),
};
switch (type) {
case "FOLDER":
KnowledgeAPI.exportFolderLearnSync(params).then((res) => {
if (res.result) {
window.open(res.result);
} else {
message.error("导出失败");
}
});
break;
case "VOICE":
KnowledgeAPI.exportVideoLearnSync(params).then((res) => {
if (res.result) {
window.open(res.result);
} else {
message.error("导出失败");
}
});
break;
case "PICTURE":
KnowledgeAPI.exportPicLearnSync(params).then((res) => {
if (res.result) {
window.open(res.result);
} else {
message.error("导出失败");
}
});
break;
default:
break;
}
};
render() {
......
......@@ -3,7 +3,7 @@
* @Author: zangsuyun
* @Date: 2021-03-13 09:54:26
* @LastEditors: zangsuyun
* @LastEditTime: 2021-03-24 11:53:09
* @LastEditTime: 2021-03-30 10:29:01
* @Copyright: © 2020 杭州杰竞科技有限公司 版权所有
*/
......@@ -19,6 +19,7 @@ import {
Input,
Tabs,
Tooltip,
TreeSelect,
} from "antd";
import { PageControl } from "@/components";
import TableSelectedData from "@/components/TableSelectedData";
......@@ -91,14 +92,49 @@ class AddCourse extends React.Component {
},
pictureTotalCount: 0,
selectPicture: [], //弹窗内已选择的图文课程
categoryList: [],
};
}
componentDidMount() {
this.handleFetchLiveList();
this.handleFetchVideoList();
this.handleFetchPictureList();
this.queryCategoryTree();
}
// 查询分类树
queryCategoryTree = (categoryName) => {
let query = {
storeId: User.getStoreId(),
withCount: false,
};
KnowledgeAPI.getCategoryTree(query).then((res) => {
const { categoryList = [] } = res.result;
this.setState({
categoryList: this.renderTreeNodes(categoryList),
});
});
};
renderTreeNodes = (data) => {
let newTreeData = data.map((item) => {
item.title = (
<span>
<span className="icon iconfont" style={{ color: "#FBD140" }}>
&#xe7f1;&nbsp;
</span>
{ item.categoryName}
</span>
);
item.key = item.id;
if (item.sonCategoryList) {
item.children = this.renderTreeNodes(item.sonCategoryList);
}
return item;
});
return newTreeData;
};
// 获取直播课列表
handleFetchLiveList = () => {
const { liveQuery, liveSize } = this.state;
......@@ -592,6 +628,7 @@ class AddCourse extends React.Component {
pictureQuery,
pictureTotalCount,
selectPicture,
categoryList,
} = this.state;
const LiveSelection = {
......@@ -688,28 +725,16 @@ class AddCourse extends React.Component {
</div>
<div style={{ width: "50%" }}>
<span className="shelf-status">课程分类:</span>
<Select
// value={courseType}
<TreeSelect
style={{ width: "calc(100% - 75px)" }}
dropdownStyle={{ maxHeight: 400, overflow: "auto" }}
treeData={categoryList}
placeholder="请选择课程类型"
allowClear={true}
allowClear
onChange={(value) => {
setCourseType(value);
this.handleChangVideoFilter("categoryId", value);
}}
suffixIcon={
<span
className="icon iconfont"
style={{ fontSize: "12px", color: "#BFBFBF" }}
>
&#xe835;
</span>
}
>
<Option value="LIVE">直播课</Option>
<Option value="VOICE">视频课</Option>
<Option value="PICTURE">图文课</Option>
<Option value="knowledge">学习资料</Option>
</Select>
/>
</div>
</Row>
</div>
......@@ -786,28 +811,16 @@ class AddCourse extends React.Component {
</div>
<div style={{ width: "50%" }}>
<span className="shelf-status">课程分类:</span>
<Select
// value={courseType}
<TreeSelect
style={{ width: "calc(100% - 75px)" }}
dropdownStyle={{ maxHeight: 400, overflow: "auto" }}
treeData={categoryList}
placeholder="请选择课程类型"
allowClear={true}
allowClear
onChange={(value) => {
setCourseType(value);
this.handleChangLiveFilter("categoryId", value);
}}
suffixIcon={
<span
className="icon iconfont"
style={{ fontSize: "12px", color: "#BFBFBF" }}
>
&#xe835;
</span>
}
>
<Option value="LIVE">直播课</Option>
<Option value="VOICE">视频课</Option>
<Option value="PICTURE">图文课</Option>
<Option value="knowledge">学习资料</Option>
</Select>
/>
</div>
</Row>
</div>
......@@ -864,15 +877,8 @@ class AddCourse extends React.Component {
<div>
<span style={{ lineHeight: "32px" }}>课程名称:</span>
<Search
// value={courseName}
style={{ width: "calc(100% - 75px)" }}
placeholder="搜索课程名称"
// onChange={(e) => {
// this.handleChangLiveFilter(
// "courseName",
// e.target.value
// );
// }}
onSearch={(value) => {
this.handleChangPictureFilter("courseName", value);
}}
......@@ -883,28 +889,16 @@ class AddCourse extends React.Component {
</div>
<div style={{ width: "50%" }}>
<span className="shelf-status">课程分类:</span>
<Select
// value={courseType}
<TreeSelect
style={{ width: "calc(100% - 75px)" }}
dropdownStyle={{ maxHeight: 400, overflow: "auto" }}
treeData={categoryList}
placeholder="请选择课程类型"
allowClear={true}
allowClear
onChange={(value) => {
setCourseType(value);
this.handleChangPictureFilter("categoryId", value);
}}
suffixIcon={
<span
className="icon iconfont"
style={{ fontSize: "12px", color: "#BFBFBF" }}
>
&#xe835;
</span>
}
>
<Option value="LIVE">直播课</Option>
<Option value="VOICE">视频课</Option>
<Option value="PICTURE">图文课</Option>
<Option value="knowledge">学习资料</Option>
</Select>
/>
</div>
</Row>
</div>
......
......@@ -2,7 +2,7 @@
* @Author: yuananting
* @Date: 2021-02-23 18:28:50
* @LastEditors: zangsuyun
* @LastEditTime: 2021-03-29 10:10:49
* @LastEditTime: 2021-03-29 16:14:02
* @Description: 助学工具-题库-主页面分类管理
* @Copyrigh: © 2020 杭州杰竞科技有限公司 版权所有
*/
......@@ -585,9 +585,9 @@ class QuestionCategoryManage extends Component {
{getParameterByName("from") ? (
<Breadcrumbs
navList="课程分类"
goBack={() =>
window.history.back(-1)
}
// goBack={() =>
// window.RCHistory.goBack()
// }
/>
) : (
<div className="content-header">课程分类</div>
......
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