Commit b7d435ff by chenshu

fix:merge

parents 6420289a 1a27722f
#ignore obj and lib file
dist
rev
node_modules
coverage
*/vendor.js
*/vendor.*.*
*/vendor-manifest.json
coverage
npm-shrinkwrap.json
### OSX template
.DS_Store
node_modules/
dist/
npm-debug.log
\ No newline at end of file
.AppleDouble
.LSOverride
yarn.lock
yarn-error.lock
# IntelliJ project files
.idea
*.iml
out
gen
### Sass template
.sass-cache/
*.css.map
### Vim template
# swap
[._]*.s[a-w][a-z]
[._]s[a-w][a-z]
# session
Session.vim
# temporary
.netrwhist
*~
# auto-generated tag files
tags
### SublimeText template
# cache files for sublime text
*.tmlanguage.cache
*.tmPreferences.cache
*.stTheme.cache
# workspace files are user-specific
*.sublime-workspace
# project files should be checked into the repository, unless a significant
# proportion of contributors will probably not be using SublimeText
# *.sublime-project
# sftp configuration file
sftp-config.json
npm-debug.log
*.zip
build/vendor.js.map
package-lock.json
.vscode/*
demo.js
debug.log
......@@ -36,7 +36,7 @@
"case-sensitive-paths-webpack-plugin": "2.3.0",
"classnames": "^2.2.6",
"cropper": "^3.1.4",
"cross-env": "^7.0.2",
"cross-env": "^7.0.3",
"css-loader": "3.4.2",
"dom-to-image": "^2.6.0",
"dotenv": "8.2.0",
......
......@@ -64,7 +64,7 @@
.span-left{
margin-left: 10px;
.span-left-l{
color: #ffb714;
color: #2966FF;
cursor: pointer;
}
}
......@@ -73,7 +73,7 @@
margin-right: 10px;
color: #999;
.span-right-l{
color: #5289FA;
color: #2966FF;
cursor: pointer;
}
}
......
......@@ -6,7 +6,7 @@
margin-bottom: 10px;
}
.bread:hover{
color: #5289FA;
color: #2966FF;
}
}
......
......@@ -16,7 +16,7 @@
.managing-right{
float: right;
color: #5289FA;
color: #2966FF;
cursor: pointer;
.tool-tip-right{
margin-right: 4px;
......
......@@ -38,7 +38,7 @@
&:not(:last-child) {
cursor: pointer;
&:hover {
color: #5289FA;
color: #2966FF;
}
&::before {
content: '/';
......@@ -104,7 +104,7 @@
}
.footer__left {
color: #5289fa;
color: #2966FF;
cursor: pointer;
}
}
......
......@@ -109,7 +109,7 @@
margin-top: 40px;
.content {
color: #FF7519;
color: #2966FF;
cursor: pointer;
}
}
......
.xm-show-tip {
position: relative;
min-height:32px;
background:#FFF4DD;
background:#E9EFFF;
border-radius:4px;
display: flex;
justify-content: flex-start;
......@@ -9,7 +9,7 @@
padding: 0 12px;
line-height: 32px;
span.icon {
color:#FF9D14;
color:#2966FF;
line-height: 20px;
}
p {
......
......@@ -316,7 +316,7 @@ class UploadProgressModal extends React.Component {
return (
<div
className="file-item"
className={`file-item ${file.status === 'fail' ? 'fail':''}`}
key={`file-item${index}`}
>
......
......@@ -54,6 +54,9 @@
line-height: 50px;
padding: 0 24px;
position: relative;
&.fail {
background-color: rgba(255, 79, 79, 0.06);
}
&:not(:last-child) {
margin-bottom: 4px;
......
/*
* @Author: 吴文洁
* @Date: 2020-08-31 09:34:31
* @LastEditors: zhangleyuan
* @LastEditTime: 2021-04-27 16:59:07
* @LastEditors: wufan
* @LastEditTime: 2021-05-27 10:42:12
* @Description:
* @Copyright: 杭州杰竞科技有限公司 版权所有
*/
import qs from 'qs';
import axios, { AxiosInstance, AxiosRequestConfig, AxiosResponse, AxiosPromise, AxiosError } from 'axios';
import { message } from 'antd';
......
@import '../core/variables.less';
@import "../core/variables.less";
.xm-breadCrumb{
margin-left: 16px;
padding-left: 16px;
color: #989898;
margin-top:10px;
margin-bottom: 10px;
padding-top: 16px;
padding-bottom: 8px;
background: #fff;
width: calc(100vw - 218px);
+.statistic-tips{
position: relative;
top: -8px;
......@@ -20,26 +22,25 @@
font-size: @xm-font-size-m;
line-height: 25px;
}
.ant-breadcrumb{
.ant-breadcrumb {
display: inline-block;
span{
span {
color: #333;
font-weight: 400;
}
}
.divide{
.divide {
display: inline-block;
position: relative;
height: 12px;
width: 25px;
&:after{
content:'';
&:after {
content: "";
position: absolute;
left: 12px;
height: 16px;
top: 0px;
border-left:1px solid #989898;
border-left: 1px solid #989898;
}
}
}
\ No newline at end of file
}
......@@ -11,7 +11,7 @@
color: #666;
}
.nc_iconfont {
color: #FFB714;
color: #2966FF;
font-weight: bold;
border-color: #e8e8e8;
height: 40px;
......@@ -26,11 +26,12 @@
box-sizing: border-box;
}
.nc_scale .nc_ok, .nc_scale .nc_bg {
background: #FFB714;
background: #2966FF;
border-radius: 4px 0 0 4px;
opacity: 0.3;
}
.nc_scale .btn_ok {
color: #FFB714;
color: #2966FF;
height: 40px;
line-height: 40px;
box-sizing: border-box;
......@@ -42,7 +43,7 @@
.nc-lang-cnt {
color: #666;
a {
color: #FFB714;
color: #2966FF;
}
}
}
......
......@@ -3,7 +3,7 @@
.multiple-calendar {
width: 295px;
border: 1px solid #e8e8e8;
border-radius: 4px;
border-radius: 2px;
ul {
list-style: none;
}
......@@ -22,7 +22,7 @@
cursor: default;
&:hover {
background: #FFFFFF;
border-radius: 4px;
border-radius: 2px;
}
}
.self {
......@@ -55,8 +55,8 @@
cursor: pointer;
vertical-align: top;
&:hover {
background: rgba(255, 183, 20,.2);
border-radius:4px;
background: rgba(41, 102, 255, .1);
border-radius:2px;
}
&.before-disabled {
color: #e8e8e8;
......@@ -81,11 +81,11 @@
&.active {
background: @xm-color-primary;
color: #fff;
border-radius: 4px;
border-radius: 2px;
}
&.today {
border: 1px solid @xm-color-primary;
border-radius: 5px;
border-radius: 2px;
}
}
}
......@@ -151,7 +151,7 @@
border-radius: none;
span {
background: @xm-color-primary;
border-radius: 4px;
border-radius: 2px;
}
&:hover {
span {
......@@ -164,13 +164,13 @@
border-radius: none;
span {
border: 1px solid @xm-color-primary;
border-radius: 5px;
border-radius: 2px;
}
}
&.past {
span {
background:rgba(255,133,52,0.1);
border-radius: 4px;
border-radius: 2px;
color:rgba(0,0,0,0.25);
}
}
......
.xm-show-tip {
position: relative;
min-height:32px;
background:#FFF4DD;
background:#E9EFFF;
border-radius:4px;
display: flex;
justify-content: flex-start;
......@@ -9,7 +9,7 @@
padding: 0 12px;
line-height: 32px;
.icon {
color:#FF9D14;
color:#2966FF;
font-size:14px;
}
p {
......
/*
* @Description:
* @Description:
* @Author: zangsuyun
* @Date: 2021-03-13 10:57:14
* @LastEditors: zangsuyun
* @LastEditTime: 2021-03-13 17:16:44
* @LastEditors: fusanqiasng
* @LastEditTime: 2021-05-24 22:10:50
* @Copyright: © 2020 杭州杰竞科技有限公司 版权所有
*/
import PropTypes from 'prop-types';
import PropTypes from 'prop-types'
import React from 'react'
// import { Modal } from 'antd';
import './TableSelectedData.less';
import './TableSelectedData.less'
class TableSelectedData extends React.Component {
constructor(props) {
super(props);
}
render() {
return (
<div className={this.props.className+' selected-data-box'}>
<span className="icon iconfont">&#xe61d;</span>
<span className="selected-text">{'已选择'+this.props.selectedNum+'项'}</span>
<span className="click-clear" onClick={this.props.clearSelectedData}>清空</span>
<div className={this.props.className + ' selected-data-box'}>
<span className='icon iconfont'>&#xe61d;</span>
<span className='selected-text'>{'已选择' + this.props.selectedNum + '项'}</span>
<span className='click-clear' onClick={this.props.clearSelectedData}>
清空
</span>
</div>
)
}
}
TableSelectedData.propTypes = {
className: PropTypes.string, // class
selectedNum: PropTypes.number, // 已选择人数
clearSelectedData: PropTypes.func, // 取消全部选择
};
className: PropTypes.string, // class
selectedNum: PropTypes.number, // 已选择人数
clearSelectedData: PropTypes.func // 取消全部选择
}
TableSelectedData.defaultProps = {
className: '',
selectedNum: 0,
clearSelectedData: function () {
}
clearSelectedData: function () {}
}
export default TableSelectedData
\ No newline at end of file
export default TableSelectedData
......@@ -3,12 +3,12 @@
min-width: 186px;
height: 32px;
line-height: 32px;
background: #FFF4DD;
background: #E9EFFF;
padding: 0px 16px;
border-radius:4px;
margin: 16px 10px 13px 0;
.iconfont {
color: #FF9D14;
color: #2966FF;
}
.selected-text {
margin-left: 10px;
......@@ -17,7 +17,7 @@
.click-clear {
float: right;
cursor: pointer;
color: #5289FA;
color: #2966FF;
&:hover {
color: rgba(85, 168, 253, 0.8);
}
......
......@@ -1602,7 +1602,7 @@ input:focus {
font-size: 22px !important;
line-height: 22px !important;
float: left !important;
color: #FFB714 !important;
color: #2966FF !important;
margin-right: 16px !important;
}
......@@ -1678,11 +1678,11 @@ input:focus {
align-items: center;
flex-wrap: wrap;
.operate-text {
color: #5289FA;
color: #2966FF;
cursor: pointer;
}
.operate__item {
color: #5289FA;
color: #2966FF;
cursor: pointer;
&.split {
margin: 0 8px;
......@@ -1690,7 +1690,7 @@ input:focus {
}
}
.more{
color: #5289FA;
color: #2966FF;
cursor: pointer;
cursor: pointer;
}
......
......@@ -7,25 +7,24 @@
left: 0px;
right: 0;
bottom: 0;
z-index: 101;
background-color: #F0F2F5;
z-index:3;
background-color: #fff;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
min-height: 100%;
.page {
position: fixed;
top: 50px;
top: 60px;
left: 180px;
right: 0;
bottom: 0;
z-index: 102;
overflow: auto;
margin:0 16px;
.box{
&:first-child{
margin-bottom: 8px;
}
&+.box{
margin: 8px 16px;
}
&:last-child{
margin-bottom: 16px;
}
......@@ -42,38 +41,38 @@
animation: all 0.75;
padding-bottom: 16px;
}
.content-sub-header{
.content-sub-header {
padding: 0px 16px 0;
line-height: 30px;
}
.content-header {
padding: 10px 16px;
padding: 16px 16px 8px 16px;
line-height: 30px;
font-size:24px;
color:#333;
font-weight:bold;
background: #FFF;
h1 {
font-size: 14px;
color: #898989;
font-weight: normal;
display: inline-block;
}
}
.box{
.box {
padding: 16px;
margin: 0 16px 16px;
margin-bottom: 8px;
background: #ffffff;
// min-height: 400px;
// min-height: calc(100vh - 126px);
.box-header {
line-height: 30px;
padding-bottom: 12px;
&.searchOnly{
&.searchOnly {
padding-bottom: 0px;
}
.filter-row {
min-height: 30px;
margin-bottom: 10px;
>* {
> * {
float: left;
margin-left: 16px;
height: 40px;
......@@ -89,45 +88,31 @@
.box-footer {
margin-top: 16px;
}
&:first-child{
margin-bottom: 8px;
}
&+.box{
margin: 8px 16px;
}
&:last-child{
margin-bottom: 13px;
}
}
// .ant-calendar-picker{
// top:-1px;
// }
}
.box-header {
.ant-row-flex {
padding-top: 2px;
>div:nth-child(1) {
> div:nth-child(1) {
display: flex;
flex-wrap: wrap;
align-items:space-between;
align-items: space-between;
.flex(1);
>*{
> * {
flex-basis: 30%;
margin-right: 3%;
margin-bottom: 16px;
}
}
&.lastRow{
>div:nth-child(1) {
>*{
&.lastRow {
> div:nth-child(1) {
> * {
margin-bottom: 0px;
}
}
}
}
}
}
.full-screen-page {
......@@ -139,5 +124,5 @@
bottom: 0;
right: 0;
user-select: none;
background-color: #F0F2F5;
background-color: #f0f2f5;
}
@sunLight: #FED951;
@sun: #FFB714;
@sunDark: #FFB714;
@sun: #2966FF;
@sunDark: #2966FF;
@orangeLight: #FDBB70;
......@@ -56,7 +56,7 @@
//old
//color
@xm-color-primary:#FFB714;
@xm-color-primary:#2966FF;
@xm-color-primary_active: #020201;
@xm-color-primary-darker: #ff8534;
@xm-color-selected: #F58E2C;
......@@ -66,7 +66,7 @@
@xm-color-secondary-light: #e28534;
@xm-color-secondary: #ff8534;
@xm-color-secondary-darker: #D65E30;
@xm-color-text-select-primary:#FFB714;
@xm-color-text-select-primary:#2966FF;
@xm-color-text-select-warning:#ec4b35;
@xm-color-info: #45b2ff;
......@@ -131,7 +131,7 @@
@xm-table-tbody-color:#666;
//侧边栏宽度
@xm-left-width:180px;
@xm-left-min-width:64px;
@xm-left-min-width:56px;
@xm-color-text-menu:#9a9dA7;
// 下拉框
......
/*
* @Author: yuananting
* @Date: 2021-03-03 15:13:12
* @LastEditors: yuananting
* @LastEditTime: 2021-04-13 13:58:40
* @LastEditors: fusanqiasng
* @LastEditTime: 2021-05-25 10:07:03
* @Description: 助学工具接口
* @Copyrigh: © 2020 杭州杰竞科技有限公司 版权所有
*/
import Service from "@/common/js/service";
import Service from '@/common/js/service'
export function queryExternalCategoryTree(params: object) {
return Service.Hades('public/externalHades/queryCategoryTree', params)
}
export function queryCategoryTree(params: object) {
return Service.Hades("public/hades/queryCategoryTree", params);
return Service.Hades('public/hades/queryCategoryTree', params)
}
export function addCategory(params: object) {
return Service.Hades("public/hades/addCategory", params);
return Service.Hades('public/hades/addCategory', params)
}
export function delCategory(params: object) {
return Service.Hades("public/hades/delCategory", params);
return Service.Hades('public/hades/delCategory', params)
}
export function editCategory(params: object) {
return Service.Hades("public/hades/editCategory", params);
return Service.Hades('public/hades/editCategory', params)
}
export function editCategoryTree(params: object) {
return Service.Hades("public/hades/editCategoryTree", params);
return Service.Hades('public/hades/editCategoryTree', params)
}
export function queryQuestionPageList(params: object) {
return Service.Hades("public/hades/queryQuestionPageList", params);
return Service.Hades('public/hades/queryQuestionPageList', params)
}
export function addQuestion(params: object) {
return Service.Hades("public/hades/addQuestion", params);
return Service.Hades('public/hades/addQuestion', params)
}
export function deleteQuestion(params: object) {
return Service.Hades("public/hades/deleteQuestion", params);
return Service.Hades('public/hades/deleteQuestion', params)
}
export function queryQuestionDetails(params: object) {
return Service.Hades("public/hades/queryQuestionDetails", params);
return Service.Hades('public/hades/queryQuestionDetails', params)
}
export function editQuestion(params: object) {
return Service.Hades("public/hades/editQuestion", params);
return Service.Hades('public/hades/editQuestion', params)
}
export function batchImport(params: object) {
return Service.Hades("public/hades/batchImport", params);
return Service.Hades('public/hades/batchImport', params)
}
export function createPaper(params: object) {
return Service.Hades("public/hades/createPaper", params);
return Service.Hades('public/hades/createPaper', params)
}
export function queryPaperPageList(params: object) {
return Service.Hades("public/hades/queryPaperPageList", params);
return Service.Hades('public/hades/queryPaperPageList', params)
}
export function deletePaper(params: object) {
return Service.Hades("public/hades/deletePaper", params);
return Service.Hades('public/hades/deletePaper', params)
}
export function queryPaperDetail(params: object) {
return Service.Hades("public/hades/queryPaperDetail", params);
return Service.Hades('public/hades/queryPaperDetail', params)
}
export function viewPaper(params: object) {
return Service.Hades("public/hades/viewPaper", params);
return Service.Hades('public/hades/viewPaper', params)
}
export function editPaper(params: object) {
return Service.Hades("public/hades/editPaper", params);
return Service.Hades('public/hades/editPaper', params)
}
export function batchQueryQuestionDetails(params: object) {
return Service.Hades("public/hades/batchQueryQuestionDetails", params);
return Service.Hades('public/hades/batchQueryQuestionDetails', params)
}
export function queryQuestionPageListWithContent(params: object) {
return Service.Hades("public/hades/queryQuestionPageListWithContent", params);
}
\ No newline at end of file
return Service.Hades('public/hades/queryQuestionPageListWithContent', params)
}
/*
* @Author: yuananting
* @Date: 2021-03-11 11:34:37
* @LastEditors: yuananting
* @LastEditTime: 2021-04-13 13:58:11
* @LastEditors: fusanqiasng
* @LastEditTime: 2021-05-24 23:44:39
* @Description: 助学工具接口
* @Copyrigh: © 2020 杭州杰竞科技有限公司 版权所有
*/
import {
queryCategoryTree,
addCategory,
delCategory,
editCategory,
editCategoryTree,
addQuestion,
queryQuestionPageList,
deleteQuestion,
queryQuestionDetails,
editQuestion,
batchImport,
createPaper,
queryPaperPageList,
deletePaper,
queryPaperDetail,
viewPaper,
import {
queryExternalCategoryTree,
queryCategoryTree,
addCategory,
delCategory,
editCategory,
editCategoryTree,
addQuestion,
queryQuestionPageList,
deleteQuestion,
queryQuestionDetails,
editQuestion,
batchImport,
createPaper,
queryPaperPageList,
deletePaper,
queryPaperDetail,
viewPaper,
editPaper,
batchQueryQuestionDetails,
queryQuestionPageListWithContent,
} from '@/data-source/aidTool/request-apis';
queryQuestionPageListWithContent
} from '@/data-source/aidTool/request-apis'
export default class AidToolService {
// 获取题目分类树
/**
* 查询运营端分类书
* @param parmas
* @returns
*/
static queryExternalCategoryTree(parmas: any) {
return queryExternalCategoryTree(parmas)
}
// 获取题目分类树
static queryCategoryTree(params: any) {
return queryCategoryTree(params);
return queryCategoryTree(params)
}
// 新增题目分类
static addCategory(params: any) {
return addCategory(params);
return addCategory(params)
}
// 删除分类
static delCategory(params: any) {
return delCategory(params);
return delCategory(params)
}
// 编辑分类
static editCategory(params: any) {
return editCategory(params);
return editCategory(params)
}
// 编辑分类树(拖拽)
static editCategoryTree(params: any) {
return editCategoryTree(params);
return editCategoryTree(params)
}
// 查询题目列表
static queryQuestionPageList(params: any) {
return queryQuestionPageList(params);
return queryQuestionPageList(params)
}
// 添加题目
static addQuestion(params: any) {
return addQuestion(params);
return addQuestion(params)
}
// 删除题目
static deleteQuestion(params: any) {
return deleteQuestion(params);
return deleteQuestion(params)
}
// 预览题目
static queryQuestionDetails(params: any) {
return queryQuestionDetails(params);
return queryQuestionDetails(params)
}
// 编辑题目
static editQuestion(params: any) {
return editQuestion(params);
return editQuestion(params)
}
// 批量导入
static batchImport(params: any) {
return batchImport(params);
return batchImport(params)
}
// 创建试卷
static createPaper(params: any) {
return createPaper(params);
return createPaper(params)
}
// 查询试卷列表
static queryPaperPageList(params: any) {
return queryPaperPageList(params);
return queryPaperPageList(params)
}
// 删除试卷
static deletePaper(params: any) {
return deletePaper(params);
return deletePaper(params)
}
// 编辑前查询试卷信息
static queryPaperDetail(params: any) {
return queryPaperDetail(params);
return queryPaperDetail(params)
}
// 预览试卷
static viewPaper(params: any) {
return viewPaper(params);
return viewPaper(params)
}
// 编辑试卷
static editPaper(params: any) {
return editPaper(params);
return editPaper(params)
}
// 操作试卷-预览查询多题目信息
static batchQueryQuestionDetails(params: any) {
return batchQueryQuestionDetails(params);
return batchQueryQuestionDetails(params)
}
// 操作试卷-选择题目列表带题目详情
static queryQuestionPageListWithContent(params: any) {
return queryQuestionPageListWithContent(params);
return queryQuestionPageListWithContent(params)
}
}
\ No newline at end of file
}
/*
* @Author: 陈剑宇
* @Date: 2020-05-07 14:43:01
* @LastEditTime: 2021-04-19 16:42:24
* @LastEditors: zhangleyuan
* @Description:
* @LastEditTime: 2021-05-28 15:20:40
* @LastEditors: fusanqiasng
* @Description:
* @FilePath: /wheat-web-demo/src/domains/basic-domain/constants.ts
*/
import { MapInterface } from '@/domains/basic-domain/interface'
// 默认是 dev 环境
const ENV: string = process.env.DEPLOY_ENV || 'dev';
console.log("process.env.DEPLOY_ENV",process)
const ENV: string = process.env.DEPLOY_ENV || 'dev'
console.log('process.env.DEPLOY_ENV', process)
const BASIC_HOST_MAP: MapInterface = {
dev: 'https://dev-heimdall.xiaomai5.com/',
dev1: 'https://dev1-heimdall.xiaomai5.com/',
rc: 'https://rc-heimdall.xiaomai5.com/',
gray: 'https://gray-heimdall.xiaomai5.com/',
prod: 'https://gateway.xiaomai5.com/'
};
prod: 'https://gateway.xiaomai5.com/',
}
const PATH_MAP: MapInterface = {
dev: 'https://dev.xiaomai5.com/xiaomai-cloud-class-web/h5.html',
dev1: 'https://dev.xiaomai5.com/xiaomai-cloud-class-web/h5.html',
rc: 'https://rc.xiaomai5.com/xiaomai-cloud-class-web/h5.html',
gray: 'https://res.xiaomai0.com/xiaomai-cloud-class-web/gray/h5.html',
prod: 'https://res.xiaomai0.com/xiaomai-cloud-class-web/h5.html'
};
prod: 'https://res.xiaomai0.com/xiaomai-cloud-class-web/h5.html',
}
// axios headers config
export const TIME_OUT: number = 20000;
export const USER_TYPE: string = 'B';
export const PROJECT = 'xmzj-web-b';
export const VERSION = '5.4.8';
export const PREFIX = 'cloud-class';
export const USER_PREFIX = 'store-live';
export const TIME_OUT: number = 20000
export const USER_TYPE: string = 'B'
export const PROJECT = 'xmzj-web-b'
export const VERSION = '5.4.8'
export const PREFIX = 'cloud-class'
export const USER_PREFIX = 'store-live'
// host
export const BASIC_HOST: string = BASIC_HOST_MAP[ENV];
export const PATH: string = PATH_MAP[ENV];
export const BASIC_HOST: string = BASIC_HOST_MAP[ENV]
export const PATH: string = PATH_MAP[ENV]
<!--
* @Author: 吴文洁
* @Date: 2020-08-24 12:20:57
* @LastEditors: zhangleyuan
* @LastEditTime: 2021-05-10 13:41:44
* @LastEditors: Please set LastEditors
* @LastEditTime: 2021-05-26 16:26:17
* @Description:
* @Copyright: 杭州杰竞科技有限公司 版权所有
-->
......@@ -25,7 +25,7 @@
user's mobile device or desktop. See https://developers.google.com/web/fundamentals/web-app-manifest/
-->
<link rel="manifest" href="%PUBLIC_URL%/manifest.json" />
<link rel="stylesheet" href="//at.alicdn.com/t/font_2223403_e0vkqcd8igi.css">
<link rel="stylesheet" href="//at.alicdn.com/t/font_2223403_oqqm4z9s35j.css">
<!--
Notice the use of %PUBLIC_URL% in the tags above.
......
......@@ -2,7 +2,7 @@
* @Author: 吴文洁
* @Date: 2020-08-24 12:20:57
* @LastEditors: wufan
* @LastEditTime: 2021-05-17 19:53:24
* @LastEditTime: 2021-05-27 10:24:06
* @Description:
* @Copyright: 杭州杰竞科技有限公司 版权所有
-->
......@@ -23,7 +23,7 @@
user's mobile device or desktop. See https://developers.google.com/web/fundamentals/web-app-manifest/
-->
<link rel="manifest" href="%PUBLIC_URL%/manifest.json" />
<link rel="stylesheet" href="//at.alicdn.com/t/font_2223403_e0vkqcd8igi.css">
<link rel="stylesheet" href="//at.alicdn.com/t/font_2223403_oqqm4z9s35j.css">
<!--
Notice the use of %PUBLIC_URL% in the tags above.
......
.employee-manage-page{
.box-header{
margin-bottom:4px;
}
.add-show-btn{
margin-top:12px;
}
}
\ No newline at end of file
......@@ -263,7 +263,7 @@ function EmployeeManage() {
}
return (
<div className=" page employee-manage-page">
<div className="page employee-manage-page">
<div className="content-header">员工管理</div>
<div className="box">
<div className="box-header">
......@@ -272,7 +272,7 @@ function EmployeeManage() {
display: "flex",
alignItems: "center",
justifyContent: "flex-start",
padding: "0px 0 16px",
padding: "0px 0 4px",
}}
>
<div>
......
......@@ -2,13 +2,12 @@
.box-header {
display: flex;
width: calc(100% - 80px);
margin-bottom: 16px;
margin-bottom: 4px;
.header-item {
width: 30%;
margin-right: 3%;
display: flex;
.item-name {
width: 80px;
flex-shrink: 0;
}
}
......
......@@ -2,7 +2,7 @@
* @Author: wufan
* @Date: 2020-11-30 10:47:38
* @LastEditors: wufan
* @LastEditTime: 2021-05-13 17:45:53
* @LastEditTime: 2021-05-30 15:57:40
* @Description: 学员管理页面
* @@Copyrigh: © 2020 杭州杰竞科技有限公司 版权所有
*/
......@@ -68,7 +68,7 @@ function UserManagePage() {
<span className="title">{val}</span>
<span
className="tag"
style={{ color: item.sourceEnum === 'WORK_WE_CHAT' ? '#FFB714' : '#1DCC65'}}
style={{ color: item.sourceEnum === 'WORK_WE_CHAT' ? '#2966FF' : '#1DCC65'}}
>{item.sourceEnum === 'WORK_WE_CHAT' ? '@企业微信' : '@微信'}</span>
</div>
);
......
......@@ -79,7 +79,7 @@
line-height: 45px;
margin-left: 10px;
.span-left-l{
color: #ffb714;
color: #2966FF;
cursor: pointer;
}
}
......@@ -89,7 +89,7 @@
margin-right: 10px;
color: #999;
.span-right-l{
color: #5289FA;
color: #2966FF;
cursor: pointer;
}
}
......
......@@ -39,9 +39,9 @@
height: 18px;
line-height: 18px;
padding: 0 8px;
border: 1px solid #FFB714;
border: 1px solid #2966FF;
border-radius: 9px;
color: #FFB714;
color: #2966FF;
margin-top: 13px;
font-size: 12px;
flex-shrink: 0;
......@@ -54,7 +54,7 @@
left: 0;
height: 100%;
width: 4px;
background: #FFB714;
background: #2966FF;
}
}
}
......
......@@ -58,6 +58,7 @@ export default function ExaminationManager(props: any) {
onPopupScroll={handleScrollTeacherList}
suffixIcon={<span className="icon iconfont" style={{ fontSize: '12px', color: '#BFBFBF' }}>&#xe835;</span>}
value={props.val || null}
filterOption={(input: any, option: any) => option}
onChange={(value) => {
props.onChange(value)
}}
......
......@@ -27,7 +27,7 @@ import _ from "underscore";
import $ from 'jquery';
import './AddLive.less';
const defaultCover = 'https://image.xiaomaiketang.com/xm/YNfi45JwFA.png';
const defaultCover = 'https://image.xiaomaiketang.com/xm/Yip2YtFDwH.png';
const defaultBasicInfo = {
courseName: null, // 课程名称
coverUrl: defaultCover,
......@@ -578,7 +578,7 @@ handleChangeBasicInfo = (field, value) => {
</div>
</div>
<div className="footer">
<div className="footer shrink-footer">
<Button onClick={this.handleGoBack}>取消</Button>
<Button onClick={this.handleShowPreviewModal}>预览</Button>
<Button type="primary" onClick={_.debounce(() => this.handleSubmit(), 3000, true)}>保存</Button>
......
.add-live-page {
position:relative !important;
.box {
margin-bottom: 66px !important;
margin-bottom: 52px !important;
}
.add-live-page__form {
margin-top: 16px;
......@@ -44,17 +44,34 @@
text-align: right;
}
}
.basic-info__wrap, .class-info__wrap, .intro-info__wrap {
.title {
position: relative;
padding-left: 14px;
&::before {
content: "";
position: absolute;
left: 0px;
top: 50%;
transform: translateY(-50%);
width: 4px;
height: 10px;
background: #2966FF;
}
}
}
}
.footer {
position: fixed;
left: 196px;
bottom: 0;
height: 58px;
width: 100%;
width: ~'calc(100% - 218px)';
display: flex;
align-items: center;
justify-content: flex-end;
padding-right: 252px;
padding-right: 72px;
background: #fff;
border-top: 1px solid #E8E8E8;
z-index: 9999;
......
......@@ -27,7 +27,7 @@
}
.handel-btn {
color: #5289fa;
color: #2966FF;
cursor: pointer;
}
.split {
......@@ -41,6 +41,18 @@
font-weight: 500;
color: #333333;
margin-bottom: 16px;
position: relative;
padding-left: 14px;
&::before {
content: "";
position: absolute;
left: 0px;
top: 50%;
transform: translateY(-50%);
width: 4px;
height: 10px;
background: #2966FF;
}
}
.select-course {
width: 300px;
......@@ -119,7 +131,7 @@
height: 37px;
font-size: 26px;
font-weight: 500;
color: #5289fa;
color: #2966FF;
line-height: 37px;
&.can-click {
cursor: pointer;
......
......@@ -17,7 +17,7 @@ import Upload from '@/core/upload';
import './AddLiveBasic.less';
const defaultCover = 'https://image.xiaomaiketang.com/xm/YNfi45JwFA.png';
const defaultCover = 'https://image.xiaomaiketang.com/xm/Yip2YtFDwH.png';
const fieldNames = { label: 'categoryName', value: 'id', children: 'sonCategoryList' };
let cutFlag = false;
let timer = null
......
......@@ -42,7 +42,7 @@
width: 100%;
height: 100%;
object-fit: contain;
border: 1px solid #E8e8e8;
border-radius: 4px;
}
}
......@@ -50,7 +50,7 @@
.default-btn {
margin-left: 16px;
color: #5289FA;
color: #2966FF;
cursor: pointer;
&.disabled {
......@@ -76,7 +76,7 @@
}
.ant-cascader-menu-item-active:not(.ant-cascader-menu-item-disabled){
font-weight:normal !important;
color:#FF9D14 !important;
color:#2966FF !important;
}
#imgCutModalNew {
width: 500px;
......
......@@ -185,7 +185,7 @@
.select-day {
margin-bottom: 4px;
.mark-day {
color: #5289FA;
color: #2966FF;
}
}
}
......
......@@ -136,7 +136,7 @@
}
.checkExample {
width: 60px;
color: #5289FA;
color: #2966FF;
cursor: pointer;
}
.warmup {
......
......@@ -36,8 +36,8 @@ class GraphicsEditor extends React.Component {
resetIndex = (bool) => {
const topDom = document.querySelector('.top-container');
const leftDom = document.querySelector('.left-container');
topDom.style.zIndex = bool ? 'auto' : 112;
leftDom.style.zIndex = bool ? 'auto' : 2;
// topDom.style.zIndex = bool ? 'auto' : 112;
// leftDom.style.zIndex = bool ? 'auto' : 2;
}
renderEditor() {
......
......@@ -32,7 +32,7 @@ const courseStateShow = {
UN_START: {
code: 1,
title: "待开课",
color: "#FFB714",
color: "#FFB129",
},
STARTING: {
code: 2,
......@@ -166,7 +166,7 @@ class LiveCourseList extends React.Component {
})
}
{ !hasCover &&
<img className="course-cover" src={'https://image.xiaomaiketang.com/xm/YNfi45JwFA.png'} />
<img className="course-cover" src={'https://image.xiaomaiketang.com/xm/Yip2YtFDwH.png'} />
}
<div>
{ record.courseName.length > 17?
......@@ -262,7 +262,7 @@ class LiveCourseList extends React.Component {
{
title: <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',fontWeight:'normal'}}>&#xe61d;</i></Tooltip>
</span>,
width: "9%",
key: "shelfState",
......@@ -360,7 +360,7 @@ class LiveCourseList extends React.Component {
<span className="operate-text">更多</span>
<span
className="iconfont icon"
style={{ color: "#5289FA" }}
style={{ color: "#2966FF" }}
>
&#xe824;
</span>
......@@ -400,7 +400,7 @@ class LiveCourseList extends React.Component {
})
}
{ !hasCover &&
<img className="course-cover" src={'https://image.xiaomaiketang.com/xm/YNfi45JwFA.png'} />
<img className="course-cover" src={'https://image.xiaomaiketang.com/xm/Yip2YtFDwH.png'} />
}
<div>
{ record.courseName.length > 17?
......
......@@ -83,13 +83,13 @@
}
.courseware{
font-size: 14px;
color: #5289FA;
color: #2966FF;
line-height: 20px;
text-align:right;
cursor:pointer;
}
.quota-icon{
color:#5289FA;
color:#2966FF;
cursor:pointer;
}
.operate {
......@@ -97,7 +97,7 @@
align-items: center;
flex-wrap: wrap;
.operate__item {
color: #5289FA;
color: #2966FF;
cursor: pointer;
&.split {
margin: 0 8px;
......@@ -106,7 +106,7 @@
}
}
.operate-text {
color: #5289FA;
color: #2966FF;
cursor: pointer;
}
.course-start-end {
......
/*
* @Author: 吴文洁
* @Date: 2020-08-05 10:07:47
* @LastEditors: zhangleyuan
* @LastEditTime: 2021-05-10 10:15:31
* @LastEditors: wufan
* @LastEditTime: 2021-05-27 16:37:28
* @Description: 图文课新增/编辑页
* @Copyright: 杭州杰竞科技有限公司 版权所有
*/
......@@ -33,7 +33,7 @@ const fieldNames = { label: 'categoryName', value: 'id', children: 'sonCategory
//添加课程时课程默认的一些值
const defaultShelfState = 'YES';
const whetherVisitorsJoin = 'NO'
const defaultCoverUrl = 'https://image.xiaomaiketang.com/xm/YNfi45JwFA.png';
const defaultCoverUrl = 'https://image.xiaomaiketang.com/xm/wFnpZtp2yB.png';
let cutFlag = false;
class AddGraphicsCourse extends React.Component {
......@@ -530,7 +530,7 @@ class AddGraphicsCourse extends React.Component {
const courseWareIcon = FileVerifyMap[videoType] ? FileTypeIcon[FileVerifyMap[videoType].type] : FileTypeIcon[videoType];
return (
<div className="page add-video-course-page">
<div className="page add-graphics-course-page">
<Breadcrumbs
navList={pageType === "add" ? "新建图文课" : "编辑图文课"}
goBack={this.handleGoBack}
......@@ -596,7 +596,7 @@ class AddGraphicsCourse extends React.Component {
</div>
</div>
<div className="footer">
<div className="footer shrink-footer">
<Button onClick={this.handleGoBack}>取消</Button>
<Button onClick={this.handleShowPreviewModal}>预览</Button>
<Button type="primary" onClick={_.debounce(() => this.handleSubmit(), 3000, true)}>保存</Button>
......
.add-video-course-page {
.add-graphics-course-page {
position:relative !important;
.box{
margin-bottom:66px !important;
margin-bottom:52px !important;
}
.ant-radio-group {
display: flex;
......@@ -80,6 +80,7 @@
width: 100%;
height: 100%;
object-fit: contain;
border-radius: 4px;
}
}
.empty-img {
......@@ -129,13 +130,14 @@
.footer {
position: fixed;
left: 196px;
bottom: 0;
height: 58px;
width: 100%;
width: ~'calc(100% - 218px)';
display: flex;
align-items: center;
justify-content: flex-end;
padding-right: 252px;
padding-right: 72px;
background: #fff;
border-top: 1px solid #E8E8E8;
z-index: 999;
......
/*
* @Author: 吴文洁
* @Date: 2020-08-05 10:12:45
* @LastEditors: wufan
* @LastEditTime: 2021-05-13 16:32:38
* @LastEditors: Please set LastEditors
* @LastEditTime: 2021-05-27 20:13:53
* @Description: 视频课-列表模块
* @Copyright: 杭州杰竞科技有限公司 版权所有
*/
......@@ -25,7 +25,7 @@ import User from '@/common/js/user'
import './GraphicsCourseList.less';
const ENV = process.env.DEPLOY_ENV || 'dev';
const defaultCoverUrl = 'https://image.xiaomaiketang.com/xm/YNfi45JwFA.png';
const defaultCoverUrl = 'https://image.xiaomaiketang.com/xm/wFnpZtp2yB.png';
class GraphicsCourseList extends React.Component {
......@@ -137,7 +137,7 @@ class GraphicsCourseList extends React.Component {
{
title: <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',fontWeight:'normal'}}>&#xe61d;</i></Tooltip>
</span>,
width: 120,
dataIndex: "courseware",
......@@ -218,7 +218,7 @@ class GraphicsCourseList extends React.Component {
<span className="operate-text">更多</span>
<span
className="iconfont icon"
style={{ color: "#5289FA" }}
style={{ color: "#2966FF" }}
>
&#xe824;
</span>
......
.video-course-list {
margin-top: 12px;
.video-list-table{
.video-list-table {
tbody {
tr{
&:nth-child(even){
tr {
&:nth-child(even) {
background: transparent !important;
td{
background:#FFF !important;
td {
background: #fff !important;
}
}
&:nth-child(odd){
background: #FAFAFA !important;
td{
background: #FAFAFA !important;
&:nth-child(odd) {
background: #fafafa !important;
td {
background: #fafafa !important;
}
}
&:hover{
td{
background:#F3f6fa !important;
&:hover {
td {
background: #f3f6fa !important;
}
}
}
}
}
.watchUserCount{
text-align:right;
padding:16px;
.watchUserCount {
text-align: right;
padding: 16px;
}
.operate-text {
color: #5289FA;
color: #2966FF;
cursor: pointer;
}
.operate {
display: flex;
&__item {
color: #5289FA;
color: #2966FF;
cursor: pointer;
&.split {
margin: 0 8px;
color: #BFBFBF;
color: #bfbfbf;
}
}
}
.more-operate{
line-height:20px;
.more-operate {
line-height: 20px;
}
.record__item {
display: flex;
.course-cover {
min-width: 97px;
max-width: 97px;
width: 97px;
height: 50px;
border-radius: 2px;
margin-right: 8px;
background-color: #666;
object-fit: contain;
}
.course-name {
color: #666;
width:188px;
width: 188px;
overflow: hidden;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
height:48px;
height: 48px;
}
}
}
.video-course-more-menu {
......@@ -85,4 +83,4 @@
background: #f3f6fa;
}
}
}
\ No newline at end of file
}
......@@ -284,7 +284,7 @@ class ManageCoursewareModal extends React.Component {
onCancel={() => { }}
>
<span style={{
color: '#5289FA',
color: '#2966FF',
cursor: 'pointer'
}}>删除</span>
</Popconfirm>
......
......@@ -60,7 +60,7 @@
}
&:hover {
.name {
color: #FFB714;
color: #2966FF;
}
}
}
......
......@@ -27,7 +27,7 @@ class PreviewGraphicsModal extends React.Component {
footer={null}
maskClosable={false}
closeIcon={<span className="icon iconfont modal-close-icon">&#xe6ef;</span>}
className="preview-live-graphics-modal"
className="preview-graphics-modal"
>
<div className="container__wrap">
<div className="container">
......
.preview-live-graphics-modal {
.preview-graphics-modal {
.ant-modal-body {
background-image: url('https://image.xiaomaiketang.com/xm/xZWdziTCAf.png');
background-size: 100% 100%;
......@@ -13,13 +13,12 @@
}
.container {
overflow: scroll;
overflow: auto;
height: 100%;;
.course-cover, .course-url {
width: 100%;
height: 141px;
background: #000;
}
&__body {
......@@ -55,21 +54,20 @@
font-size: 12px;
color: #333333;
padding: 0 10px;
border-bottom: 1px solid #E8E8E8;
.title-word {
position: relative;
margin-right: 15px;
cursor: pointer;
}
.selected {
color: #FFB714;
color: #2966FF;
&::after {
content: '';
position: absolute;
bottom: -4px;
width: 20px;
height: 1px;
background: #FFB714;
background: #2966FF;
left: 50%;
transform: translateX(-50%);
}
......
......@@ -5,7 +5,7 @@
.select-container{
margin-bottom:12px;
.con{
background: #FFF4DD;
background: #E9EFFF;
border-radius: 4px;
padding:6px 16px;
display: inline-flex;
......@@ -13,7 +13,7 @@
justify-content: space-between;
.tip{
font-size:14px;
color:#FF9D14;
color:#2966FF;
margin-right:8px;
}
.text{
......@@ -22,7 +22,7 @@
margin-right:30px;
}
.clear{
color:#5289FA;
color:#2966FF;
font-size:14px;
}
......
......@@ -131,7 +131,7 @@
margin-bottom: 40px;
.content {
color:rgba(82, 137, 250, 1);
color:#2966FF;
cursor: pointer;
}
}
......
......@@ -2,7 +2,7 @@
* @Author: 吴文洁
* @Date: 2020-08-05 10:07:47
* @LastEditors: wufan
* @LastEditTime: 2021-05-25 20:00:18
* @LastEditTime: 2021-05-27 19:25:48
* @Description: 线下课新增/编辑页
* @Copyright: 杭州杰竞科技有限公司 版权所有
*/
......@@ -41,7 +41,7 @@ import MultipleDatePicker from '@/components/MultipleDatePicker';
import './AddOfflineCourse.less';
const { Option } = Select;
const defaultCoverUrl = 'https://image.xiaomaiketang.com/xm/YNfi45JwFA.png';
const defaultCoverUrl = 'https://image.xiaomaiketang.com/xm/pxbWKsYA87.png';
let cutFlag = false;
const unitList = [
{ key: 'HOUR', value: '小时' },
......@@ -1046,8 +1046,8 @@ class AddOfflineCourse extends React.Component {
<span
onClick={() => this.setState({ startTimeApply: moment(`${moment(calendarTime[0]).format('YYYY-MM-DD')} ${moment(startTime).format('HH:mm')}`).subtract(1, 'days').valueOf(), endTimeApply: moment(`${moment(calendarTime[0]).format('YYYY-MM-DD')} ${moment(startTime).format('HH:mm')}`).valueOf() - 1000 })}
style={{
color: '#FFB714',
border: '1px solid #FFB714',
color: '#2966FF',
border: '1px solid #2966FF',
padding: '2px 8px',
borderRadius: '2px',
marginRight: 8,
......@@ -1056,8 +1056,8 @@ class AddOfflineCourse extends React.Component {
<span
onClick={() => this.setState({ startTimeApply: moment(`${moment(calendarTime[0]).format('YYYY-MM-DD')} ${moment(startTime).format('HH:mm')}`).subtract(2, 'days').valueOf(), endTimeApply: moment(`${moment(calendarTime[0]).format('YYYY-MM-DD')} ${moment(startTime).format('HH:mm')}`).valueOf() - 1000 })}
style={{
color: '#FFB714',
border: '1px solid #FFB714',
color: '#2966FF',
border: '1px solid #2966FF',
padding: '2px 8px',
borderRadius: '2px',
marginRight: 8,
......@@ -1066,8 +1066,8 @@ class AddOfflineCourse extends React.Component {
<span
onClick={() => this.setState({ startTimeApply: moment(`${moment(calendarTime[0]).format('YYYY-MM-DD')} ${moment(startTime).format('HH:mm')}`).subtract(3, 'days').valueOf(), endTimeApply: moment(`${moment(calendarTime[0]).format('YYYY-MM-DD')} ${moment(startTime).format('HH:mm')}`).valueOf() - 1000 })}
style={{
color: '#FFB714',
border: '1px solid #FFB714',
color: '#2966FF',
border: '1px solid #2966FF',
padding: '2px 8px',
borderRadius: '2px',
marginRight: 8,
......
.add-offline-course-page {
position:relative !important;
.box{
margin-bottom:66px !important;
margin-bottom:52px !important;
}
.ant-radio-group {
display: flex;
......@@ -36,6 +36,18 @@
line-height: 22px;
margin-bottom: 16px;
margin-left: -16px;
position: relative;
padding-left: 14px;
&::before {
content: "";
position: absolute;
left: 0px;
top: 50%;
transform: translateY(-50%);
width: 4px;
height: 10px;
background: #2966FF;
}
}
}
.label{
......@@ -98,7 +110,7 @@
.select-day {
margin-bottom: 4px;
.mark-day {
color: #FFB714;
color: #2966FF;
}
}
}
......@@ -165,7 +177,6 @@
width: 100%;
height: 100%;
object-fit: contain;
border: 1px solid #E8e8e8;
}
}
......@@ -173,7 +184,7 @@
.default-btn {
margin-left: 16px;
color: #5289FA;
color: #2966FF;
cursor: pointer;
&.disabled {
......@@ -219,11 +230,11 @@
position: fixed;
bottom: 0;
height: 58px;
width: 100%;
width: ~'calc(100% - 218px)';
display: flex;
align-items: center;
justify-content: flex-end;
padding-right: 252px;
padding-right: 72px;
background: #fff;
border-top: 1px solid #E8E8E8;
z-index: 999;
......
......@@ -13,7 +13,7 @@
width: 4px;
height: 16px;
content: '';
background: #FFB714;
background: #2966FF;
left: 0;
top: 5px;
}
......@@ -66,7 +66,7 @@
}
}
.calendar-text {
color: #FF9D14;
color: #2966FF;
line-height: 20px;
margin: 0 44px;
}
......@@ -85,7 +85,8 @@
cursor: pointer;
}
&.selected {
background: rgba(255, 183, 20, 0.06);
background: #E9EFFF;
color: #2966FF;
}
}
}
......
import React from 'react';
import { Row, Input, Select,Tooltip } from 'antd';
import React from 'react'
import { Row, Input, Select, Tooltip } from 'antd'
import RangePicker from "@/modules/common/DateRangePicker";
import RangePicker from '@/modules/common/DateRangePicker'
import './OfflineCourseFilter.less';
import moment from 'moment';
import StoreService from "@/domains/store-domain/storeService";
import './OfflineCourseFilter.less'
import moment from 'moment'
import StoreService from '@/domains/store-domain/storeService'
const { Search } = Input;
const { Option } = Select;
const { Search } = Input
const { Option } = Select
const DEFAULT_QUERY = {
courseName: null, // 课程名称
operatorId: null, // 创建人
beginTime: null, // 开始日期
endTime: null, // 结束日期
shelfState:null,
courseName: null, // 课程名称
operatorId: null, // 创建人
beginTime: null, // 开始日期
endTime: null, // 结束日期
shelfState: null,
}
const defaultTeacherQuery = {
size: 10,
current: 1,
nickName:null
nickName: null,
}
class OfflineCourseFilter extends React.Component {
constructor(props) {
super(props);
super(props)
this.state = {
query: { ...DEFAULT_QUERY }, // 使用扩展运算符,避免浅拷贝
query: { ...DEFAULT_QUERY }, // 使用扩展运算符,避免浅拷贝
teacherQuery: defaultTeacherQuery,
teacherList:[],
expandFilter:false
teacherList: [],
expandFilter: false,
}
}
componentDidMount() {
this.getTeacherList();
this.getTeacherList()
}
getTeacherList(current = 1, selectList){
const { teacherQuery,teacherList} = this.state;
getTeacherList(current = 1, selectList) {
const { teacherQuery, teacherList } = this.state
const _query = {
...teacherQuery,
current,
size:10
};
StoreService.getStoreUserBasicPage( _query).then((res) => {
const { result = {} } = res;
const { records = [], total = 0, hasNext } = result;
const list = current > 1 ? teacherList.concat(records) : records;
this.setState({
hasNext,
teacherList: list,
})
});
size: 10,
}
StoreService.getStoreUserBasicPage(_query).then((res) => {
const { result = {} } = res
const { records = [], total = 0, hasNext } = result
const list = current > 1 ? teacherList.concat(records) : records
this.setState({
hasNext,
teacherList: list,
})
})
}
// 滑动加载更多讲师列表
handleScrollTeacherList = (e) => {
const { hasNext } = this.state;
const container = e.target;
const scrollToBottom = container && container.scrollHeight <= container.clientHeight + container.scrollTop;
const { hasNext } = this.state
const container = e.target
const scrollToBottom = container && container.scrollHeight <= container.clientHeight + container.scrollTop
if (scrollToBottom && hasNext) {
const { teacherQuery } = this.state;
let _teacherQuery = teacherQuery;
const { teacherQuery } = this.state
let _teacherQuery = teacherQuery
_teacherQuery.current = _teacherQuery.current + 1
this.setState({
teacherQuery:{..._teacherQuery}
},()=>{this.getTeacherList(_teacherQuery.current)})
this.setState(
{
teacherQuery: { ..._teacherQuery },
},
() => {
this.getTeacherList(_teacherQuery.current)
}
)
}
}
// 改变搜索条件
handleChangeQuery = (field, value) => {
this.setState({
query: {
...this.state.query,
[field]: value,
current: 1,
handleChangeQuery = (field, value) => {
this.setState(
{
query: {
...this.state.query,
[field]: value,
current: 1,
},
},
() => {
if (field === 'courseName') return
this.props.onChange(this.state.query)
}
}, () => {
if (field === 'courseName') return;
this.props.onChange(this.state.query)
});
)
}
handleChangeDates = (dates) => {
const query = _.clone(this.state.query);
const query = _.clone(this.state.query)
if (_.isEmpty(dates)) {
delete query.beginTime;
delete query.endTime;
delete query.beginTime
delete query.endTime
} else {
query.beginTime = dates[0].valueOf();
query.endTime = dates[1].valueOf();
query.beginTime = dates[0]?.startOf('day').valueOf()
query.endTime = dates[0]?.endOf('day').valueOf()
}
this.setState({
query:{
...query,
current: 1,
this.setState(
{
query: {
...query,
current: 1,
},
},
() => {
this.props.onChange(this.state.query)
}
}, () => {
this.props.onChange(this.state.query);
})
)
}
// 重置搜索条件
handleReset = () => {
this.setState({
query: DEFAULT_QUERY,
}, () => {
this.props.onChange(this.state.query);
})
this.setState(
{
query: DEFAULT_QUERY,
},
() => {
this.props.onChange(this.state.query)
}
)
}
render() {
const {
query: {
courseName,
courseState,
shelfState,
},
query: { courseName, courseState, shelfState },
expandFilter,
} = this.state;
} = this.state
return (
<div className="video-course-filter">
<Row type="flex" justify="space-between" align="top">
<div className="search-condition">
<div className="search-condition__item">
<span className="search-name">线下课名称:</span>
<div className='video-course-filter'>
<Row type='flex' justify='space-between' align='top'>
<div className='search-condition'>
<div className='search-condition__item'>
<span className='search-name'>线下课名称:</span>
<Search
value={courseName}
placeholder="搜索线下课名称"
onChange={(e) => { this.handleChangeQuery('courseName', e.target.value)}}
onSearch={ () => { this.props.onChange(this.state.query) } }
style={{ width: "calc(100% - 84px)" }}
enterButton={<span className="icon iconfont" style={{fontSize: '16px'}}>&#xe832;</span>}
placeholder='搜索线下课名称'
onChange={(e) => {
this.handleChangeQuery('courseName', e.target.value)
}}
onSearch={() => {
this.props.onChange(this.state.query)
}}
style={{ width: 'calc(100% - 84px)' }}
enterButton={
<span className='icon iconfont' style={{ fontSize: '16px' }}>
&#xe832;
</span>
}
/>
</div>
<div className="search-condition__item">
<span className="shelf-status">学院展示:</span>
<div className='search-condition__item'>
<span className='shelf-status'>学院展示:</span>
<Select
style={{ width: "calc(100% - 84px)" }}
placeholder="请选择"
style={{ width: 'calc(100% - 84px)' }}
placeholder='请选择'
allowClear={true}
value={shelfState}
onChange={(value) => { this.handleChangeQuery('shelfState', value) }}
suffixIcon={<span className="icon iconfont" style={{fontSize:'12px',color:'#BFBFBF'}}>&#xe835;</span>}
>
<Option value="YES">开启</Option>
<Option value="NO">关闭</Option>
onChange={(value) => {
this.handleChangeQuery('shelfState', value)
}}
suffixIcon={
<span className='icon iconfont' style={{ fontSize: '12px', color: '#BFBFBF' }}>
&#xe835;
</span>
}>
<Option value='YES'>开启</Option>
<Option value='NO'>关闭</Option>
</Select>
</div>
</div>
<div className="reset-fold-area">
<Tooltip title="清空筛选"><span className="resetBtn iconfont icon" onClick={this.handleReset}>&#xe61b; </span></Tooltip>
</div>
<div className='reset-fold-area'>
<Tooltip title='清空筛选'>
<span className='resetBtn iconfont icon' onClick={this.handleReset}>
&#xe61b;{' '}
</span>
</Tooltip>
</div>
</Row>
</div>
)
}
}
export default OfflineCourseFilter;
export default OfflineCourseFilter
/*
* @Author: 吴文洁
* @Date: 2020-08-05 10:12:45
* @LastEditors: zhangleyuan
* @LastEditTime: 2021-03-27 16:24:47
* @LastEditors: Please set LastEditors
* @LastEditTime: 2021-05-27 20:14:01
* @Description: 视频课-列表模块
* @Copyright: 杭州杰竞科技有限公司 版权所有
*/
......@@ -123,7 +123,7 @@ class OfflineCourseList extends React.Component {
{
title: <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',fontWeight:'normal'}}>&#xe61d;</i></Tooltip>
</span>,
width: 120,
dataIndex: "courseware",
......@@ -200,7 +200,7 @@ class OfflineCourseList extends React.Component {
<span className="operate-text">更多</span>
<span
className="iconfont icon"
style={{ color: "#5289FA" }}
style={{ color: "#2966FF" }}
>
&#xe824;
</span>
......
......@@ -28,14 +28,14 @@
padding:16px;
}
.operate-text {
color: #5289FA;
color: #2966FF;
cursor: pointer;
}
.operate {
display: flex;
&__item {
color: #5289FA;
color: #2966FF;
cursor: pointer;
&.split {
......
......@@ -87,8 +87,8 @@ class PreviewOfflineModal extends React.Component {
signOutEndTimeUnit,
} = this.state;
const unit = (signInTimeUnit || '').toLocaleLowerCase() + 's';
const time = (signInType == 'START_AGO' ? startTime : endTime) && moment(signInType == 'START_AGO' ? startTime : endTime).subtract(signInTimeNum, unit);
const signInTime = (time && signInTimeNum) && `${moment(time).format('HH:mm')} ~ ${moment(signInType == 'START_AGO' ? startTime : endTime).format('HH:mm')}`;
const time = (signInType === 'START_AGO' ? startTime : endTime) && moment(signInType === 'START_AGO' ? startTime : endTime).subtract(signInTimeNum, unit);
const signInTime = (time && signInTimeNum) && `${moment(time).format('HH:mm')} ~ ${moment(signInType === 'START_AGO' ? startTime : endTime).format('HH:mm')}`;
const endUnit = (signOutEndTimeUnit || '').toLocaleLowerCase() + 's';
const end = (endTime && signOutEndTimeNum) && moment(endTime).add(signOutEndTimeNum, endUnit);
let startUnit = '';
......@@ -108,7 +108,7 @@ class PreviewOfflineModal extends React.Component {
footer={null}
maskClosable={false}
closeIcon={<span className="icon iconfont modal-close-icon">&#xe6ef;</span>}
className="preview-live-graphics-modal"
className="preview-offline-modal"
>
<div className="container__wrap">
<div className="container">
......
.preview-live-graphics-modal {
.preview-offline-modal {
.ant-modal-body {
background-image: url('https://image.xiaomaiketang.com/xm/xZWdziTCAf.png');
background-size: 100% 100%;
......@@ -13,7 +13,7 @@
}
.container {
overflow: scroll;
overflow: auto;
height: 100%;;
&__header {
position: relative;
......@@ -134,7 +134,7 @@
content: '';
width: 2px;
height: 14px;
background: #FFB714;
background: #2966FF;
left: 0;
top: 2px;
}
......
.add-video-course-page {
position:relative !important;
.box{
margin-bottom:66px !important;
margin-bottom:52px !important;
}
.ant-radio-group {
display: flex;
......@@ -129,13 +129,14 @@
.footer {
position: fixed;
left: 196px;
bottom: 0;
height: 58px;
width: 100%;
width: ~'calc(100% - 218px)';
display: flex;
align-items: center;
justify-content: flex-end;
padding-right: 252px;
padding-right: 72px;
background: #fff;
border-top: 1px solid #E8E8E8;
z-index: 999;
......
.video-course-list {
margin-top: 12px;
.video-list-table{
&.video-course-list-mt {
margin-top: 4px;
}
.video-list-table {
tbody {
tr{
&:nth-child(even){
tr {
&:nth-child(even) {
background: transparent !important;
td{
background:#FFF !important;
td {
background: #fff !important;
}
}
&:nth-child(odd){
background: #FAFAFA !important;
td{
background: #FAFAFA !important;
&:nth-child(odd) {
background: #fafafa !important;
td {
background: #fafafa !important;
}
}
&:hover{
td{
background:#F3f6fa !important;
&:hover {
td {
background: #f3f6fa !important;
}
}
}
}
}
.watchUserCount{
text-align:right;
padding:16px;
.watchUserCount {
text-align: right;
padding: 16px;
}
.operate-text {
color: #5289FA;
color: #2966FF;
cursor: pointer;
}
.operate {
display: flex;
&__item {
color: #5289FA;
color: #2966FF;
cursor: pointer;
&.split {
margin: 0 8px;
color: #BFBFBF;
color: #bfbfbf;
}
}
}
.more-operate{
line-height:20px;
.more-operate {
line-height: 20px;
}
.record__item {
display: flex;
......@@ -56,21 +59,20 @@
height: 50px;
border-radius: 2px;
margin-right: 8px;
background-color: #666;
}
.course-name {
color: #666;
width:188px;
width: 188px;
overflow: hidden;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
height:48px;
height: 48px;
}
}
.related-task{
.related-task {
text-overflow: -o-ellipsis-lastline;
overflow: hidden;
text-overflow: ellipsis;
......@@ -93,4 +95,4 @@
background: #f3f6fa;
}
}
}
\ No newline at end of file
}
/*
* @Author: 吴文洁
* @Date: 2020-08-05 10:08:06
* @LastEditors: zhangleyuan
* @LastEditTime: 2020-12-26 15:56:49
* @Description: 云课堂-视频课入口页面
* @Copyright: 杭州杰竞科技有限公司 版权所有
*/
import React from 'react';
import VideoCourseFilter from './components/VideoCourseFilter';
import VideoCourseOpt from './components/VieoCourseOpt';
import VideoCourseList from './components/VideoCourseList';
import CourseService from "@/domains/course-domain/CourseService";
import React from 'react'
import { Tabs } from 'antd'
import VideoCourseFilter from './components/VideoCourseFilter'
import VideoCourseOpt from './components/VieoCourseOpt'
import VideoCourseList from './components/VideoCourseList'
import CourseService from '@/domains/course-domain/CourseService'
import User from '@/common/js/user'
const { TabPane } = Tabs
class VideoCourse extends React.Component {
constructor(props) {
super(props);
super(props)
this.state = {
query: {
size: 10,
current: 1,
storeId:User.getStoreId()
storeId: User.getStoreId(),
},
dataSource: [], // 视频课列表
totalCount: 0, // 视频课数据总条数
dataSource: [], // 视频课列表
totalCount: 0, // 视频课数据总条数
currentTabKey: 'internal',
}
}
componentWillMount() {
// 获取视频课列表
this.handleFetchScheduleList();
this.handleFetchScheduleList()
}
// 获取视频课列表
handleFetchScheduleList = (_query = {}) => {
const { currentTabKey } = this.state
const query = {
...this.state.query,
..._query
};
..._query,
courseDivision: currentTabKey === 'external' ? 1 : null,
}
// 更新请求参数
this.setState({ query });
this.setState({ query })
CourseService.videoSchedulePage(query).then((res) => {
const { result = {} } = res || {};
const { records = [], total = 0 } = result;
const { result = {} } = res || {}
const { records = [], total = 0 } = result
if (Number(total) && query.size * (query.current - 1) >= Number(total)) {
this.handleFetchScheduleList({
...query,
current: 1,
})
return
}
this.setState({
dataSource: records,
totalCount: Number(total)
});
});
totalCount: Number(total),
})
})
}
currenTabChange = (currentTabKey) => {
const { query } = this.state
this.setState(
{
currentTabKey,
query: {
...query,
current: 1,
},
},
() => {
this.handleFetchScheduleList()
}
)
}
changeShelfState = (index, shelfState) => {
const { dataSource } = this.state
dataSource[index].shelfState = shelfState
this.setState({
dataSource,
})
}
render() {
const { dataSource, totalCount, query } = this.state;
const { dataSource, totalCount, query, currentTabKey } = this.state
return (
<div className="page video-course-page">
<div className="content-header">视频课</div>
<div className='page video-course-page'>
<div className='content-header'>视频课</div>
<div className="box">
{/* 搜索模块 */}
<VideoCourseFilter
onChange={this.handleFetchScheduleList}
/>
<div className='box'>
<Tabs onChange={this.currenTabChange} activeKey={currentTabKey}>
<TabPane key='internal' tab='内部课程'></TabPane>
<TabPane key='external' tab='外部课程'></TabPane>
</Tabs>
{/* 搜索模块 */}
<VideoCourseFilter currentTabKey={currentTabKey} onChange={this.handleFetchScheduleList} />
{/* 操作模块 */}
<VideoCourseOpt />
<If condition={currentTabKey === 'internal'}>
<VideoCourseOpt />
</If>
{/* 视频课列表模块 */}
<VideoCourseList
type={currentTabKey}
query={query}
dataSource={dataSource}
totalCount={totalCount}
onChange={this.handleFetchScheduleList}
changeShelfState={this.changeShelfState}
/>
</div>
</div>
......@@ -82,4 +111,4 @@ class VideoCourse extends React.Component {
}
}
export default VideoCourse;
export default VideoCourse
......@@ -189,13 +189,13 @@ class Home extends React.Component {
}
}
})
this._chart.line().position('time*studyNum').color('#5289FA').tooltip('time*studyNum', function( time, studyNum){
this._chart.line().position('time*studyNum').color('#2966FF').tooltip('time*studyNum', function( time, studyNum){
return {
name: '学习人数',
value: studyNum + '人'
}
});
this._chart.line().position('time*studyTime').color('#FFB714').tooltip('time*studyTime', function( time, studyTime){
this._chart.line().position('time*studyTime').color('#FFBB54').tooltip('time*studyTime', function( time, studyTime){
return {
name: '人均学习时长',
value: studyTime + '分钟'
......@@ -265,8 +265,9 @@ class Home extends React.Component {
};
return (
<div className="home-page">
<div className="home-title">数据概况</div>
<div className="data-box">
<div className="data-wrap">
<div className="home-title">数据概况</div>
<div className="data-box">
<div className="data-item">
<div className="header">
<img className="header-icon" src="https://image.xiaomaiketang.com/xm/wAaFtjeRsM.png" />
......@@ -364,65 +365,67 @@ class Home extends React.Component {
</div>
</div>
</div>
<div className="home-title">学习概况</div>
<div className="study-box">
<div className="study-item">
<div className="study-title">课程学习排行榜</div>
<div className="study-header">
<div className="study-tab">
<span
className={`tab${scheduleType === 'LIVE' ? ' selected' : ''}`}
onClick={() => this.setState({ scheduleType: 'LIVE' }, () => this.getHotCourse())}
>直播课</span>
<span
className={`tab${scheduleType === 'VOICE' ? ' selected' : ''}`}
onClick={() => this.setState({ scheduleType: 'VOICE' }, () => this.getHotCourse())}
>视频课</span>
<span
className={`tab${scheduleType === 'PICTURE' ? ' selected' : ''}`}
onClick={() => this.setState({ scheduleType: 'PICTURE' }, () => this.getHotCourse())}
>图文课</span>
</div>
<div className="study-select">
<span className="select-word">{moment().subtract(timeRange - 1, 'day').format('MM.DD')} ~ {moment().format('MM.DD')}</span>
<Select
style={{ width: 88 }}
value={timeRange}
onChange={(value) => {
this.setState({ timeRange: value }, () => this.getHotCourse());
}}
>
<Option value="7">近7天</Option>
<Option value="15">近15天</Option>
<Option value="30">近30天</Option>
</Select>
</div>
</div>
{_.isEmpty(list) ?
<div className="study-empty">
<img src="https://image.xiaomaiketang.com/xm/52dmait5Bx.png" />
<div>暂无课程上榜</div>
</div>
<div className="study-wrap">
<div className="home-title">学习概况</div>
<div className="study-box">
<div className="study-item">
<div className="study-title">课程学习排行榜</div>
<div className="study-header">
<div className="study-tab">
<span
className={`tab${scheduleType === 'LIVE' ? ' selected' : ''}`}
onClick={() => this.setState({ scheduleType: 'LIVE' }, () => this.getHotCourse())}
>直播课</span>
<span
className={`tab${scheduleType === 'VOICE' ? ' selected' : ''}`}
onClick={() => this.setState({ scheduleType: 'VOICE' }, () => this.getHotCourse())}
>视频课</span>
<span
className={`tab${scheduleType === 'PICTURE' ? ' selected' : ''}`}
onClick={() => this.setState({ scheduleType: 'PICTURE' }, () => this.getHotCourse())}
>图文课</span>
</div>
<div className="study-select">
<span className="select-word">{moment().subtract(timeRange - 1, 'day').format('MM.DD')} ~ {moment().format('MM.DD')}</span>
<Select
style={{ width: 88 }}
value={timeRange}
onChange={(value) => {
this.setState({ timeRange: value }, () => this.getHotCourse());
}}
>
<Option value="7">近7天</Option>
<Option value="15">近15天</Option>
<Option value="30">近30天</Option>
</Select>
</div>
</div>
: list.map((item, index) => (
<div className={`table-item${index % 2 ? '' : ' odd'}`} key={item.id}>
{index < 3 ?
<span className="table-number"><img src={this.showNumber(index)} className="table-image" /></span>
: <span className="table-number">{index + 1}</span>
}
<div className="table-data">
<div className="table-name">
<Tooltip title={item.courseName}>
{item.courseName}
</Tooltip>
{_.isEmpty(list) ?
<div className="study-empty">
<img src="https://image.xiaomaiketang.com/xm/52dmait5Bx.png" />
<div>暂无课程上榜</div>
</div>
: list.map((item, index) => (
<div className={`table-item${index % 2 ? '' : ' odd'}`} key={item.id}>
{index < 3 ?
<span className="table-number"><img src={this.showNumber(index)} className="table-image" /></span>
: <span className="table-number">{index + 1}</span>
}
<div className="table-data">
<div className="table-name">
<Tooltip title={item.courseName}>
{item.courseName}
</Tooltip>
</div>
<div className="table-tag">{item.categoryName}</div>
</div>
<div className="table-tag">{item.categoryName}</div>
<span className="table-study">{item.studyNum || 0}人已学习</span>
</div>
<span className="table-study">{item.studyNum || 0}人已学习</span>
</div>
))
}
</div>
<div className="study-item">
))
}
</div>
<div className="study-item">
<div className="study-title">培训计划完成情况
<Tooltip overlayClassName="data-plan-tooltip" title="若某人加入多个培训计划,则需完成所有已加入的培训计划后,才视为已完成培训">
<span className="iconfont icon">&#xe61d;</span>
......@@ -461,7 +464,7 @@ class Home extends React.Component {
<Geom
type="intervalStack"
position="percent"
color={['item', ['#FDB513', '#5289FA']]}
color={['item', ['#FFBB54', '#2966FF']]}
tooltip={[
"item*percent",
(item, percent) => {
......@@ -504,6 +507,7 @@ class Home extends React.Component {
<div className="word">完成培训</div>
</div>
</div>
</div>
</div>
<div className="study-chart">
<div className="study-title">学习人数与时长
......
......@@ -12,7 +12,7 @@ const ENUM = {
UN_START: {
code: 1,
title: "待开课",
color: "#FFB714",
color: "#2966FF",
},
STARTING: {
code: 2,
......
......@@ -2,8 +2,8 @@
* @Description:
* @Author: zangsuyun
* @Date: 2021-03-19 18:05:23
* @LastEditors: yuananting
* @LastEditTime: 2021-04-15 21:46:41
* @LastEditors: wufan
* @LastEditTime: 2021-05-30 16:48:46
* @Copyright: © 2020 杭州杰竞科技有限公司 版权所有
*/
......@@ -199,10 +199,10 @@ class Classification extends Component {
className="sider-search"
placeholder="搜索名称分类"
onSearch={(value) => {
// TODO 调用查询分类接口
this.queryCategoryTree(value);
}}
enterButton={<span className="icon iconfont">&#xe832;</span>}
style={{width: 230}}
/>
<div className="sider-btn">
<Button
......
......@@ -2,8 +2,8 @@
* @Description:
* @Author: zangsuyun
* @Date: 2021-03-19 18:16:58
* @LastEditors: zangsuyun
* @LastEditTime: 2021-03-25 19:13:06
* @LastEditors: wufan
* @LastEditTime: 2021-05-30 10:19:47
* @Copyright: © 2020 杭州杰竞科技有限公司 版权所有
*/
......@@ -25,14 +25,14 @@
}
.sider-tree {
width: 266px;
width: 244px;
overflow: scroll;
height: ~'calc(100vh - 300px)';
.empty-tree-tip {
text-align: center;
margin-top: 100%;
.empty-tree-btn {
color: #ffb714;
color: #2966FF;
cursor: pointer;
}
}
......@@ -40,7 +40,7 @@
font-size: 14px;
font-weight: 400;
color: #666666;
width: 260px;
width: 234px;
.anticon {
color: #666666;
}
......@@ -52,12 +52,12 @@
white-space: nowrap;
}
.ant-tree-node-content-wrapper.ant-tree-node-selected {
color: #666666;
color: #2966FF;
}
}
.ant-tree-treenode-selected:hover::before,
.ant-tree-treenode-selected::before {
background: #fffbf1;
background: rgba(238, 243, 255, 1);
}
}
}
......
......@@ -30,13 +30,13 @@
}
.courseware {
font-size: 14px;
color: #5289fa;
color: #2966FF;
line-height: 20px;
text-align: right;
cursor: pointer;
}
.quota-icon {
color: #5289fa;
color: #2966FF;
cursor: pointer;
}
.operate {
......@@ -44,7 +44,7 @@
align-items: center;
flex-wrap: wrap;
.operate__item {
color: #5289fa;
color: #2966FF;
cursor: pointer;
&.split {
margin: 0 8px;
......@@ -57,7 +57,7 @@
}
}
.operate-text {
color: #5289fa;
color: #2966FF;
cursor: pointer;
}
.course-start-end {
......
......@@ -39,7 +39,7 @@ class WatchData extends React.Component {
<WatchDataHeader
type={ENUM.CourseTypeEnum[type]}
courseName={localStorage.getItem("WatchData_CourseName")}
color="#FFB714"
color="#2966FF"
/>
<div className="box">
......
......@@ -2,8 +2,8 @@
* @Description:
* @Author: zangsuyun
* @Date: 2021-03-12 10:43:10
* @LastEditors: zangsuyun
* @LastEditTime: 2021-04-10 16:39:30
* @LastEditors: wufan
* @LastEditTime: 2021-05-30 20:36:42
* @Copyright: © 2020 杭州杰竞科技有限公司 版权所有
*/
import React from "react";
......@@ -13,18 +13,18 @@ import KnowledgeBaseOpt from "./components/KnowledgeBaseOpt";
import KnowledgeBaseList from "./components/KnowledgeBaseList";
import Classification from "./components/Classification";
import KnowledgeAPI from "@/data-source/knowledge/request-api";
import User from "@/common/js/user";
import KnowledgeAPI from "@/data-source/knowledge/request-api"
import User from "@/common/js/user"
export default class KnowledgeBase extends React.Component {
constructor(props) {
super(props);
super(props)
this.state = {
query: {
size: 10,
current: 1,
storeId: User.getStoreId(),
categoryId: 0,
categoryId: 0
},
dataSource: [], // 知识库列表
totalCount: 0, // 知识库数据总条数
......@@ -36,42 +36,43 @@ export default class KnowledgeBase extends React.Component {
componentWillMount() {
// 获取知识库列表
this.handleFetchScheduleList();
this.handleFetchScheduleList()
// this.getCategoryTree()
}
getSelectedCategoryId = (categoryId) => {
this.setState({
categoryId,
});
this.handleFetchScheduleList({ categoryId,current:1 });
};
categoryId
})
this.handleFetchScheduleList({ categoryId, current: 1 })
}
// 更新分类树
updateCategoryTree = () => {
this.setState({
updateCategoryFlag: !this.state.updateCategoryFlag,
});
};
updateCategoryFlag: !this.state.updateCategoryFlag
})
}
// 获取知识库列表
handleFetchScheduleList = (_query = {},flag = true) => {
handleFetchScheduleList = (_query = {}, flag = true) => {
const query = {
...this.state.query,
..._query,
};
..._query
}
// 更新请求参数
this.setState({ query });
this.setState({ query })
flag && KnowledgeAPI.queryPageKnowledgeForManager(query).then((res) => {
// KnowledgeAPI.videoSchedulePage(query).then((res) => {
const { result = {} } = res || {};
const { records = [], total = 0 } = result;
this.setState({
dataSource: records,
totalCount: Number(total),
});
});
};
flag &&
KnowledgeAPI.queryPageKnowledgeForManager(query).then((res) => {
// KnowledgeAPI.videoSchedulePage(query).then((res) => {
const { result = {} } = res || {}
const { records = [], total = 0 } = result
this.setState({
dataSource: records,
totalCount: Number(total)
})
})
}
onSelectChange = (selectedRowKeys) => {
if (selectedRowKeys.length > 50) {
......@@ -91,23 +92,19 @@ export default class KnowledgeBase extends React.Component {
selectedRowKeys,
} = this.state;
return (
<div className="page">
<div className="content-header">知识库</div>
<div className='page'>
<div className='content-header'>知识库</div>
<div className="box" style={{ display: "flex" }}>
<div className='box' style={{ display: "flex" }}>
{/* 搜索模块 */}
<div className="left" style={{ width: 245 }}>
<Classification
updateCategoryFlag={updateCategoryFlag}
categoryId={categoryId}
getSelectedCategoryId={this.getSelectedCategoryId}
/>
<div className='left' style={{ width: 245 }}>
<Classification updateCategoryFlag={updateCategoryFlag} categoryId={categoryId} getSelectedCategoryId={this.getSelectedCategoryId} />
</div>
<div
className="liner"
style={{ backgroundColor: "rgb(238, 238, 238)", width: 0.5, margin: "1px 16px 1px 2px" }}
></div>
<div className="right" style={{ width: "calc(100% - 285px)" }}>
<div className="right" style={{ width: "calc(100% - 265px)" }}>
<KnowledgeBaseFilter onChange={this.handleFetchScheduleList} />
{/* 操作模块 */}
......@@ -133,6 +130,6 @@ export default class KnowledgeBase extends React.Component {
</div>
</div>
</div>
);
)
}
}
......@@ -2,8 +2,8 @@
* @Description:
* @Author: zangsuyun
* @Date: 2021-03-13 14:38:49
* @LastEditors: zangsuyun
* @LastEditTime: 2021-03-16 15:20:51
* @LastEditors: wufan
* @LastEditTime: 2021-05-30 10:08:02
* @Copyright: © 2020 杭州杰竞科技有限公司 版权所有
*/
......@@ -22,7 +22,7 @@ const courseStateShow = {
UN_START: {
code: 1,
title: "待开课",
color: "#FFB714",
color: "#FFB129",
},
STARTING: {
code: 2,
......@@ -107,6 +107,7 @@ class LiveList extends React.Component {
cursor: "pointer",
color: "#bfbfbf",
fontSize: "14px",
fontWeight:"400"
}}
>
&#xe61d;
......
......@@ -71,13 +71,13 @@
}
.courseware {
font-size: 14px;
color: #5289fa;
color: #2966FF;
line-height: 20px;
text-align: right;
cursor: pointer;
}
.quota-icon {
color: #5289fa;
color: #2966FF;
cursor: pointer;
}
.operate {
......@@ -85,7 +85,7 @@
align-items: center;
flex-wrap: wrap;
.operate__item {
color: #5289fa;
color: #2966FF;
cursor: pointer;
&.split {
margin: 0 8px;
......@@ -94,7 +94,7 @@
}
}
.operate-text {
color: #5289fa;
color: #2966FF;
cursor: pointer;
}
.course-start-end {
......@@ -125,42 +125,10 @@
}
}
.add-course-modal {
.ant-tabs-top > .ant-tabs-nav::before {
border-bottom: 0px;
}
.ant-tabs-nav-list {
margin: 0 auto;
flex:none !important
}
.ant-tabs-tab.ant-tabs-tab-active .ant-tabs-tab-btn {
font-weight: normal;
border-bottom: 0px;
}
.ant-tabs-nav .ant-tabs-tab {
padding: 6px 12px !important;
margin: 0;
border: 0.5px solid #e8e8e8;
font-size: 14px !important;
color: #999;
&:nth-child(1) {
border-radius: 4px 0px 0px 4px;
}
&:nth-child(3) {
border-radius: 0px 4px 4px 0px;
}
}
.ant-tabs-nav .ant-tabs-tab-active {
border: 1px solid #ffb714;
color: #ffb714;
}
.ant-tabs-top .ant-tabs-ink-bar-animated:after {
height: 0;
color: #2966ff;
}
.ant-modal-content tr > td{
padding:12px 8px !important;
.ant-modal-content tr > td {
padding: 12px 8px !important;
}
}
......@@ -2,8 +2,8 @@
* @Description:
* @Author: zangsuyun
* @Date: 2021-03-13 11:48:24
* @LastEditors: zangsuyun
* @LastEditTime: 2021-04-01 11:58:46
* @LastEditors: wufan
* @LastEditTime: 2021-05-30 10:08:09
* @Copyright: © 2020 杭州杰竞科技有限公司 版权所有
*/
......@@ -105,6 +105,7 @@ class VideoList extends React.Component {
cursor: "pointer",
color: "#bfbfbf",
fontSize: "14px",
fontWeight:"400"
}}
>
&#xe61d;
......
.personal-info-page{
.box{
padding: 60px 60px 60px 40px !important;
padding: 24px 60px 60px 40px !important;
}
.label{
width:84px;
......@@ -57,4 +57,8 @@
margin-left:20px;
}
}
.save-btn {
margin-left: 92px;
}
}
\ No newline at end of file
/*
* @Author: zhangleyuan
* @Date: 2020-11-27 15:06:31
* @LastEditors: zangsuyun
* @LastEditTime: 2021-03-22 13:55:24
* @LastEditors: wufan
* @LastEditTime: 2021-05-28 15:31:06
* @Description: 描述一下
* @@Copyrigh: © 2020 杭州杰竞科技有限公司 版权所有
*/
......@@ -181,7 +181,7 @@ console.log('User.getStoreType()',User.getStoreType());
</Button>
</div>
)}
<div>
<div className="save-btn">
<Button
type="primary"
onClick={() => {
......
.add-plan-page {
position:relative !important;
.box {
margin-bottom: 66px !important;
margin-bottom: 52px !important;
padding-bottom: 40px!important;
.add-plan-page__form {
margin-top: 16px;
.title {
......@@ -18,13 +19,14 @@
}
.footer {
position: fixed;
left: 196px;
bottom: 0;
height: 58px;
width: 100%;
width: ~'calc(100% - 218px)';
display: flex;
align-items: center;
justify-content: flex-end;
padding-right: 252px;
padding-right: 72px;
background: #fff;
border-top: 1px solid #E8E8E8;
z-index: 9999;
......
......@@ -10,7 +10,7 @@ import Bus from '@/core/bus';
import './LearningData.less';
const userRole = User.getUserRole();
const defaultCover = 'https://image.xiaomaiketang.com/xm/YNfi45JwFA.png';
const defaultCover = 'https://image.xiaomaiketang.com/xm/rEAetaTEh3.png';
class LearningData extends React.Component {
constructor(props) {
......
......@@ -7,7 +7,7 @@
font-weight:normal;
}
.plan-info{
margin:16px;
margin-bottom:8px;
padding:16px;
background: #FFF;
display:flex;
......
/*
* @Author: zhangleyuan
* @Date: 2021-02-20 16:13:39
* @LastEditors: zhangleyuan
* @LastEditTime: 2021-03-10 18:38:50
* @LastEditors: fusanqiasng
* @LastEditTime: 2021-05-23 23:59:43
* @Description: 描述一下
* @@Copyrigh: © 2020 杭州杰竞科技有限公司 版权所有
*/
import React, { useEffect, useState } from "react";
import PlanFilter from './components/PlanFilter';
import PlanOpt from './components/PlanOpt';
import PlanList from './components/PlanList';
import PlanService from "@/domains/plan-domain/planService";
import User from '@/common/js/user';
import React, { useEffect, useState } from 'react'
import PlanFilter from './components/PlanFilter'
import PlanOpt from './components/PlanOpt'
import PlanList from './components/PlanList'
import PlanService from '@/domains/plan-domain/planService'
import User from '@/common/js/user'
function PlanPage() {
const [planListData, setPlanListData] = useState([]);
const [query,setQuery] = useState({
current:1,
size:10,
});
const [planListData, setPlanListData] = useState([])
const [query, setQuery] = useState({
current: 1,
size: 10
})
useEffect(() => {
handleFetchPlanList();
}, [query]);
const [totalCount,setTotalCount] = useState(0);
function queryChange(_query){
const params = {
...query,
..._query,
};
setQuery(params);
}
function handleFetchPlanList(_query){
function handleFetchPlanList(_query) {
const params = {
...query,
..._query,
storeUserId: User.getStoreUserId()
}
//动态获取计划列表
PlanService.getTrainingPlanPage(params).then((res) => {
const {
result: { records = [], total }
} = res
setPlanListData(records)
setTotalCount(total)
})
}
handleFetchPlanList()
}, [query])
const [totalCount, setTotalCount] = useState(0)
function queryChange(_query) {
const params = {
...query,
..._query,
storeUserId:User.getStoreUserId()
};
//动态获取计划列表
PlanService.getTrainingPlanPage(params).then((res) => {
const { result: { records = [], total } } = res;
setPlanListData(records);
setTotalCount(total);
})
..._query
}
setQuery(params)
}
return (
<div className="page">
<div className="content-header">培训计划</div>
<div className="box">
<PlanFilter onChange={queryChange}/>
<PlanOpt/>
<PlanList
planListData={planListData}
query={query}
totalCount={totalCount}
onChange={queryChange}
/>
</div>
<div className='page'>
<div className='content-header'>培训计划</div>
<div className='box'>
<PlanFilter onChange={queryChange} />
<PlanOpt />
<PlanList planListData={planListData} query={query} totalCount={totalCount} onChange={queryChange} />
</div>
</div>
)
}
export default PlanPage;
\ No newline at end of file
export default PlanPage
......@@ -40,13 +40,12 @@
width: 100%;
height: 100%;
object-fit: contain;
border: 1px solid #E8e8e8;
}
}
.opt-btns{
.default-btn {
margin:0 8px;
color: #5289FA;
color: #2966FF;
cursor: pointer;
&.disabled {
color: #CCC;
......
......@@ -134,18 +134,19 @@ class EmployeeShareData extends React.Component {
)
}
},
{
title: '手机号',
key: 'storeUserPhone',
dataIndex: 'storeUserPhone',
render: (val, record) => {
return (
<div>
{val}
</div>
)
}
},
//产品暂时性隐藏
// {
// title: '手机号',
// key: 'storeUserPhone',
// dataIndex: 'storeUserPhone',
// render: (val, record) => {
// return (
// <div>
// {val}
// </div>
// )
// }
// },
{
title: '最近分享成功时间',
key: 'recentlyForwardTime',
......
......@@ -4,7 +4,7 @@
}
.operate-item{
font-size:14px;
color:#5289FA;
color:#2966FF;
cursor: pointer;
}
.learn-num{
......
......@@ -2,7 +2,7 @@
* @Author: zhangleyuan
* @Date: 2021-02-20 16:46:46
* @LastEditors: wufan
* @LastEditTime: 2021-05-13 16:36:43
* @LastEditTime: 2021-05-14 18:12:50
* @Description: 描述一下
* @@Copyrigh: © 2020 杭州杰竞科技有限公司 版权所有
*/
......@@ -131,7 +131,7 @@ function PlanList(props) {
<span className="operate-text">更多</span>
<span
className="iconfont icon"
style={{ color: "#5289FA" }}
style={{ color: "#2966FF" }}
>
&#xe824;
</span>
......
......@@ -37,14 +37,14 @@
-webkit-box-orient: vertical;
}
.operate-text {
color: #5289FA;
color: #2966FF;
cursor: pointer;
}
.operate {
display: flex;
&__item {
color: #5289FA;
color: #2966FF;
cursor: pointer;
&.split {
......
This source diff could not be displayed because it is too large. You can view the blob instead.
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