Commit e0eafc54 by guomingpang

docs:线下课重命名线下活动,资源云盘变更为素材库

parent 64195835
...@@ -19,7 +19,7 @@ ...@@ -19,7 +19,7 @@
/> />
<meta <meta
name="keywords" name="keywords"
content="小麦企学院,企业培训,员工培训,企业大学,企业内训,企业外训,培训计划,培训素材,企培,企训,资料云盘,培训课程,培训任务,直播课,线上课,图文课,线下课,知识库,作业,考试,排行榜,培训类别管理,定制培训计划,管理数据,学习数据,企学院,资料共享,培训数字化,数字化培训,培训工具,在线培训,线上培训,培训saas,培训管理,企业微信培训,对客培训,客户培训,直播培训,互联网培训,新员工培训,管理培训,管理者培训,工人培训,制造业培训,餐饮培训,服务业培训,零售培训,门店培训,工厂培训,车间培训,培训补贴,人事培训,财务培训,职场培训,企业学院平台,教育企业学院,教育企业平台,教育平台学院,企业学习,酷学院,小鹅通,企业学院,云学堂,时代光华,云课堂,魔学院,云大学,米知云,授课学堂" content="小麦企学院,企业培训,员工培训,企业大学,企业内训,企业外训,培训计划,培训素材,企培,企训,素材库,培训课程,培训任务,直播课,线上课,图文课,线下活动,知识库,作业,考试,排行榜,培训类别管理,定制培训计划,管理数据,学习数据,企学院,资料共享,培训数字化,数字化培训,培训工具,在线培训,线上培训,培训saas,培训管理,企业微信培训,对客培训,客户培训,直播培训,互联网培训,新员工培训,管理培训,管理者培训,工人培训,制造业培训,餐饮培训,服务业培训,零售培训,门店培训,工厂培训,车间培训,培训补贴,人事培训,财务培训,职场培训,企业学院平台,教育企业学院,教育企业平台,教育平台学院,企业学习,酷学院,小鹅通,企业学院,云学堂,时代光华,云课堂,魔学院,云大学,米知云,授课学堂"
/> />
<!-- <link rel="apple-touch-icon" href="../src/common/images/logo.png" /> --> <!-- <link rel="apple-touch-icon" href="../src/common/images/logo.png" /> -->
<link rel="shortcut icon" href="https://image.xiaomaiketang.com/xm/c4KiP2epBP.png" /> <link rel="shortcut icon" href="https://image.xiaomaiketang.com/xm/c4KiP2epBP.png" />
...@@ -62,6 +62,5 @@ ...@@ -62,6 +62,5 @@
To begin the development, run `npm start` or `yarn start`. To begin the development, run `npm start` or `yarn start`.
To create a production bundle, use `npm run build` or `yarn build`. To create a production bundle, use `npm run build` or `yarn build`.
--> -->
</body> </body>
</html> </html>
...@@ -101,12 +101,7 @@ class GraphicsCourseList extends React.Component { ...@@ -101,12 +101,7 @@ class GraphicsCourseList extends React.Component {
dataIndex: 'categoryName', dataIndex: 'categoryName',
width: 120, width: 120,
render: (val, record) => { render: (val, record) => {
return ( return <div className='record__item'>{record.categoryName}</div>
<div className='record__item'>
{record.categoryOneName}
{record.categoryTwoName ? `-${record.categoryTwoName}` : ''}
</div>
)
}, },
}, },
{ {
......
...@@ -6,66 +6,54 @@ ...@@ -6,66 +6,54 @@
* @LastEditTime: 2020-12-22 20:30:54 * @LastEditTime: 2020-12-22 20:30:54
*/ */
import React from 'react' import React from 'react'
import { Modal, Button, Table } from "antd"; import { Modal, Button, Table } from 'antd'
import "./AccountChargeModal"; import './AccountChargeModal'
const data = [ const data = [
{ person: "上台人数1v1", price: "3元/人/小时" }, { person: '上台人数1v1', price: '3元/人/小时' },
{ person: "上台人数1v2", price: "3元/人/小时" }, { person: '上台人数1v2', price: '3元/人/小时' },
{ person: "上台人数1v3", price: "3元/人/小时" }, { person: '上台人数1v3', price: '3元/人/小时' },
{ person: "上台人数1v4", price: "3元/人/小时" }, { person: '上台人数1v4', price: '3元/人/小时' },
{ person: "上台人数1v5", price: "3元/人/小时" }, { person: '上台人数1v5', price: '3元/人/小时' },
{ person: "上台人数1v6", price: "3元/人/小时" }, { person: '上台人数1v6', price: '3元/人/小时' },
{ person: "上台人数1v7", price: "4元/人/小时" }, { person: '上台人数1v7', price: '4元/人/小时' },
{ person: "上台人数1v8", price: "4元/人/小时" }, { person: '上台人数1v8', price: '4元/人/小时' },
{ person: "上台人数1v9", price: "8元/人/小时" }, { person: '上台人数1v9', price: '8元/人/小时' },
{ person: "上台人数1v10", price: "8元/人/小时" }, { person: '上台人数1v10', price: '8元/人/小时' },
{ person: "上台人数1v11", price: "8元/人/小时" }, { person: '上台人数1v11', price: '8元/人/小时' },
{ person: "上台人数1v12", price: "8元/人/小时" }, { person: '上台人数1v12', price: '8元/人/小时' },
]; ]
function ChargeExplainModal(props) { function ChargeExplainModal(props) {
return ( return (
<Modal <Modal
title="计费说明" title='计费说明'
visible={true} visible={true}
className="charge-explain-modal" className='charge-explain-modal'
width={880} width={880}
maskClosable={false} maskClosable={false}
closeIcon={<span className="icon iconfont modal-close-icon">&#xe6ef;</span>} closeIcon={<span className='icon iconfont modal-close-icon'>&#xe6ef;</span>}
onCancel={() => { onCancel={() => {
props.close(); props.close()
}} }}
footer={[ footer={[
<Button <Button
type="primary" type='primary'
onClick={() => { onClick={() => {
props.close(); props.close()
}} }}>
>
关闭 关闭
</Button>, </Button>,
]} ]}>
>
<div> <div>
<div className="explain-title">1)直播课时费</div> <div className='explain-title'>1)直播课时费</div>
<p className="main-explain-block"> <p className='main-explain-block'>每节课上课费用 = 上台人数单价 × 有效出勤学生和老师人数 × 排课时长</p>
每节课上课费用 = 上台人数单价 × 有效出勤学生和老师人数 × 排课时长
</p>
<ul> <ul>
<li> <li>1. 上课老师、学生和助教在教室中的累计时长满10分钟即为有效出勤;</li>
1. 上课老师、学生和助教在教室中的累计时长满10分钟即为有效出勤; <li>2. 排课时长指创建课节设置的课节时长,最小计费单位为0.5小时,不足0.5小时按0.5小时计算;</li>
</li> <li>3. 上台人数单价:以排课时设定的上台人数上限为准,不同直播教室类型的课时单价不同。</li>
<li>
2.
排课时长指创建课节设置的课节时长,最小计费单位为0.5小时,不足0.5小时按0.5小时计算;
</li>
<li>
3.
上台人数单价:以排课时设定的上台人数上限为准,不同直播教室类型的课时单价不同。
</li>
</ul> </ul>
<p className="main-explain-text" style={{marginTop: 16,marginBottom: 8}}> <p className='main-explain-text' style={{ marginTop: 16, marginBottom: 8 }}>
温馨提醒:上台人数1vN,1为授课老师,N为同时与老师视频互动学生数;直播课时费将在老师下课后立即结算。 温馨提醒:上台人数1vN,1为授课老师,N为同时与老师视频互动学生数;直播课时费将在老师下课后立即结算。
</p> </p>
<table style={{ width: 333 }}> <table style={{ width: 333 }}>
...@@ -82,47 +70,43 @@ function ChargeExplainModal(props) { ...@@ -82,47 +70,43 @@ function ChargeExplainModal(props) {
<td>{item.person}</td> <td>{item.person}</td>
<td>{item.price}</td> <td>{item.price}</td>
</tr> </tr>
); )
})} })}
</tbody> </tbody>
</table> </table>
<p className="main-explain-text"> <p className='main-explain-text'>
示例:王老师排了一节45分钟的课程,选择的直播教室类型为5人上台,安排了1位助教、12位学生。那么,排课时长45分钟记为1小时;全员累计在线时长≥10min,老师+助教+学生共计1+1+12=14人;课时单价3元/人/小时。所以,此节课的直播课时费=1x14x3=42元 示例:王老师排了一节45分钟的课程,选择的直播教室类型为5人上台,安排了1位助教、12位学生。那么,排课时长45分钟记为1小时;全员累计在线时长≥10min,老师+助教+学生共计1+1+12=14人;课时单价3元/人/小时。所以,此节课的直播课时费=1x14x3=42元
</p> </p>
<div className="explain-title mt16">2)录制费</div> <div className='explain-title mt16'>2)录制费</div>
<p className="main-explain-block">录制费 = 录课单价 × 回放视频时长</p> <p className='main-explain-block'>录制费 = 录课单价 × 回放视频时长</p>
<ul> <ul>
<li>1. 结算时间:从回放视频生成后立即结算</li> <li>1. 结算时间:从回放视频生成后立即结算</li>
<li> 2. 回放视频时长:0.5h起收,不足0.5h的按0.5h结算</li> <li> 2. 回放视频时长:0.5h起收,不足0.5h的按0.5h结算</li>
<li> 3. 单价:2元/小时</li> <li> 3. 单价:2元/小时</li>
</ul> </ul>
<p className="main-explain-text"> <p className='main-explain-text'>示例:生成了49分26秒的回放视频,不足1h按1h计算,总费用=1(h)*2元/h=2元</p>
示例:生成了49分26秒的回放视频,不足1h按1h计算,总费用=1(h)*2元/h=2元 <div className='explain-title mt16'>3)流量费</div>
</p> <p className='main-explain-block'>观看回放视频流量费 = 流量单价 × 回放流量</p>
<div className="explain-title mt16">3)流量费</div> <p className='main-explain-text'>
<p className="main-explain-block">
观看回放视频流量费 = 流量单价 × 回放流量
</p>
<p className="main-explain-text">
目前收费报价:0元(限时免费) 目前收费报价:0元(限时免费)
<br /> 若后续变更收费,将提前30日通告收费方式及价格标准 <br /> 若后续变更收费,将提前30日通告收费方式及价格标准
</p> </p>
<div className="explain-title mt16">4)存储费</div> <div className='explain-title mt16'>4)存储费</div>
<p className="main-explain-block">存储实际扣费 = 存储单价 × 存储文件大小</p> <p className='main-explain-block'>存储实际扣费 = 存储单价 × 存储文件大小</p>
<p className="main-explain-text"> <p className='main-explain-text'>
目前收费报价:0元(限时免费) 目前收费报价:0元(限时免费)
<br /> <br />
若后续变更收费,将提前30日通告收费方式及价格标准 若后续变更收费,将提前30日通告收费方式及价格标准
</p> </p>
<div className="explain-title mt16">5)其他说明</div> <div className='explain-title mt16'>5)其他说明</div>
<div className="main-explain-text"> <div className='main-explain-text'>
余额不足时将限制使用创建直播课、老师和学生进入直播间、老师和学生观看回放视频、在资料云盘或直播间上传文件等功能,请注意及时充值。(余额<300元时将发送短信提醒,请注意查看。) 余额不足时将限制使用创建直播课、老师和学生进入直播间、老师和学生观看回放视频、在素材库或直播间上传文件等功能,请注意及时充值。(余额<300元时将发送短信提醒,请注意查看。)
</div> </div>
</div> </div>
</Modal> </Modal>
); )
} }
export default ChargeExplainModal; export default ChargeExplainModal
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
* @Date: 2020-08-05 10:07:47 * @Date: 2020-08-05 10:07:47
* @LastEditors: yuananting * @LastEditors: yuananting
* @LastEditTime: 2021-07-22 18:29:55 * @LastEditTime: 2021-07-22 18:29:55
* @Description: 线下新增/编辑页 * @Description: 线下活动新增/编辑页
* @Copyright: 杭州杰竞科技有限公司 版权所有 * @Copyright: 杭州杰竞科技有限公司 版权所有
*/ */
...@@ -44,14 +44,14 @@ class AddOfflineCourse extends React.Component { ...@@ -44,14 +44,14 @@ class AddOfflineCourse extends React.Component {
const pageType = window.getParameterByName('type') const pageType = window.getParameterByName('type')
this.state = { this.state = {
courseId, // 线下ID,编辑的时候从URL上带过来 courseId, // 线下活动ID,编辑的时候从URL上带过来
pageType, // 页面类型: add->新建 edit->编辑 pageType, // 页面类型: add->新建 edit->编辑
imageFile: null, // 需要被截取的图片 imageFile: null, // 需要被截取的图片
courseName: null, // 线下名称 courseName: null, // 线下活动名称
courseMedia: '', courseMedia: '',
introduce: '', introduce: '',
coverId: null, // 线下封面的recourceId coverId: null, // 线下封面的recourceId
coverUrl: defaultCoverUrl, // 线下封面 coverUrl: defaultCoverUrl, // 线下活动封面
studentList: [], // 上课学员列表 studentList: [], // 上课学员列表
diskList: [], // 机构可见磁盘目录 diskList: [], // 机构可见磁盘目录
selectedFileList: [], // 已经从资料云盘中勾选的文件 selectedFileList: [], // 已经从资料云盘中勾选的文件
...@@ -149,7 +149,7 @@ class AddOfflineCourse extends React.Component { ...@@ -149,7 +149,7 @@ class AddOfflineCourse extends React.Component {
}) })
} }
// 获取线下详情 // 获取线下活动详情
handleFetchScheudleDetail = (courseId) => { handleFetchScheudleDetail = (courseId) => {
return Service.Hades('public/hades/getOfflineCourseDetail', { return Service.Hades('public/hades/getOfflineCourseDetail', {
courseId, courseId,
...@@ -707,7 +707,7 @@ class AddOfflineCourse extends React.Component { ...@@ -707,7 +707,7 @@ class AddOfflineCourse extends React.Component {
const isDefaultCover = coverUrl === defaultCoverUrl const isDefaultCover = coverUrl === defaultCoverUrl
return ( return (
<div className='page add-offline-course-page'> <div className='page add-offline-course-page'>
<Breadcrumbs navList={pageType === 'add' ? '新建线下课' : '编辑线下课'} goBack={this.handleGoBack} /> <Breadcrumbs navList={pageType === 'add' ? '新建线下活动' : '编辑线下活动'} goBack={this.handleGoBack} />
<div className='box'> <div className='box'>
<div className='show-tips'> <div className='show-tips'>
...@@ -723,7 +723,7 @@ class AddOfflineCourse extends React.Component { ...@@ -723,7 +723,7 @@ class AddOfflineCourse extends React.Component {
</span> </span>
<Input <Input
value={courseName} value={courseName}
placeholder='请输入线下的名称(40字以内)' placeholder='请输入线下活动的名称(40字以内)'
maxLength={40} maxLength={40}
style={{ width: 240 }} style={{ width: 240 }}
onChange={(e) => { onChange={(e) => {
...@@ -1075,7 +1075,7 @@ class AddOfflineCourse extends React.Component { ...@@ -1075,7 +1075,7 @@ class AddOfflineCourse extends React.Component {
<div className='content'> <div className='content'>
<Switch checked={whetherVisitorsJoin === 'NO' ? true : false} onChange={this.whetherVisitorsJoinChange} /> <Switch checked={whetherVisitorsJoin === 'NO' ? true : false} onChange={this.whetherVisitorsJoinChange} />
<div className='desc'> <div className='desc'>
{whetherVisitorsJoin === 'NO' ? '已开启,仅限绑定了手机号的学员报名线下课' : '已关闭,允许未绑定手机号的学员报名线下课'} {whetherVisitorsJoin === 'NO' ? '已开启,仅限绑定了手机号的学员报名线下活动' : '已关闭,允许未绑定手机号的学员报名线下活动'}
</div> </div>
</div> </div>
</div> </div>
......
...@@ -136,10 +136,10 @@ class OfflineCourseFilter extends React.Component { ...@@ -136,10 +136,10 @@ class OfflineCourseFilter extends React.Component {
<Row type='flex' justify='space-between' align='top'> <Row type='flex' justify='space-between' align='top'>
<div className='search-condition'> <div className='search-condition'>
<div className='search-condition__item'> <div className='search-condition__item'>
<span className='search-name'>线下名称:</span> <span className='search-name'>线下活动名称:</span>
<Search <Search
value={courseName} value={courseName}
placeholder='搜索线下名称' placeholder='搜索线下活动名称'
onChange={(e) => { onChange={(e) => {
this.handleChangeQuery('courseName', e.target.value) this.handleChangeQuery('courseName', e.target.value)
}} }}
......
...@@ -7,22 +7,22 @@ ...@@ -7,22 +7,22 @@
* @Copyright: 杭州杰竞科技有限公司 版权所有 * @Copyright: 杭州杰竞科技有限公司 版权所有
*/ */
import React from 'react'; import React from 'react'
import { Button } from 'antd'; import { Button } from 'antd'
import './OfflineCourseOpt.less'; import './OfflineCourseOpt.less'
export default function OfflineCourseOpt() { export default function OfflineCourseOpt() {
return ( return (
<div className="video-course-opt"> <div className='video-course-opt'>
<Button <Button
type="primary" type='primary'
onClick={() => { onClick={() => {
RCHistory.push('/create-offline-course?type=add'); RCHistory.push('/create-offline-course?type=add')
}} }}
className="mr12" className='mr12'>
>新建线下课</Button> 新建线下活动
</Button>
</div> </div>
); )
} }
import React from 'react'; import React from 'react'
import OfflineCourseFilter from './components/OfflineCourseFilter'; import OfflineCourseFilter from './components/OfflineCourseFilter'
import OfflineCourseOpt from './components/OfflineCourseOpt'; import OfflineCourseOpt from './components/OfflineCourseOpt'
import OfflineCourseList from './components/OfflineCourseList'; import OfflineCourseList from './components/OfflineCourseList'
import Service from '@/common/js/service'; import Service from '@/common/js/service'
import User from '@/common/js/user' import User from '@/common/js/user'
class OfflineCoursePage extends React.Component { class OfflineCoursePage extends React.Component {
constructor(props) { constructor(props) {
super(props); super(props)
this.state = { this.state = {
query: { query: {
size: 10, size: 10,
current: 1, current: 1,
storeId:User.getStoreId() storeId: User.getStoreId(),
}, },
dataSource: [], // 线下课列表 dataSource: [], // 线下课列表
totalCount: 0, // 线下课数据总条数 totalCount: 0, // 线下课数据总条数
...@@ -23,54 +22,47 @@ class OfflineCoursePage extends React.Component { ...@@ -23,54 +22,47 @@ class OfflineCoursePage extends React.Component {
componentWillMount() { componentWillMount() {
// 获取线下课列表 // 获取线下课列表
this.handleFetchScheduleList(); this.handleFetchScheduleList()
} }
// 获取线下课列表 // 获取线下课列表
handleFetchScheduleList = (_query = {}) => { handleFetchScheduleList = (_query = {}) => {
const query = { const query = {
...this.state.query, ...this.state.query,
..._query ..._query,
}; }
// 更新请求参数 // 更新请求参数
this.setState({ query }); this.setState({ query })
Service.Hades('public/hades/getOfflineCoursePage', query).then((res) => { Service.Hades('public/hades/getOfflineCoursePage', query).then((res) => {
const { result = {} } = res || {}; const { result = {} } = res || {}
const { records = [], total = 0 } = result; const { records = [], total = 0 } = result
this.setState({ this.setState({
dataSource: records, dataSource: records,
totalCount: Number(total) totalCount: Number(total),
}); })
}) })
} }
render() { render() {
const { dataSource, totalCount, query } = this.state; const { dataSource, totalCount, query } = this.state
return ( return (
<div className="page video-course-page"> <div className='page video-course-page'>
<div className="content-header">线下课</div> <div className='content-header'>线下活动</div>
<div className="box"> <div className='box'>
{/* 搜索模块 */} {/* 搜索模块 */}
<OfflineCourseFilter <OfflineCourseFilter onChange={this.handleFetchScheduleList} />
onChange={this.handleFetchScheduleList}
/>
{/* 操作模块 */} {/* 操作模块 */}
{window.ctx.xmState.storeUserPermissionList.includes('AddOfflineClass') && <OfflineCourseOpt />} {window.ctx.xmState.storeUserPermissionList.includes('AddOfflineClass') && <OfflineCourseOpt />}
{/* 线下课列表模块 */} {/* 线下课列表模块 */}
<OfflineCourseList <OfflineCourseList query={query} dataSource={dataSource} totalCount={totalCount} onChange={this.handleFetchScheduleList} />
query={query}
dataSource={dataSource}
totalCount={totalCount}
onChange={this.handleFetchScheduleList}
/>
</div> </div>
</div> </div>
) )
} }
} }
export default OfflineCoursePage; export default OfflineCoursePage
...@@ -757,7 +757,7 @@ class AddVideoCourse extends React.Component { ...@@ -757,7 +757,7 @@ class AddVideoCourse extends React.Component {
<Button>选择文件</Button> <Button>选择文件</Button>
</Dropdown> </Dropdown>
</div> </div>
<div className='course-ware--empty'>资料云盘中选择视频</div> <div className='course-ware--empty'>素材库中选择视频</div>
</div> </div>
<div className='tips'> <div className='tips'>
课节数量限制20个,文件规格说明 课节数量限制20个,文件规格说明
......
...@@ -5,57 +5,43 @@ ...@@ -5,57 +5,43 @@
* @Last Modified time: 2020-06-23 14:54:14 * @Last Modified time: 2020-06-23 14:54:14
* @Description: 网络磁盘(我的文件、公共文件、员工文件) * @Description: 网络磁盘(我的文件、公共文件、员工文件)
*/ */
import React from 'react'; import React from 'react'
import { DISK_MAP } from '@/common/constants/academic/lessonEnum'
import { DISK_MAP } from "@/common/constants/academic/lessonEnum";
function DiskList(props) { function DiskList(props) {
const { diskList, currentRootDisk } = props
const { diskList, currentRootDisk } = props;
return ( return (
<div className="disk-list__wrap"> <div className='disk-list__wrap'>
<div className="disk-list"> <div className='disk-list'>
{ {diskList.map((item) => {
diskList.map((item) => { const isActive = item.disk === currentRootDisk.disk
const isActive = item.disk === currentRootDisk.disk;
return ( return (
<div <div
key={item.disk} key={item.disk}
className={`item ${isActive ? 'active' : ''}`} className={`item ${isActive ? 'active' : ''}`}
onClick={() => { props.onChange(item)}} onClick={() => {
> props.onChange(item)
{ }}>
item.disk === 'MYSELF' && {item.disk === 'MYSELF' && <span className='icon iconfont'>&#xe7a5;</span>}
<span className="icon iconfont">&#xe7a5;</span> {item.disk === 'COMMON' && <span className='icon iconfont'>&#xe79d;</span>}
} {item.disk === 'EMPLOYEE' && <span className='icon iconfont'>&#xe7a3;</span>}
{ <span className='disk-name'>{item.folderName}</span>
item.disk === 'COMMON' &&
<span className="icon iconfont">&#xe79d;</span>
}
{
item.disk === 'EMPLOYEE' &&
<span className="icon iconfont">&#xe7a3;</span>
}
<span className="disk-name">{ item.folderName }</span>
</div> </div>
) )
}) })}
}
</div> </div>
<a <a
className="guide-href" className='guide-href'
href={window.NewVersion ? 'https://mp.weixin.qq.com/s/s0XN0Gk4Xul192SmTd6znw' : 'https://mp.weixin.qq.com/s/2EMWaaa3LQwkJd59bmy8pA'} href={window.NewVersion ? 'https://mp.weixin.qq.com/s/s0XN0Gk4Xul192SmTd6znw' : 'https://mp.weixin.qq.com/s/2EMWaaa3LQwkJd59bmy8pA'}
target="_blank" target='_blank'>
> 进一步了解素材库
进一步了解资料云盘
</a> </a>
</div> </div>
) )
}; }
export default DiskList; export default DiskList
\ No newline at end of file
import React from 'react'; import React from 'react'
import { withRouter } from 'react-router-dom'; import { withRouter } from 'react-router-dom'
import { Modal, Button } from 'antd'; import { Modal, Button } from 'antd'
import User from '@/common/js/user'; import User from '@/common/js/user'
import FolderManage from './components/FolderManage'; import FolderManage from './components/FolderManage'
import DiskList from './components/DiskList'; import DiskList from './components/DiskList'
import { DISK_MAP } from "@/common/constants/academic/lessonEnum"; import { DISK_MAP } from '@/common/constants/academic/lessonEnum'
import './index.less'; import './index.less'
const { teacherId, gmtCreate } = window.currentUserInstInfo; const { teacherId, gmtCreate } = window.currentUserInstInfo
// 判断是否是5.0或4.0T端 // 判断是否是5.0或4.0T端
const isTeacher = !!teacherId; const isTeacher = !!teacherId
// 判断是新用户还是老用户(gmtCreate小于上线日期的话就是老用户) // 判断是新用户还是老用户(gmtCreate小于上线日期的话就是老用户)
const onlineDate = +new Date('2020-07-17 00:00:00'); const onlineDate = +new Date('2020-07-17 00:00:00')
const isOldUser = gmtCreate <= onlineDate; const isOldUser = gmtCreate <= onlineDate
const defaultRootDisk = { const defaultRootDisk = {
folderName: '我的文件', folderName: '我的文件',
disk: 'MYSELF', disk: 'MYSELF',
uploadPower: false uploadPower: false,
} }
class PrepareLessonPage extends React.Component { class PrepareLessonPage extends React.Component {
constructor(props) { constructor(props) {
super(props); super(props)
const prepareLessonTips = localStorage.getItem('prepare_lesson_tips'); const prepareLessonTips = localStorage.getItem('prepare_lesson_tips')
this.state = { this.state = {
prepareLessonTips, prepareLessonTips,
diskList: [], // 可见磁盘目录 diskList: [], // 可见磁盘目录
currentRootDisk: defaultRootDisk currentRootDisk: defaultRootDisk,
} }
} }
componentWillMount() { componentWillMount() {
this.handleFetchDiskList(); this.handleFetchDiskList()
} }
handleFetchDiskList = async () => { handleFetchDiskList = async () => {
const res = await axios.Apollo('public/apollo/getUserDisk', {}); const res = await axios.Apollo('public/apollo/getUserDisk', {})
const { result = [] } = res; const { result = [] } = res
const diskList = result.map((item) => { const diskList = result.map((item) => {
return { return {
...item, ...item,
folderName: DISK_MAP[item.disk] folderName: DISK_MAP[item.disk],
} }
}); })
this.setState({ this.setState({
diskList, diskList,
currentRootDisk: diskList[0] || defaultRootDisk currentRootDisk: diskList[0] || defaultRootDisk,
}); })
} }
handleChangeDisk = (disk) => { handleChangeDisk = (disk) => {
this.setState({ this.setState({
currentRootDisk: disk currentRootDisk: disk,
}); })
} }
render() { render() {
const { currentRootDisk, prepareLessonTips, diskList } = this.state; const { currentRootDisk, prepareLessonTips, diskList } = this.state
return ( return (
<div className="prepare-lesson-page page"> <div className='prepare-lesson-page page'>
<div className="content-header">资料云盘</div> <div className='content-header'>素材库</div>
<div className="box content-body"> <div className='box content-body'>
<DiskList <DiskList diskList={diskList} currentRootDisk={currentRootDisk} onChange={this.handleChangeDisk} />
diskList={diskList} <FolderManage currentRootDisk={currentRootDisk} />
currentRootDisk={currentRootDisk}
onChange={this.handleChangeDisk}
/>
<FolderManage
currentRootDisk={currentRootDisk}
/>
</div> </div>
{/* 老用户显示弹窗提示 */} {/* 老用户显示弹窗提示 */}
<Modal <Modal
title="备课本改版" title='备课本改版'
visible={!prepareLessonTips && isOldUser} visible={!prepareLessonTips && isOldUser}
footer={null} footer={null}
width={680} width={680}
maskClosable={false} maskClosable={false}
closeIcon={<span className="icon iconfont modal-close-icon">&#xe6ef;</span>} closeIcon={<span className='icon iconfont modal-close-icon'>&#xe6ef;</span>}
className="prepare-lesson-upgrade-modal" className='prepare-lesson-upgrade-modal'
onCancel={() => { onCancel={() => {
this.setState({ this.setState({
prepareLessonTips: true prepareLessonTips: true,
}) })
}} }}>
> <div className='title'>“备课本” 升级为 “素材库” 了!</div>
<div className="title">“备课本” 升级为 “资料云盘” 了!</div> <div className='upgrade-list'>
<div className="upgrade-list"> <div className='upgrade-list__item'>
<div className="upgrade-list__item"> <img src='https://xiaomai-image.oss-cn-hangzhou.aliyuncs.com/1594780611301.png' alt='' />
<img src="https://xiaomai-image.oss-cn-hangzhou.aliyuncs.com/1594780611301.png" alt=""/> <div className='item-title'>存储更便捷</div>
<div className="item-title">存储更便捷</div> <div className='item-sub-title'>讲次关联模式升级文件夹模式,存储不再受讲次限制</div>
<div className="item-sub-title">讲次关联模式升级文件夹模式,存储不再受讲次限制</div>
</div> </div>
<div className="upgrade-list__item"> <div className='upgrade-list__item'>
<img src="https://xiaomai-image.oss-cn-hangzhou.aliyuncs.com/1594780629259.png" alt=""/> <img src='https://xiaomai-image.oss-cn-hangzhou.aliyuncs.com/1594780629259.png' alt='' />
<div className="item-title">结构更清晰</div> <div className='item-title'>结构更清晰</div>
<div className="item-sub-title">新增“我的文件”“公共文件”“员工文件”,满足机构存储需求</div> <div className='item-sub-title'>新增“我的文件”“公共文件”“员工文件”,满足机构存储需求</div>
</div> </div>
<div className="upgrade-list__item"> <div className='upgrade-list__item'>
<img src="https://xiaomai-image.oss-cn-hangzhou.aliyuncs.com/1594780641665.png" alt=""/> <img src='https://xiaomai-image.oss-cn-hangzhou.aliyuncs.com/1594780641665.png' alt='' />
<div className="item-title">同步更方便</div> <div className='item-title'>同步更方便</div>
<div className="item-sub-title">支持主管直接查看员工文件,优质资料一目了然</div> <div className='item-sub-title'>支持主管直接查看员工文件,优质资料一目了然</div>
</div> </div>
</div> </div>
<div <div
className="footer" className='footer'
onClick={() => { onClick={() => {
this.setState({ prepareLessonTips: true }); this.setState({ prepareLessonTips: true })
localStorage.setItem('prepare_lesson_tips', true); localStorage.setItem('prepare_lesson_tips', true)
}} }}>
>我知道了</div> 我知道了
</div>
</Modal> </Modal>
</div> </div>
) )
} }
} }
export default PrepareLessonPage; export default PrepareLessonPage
\ No newline at end of file
import React from 'react'; import React from 'react'
import Service from '@/common/js/service'; import Service from '@/common/js/service'
import { DISK_MAP } from '@/domains/resource-disk/constants'; import { DISK_MAP } from '@/domains/resource-disk/constants'
import FolderManage from './components/FolderManage'; import FolderManage from './components/FolderManage'
import DiskList from './components/DiskList'; import DiskList from './components/DiskList'
import './index.less'; import './index.less'
const defaultRootDisk = { const defaultRootDisk = {
folderName: '公共文件', folderName: '公共文件',
disk: 'COMMON', disk: 'COMMON',
uploadPower: true uploadPower: true,
} }
class PrepareLessonPage extends React.Component { class PrepareLessonPage extends React.Component {
constructor(props) { constructor(props) {
super(props); super(props)
this.state = { this.state = {
// 目前只有公共文件,先由前端定义 // 目前只有公共文件,先由前端定义
diskList: [ diskList: [
{ {
folderName: '公共文件', folderName: '公共文件',
disk: 'COMMON', disk: 'COMMON',
uploadPower: true uploadPower: true,
} },
], // 可见磁盘目录 ], // 可见磁盘目录
currentRootDisk: defaultRootDisk currentRootDisk: defaultRootDisk,
} }
} }
handleChangeDisk = (disk) => { handleChangeDisk = (disk) => {
this.setState({ this.setState({
currentRootDisk: disk currentRootDisk: disk,
}); })
} }
render() { render() {
const { currentRootDisk, diskList } = this.state; const { currentRootDisk, diskList } = this.state
console.log('currentRootDisk',currentRootDisk); console.log('currentRootDisk', currentRootDisk)
return ( return (
<div className="prepare-lesson-page page"> <div className='prepare-lesson-page page'>
<div className="content-header">资料云盘</div> <div className='content-header'>素材库</div>
<div className="box content-body"> <div className='box content-body'>
<DiskList <DiskList diskList={diskList} currentRootDisk={currentRootDisk} onChange={this.handleChangeDisk} />
diskList={diskList} <FolderManage currentRootDisk={currentRootDisk} />
currentRootDisk={currentRootDisk}
onChange={this.handleChangeDisk}
/>
<FolderManage
currentRootDisk={currentRootDisk}
/>
</div> </div>
</div> </div>
) )
} }
} }
export default PrepareLessonPage; export default PrepareLessonPage
\ No newline at end of file
...@@ -5,37 +5,37 @@ ...@@ -5,37 +5,37 @@
* @LastEditTime: 2021-05-13 16:39:51 * @LastEditTime: 2021-05-13 16:39:51
* @Description: 内容线路由配置 * @Description: 内容线路由配置
*/ */
import Home from '@/modules/home/Home'; import Home from '@/modules/home/Home'
import EmployeesManagePage from '@/modules/store-manage/EmployeesManagePage'; import EmployeesManagePage from '@/modules/store-manage/EmployeesManagePage'
import EmployeeManage from '@/modules/college-manage/EmployeeManage'; import EmployeeManage from '@/modules/college-manage/EmployeeManage'
import personalInfoPage from '@/modules/personalInfo'; import personalInfoPage from '@/modules/personalInfo'
import UserManagePage from '@/modules/store-manage/UserManagePage'; import UserManagePage from '@/modules/store-manage/UserManagePage'
import UserManage from '@/modules/college-manage/UserManagePage'; import UserManage from '@/modules/college-manage/UserManagePage'
import StoreDecorationPage from '@/modules/store-manage/StoreDecorationPage'; import StoreDecorationPage from '@/modules/store-manage/StoreDecorationPage'
import CourseCatalogPage from '@/modules/store-manage/CourseCatalogPage'; import CourseCatalogPage from '@/modules/store-manage/CourseCatalogPage'
import LiveCoursePage from '@/modules/course-manage/LiveCoursePage'; import LiveCoursePage from '@/modules/course-manage/LiveCoursePage'
import AddLivePage from '@/modules/course-manage/AddLive'; import AddLivePage from '@/modules/course-manage/AddLive'
import VideoCoursePage from '@/modules/course-manage/video-course'; import VideoCoursePage from '@/modules/course-manage/video-course'
import GraphicsCoursePage from '@/modules/course-manage/graphics-course'; import GraphicsCoursePage from '@/modules/course-manage/graphics-course'
import OfflineCoursePage from '@/modules/course-manage/offline-course'; import OfflineCoursePage from '@/modules/course-manage/offline-course'
import AddVideoCoursePage from '@/modules/course-manage/video-course/AddVideoCourse'; import AddVideoCoursePage from '@/modules/course-manage/video-course/AddVideoCourse'
import AddGraphicsCoursePage from '@/modules/course-manage/graphics-course/AddGraphicsCourse'; import AddGraphicsCoursePage from '@/modules/course-manage/graphics-course/AddGraphicsCourse'
import AddOfflineCoursePage from '@/modules/course-manage/offline-course/AddOfflineCourse'; import AddOfflineCoursePage from '@/modules/course-manage/offline-course/AddOfflineCourse'
// import DataList from '@/modules/course-manage/DataList/DataList'; // import DataList from '@/modules/course-manage/DataList/DataList';
// import ClassBook from '@/modules/resource-disk'; // import ClassBook from '@/modules/resource-disk';
import ResourceDisk from '@/modules/resource-disk'; import ResourceDisk from '@/modules/resource-disk'
import SwitchRoute from '@/modules/root/SwitchRoute'; import SwitchRoute from '@/modules/root/SwitchRoute'
import PlanPage from '@/modules/plan-manage/PlanPage'; import PlanPage from '@/modules/plan-manage/PlanPage'
import AddPlanPage from '@/modules/plan-manage/AddPlan'; import AddPlanPage from '@/modules/plan-manage/AddPlan'
import LearningDataPage from '@/modules/plan-manage/LearningData'; import LearningDataPage from '@/modules/plan-manage/LearningData'
import StoreInfoPage from '@/modules/store-manage/StoreInfo'; import StoreInfoPage from '@/modules/store-manage/StoreInfo'
import CourseCategoryManage from '@/modules/teach-tool/components/CourseCategoryManage'; import CourseCategoryManage from '@/modules/teach-tool/components/CourseCategoryManage'
import QuestionManageIndex from '@/modules/teach-tool/question-manage/Index'; import QuestionManageIndex from '@/modules/teach-tool/question-manage/Index'
import PaperManageIndex from '@/modules/teach-tool/paper-manage/Index'; import PaperManageIndex from '@/modules/teach-tool/paper-manage/Index'
import ExaminationManagerIndex from '@/modules/teach-tool/examination-manager/Index'; import ExaminationManagerIndex from '@/modules/teach-tool/examination-manager/Index'
import ExaminationManagerTestDetail from '@/modules/teach-tool/examination-manager/TestDetailPage'; import ExaminationManagerTestDetail from '@/modules/teach-tool/examination-manager/TestDetailPage'
import KnowledgeBase from '@/modules/knowledge-base/index'; import KnowledgeBase from '@/modules/knowledge-base/index'
import CollegeInfoPage from '@/modules/college-manage/CollegeInfoPage'; import CollegeInfoPage from '@/modules/college-manage/CollegeInfoPage'
const mainRoutes = [ const mainRoutes = [
{ {
...@@ -91,7 +91,7 @@ const mainRoutes = [ ...@@ -91,7 +91,7 @@ const mainRoutes = [
{ {
path: '/offline-course', path: '/offline-course',
component: OfflineCoursePage, component: OfflineCoursePage,
name: '线下', name: '线下活动',
}, },
{ {
path: '/create-live-course', path: '/create-live-course',
...@@ -117,12 +117,12 @@ const mainRoutes = [ ...@@ -117,12 +117,12 @@ const mainRoutes = [
{ {
path: '/create-offline-course', path: '/create-offline-course',
component: AddOfflineCoursePage, component: AddOfflineCoursePage,
name: '创建线下', name: '创建线下活动',
}, },
{ {
path: '/resource-disk', path: '/resource-disk',
component: ResourceDisk, component: ResourceDisk,
name: '资料云盘', name: '素材库',
}, },
{ {
path: '/question-manage-index', path: '/question-manage-index',
...@@ -180,6 +180,6 @@ const mainRoutes = [ ...@@ -180,6 +180,6 @@ const mainRoutes = [
component: LearningDataPage, component: LearningDataPage,
name: '学习数据', name: '学习数据',
}, },
]; ]
export default mainRoutes; export default mainRoutes
...@@ -28,8 +28,8 @@ export const menuList: any = [ ...@@ -28,8 +28,8 @@ export const menuList: any = [
link: '/live-course', link: '/live-course',
}, },
{ {
groupName: "线上课", groupName: '线上课',
groupCode: "CourseVideoClass", groupCode: 'CourseVideoClass',
link: '/video-course', link: '/video-course',
}, },
{ {
...@@ -38,7 +38,7 @@ export const menuList: any = [ ...@@ -38,7 +38,7 @@ export const menuList: any = [
link: '/graphics-course', link: '/graphics-course',
}, },
{ {
groupName: '线下', groupName: '线下活动',
groupCode: 'OfflineClass', groupCode: 'OfflineClass',
link: '/offline-course', link: '/offline-course',
}, },
...@@ -91,7 +91,7 @@ export const menuList: any = [ ...@@ -91,7 +91,7 @@ export const menuList: any = [
selectImg: 'https://image.xiaomaiketang.com/xm/hJKCfibC22.png', selectImg: 'https://image.xiaomaiketang.com/xm/hJKCfibC22.png',
}, },
{ {
groupName: '资料云盘', groupName: '素材库',
groupCode: 'CloudDisk', groupCode: 'CloudDisk',
icon: '&#xe8aa;', icon: '&#xe8aa;',
link: '/resource-disk', link: '/resource-disk',
...@@ -151,4 +151,4 @@ export const menuList: any = [ ...@@ -151,4 +151,4 @@ export const menuList: any = [
}, },
], ],
}, },
]; ]
import LiveCoursePage from "@/modules/course-manage/LiveCoursePage"; import LiveCoursePage from '@/modules/course-manage/LiveCoursePage'
import ResourceDisk from "@/modules/resource-disk"; import ResourceDisk from '@/modules/resource-disk'
const redirectRoutes = [ const redirectRoutes = [
{ {
path: "/redirect-to-live-course", path: '/redirect-to-live-course',
component: LiveCoursePage, component: LiveCoursePage,
name: "课程管理", name: '课程管理',
}, },
{ {
path: "/redirect-to-resource-disk", path: '/redirect-to-resource-disk',
component: ResourceDisk, component: ResourceDisk,
name: "资料云盘", name: '素材库',
}, },
]; ]
export default redirectRoutes; export default redirectRoutes
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