Commit 8c19c551 by zhangleyuan

feat:解决合并代码后的冲突

parents 1d38e65a 0f9cc576
...@@ -19,7 +19,7 @@ class ChooseMembersModal extends React.Component { ...@@ -19,7 +19,7 @@ class ChooseMembersModal extends React.Component {
this.state = { this.state = {
allUserList : [], // 所有成员列表 allUserList : [], // 所有成员列表
selectUserList: [], // 已选则成员 selectUserList: [], // 已选则成员
temporaryList: [], // 临时用户成员列表(搜索时使用) temporaryList: [], // 临时学员成员列表(搜索时使用)
instId : window.currentUserInstInfo.instId, // 机构Id instId : window.currentUserInstInfo.instId, // 机构Id
searchKey : null, // 搜索内容 searchKey : null, // 搜索内容
selectedRowKeys : [], // 勾选的成员 selectedRowKeys : [], // 勾选的成员
...@@ -229,7 +229,7 @@ class ChooseMembersModal extends React.Component { ...@@ -229,7 +229,7 @@ class ChooseMembersModal extends React.Component {
selectedColumnsRight = () => { selectedColumnsRight = () => {
const selectColumns = [ const selectColumns = [
{ {
title: '用户名', title: '学员名',
key: 'adminNameRight', key: 'adminNameRight',
dataIndex: 'adminName', dataIndex: 'adminName',
width: '70%', width: '70%',
......
/* /*
* @Author: 吴文洁 * @Author: 吴文洁
* @Date: 2020-08-31 09:34:25 * @Date: 2020-08-31 09:34:25
* @LastEditors: zhangleyuan * @LastEditors: Please set LastEditors
* @LastEditTime: 2021-04-13 17:56:34 * @LastEditTime: 2021-05-12 17:27:08
* @Description: * @Description:
* @Copyright: 杭州杰竞科技有限公司 版权所有 * @Copyright: 杭州杰竞科技有限公司 版权所有
*/ */
...@@ -101,7 +101,12 @@ class User { ...@@ -101,7 +101,12 @@ class User {
setCustomerStoreId(value:any) { setCustomerStoreId(value:any) {
return Storage.set(`${PREFIX}_customerStoreId`,value); return Storage.set(`${PREFIX}_customerStoreId`,value);
} }
setIdentifier(value:any){
return Storage.set(`${PREFIX}_identifier`,value);
}
getIdentifier(){
return Storage.get(`${PREFIX}_identifier`);
}
clearUserInfo(){ clearUserInfo(){
Storage.remove(`${USER_PREFIX}_token`); Storage.remove(`${USER_PREFIX}_token`);
Storage.remove(`${USER_PREFIX}_userId`); Storage.remove(`${USER_PREFIX}_userId`);
......
/* /*
* @Author: wufan * @Author: wufan
* @Date: 2020-11-25 18:25:02 * @Date: 2020-11-25 18:25:02
* @LastEditors: zangsuyun * @LastEditors: wufan
* @LastEditTime: 2021-03-22 13:58:04 * @LastEditTime: 2021-05-13 16:25:01
* @Description: Description * @Description: Description
* @@Copyrigh: © 2020 杭州杰竞科技有限公司 版权所有 * @@Copyrigh: © 2020 杭州杰竞科技有限公司 版权所有
*/ */
...@@ -23,7 +23,7 @@ export default class courseService { ...@@ -23,7 +23,7 @@ export default class courseService {
return getQrcode(params); return getQrcode(params);
} }
// 获取用户上课数据 // 获取学员上课数据
static fetchUserData(params: any) { static fetchUserData(params: any) {
return fetchUserData(params); return fetchUserData(params);
} }
......
/* /*
* @Author: wufan * @Author: wufan
* @Date: 2020-11-30 10:47:38 * @Date: 2020-11-30 10:47:38
* @LastEditors: zhangleyuan * @LastEditors: wufan
* @LastEditTime: 2021-02-02 10:22:34 * @LastEditTime: 2021-05-13 17:45:53
* @Description: 用户管理页面 * @Description: 学员管理页面
* @@Copyrigh: © 2020 杭州杰竞科技有限公司 版权所有 * @@Copyrigh: © 2020 杭州杰竞科技有限公司 版权所有
*/ */
...@@ -60,7 +60,7 @@ function UserManagePage() { ...@@ -60,7 +60,7 @@ function UserManagePage() {
function parseColumn() { function parseColumn() {
const list = [ const list = [
{ {
title: "用户姓名", title: "学员姓名",
dataIndex: "nickName", dataIndex: "nickName",
render: (val: string, item: any) => { render: (val: string, item: any) => {
return ( return (
...@@ -117,16 +117,16 @@ function UserManagePage() { ...@@ -117,16 +117,16 @@ function UserManagePage() {
return ( return (
<div className=" page user-manage-page"> <div className=" page user-manage-page">
<div className="content-header">用户管理</div> <div className="content-header">学员管理</div>
<div className="box"> <div className="box">
<div className="box-header"> <div className="box-header">
<div className="header-item"> <div className="header-item">
<span className="item-name">搜索用户</span> <span className="item-name">搜索学员</span>
<Search <Search
style={{ style={{
width: 300, width: 300,
}} }}
placeholder="搜索用户姓名/手机号" placeholder="搜索学员姓名/手机号"
onSearch={(value) => { onSearch={(value) => {
const _query = { ...query }; const _query = { ...query };
if (value) { if (value) {
...@@ -149,7 +149,7 @@ function UserManagePage() { ...@@ -149,7 +149,7 @@ function UserManagePage() {
</div> </div>
<div className="header-item"> <div className="header-item">
<span className="item-name">用户来源:</span> <span className="item-name">学员来源:</span>
<Select <Select
style={{ width: '100%' }} style={{ width: '100%' }}
placeholder="请选择" placeholder="请选择"
...@@ -195,7 +195,7 @@ function UserManagePage() { ...@@ -195,7 +195,7 @@ function UserManagePage() {
onClick={() => { onClick={() => {
handleToAddEmployee(); handleToAddEmployee();
}} }}
>添加用户</Button> >添加学员</Button>
} }
<div className="box-body"> <div className="box-body">
<Table <Table
......
...@@ -21,7 +21,7 @@ class ChooseMembersModal extends React.Component { ...@@ -21,7 +21,7 @@ class ChooseMembersModal extends React.Component {
isOpen: props.isOpen, isOpen: props.isOpen,
allUserList : [], // 所有成员列表 allUserList : [], // 所有成员列表
selectUserList: [], // 已选则成员 selectUserList: [], // 已选则成员
temporaryList: [], // 临时用户成员列表(搜索时使用) temporaryList: [], // 临时学员成员列表(搜索时使用)
instId : window.currentUserInstInfo.instId, // 机构Id instId : window.currentUserInstInfo.instId, // 机构Id
searchKey : null, // 搜索内容 searchKey : null, // 搜索内容
selectedRowKeys : [], // 勾选的成员 selectedRowKeys : [], // 勾选的成员
...@@ -230,7 +230,7 @@ class ChooseMembersModal extends React.Component { ...@@ -230,7 +230,7 @@ class ChooseMembersModal extends React.Component {
selectedColumnsRight = () => { selectedColumnsRight = () => {
const selectColumns = [ const selectColumns = [
{ {
title: '用户名', title: '学员名',
key: 'nameRight', key: 'nameRight',
dataIndex: 'name', dataIndex: 'name',
width: '70%', width: '70%',
...@@ -274,7 +274,7 @@ class ChooseMembersModal extends React.Component { ...@@ -274,7 +274,7 @@ class ChooseMembersModal extends React.Component {
isOpen, isOpen,
selectObject, selectObject,
} = this.state; } = this.state;
const title = type === 'USER' ? '添加员工' : '添加用户'; const title = type === 'USER' ? '添加员工' : '添加学员';
return ( return (
<div> <div>
{/* 添加学员页面 */} {/* 添加学员页面 */}
...@@ -284,7 +284,7 @@ class ChooseMembersModal extends React.Component { ...@@ -284,7 +284,7 @@ class ChooseMembersModal extends React.Component {
onCancel={() => this.handleClose()} onCancel={() => this.handleClose()}
onOk={() => { onOk={() => {
if (_.isEmpty(selectUserList)) { if (_.isEmpty(selectUserList)) {
message.warning(type === 'USER' ? '请选择员工' : '请选择用户') message.warning(type === 'USER' ? '请选择员工' : '请选择学员')
return null; return null;
} }
type === 'USER' ? this.setState({ openSetModal: true, isOpen: false }) : this.addCustomer(); type === 'USER' ? this.setState({ openSetModal: true, isOpen: false }) : this.addCustomer();
...@@ -341,7 +341,7 @@ class ChooseMembersModal extends React.Component { ...@@ -341,7 +341,7 @@ class ChooseMembersModal extends React.Component {
</div> </div>
{/* 已选择的成员列表 */} {/* 已选择的成员列表 */}
<div className='container-right'> <div className='container-right'>
<span className='span-left'>已选择{type === 'USER' ? '员工' : '用户'}</span> <span className='span-left'>已选择{type === 'USER' ? '员工' : '学员'}</span>
<div className='span-right' onClick={() => this.clearAllUser()}> <div className='span-right' onClick={() => this.clearAllUser()}>
<span className={ (selectUserList.length > 0) ? 'span-right-l' : null }>清空</span> <span className={ (selectUserList.length > 0) ? 'span-right-l' : null }>清空</span>
</div> </div>
......
...@@ -88,7 +88,7 @@ export default class SetEmployeeModal extends React.Component { ...@@ -88,7 +88,7 @@ export default class SetEmployeeModal extends React.Component {
<Radio value={"Cloud_Operator"} className="mt-4"> <Radio value={"Cloud_Operator"} className="mt-4">
<span style={{ color: "#333" }}>运营师</span> <span style={{ color: "#333" }}>运营师</span>
<p className="radio-tip"> <p className="radio-tip">
仅可查看/转发培训计划内容,并查看负责的用户学习进度 仅可查看/转发培训计划内容,并查看负责的学员学习进度
</p> </p>
</Radio> </Radio>
<Radio value={"Cloud_Lecturer"} className="mt-4"> <Radio value={"Cloud_Lecturer"} className="mt-4">
......
...@@ -106,7 +106,7 @@ class DataList extends React.Component { ...@@ -106,7 +106,7 @@ class DataList extends React.Component {
getStudentColumns() { getStudentColumns() {
const columns = [ const columns = [
{ {
title: "用户姓名", title: "学员姓名",
dataIndex: "userName", dataIndex: "userName",
}, },
{ {
...@@ -304,9 +304,9 @@ class DataList extends React.Component { ...@@ -304,9 +304,9 @@ class DataList extends React.Component {
</div> </div>
</div> </div>
{/* 用户上课数据 */} {/* 学员上课数据 */}
<div className="courseData-student"> <div className="courseData-student">
<p className="title">用户上课数据</p> <p className="title">学员上课数据</p>
<div className="filter-wrap"> <div className="filter-wrap">
<div className="filter"> <div className="filter">
<Button <Button
......
...@@ -56,7 +56,7 @@ class PlaybackData extends React.Component { ...@@ -56,7 +56,7 @@ class PlaybackData extends React.Component {
getPlaybackColumns() { getPlaybackColumns() {
const columns = [ const columns = [
{ {
title: "观看用户", title: "观看学员",
dataIndex: "userName", dataIndex: "userName",
}, },
{ {
......
...@@ -132,8 +132,8 @@ class AddLiveIntro extends React.Component { ...@@ -132,8 +132,8 @@ class AddLiveIntro extends React.Component {
</div> </div>
<div> <div>
<div class="instro-text"> <div class="instro-text">
<div>开启:允许未绑定手机号的用户进入直播间观看直播</div> <div>开启:允许未绑定手机号的学员进入直播间观看直播</div>
<div>关闭:仅限绑定了手机号的用户可以进入直播间观看直播</div> <div>关闭:仅限绑定了手机号的学员可以进入直播间观看直播</div>
</div> </div>
</div> </div>
</div> </div>
......
...@@ -262,7 +262,7 @@ class LiveCourseList extends React.Component { ...@@ -262,7 +262,7 @@ class LiveCourseList extends React.Component {
{ {
title: <span> title: <span>
<span>学院展示</span> <span>学院展示</span>
<Tooltip title={<div>开启后,用户可在学院内查看到此课程。若课程“未成功开课”,则系统会自动“关闭”学院展示。<br/>关闭后,学院内不再展示此课程,但用户仍可通过分享的海报/链接查看此课程。</div>}><i className="icon iconfont" style={{ marginLeft: '5px',cursor:'pointer',color:'#bfbfbf',fontSize:'14px'}}>&#xe61d;</i></Tooltip> <Tooltip title={<div>开启后,学员可在学院内查看到此课程。若课程“未成功开课”,则系统会自动“关闭”学院展示。<br/>关闭后,学院内不再展示此课程,但学员仍可通过分享的海报/链接查看此课程。</div>}><i className="icon iconfont" style={{ marginLeft: '5px',cursor:'pointer',color:'#bfbfbf',fontSize:'14px'}}>&#xe61d;</i></Tooltip>
</span>, </span>,
width: "9%", width: "9%",
key: "shelfState", key: "shelfState",
...@@ -580,7 +580,7 @@ class LiveCourseList extends React.Component { ...@@ -580,7 +580,7 @@ class LiveCourseList extends React.Component {
handleDelete = (record)=>{ handleDelete = (record)=>{
return confirm({ return confirm({
title: '你确定要删除直播课?', title: '你确定要删除直播课?',
content: '删除后,用户将不能观看直播课/回放', content: '删除后,学员将不能观看直播课/回放',
icon: <span className="icon iconfont default-confirm-icon">&#xe839; </span>, icon: <span className="icon iconfont default-confirm-icon">&#xe839; </span>,
okText: '删除', okText: '删除',
okType: 'danger', okType: 'danger',
...@@ -658,7 +658,7 @@ class LiveCourseList extends React.Component { ...@@ -658,7 +658,7 @@ class LiveCourseList extends React.Component {
} }
getDownloadVersion() { getDownloadVersion() {
const isMac = /macintosh|mac os x/i.test(navigator.userAgent); const isMac = /macintosh|mac os x/i.test(navigator.userAgent);
// 判断用户系统 // 判断学员系统
let platform; let platform;
if(!isMac){ if(!isMac){
platform = 1 platform = 1
......
...@@ -28,7 +28,7 @@ class LiveCourseOpt extends React.Component { ...@@ -28,7 +28,7 @@ class LiveCourseOpt extends React.Component {
// 下载直播客户端 // 下载直播客户端
handleDownloadClient = () => { handleDownloadClient = () => {
const { isMac } = this.state; const { isMac } = this.state;
// 判断用户系统 // 判断学员系统
let platform; let platform;
if(!isMac){ if(!isMac){
platform = 1 platform = 1
......
...@@ -118,8 +118,8 @@ class AddGraphicsIntro extends React.Component { ...@@ -118,8 +118,8 @@ class AddGraphicsIntro extends React.Component {
</div> </div>
<div> <div>
<div className="desc"> <div className="desc">
<div>开启:允许未绑定手机号的用户观看</div> <div>开启:允许未绑定手机号的学员观看</div>
<div>关闭:仅限绑定了手机号的用户可以进入观看图文课</div> <div>关闭:仅限绑定了手机号的学员可以进入观看图文课</div>
</div> </div>
</div> </div>
</div> </div>
...@@ -133,8 +133,8 @@ class AddGraphicsIntro extends React.Component { ...@@ -133,8 +133,8 @@ class AddGraphicsIntro extends React.Component {
</Col> </Col>
<Col span={21}> <Col span={21}>
<div className="desc"> <div className="desc">
<div>开启:图文课将在用户学院图文课列表中展示</div> <div>开启:图文课将在学员学院图文课列表中展示</div>
<div>关闭:图文课将在用户学院图文课列表中隐藏</div> <div>关闭:图文课将在学员学院图文课列表中隐藏</div>
</div> </div>
</Col> </Col>
</Row> </Row>
......
/* /*
* @Author: 吴文洁 * @Author: 吴文洁
* @Date: 2020-08-05 10:12:45 * @Date: 2020-08-05 10:12:45
* @LastEditors: zhangleyuan * @LastEditors: wufan
* @LastEditTime: 2021-03-27 16:24:47 * @LastEditTime: 2021-05-13 16:32:38
* @Description: 视频课-列表模块 * @Description: 视频课-列表模块
* @Copyright: 杭州杰竞科技有限公司 版权所有 * @Copyright: 杭州杰竞科技有限公司 版权所有
*/ */
...@@ -137,7 +137,7 @@ class GraphicsCourseList extends React.Component { ...@@ -137,7 +137,7 @@ class GraphicsCourseList extends React.Component {
{ {
title: <span> title: <span>
<span>学院展示</span> <span>学院展示</span>
<Tooltip title={<div>开启后,用户可在学院内查看到此课程。若课程“未成功开课”,则系统会自动“关闭”学院展示。<br/>关闭后,学院内不再展示此课程,但用户仍可通过分享的海报/链接查看此课程。</div>}><i className="icon iconfont" style={{ marginLeft: '5px',cursor:'pointer',color:'#bfbfbf',fontSize:'14px'}}>&#xe61d;</i></Tooltip> <Tooltip title={<div>开启后,学员可在学院内查看到此课程。若课程“未成功开课”,则系统会自动“关闭”学院展示。<br/>关闭后,学院内不再展示此课程,但学员仍可通过分享的海报/链接查看此课程。</div>}><i className="icon iconfont" style={{ marginLeft: '5px',cursor:'pointer',color:'#bfbfbf',fontSize:'14px'}}>&#xe61d;</i></Tooltip>
</span>, </span>,
width: 120, width: 120,
dataIndex: "courseware", dataIndex: "courseware",
...@@ -148,7 +148,7 @@ class GraphicsCourseList extends React.Component { ...@@ -148,7 +148,7 @@ class GraphicsCourseList extends React.Component {
}, },
}, },
{ {
title: "观看用户数", title: "观看学员数",
width: 110, width: 110,
key: "watchUserCount", key: "watchUserCount",
dataIndex: "watchUserCount", dataIndex: "watchUserCount",
......
...@@ -84,7 +84,7 @@ class WatchDataModal extends React.Component { ...@@ -84,7 +84,7 @@ class WatchDataModal extends React.Component {
parseColumns = () => { parseColumns = () => {
const columns = [ const columns = [
{ {
title: '观看用户', title: '观看学员',
key: 'name', key: 'name',
dataIndex: 'name' dataIndex: 'name'
}, },
...@@ -141,7 +141,7 @@ class WatchDataModal extends React.Component { ...@@ -141,7 +141,7 @@ class WatchDataModal extends React.Component {
closeIcon={<span className="icon iconfont modal-close-icon">&#xe6ef;</span>} closeIcon={<span className="icon iconfont modal-close-icon">&#xe6ef;</span>}
> >
<div className="search-container"> <div className="search-container">
<Search placeholder="搜索用户姓名/手机号" style={{ width: 200 }} onChange={(e) => { this.handleChangNickname(e.target.value)}} onSearch={ () => { this.handleFetchDataList()}} enterButton={<span className="icon iconfont">&#xe832;</span>}/> <Search placeholder="搜索学员姓名/手机号" style={{ width: 200 }} onChange={(e) => { this.handleChangNickname(e.target.value)}} onSearch={ () => { this.handleFetchDataList()}} enterButton={<span className="icon iconfont">&#xe832;</span>}/>
</div> </div>
<div> <div>
<Table <Table
......
...@@ -197,10 +197,10 @@ class ShareLiveModal extends React.Component { ...@@ -197,10 +197,10 @@ class ShareLiveModal extends React.Component {
<div className="share-poster right__item"> <div className="share-poster right__item">
<div className="title">① 海报分享</div> <div className="title">① 海报分享</div>
{ type === "liveClass" && { type === "liveClass" &&
<div className="sub-title">用户可通过微信扫描海报二维码,观看{title}</div> <div className="sub-title">学员可通过微信扫描海报二维码,观看{title}</div>
} }
{ type === "videoClass" && { type === "videoClass" &&
<div className="sub-title">用户可通过微信识别二维码,报名观看{title}</div> <div className="sub-title">学员可通过微信识别二维码,报名观看{title}</div>
} }
<div className="content" onClick={this.handleDownloadPoster}>下载海报</div> <div className="content" onClick={this.handleDownloadPoster}>下载海报</div>
...@@ -209,10 +209,10 @@ class ShareLiveModal extends React.Component { ...@@ -209,10 +209,10 @@ class ShareLiveModal extends React.Component {
<div className="share-url right__item"> <div className="share-url right__item">
<div className="title">② 链接分享</div> <div className="title">② 链接分享</div>
{ type === "liveClass" && { type === "liveClass" &&
<div className="sub-title">用户可通过微信打开以下链接,观看{title}</div> <div className="sub-title">学员可通过微信打开以下链接,观看{title}</div>
} }
{ type === "videoClass" && { type === "videoClass" &&
<div className="sub-title">用户可通过打开链接,报名观看{title}</div> <div className="sub-title">学员可通过打开链接,报名观看{title}</div>
} }
<div className="content url-content"> <div className="content url-content">
<div className="share-url" id="shareUrl">{shareUrl}</div> <div className="share-url" id="shareUrl">{shareUrl}</div>
......
...@@ -121,8 +121,8 @@ class AddVideoIntro extends React.Component { ...@@ -121,8 +121,8 @@ class AddVideoIntro extends React.Component {
</div> </div>
<div> <div>
<div className="desc"> <div className="desc">
<div>开启:允许未绑定手机号的用户观看</div> <div>开启:允许未绑定手机号的学员观看</div>
<div>关闭:仅限绑定了手机号的用户可以进入观看视频</div> <div>关闭:仅限绑定了手机号的学员可以进入观看视频</div>
</div> </div>
</div> </div>
</div> </div>
...@@ -136,8 +136,8 @@ class AddVideoIntro extends React.Component { ...@@ -136,8 +136,8 @@ class AddVideoIntro extends React.Component {
</Col> </Col>
<Col span={21}> <Col span={21}>
<div className="desc"> <div className="desc">
<div>开启:此视频将在用户学院的视频列表中出现</div> <div>开启:此视频将在学员学院的视频列表中出现</div>
<div>关闭:此视频将在用户学院的视频列表中隐藏</div> <div>关闭:此视频将在学员学院的视频列表中隐藏</div>
</div> </div>
</Col> </Col>
</Row> </Row>
......
/* /*
* @Author: 吴文洁 * @Author: 吴文洁
* @Date: 2020-08-05 10:12:45 * @Date: 2020-08-05 10:12:45
* @LastEditors: yuananting * @LastEditors: wufan
* @LastEditTime: 2021-03-24 19:34:48 * @LastEditTime: 2021-05-13 16:34:11
* @Description: 视频课-列表模块 * @Description: 视频课-列表模块
* @Copyright: 杭州杰竞科技有限公司 版权所有 * @Copyright: 杭州杰竞科技有限公司 版权所有
*/ */
...@@ -126,7 +126,7 @@ class VideoCourseList extends React.Component { ...@@ -126,7 +126,7 @@ class VideoCourseList extends React.Component {
{ {
title: <span> title: <span>
<span>学院展示</span> <span>学院展示</span>
<Tooltip title={<div>开启后,用户可在学院内查看到此课程。若课程“未成功开课”,则系统会自动“关闭”学院展示。<br/>关闭后,学院内不再展示此课程,但用户仍可通过分享的海报/链接查看此课程。</div>}><i className="icon iconfont" style={{ marginLeft: '5px',cursor:'pointer',color:'#bfbfbf',fontSize:'14px'}}>&#xe61d;</i></Tooltip> <Tooltip title={<div>开启后,学员可在学院内查看到此课程。若课程“未成功开课”,则系统会自动“关闭”学院展示。<br/>关闭后,学院内不再展示此课程,但学员仍可通过分享的海报/链接查看此课程。</div>}><i className="icon iconfont" style={{ marginLeft: '5px',cursor:'pointer',color:'#bfbfbf',fontSize:'14px'}}>&#xe61d;</i></Tooltip>
</span>, </span>,
width: 120, width: 120,
dataIndex: "courseware", dataIndex: "courseware",
...@@ -137,7 +137,7 @@ class VideoCourseList extends React.Component { ...@@ -137,7 +137,7 @@ class VideoCourseList extends React.Component {
}, },
}, },
{ {
title: "观看用户数", title: "观看学员数",
width: 110, width: 110,
key: "watchUserCount", key: "watchUserCount",
dataIndex: "watchUserCount", dataIndex: "watchUserCount",
......
...@@ -84,7 +84,7 @@ class WatchDataModal extends React.Component { ...@@ -84,7 +84,7 @@ class WatchDataModal extends React.Component {
parseColumns = () => { parseColumns = () => {
const columns = [ const columns = [
{ {
title: '观看用户', title: '观看学员',
key: 'name', key: 'name',
dataIndex: 'name' dataIndex: 'name'
}, },
...@@ -133,7 +133,7 @@ class WatchDataModal extends React.Component { ...@@ -133,7 +133,7 @@ class WatchDataModal extends React.Component {
closeIcon={<span className="icon iconfont modal-close-icon">&#xe6ef;</span>} closeIcon={<span className="icon iconfont modal-close-icon">&#xe6ef;</span>}
> >
<div className="search-container"> <div className="search-container">
<Search placeholder="搜索用户姓名/手机号" style={{ width: 200 }} onChange={(e) => { this.handleChangNickname(e.target.value)}} onSearch={ () => { this.handleFetchDataList()}} enterButton={<span className="icon iconfont">&#xe832;</span>}/> <Search placeholder="搜索学员姓名/手机号" style={{ width: 200 }} onChange={(e) => { this.handleChangNickname(e.target.value)}} onSearch={ () => { this.handleFetchDataList()}} enterButton={<span className="icon iconfont">&#xe832;</span>}/>
</div> </div>
<div> <div>
<Table <Table
......
...@@ -266,7 +266,7 @@ class Home extends React.Component { ...@@ -266,7 +266,7 @@ class Home extends React.Component {
<div className="data-item"> <div className="data-item">
<div className="header"> <div className="header">
<img className="header-icon" src="https://image.xiaomaiketang.com/xm/wAaFtjeRsM.png" /> <img className="header-icon" src="https://image.xiaomaiketang.com/xm/wAaFtjeRsM.png" />
<span className="header-word">用户总数 (人)</span> <span className="header-word">学员总数 (人)</span>
</div> </div>
<div className="data-number">{totalCustomerNum}</div> <div className="data-number">{totalCustomerNum}</div>
<div className="data-footer"> <div className="data-footer">
......
...@@ -2,8 +2,8 @@ ...@@ -2,8 +2,8 @@
* @Description: * @Description:
* @Author: zangsuyun * @Author: zangsuyun
* @Date: 2021-03-15 16:51:40 * @Date: 2021-03-15 16:51:40
* @LastEditors: zangsuyun * @LastEditors: wufan
* @LastEditTime: 2021-04-10 16:13:07 * @LastEditTime: 2021-05-13 16:34:39
* @Copyright: © 2020 杭州杰竞科技有限公司 版权所有 * @Copyright: © 2020 杭州杰竞科技有限公司 版权所有
*/ */
...@@ -116,7 +116,7 @@ class CourseData extends React.Component { ...@@ -116,7 +116,7 @@ class CourseData extends React.Component {
getStudentColumns() { getStudentColumns() {
const columns = [ const columns = [
{ {
title: "用户姓名", title: "学员姓名",
dataIndex: "userName", dataIndex: "userName",
}, },
{ {
...@@ -314,9 +314,9 @@ class CourseData extends React.Component { ...@@ -314,9 +314,9 @@ class CourseData extends React.Component {
</div> </div>
</div> </div>
{/* 用户上课数据 */} {/* 学员上课数据 */}
<div className="courseData-student"> <div className="courseData-student">
<p className="title">用户上课数据</p> <p className="title">学员上课数据</p>
<div className="filter-wrap"> <div className="filter-wrap">
<div className="filter"> <div className="filter">
<Button <Button
......
...@@ -2,8 +2,8 @@ ...@@ -2,8 +2,8 @@
* @Description: * @Description:
* @Author: zangsuyun * @Author: zangsuyun
* @Date: 2021-03-12 14:49:40 * @Date: 2021-03-12 14:49:40
* @LastEditors: zangsuyun * @LastEditors: wufan
* @LastEditTime: 2021-04-12 10:31:53 * @LastEditTime: 2021-05-13 16:35:41
* @Copyright: © 2020 杭州杰竞科技有限公司 版权所有 * @Copyright: © 2020 杭州杰竞科技有限公司 版权所有
*/ */
...@@ -251,7 +251,7 @@ class KnowledgeBaseList extends React.Component { ...@@ -251,7 +251,7 @@ class KnowledgeBaseList extends React.Component {
{record.hideToUser && ( {record.hideToUser && (
<Tooltip <Tooltip
title={ title={
<div>课程未成功开课,已在用户知识列表中隐藏</div> <div>课程未成功开课,已在学员知识列表中隐藏</div>
} }
> >
<i <i
...@@ -423,7 +423,7 @@ class KnowledgeBaseList extends React.Component { ...@@ -423,7 +423,7 @@ class KnowledgeBaseList extends React.Component {
}, },
}, },
{ {
title: "观看用户数", title: "观看学员数",
key: "watchUserCount", key: "watchUserCount",
dataIndex: "watchUserCount", dataIndex: "watchUserCount",
align:'right', align:'right',
......
...@@ -56,7 +56,7 @@ class PlaybackData extends React.Component { ...@@ -56,7 +56,7 @@ class PlaybackData extends React.Component {
getPlaybackColumns() { getPlaybackColumns() {
const columns = [ const columns = [
{ {
title: "观看用户", title: "观看学员",
dataIndex: "userName", dataIndex: "userName",
}, },
{ {
......
...@@ -2,8 +2,8 @@ ...@@ -2,8 +2,8 @@
* @Description: * @Description:
* @Author: zangsuyun * @Author: zangsuyun
* @Date: 2021-03-16 10:18:31 * @Date: 2021-03-16 10:18:31
* @LastEditors: zangsuyun * @LastEditors: wufan
* @LastEditTime: 2021-03-30 10:17:59 * @LastEditTime: 2021-05-13 16:36:00
* @Copyright: © 2020 杭州杰竞科技有限公司 版权所有 * @Copyright: © 2020 杭州杰竞科技有限公司 版权所有
*/ */
...@@ -101,7 +101,7 @@ class WatchDataModal extends React.Component { ...@@ -101,7 +101,7 @@ class WatchDataModal extends React.Component {
const { type } = this.props; const { type } = this.props;
const columns = [ const columns = [
{ {
title: "观看用户", title: "观看学员",
key: "name", key: "name",
dataIndex: "name", dataIndex: "name",
}, },
...@@ -195,7 +195,7 @@ class WatchDataModal extends React.Component { ...@@ -195,7 +195,7 @@ class WatchDataModal extends React.Component {
<div className="watch-data"> <div className="watch-data">
<div className="search-container"> <div className="search-container">
<Search <Search
placeholder="搜索用户姓名/手机号" placeholder="搜索学员姓名/手机号"
style={{ width: 200 }} style={{ width: 200 }}
onChange={(e) => { onChange={(e) => {
this.handleChangNickname(e.target.value); this.handleChangNickname(e.target.value);
......
...@@ -102,7 +102,7 @@ class LearningData extends React.Component { ...@@ -102,7 +102,7 @@ class LearningData extends React.Component {
<Tabs.TabPane tab="员工分享数据" key="employeeShareData" forceRender="true"> <Tabs.TabPane tab="员工分享数据" key="employeeShareData" forceRender="true">
<EmployeeShareData/> <EmployeeShareData/>
</Tabs.TabPane> </Tabs.TabPane>
<Tabs.TabPane tab="用户学习数据" key="userLearningData" forceRender="true"> <Tabs.TabPane tab="学员学习数据" key="userLearningData" forceRender="true">
<UserLearningData/> <UserLearningData/>
</Tabs.TabPane> </Tabs.TabPane>
</Tabs>) </Tabs>)
......
/* /*
* @Author: zhangleyuan * @Author: zhangleyuan
* @Date: 2021-02-20 16:45:51 * @Date: 2021-02-20 16:45:51
* @LastEditors: zhangleyuan * @LastEditors: wufan
* @LastEditTime: 2021-03-27 11:20:27 * @LastEditTime: 2021-05-13 16:36:26
* @Description: 描述一下 * @Description: 描述一下
* @@Copyrigh: © 2020 杭州杰竞科技有限公司 版权所有 * @@Copyrigh: © 2020 杭州杰竞科技有限公司 版权所有
*/ */
...@@ -267,8 +267,8 @@ class BasicInfo extends React.Component{ ...@@ -267,8 +267,8 @@ class BasicInfo extends React.Component{
</div> </div>
<div> <div>
<div className="instro-text"> <div className="instro-text">
<div>开启:此培训计划可以分享给用户进行学习</div> <div>开启:此培训计划可以分享给学员进行学习</div>
<div>关闭:此培训计划暂不可分享给用户进行学习,后续可开启</div> <div>关闭:此培训计划暂不可分享给学员进行学习,后续可开启</div>
</div> </div>
</div> </div>
</div> </div>
...@@ -313,7 +313,7 @@ class BasicInfo extends React.Component{ ...@@ -313,7 +313,7 @@ class BasicInfo extends React.Component{
<div> <div>
<div className="live-standard-info"> <div className="live-standard-info">
<span className="icon iconfont">&#xe865;</span> <span className="icon iconfont">&#xe865;</span>
<span className="instro">直播课单个课程,用户学习进度达到 <span className="instro">直播课单个课程,学员学习进度达到
<Input <Input
width="40" width="40"
value={percentCompleteLive} value={percentCompleteLive}
...@@ -326,7 +326,7 @@ class BasicInfo extends React.Component{ ...@@ -326,7 +326,7 @@ class BasicInfo extends React.Component{
</div> </div>
<div className="live-standard-info"> <div className="live-standard-info">
<span className="icon iconfont">&#xe864;</span> <span className="icon iconfont">&#xe864;</span>
<span className="instro">视频课单个课程,用户学习进度达到 <span className="instro">视频课单个课程,学员学习进度达到
<Input <Input
width="40" width="40"
value={percentCompleteVideo} value={percentCompleteVideo}
...@@ -339,7 +339,7 @@ class BasicInfo extends React.Component{ ...@@ -339,7 +339,7 @@ class BasicInfo extends React.Component{
</div> </div>
<div className="live-standard-info"> <div className="live-standard-info">
<span className="icon iconfont">&#xe601;</span> <span className="icon iconfont">&#xe601;</span>
<span className="instro">图文课单个课程,用户学习进度达到 <span className="instro">图文课单个课程,学员学习进度达到
<Input <Input
width="40" width="40"
value={percentCompletePicture} value={percentCompletePicture}
...@@ -350,19 +350,6 @@ class BasicInfo extends React.Component{ ...@@ -350,19 +350,6 @@ class BasicInfo extends React.Component{
%,即视为"已完成"学习 %,即视为"已完成"学习
</span> </span>
</div> </div>
{/* <div className="video-standard-info">
<span className="icon iconfont">&#xe864;</span>
<span>图文课单个课程,用户学习进度达到
<Input
width="40"
value={percentCompleteVideo}
onChange={(e) => { this.props.onChange('percentCompleteVideo', e.target.value.replace(/\D/g,'')) }}
onBlur={(e) => this.percentCompleteBlur(e, 'percentCompleteVideo')}
className="input-box"
/>
%,即视为“已完成”学习
</span>
</div> */}
</div> </div>
</div> </div>
{ operatorModalVisible && { operatorModalVisible &&
......
/* /*
* @Author: zhangleyuan * @Author: zhangleyuan
* @Date: 2021-02-20 16:46:46 * @Date: 2021-02-20 16:46:46
* @LastEditors: zhangleyuan * @LastEditors: wufan
* @LastEditTime: 2021-03-16 15:53:59 * @LastEditTime: 2021-05-13 16:36:43
* @Description: 描述一下 * @Description: 描述一下
* @@Copyrigh: © 2020 杭州杰竞科技有限公司 版权所有 * @@Copyrigh: © 2020 杭州杰竞科技有限公司 版权所有
*/ */
...@@ -242,7 +242,7 @@ function PlanList(props) { ...@@ -242,7 +242,7 @@ function PlanList(props) {
function handleDelete(record){ function handleDelete(record){
return confirm({ return confirm({
title: '你确定要删除吗?', title: '你确定要删除吗?',
content: '删除后,此培训计划的用户将无法继续学习,所有学习数据将同步删除不可恢复', content: '删除后,此培训计划的学员将无法继续学习,所有学习数据将同步删除不可恢复',
icon: <span className="icon iconfont default-confirm-icon">&#xe839; </span>, icon: <span className="icon iconfont default-confirm-icon">&#xe839; </span>,
okText: '删除', okText: '删除',
okType: 'danger', okType: 'danger',
......
...@@ -110,8 +110,8 @@ class UserLearningData extends React.Component { ...@@ -110,8 +110,8 @@ class UserLearningData extends React.Component {
UnbundEmployee = (record)=>{ UnbundEmployee = (record)=>{
if(User.getUserRole()==='CloudOperator'){ if(User.getUserRole()==='CloudOperator'){
return confirm({ return confirm({
title: "你确定要解绑与用户的关系吗?", title: "你确定要解绑与学员的关系吗?",
content: "解绑后,用户该培训计划的学习数据将同步移出", content: "解绑后,学员该培训计划的学习数据将同步移出",
icon: ( icon: (
<span className="icon iconfont default-confirm-icon">&#xe839; </span> <span className="icon iconfont default-confirm-icon">&#xe839; </span>
), ),
...@@ -156,7 +156,7 @@ class UserLearningData extends React.Component { ...@@ -156,7 +156,7 @@ class UserLearningData extends React.Component {
if(User.getUserRole() === "CloudManager" || User.getUserRole() === "StoreManager"){ if(User.getUserRole() === "CloudManager" || User.getUserRole() === "StoreManager"){
columns = [ columns = [
{ {
title: '用户', title: '学员',
key: 'storeCustomerName', key: 'storeCustomerName',
dataIndex: 'storeCustomerName', dataIndex: 'storeCustomerName',
render: (val, record) => { render: (val, record) => {
...@@ -225,7 +225,7 @@ class UserLearningData extends React.Component { ...@@ -225,7 +225,7 @@ class UserLearningData extends React.Component {
{ {
title: <span> title: <span>
<span>学习进度</span> <span>学习进度</span>
<Tooltip title="用户培训计划中达到“已完成”状态的课程数/总课程数"><i className="icon iconfont" style={{ marginLeft: '5px',cursor:'pointer',color:'#bfbfbf',fontSize:'14px'}}>&#xe61d;</i></Tooltip> <Tooltip title="学员培训计划中达到“已完成”状态的课程数/总课程数"><i className="icon iconfont" style={{ marginLeft: '5px',cursor:'pointer',color:'#bfbfbf',fontSize:'14px'}}>&#xe61d;</i></Tooltip>
</span>, </span>,
key: 'learnNum', key: 'learnNum',
dataIndex: 'learnNum', dataIndex: 'learnNum',
...@@ -259,7 +259,7 @@ class UserLearningData extends React.Component { ...@@ -259,7 +259,7 @@ class UserLearningData extends React.Component {
}else{ }else{
columns = [ columns = [
{ {
title: '用户', title: '学员',
key: 'storeCustomerName', key: 'storeCustomerName',
dataIndex: 'storeCustomerName', dataIndex: 'storeCustomerName',
render: (val, record) => { render: (val, record) => {
...@@ -311,7 +311,7 @@ class UserLearningData extends React.Component { ...@@ -311,7 +311,7 @@ class UserLearningData extends React.Component {
{ {
title: <span> title: <span>
<span>学习进度</span> <span>学习进度</span>
<Tooltip title="用户培训计划中达到“已完成”状态的课程数/总课程数"><i className="icon iconfont" style={{ marginLeft: '5px',cursor:'pointer',color:'#bfbfbf',fontSize:'14px'}}>&#xe61d;</i></Tooltip> <Tooltip title="学员培训计划中达到“已完成”状态的课程数/总课程数"><i className="icon iconfont" style={{ marginLeft: '5px',cursor:'pointer',color:'#bfbfbf',fontSize:'14px'}}>&#xe61d;</i></Tooltip>
</span>, </span>,
key: 'learnNum', key: 'learnNum',
dataIndex: 'learnNum', dataIndex: 'learnNum',
......
...@@ -126,10 +126,10 @@ function UserLearningDataFilter(props) { ...@@ -126,10 +126,10 @@ function UserLearningDataFilter(props) {
<Row> <Row>
<div className="search-condition"> <div className="search-condition">
<div className="search-condition__item"> <div className="search-condition__item">
<span className="label customer-label">用户</span> <span className="label customer-label">学员</span>
<Search <Search
value={query.customerName} value={query.customerName}
placeholder="搜索用户名称" placeholder="搜索学员名称"
onChange={(e) => { handleChangeQuery('customerName', e.target.value)}} onChange={(e) => { handleChangeQuery('customerName', e.target.value)}}
onSearch={ () => { props.onChange(query) } } onSearch={ () => { props.onChange(query) } }
style={{ width: "calc(100% - 70px)" }} style={{ width: "calc(100% - 70px)" }}
......
...@@ -136,13 +136,13 @@ class ShareLiveModal extends React.Component { ...@@ -136,13 +136,13 @@ class ShareLiveModal extends React.Component {
<div className="right"> <div className="right">
<div className="share-poster right__item"> <div className="share-poster right__item">
<div className="title">① 海报分享</div> <div className="title">① 海报分享</div>
<div className="sub-title">用户可通过微信扫描海报二维码,查看培训计划</div> <div className="sub-title">学员可通过微信扫描海报二维码,查看培训计划</div>
<div className="content" onClick={this.handleDownloadPoster}>下载海报</div> <div className="content" onClick={this.handleDownloadPoster}>下载海报</div>
</div> </div>
<div className="share-url right__item"> <div className="share-url right__item">
<div className="title">② 链接分享</div> <div className="title">② 链接分享</div>
<div className="sub-title">用户可通过微信或浏览器打开以下链接,查看培训计划</div> <div className="sub-title">学员可通过微信或浏览器打开以下链接,查看培训计划</div>
<div className="content url-content"> <div className="content url-content">
<div className="share-url" id="shareUrl">{shareUrl}</div> <div className="share-url" id="shareUrl">{shareUrl}</div>
<Button type="primary" onClick={this.handleCopy}>复制</Button> <Button type="primary" onClick={this.handleCopy}>复制</Button>
......
...@@ -163,7 +163,7 @@ class UserLearnDetailModal extends React.Component { ...@@ -163,7 +163,7 @@ class UserLearnDetailModal extends React.Component {
const { visible } = this.props; const { visible } = this.props;
return ( return (
<Modal <Modal
title="用户学习详情" title="学员学习详情"
onCancel={this.props.onClose} onCancel={this.props.onClose}
onOk={this.props.onClose} onOk={this.props.onClose}
maskClosable={false} maskClosable={false}
...@@ -175,7 +175,7 @@ class UserLearnDetailModal extends React.Component { ...@@ -175,7 +175,7 @@ class UserLearnDetailModal extends React.Component {
> >
<div className="customer-info"> <div className="customer-info">
<span className="customer-name"> <span className="customer-name">
<span>用户</span> <span>学员</span>
<span>{storeCustomerName}</span> <span>{storeCustomerName}</span>
</span> </span>
<span className="customer-phone"> <span className="customer-phone">
......
...@@ -288,7 +288,8 @@ class SelectPrepareFileModal extends React.Component { ...@@ -288,7 +288,8 @@ class SelectPrepareFileModal extends React.Component {
const hasMore = folderList.length < totalCount; const hasMore = folderList.length < totalCount;
const { fileListRef } = this.refs; const { fileListRef } = this.refs;
const hasReachBottom = fileListRef.scrollTop + fileListRef.clientHeight === fileListRef.scrollHeight; // const hasReachBottom = fileListRef.scrollTop + fileListRef.clientHeight === fileListRef.scrollHeight;
const hasReachBottom = fileListRef.scrollTop + fileListRef.clientHeight > fileListRef.scrollHeight - 1;
if (!hasReachBottom || !hasMore) return; if (!hasReachBottom || !hasMore) return;
const currentFolder = folderPathList[folderPathList.length - 1]; const currentFolder = folderPathList[folderPathList.length - 1];
......
...@@ -23,6 +23,8 @@ export default class CollegeManagePage extends React.Component { ...@@ -23,6 +23,8 @@ export default class CollegeManagePage extends React.Component {
list: [], list: [],
enterpriseId: User.getEnterpriseId(), enterpriseId: User.getEnterpriseId(),
isAdmin: false, isAdmin: false,
createStoreList:[],
joinStoreList:[]
}; };
} }
...@@ -57,9 +59,42 @@ export default class CollegeManagePage extends React.Component { ...@@ -57,9 +59,42 @@ export default class CollegeManagePage extends React.Component {
User.setStoreId(mainStore.id); User.setStoreId(mainStore.id);
User.setStoreUserId(mainStore.storeUserId); User.setStoreUserId(mainStore.storeUserId);
} }
this.setState({ list }) const createStoreList = list.filter((item)=>{
return item.userRole === 'StoreManager'
})
const joinStoreList = list.filter((item)=>{
return item.userRole !== 'StoreManager'
})
this.setState({createStoreList:createStoreList,joinStoreList:joinStoreList})
}); });
} }
checkCollege(item, bool) {
const data = {
storeId: item.id,
}
Service.Hades('public/hades/whetherStartLiveCourse', data).then((res) => {
if (res.result) {
Modal.warning({
title: '停用失败',
content: '当前学院有正在上课的直播课,请课程结束后再进行操作。',
icon: <span className="icon iconfont default-confirm-icon">&#xe6f4;</span>,
okText: '我知道了',
})
} else {
Modal.confirm({
title: '确定停用吗?',
content: '停用学院,所有学院相关信息不可使用,学员无法继续学习,请谨慎操作!',
icon: <span className="icon iconfont default-confirm-icon">&#xe6f4;</span>,
onOk: () => {
this.changeCollege(item, bool);
},
okText: '停用',
cancelText: '取消',
})
}
})
}
checkCollege(item, bool) { checkCollege(item, bool) {
const data = { const data = {
...@@ -104,7 +139,7 @@ export default class CollegeManagePage extends React.Component { ...@@ -104,7 +139,7 @@ export default class CollegeManagePage extends React.Component {
} }
handleLogout() { handleLogout() {
BaseService.logout({}).then((res) => { BaseService.logout({identifier:User.getIdentifier()}).then((res) => {
User.removeUserId(); User.removeUserId();
User.removeToken(); User.removeToken();
User.removeEnterpriseId(); User.removeEnterpriseId();
...@@ -120,6 +155,8 @@ export default class CollegeManagePage extends React.Component { ...@@ -120,6 +155,8 @@ export default class CollegeManagePage extends React.Component {
avatar, avatar,
list, list,
isAdmin, isAdmin,
createStoreList,
joinStoreList
} = this.state; } = this.state;
return ( return (
<div className="college-manage-page"> <div className="college-manage-page">
...@@ -154,12 +191,14 @@ export default class CollegeManagePage extends React.Component { ...@@ -154,12 +191,14 @@ export default class CollegeManagePage extends React.Component {
<img className="image" src={avatar} /> <img className="image" src={avatar} />
<span className="name">{name}</span> <span className="name">{name}</span>
</div> </div>
{ createStoreList.length > 0 &&
<div>
<div className="title-box"> <div className="title-box">
<span className="title">企学院 ({list.length})</span> <span className="title">我创建的({createStoreList.length})</span>
{isAdmin && <span className="text">最多可创建10个企学院,您还能创建{10 - list.length}</span>} {isAdmin && <span className="text">最多可创建10个企学院,您还能创建{10 - createStoreList.length}</span>}
</div> </div>
<div className="college-list"> <div className="college-list">
{list.map((item) => ( {createStoreList.map((item) => (
<div <div
key={item.id} key={item.id}
className={`college-item${item.state === 'VALID' ? '' : ' disabled'}${item.userRole === 'StoreManager' ? ' enabled' : ''}`} className={`college-item${item.state === 'VALID' ? '' : ' disabled'}${item.userRole === 'StoreManager' ? ' enabled' : ''}`}
...@@ -179,7 +218,7 @@ export default class CollegeManagePage extends React.Component { ...@@ -179,7 +218,7 @@ export default class CollegeManagePage extends React.Component {
<div className="title">{item.storeName}</div> <div className="title">{item.storeName}</div>
<div className="time">{moment(item.createTime).format('YYYY-MM-DD HH:mm')}</div> <div className="time">{moment(item.createTime).format('YYYY-MM-DD HH:mm')}</div>
<div className="control-box"> <div className="control-box">
{item.userRole === 'StoreManager' && item.state === 'VALID' && !item.mainStore && {item.userRole === 'StoreManager' && item.state === 'VALID' &&
<span <span
className="control-button" className="control-button"
onClick={(e) => { onClick={(e) => {
...@@ -212,7 +251,7 @@ export default class CollegeManagePage extends React.Component { ...@@ -212,7 +251,7 @@ export default class CollegeManagePage extends React.Component {
</div> </div>
</div> </div>
))} ))}
{list.length < 10 && isAdmin && {createStoreList.length < 10 && isAdmin &&
<div <div
className="college-create" className="college-create"
onClick={() => { onClick={() => {
...@@ -224,6 +263,71 @@ export default class CollegeManagePage extends React.Component { ...@@ -224,6 +263,71 @@ export default class CollegeManagePage extends React.Component {
} }
</div> </div>
</div> </div>
}
{ joinStoreList.length > 0 &&
<div className="join-container">
<div className="title-box">
<span className="title">我加入的({joinStoreList.length})</span>
</div>
<div className="college-list">
{joinStoreList.map((item) => (
<div
key={item.id}
className={`college-item${item.state === 'VALID' ? '' : ' disabled'}${item.userRole === 'StoreManager' ? ' enabled' : ''}`}
onClick={() => {
if (item.state !== 'VALID') {
message.warning('学院已停用,请启用后使用或联系学院管理员');
return null;
};
User.setStoreId(item.id);
window.RCHistory.push('/home')
}}
>
<div className="header">
<img className="image" src={item.logo || "https://image.xiaomaiketang.com/xm/fe4NCjr7XF.png"} />
<span className="tag">{roleMap[item.userRole]}</span>
</div>
<div className="title">{item.storeName}</div>
<div className="time">{moment(item.createTime).format('YYYY-MM-DD HH:mm')}</div>
<div className="control-box">
{item.userRole === 'StoreManager' && item.state === 'VALID' && !item.mainStore &&
<span
className="control-button"
onClick={(e) => {
e.preventDefault();
e.stopPropagation();
User.setStoreId(item.id);
window.RCHistory.push('/college-info')
}}
>编辑</span>
}
{((item.userRole === 'StoreManager' && !item.mainStore) || item.state !== 'VALID') &&
<span
className="control-button"
onClick={(e) => {
if (item.state !== 'VALID') return null;
e.preventDefault();
e.stopPropagation();
this.checkCollege(item, false);
}}
>{item.state === 'VALID' ? '停用' : '已停用'}</span>
}
<span
className="control-button disable-button"
onClick={(e) => {
e.preventDefault();
e.stopPropagation();
this.changeCollege(item, true);
}}
>启用</span>
</div>
</div>
))}
</div>
</div>
}
</div>
</div> </div>
) )
} }
......
...@@ -48,6 +48,9 @@ ...@@ -48,6 +48,9 @@
width: 1280px; width: 1280px;
margin: 0 auto; margin: 0 auto;
padding: 60px 0 30px 60px; padding: 60px 0 30px 60px;
.join-container{
margin-top:48px;
}
.user { .user {
margin-bottom: 85px; margin-bottom: 85px;
.image { .image {
......
/* /*
* @Author: 吴文洁 * @Author: 吴文洁
* @Date: 2019-09-10 18:26:03 * @Date: 2019-09-10 18:26:03
* @LastEditors: zhangleyuan * @LastEditors: Please set LastEditors
* @LastEditTime: 2021-05-10 10:34:13 * @LastEditTime: 2021-05-12 17:30:25
* @Description: * @Description:
*/ */
import React, { useRef, useContext, useEffect, useState } from "react"; import React, { useRef, useContext, useEffect, useState } from "react";
...@@ -183,7 +183,7 @@ function Header(props) { ...@@ -183,7 +183,7 @@ function Header(props) {
} }
function handleLogout() { function handleLogout() {
BaseService.logout({}).then((res) => { BaseService.logout({identifier:User.getIdentifier()}).then((res) => {
User.removeUserId(); User.removeUserId();
User.removeToken(); User.removeToken();
User.removeEnterpriseId(); User.removeEnterpriseId();
......
...@@ -19,14 +19,14 @@ ...@@ -19,14 +19,14 @@
margin-top: 24px; margin-top: 24px;
.error{ .error{
position: absolute; position: absolute;
width: 100%; width: 170px;
height: 100%; height: 170px;
background: rgba(255, 255, 255, 0.95); background: rgba(255, 255, 255, 0.95);
display: flex; display: flex;
align-items:center; align-items:center;
justify-content:center; justify-content:center;
left:0px; left:-5px;
top: 0px; top:-5px;
div{ div{
margin: 0 10px; margin: 0 10px;
font-size: 14px; font-size: 14px;
......
...@@ -77,6 +77,7 @@ export default function WechatLogin(props: any) { ...@@ -77,6 +77,7 @@ export default function WechatLogin(props: any) {
User.setUserId(_res.result.loginInfo.userId); User.setUserId(_res.result.loginInfo.userId);
User.setToken(_res.result.loginInfo.xmToken); User.setToken(_res.result.loginInfo.xmToken);
User.setEnterpriseId(_res.result.enterpriseId); User.setEnterpriseId(_res.result.enterpriseId);
User.setIdentifier(_res.result.identifier)
window.RCHistory.push({ window.RCHistory.push({
pathname: `/switch-route`, pathname: `/switch-route`,
}) })
......
/* /*
* @Author: wufan * @Author: wufan
* @Date: 2020-11-27 16:21:49 * @Date: 2020-11-27 16:21:49
* @LastEditors: zhangleyuan * @LastEditors: Please set LastEditors
* @LastEditTime: 2021-03-09 14:21:35 * @LastEditTime: 2021-05-19 19:43:59
* @Description: Description * @Description: Description
* @@Copyrigh: © 2020 杭州杰竞科技有限公司 版权所有 * @@Copyrigh: © 2020 杭州杰竞科技有限公司 版权所有
*/ */
...@@ -298,7 +298,7 @@ function AddEmployeeModal(props: AddEmployeeModalProps) { ...@@ -298,7 +298,7 @@ function AddEmployeeModal(props: AddEmployeeModalProps) {
<Radio value={"CloudOperator"} className="mt-4"> <Radio value={"CloudOperator"} className="mt-4">
<span style={{ color: "#333" }}>运营师</span> <span style={{ color: "#333" }}>运营师</span>
<p className="radio-tip"> <p className="radio-tip">
仅可查看/转发培训计划内容,并查看其负责的用户学习进度 仅可查看/转发培训计划内容,并查看其负责的学员学习进度
</p> </p>
</Radio> </Radio>
</RadioGroup> </RadioGroup>
......
/* /*
* @Author: wufan * @Author: wufan
* @Date: 2020-11-30 10:47:38 * @Date: 2020-11-30 10:47:38
* @LastEditors: zhangleyuan * @LastEditors: wufan
* @LastEditTime: 2021-02-02 10:22:34 * @LastEditTime: 2021-05-13 16:38:40
* @Description: 用户管理页面 * @Description: 学员管理页面
* @@Copyrigh: © 2020 杭州杰竞科技有限公司 版权所有 * @@Copyrigh: © 2020 杭州杰竞科技有限公司 版权所有
*/ */
...@@ -49,7 +49,7 @@ function UserManagePage() { ...@@ -49,7 +49,7 @@ function UserManagePage() {
function parseColumn() { function parseColumn() {
return [ return [
{ {
title: "用户姓名", title: "学员姓名",
dataIndex: "nickName", dataIndex: "nickName",
render: (val: string) => { render: (val: string) => {
return ( return (
...@@ -81,7 +81,7 @@ function UserManagePage() { ...@@ -81,7 +81,7 @@ function UserManagePage() {
return ( return (
<div className=" page user-manage-page"> <div className=" page user-manage-page">
<div className="content-header">用户管理</div> <div className="content-header">学员管理</div>
<div className="box"> <div className="box">
<div className="box-header"> <div className="box-header">
<div <div
...@@ -93,13 +93,13 @@ function UserManagePage() { ...@@ -93,13 +93,13 @@ function UserManagePage() {
}} }}
> >
<div> <div>
搜索用户 搜索学员
<Search <Search
style={{ style={{
width: 300, width: 300,
marginRight: 40, marginRight: 40,
}} }}
placeholder="搜索用户姓名/手机号" placeholder="搜索学员姓名/手机号"
onSearch={(value) => { onSearch={(value) => {
const _query = { ...query }; const _query = { ...query };
if (value) { if (value) {
......
...@@ -365,7 +365,7 @@ function AddExam(props: any) { ...@@ -365,7 +365,7 @@ function AddExam(props: any) {
checked={needPhone == 'NEED_PHONE_VERIFY'} checked={needPhone == 'NEED_PHONE_VERIFY'}
onChange={(val) => { setNeedPhone(val ? 'NEED_PHONE_VERIFY' : 'DO_NOT_NEED_PHONE_VERIFY') }} onChange={(val) => { setNeedPhone(val ? 'NEED_PHONE_VERIFY' : 'DO_NOT_NEED_PHONE_VERIFY') }}
></Switch> ></Switch>
<div style={{ position: 'relative', top: 3, left: 8, color: "#999" }}><p>开启:需要绑定手机号的用户才能参加考试</p> <div style={{ position: 'relative', top: 3, left: 8, color: "#999" }}><p>开启:需要绑定手机号的学员才能参加考试</p>
<p>关闭:微信/企业微信登陆直接参加考试</p></div> <p>关闭:微信/企业微信登陆直接参加考试</p></div>
</div> </div>
......
...@@ -118,25 +118,11 @@ class ExamShareModal extends React.Component { ...@@ -118,25 +118,11 @@ class ExamShareModal extends React.Component {
</div> </div>
<div className="right"> <div className="right">
<div className="share-poster right__item"> <div className="share-poster right__item">
<div className="title">① 海报分享</div> <div className="title">① 海报分享</div>
<div className="sub-title">用户可通过微信扫描海报二维码,查看考试</div> <div className="sub-title">学员可通过微信扫描海报二维码,查看考试</div>
<div className="content" onClick={this.handleDownloadPoster}>下载海报</div> <div className="content" onClick={this.handleDownloadPoster}>下载海报</div>
</div> </div>
{/* <div className="share-url right__item" style={{ marginTop: 40 }}>
<div className="title">② 链接分享</div>
<div className="sub-title">用户可通过微信或浏览器打开以下链接,查看考试(建议使用谷歌浏览器)</div>
<div className="content">
<div className="share-url" id="shareUrl">{shareUrl}</div>
<Button
type="primary"
onClick={this.handleCopy}
>复制</Button>
</div>
</div> */}
</div> </div>
</Modal> </Modal>
) )
......
...@@ -115,7 +115,7 @@ function DataAnalysic(props: any) { ...@@ -115,7 +115,7 @@ function DataAnalysic(props: any) {
const columns = [ const columns = [
{ {
title: "用户", title: "学员",
dataIndex: "userName", dataIndex: "userName",
render: (text: any, record: any) => <span>{text}<span style={{ color: record.userSource === 'WORK_WE_CHAT' ? 'rgba(255, 157, 20, 1)' : 'rgba(29, 204, 101, 1)' }} >@{(userTypeEnum as any)[record.userSource]}</span></span>, render: (text: any, record: any) => <span>{text}<span style={{ color: record.userSource === 'WORK_WE_CHAT' ? 'rgba(255, 157, 20, 1)' : 'rgba(29, 204, 101, 1)' }} >@{(userTypeEnum as any)[record.userSource]}</span></span>,
}, },
...@@ -221,11 +221,11 @@ function DataAnalysic(props: any) { ...@@ -221,11 +221,11 @@ function DataAnalysic(props: any) {
<div style={{ display: 'flex' }}> <div style={{ display: 'flex' }}>
<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={query.examName} value={query.examName}
className='search-input' className='search-input'
placeholder="搜索用户名或手机号" placeholder="搜索学员名或手机号"
onChange={(e) => { onChange={(e) => {
const _query = { ...query } const _query = { ...query }
_query.searchKey = e.target.value _query.searchKey = e.target.value
...@@ -237,8 +237,8 @@ function DataAnalysic(props: any) { ...@@ -237,8 +237,8 @@ function DataAnalysic(props: any) {
</div> </div>
<div className="search-condition__item"> <div className="search-condition__item">
<span className="search-name">用户类型:</span> <span className="search-name">学员类型:</span>
<Select value={query.userSource} placeholder="请选择用户类型" onChange={(val) => { <Select value={query.userSource} placeholder="请选择学员类型" onChange={(val) => {
const _query = { ...query } const _query = { ...query }
_query.userSource = val _query.userSource = val
setQuery(_query); setQuery(_query);
......
/* /*
* @Author: yuananting * @Author: yuananting
* @Date: 2021-02-25 13:46:35 * @Date: 2021-02-25 13:46:35
* @LastEditors: zhangleyuan * @LastEditors: yuananting
* @LastEditTime: 2021-05-10 16:40:01 * @LastEditTime: 2021-05-10 20:33:16
* @Description: 助学工具-题库-新建/编辑题目 * @Description: 助学工具-题库-新建/编辑题目
* @Copyrigh: © 2020 杭州杰竞科技有限公司 版权所有 * @Copyrigh: © 2020 杭州杰竞科技有限公司 版权所有
*/ */
......
/* /*
* @Author: 吴文洁 * @Author: 吴文洁
* @Date: 2020-04-29 10:26:32 * @Date: 2020-04-29 10:26:32
* @LastEditors: yuananting * @LastEditors: Please set LastEditors
* @LastEditTime: 2021-04-15 21:55:50 * @LastEditTime: 2021-05-19 19:44:08
* @Description: 内容线路由配置 * @Description: 内容线路由配置
*/ */
import Home from '@/modules/home/Home'; import Home from '@/modules/home/Home';
...@@ -58,23 +58,18 @@ const mainRoutes = [ ...@@ -58,23 +58,18 @@ const mainRoutes = [
{ {
path: "/user-manage", path: "/user-manage",
component: UserManagePage, component: UserManagePage,
name: "用户管理", name: "学员管理",
}, },
{ {
path: '/college-user', path: '/college-user',
component: UserManage, component: UserManage,
name: '用户管理' name: '学员管理'
}, },
{ {
path: '/store-decoration', path: '/store-decoration',
component: StoreDecorationPage, component: StoreDecorationPage,
name: '学院装修' name: '学院装修'
}, },
// {
// path: "/course-catalog",
// component: CourseCatalogPage,
// name: "课程分类",
// },
{ {
path: "/live-course", path: "/live-course",
component: LiveCoursePage, component: LiveCoursePage,
......
/* /*
* @Author: yuananting * @Author: yuananting
* @Date: 2021-02-21 15:53:31 * @Date: 2021-02-21 15:53:31
* @LastEditors: yuananting * @LastEditors: wufan
* @LastEditTime: 2021-03-27 15:20:42 * @LastEditTime: 2021-05-13 16:40:11
* @Description: 描述一下咯 * @Description: 描述一下咯
* @Copyrigh: © 2020 杭州杰竞科技有限公司 版权所有 * @Copyrigh: © 2020 杭州杰竞科技有限公司 版权所有
*/ */
...@@ -97,7 +97,7 @@ export const menuList: any = [ ...@@ -97,7 +97,7 @@ export const menuList: any = [
link: '/college-employee' link: '/college-employee'
}, },
{ {
groupName: "用户管理", groupName: "学员管理",
groupCode: "ShopUser", groupCode: "ShopUser",
link: '/college-user' link: '/college-user'
}, },
......
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