Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
X
xiaomai-cloud-class-web
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
xiaomai-cloud-class
xiaomai-cloud-class-web
Commits
9417fce0
Commit
9417fce0
authored
Jun 01, 2021
by
guomingpang
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'master' into rc
parents
8ac4b55e
b6e69746
Hide whitespace changes
Inline
Side-by-side
Showing
131 changed files
with
1626 additions
and
1524 deletions
+1626
-1524
config/webpack.config.js
+2
-2
src/bu-components/ChooseMembersModal.less
+2
-2
src/bu-components/CopyFileModal.less
+1
-1
src/bu-components/ManagingMembersModal.less
+1
-1
src/bu-components/SelectPrepareFileModal.less
+2
-2
src/bu-components/ShareLiveModal.less
+1
-1
src/bu-components/ShowTip.less
+2
-2
src/bu-components/UploadProgressModal.jsx
+1
-1
src/bu-components/UploadProgressModal.less
+3
-0
src/common/js/axios.ts
+2
-3
src/components/Breadcrumbs.less
+7
-5
src/components/CheckBeforeSendCode.less
+5
-4
src/components/MultipleDatePicker.less
+9
-9
src/components/ShowTips.less
+2
-2
src/components/TableSelectedData.less
+3
-3
src/core/antd.less
+26
-21
src/core/global.less
+4
-4
src/core/page.less
+14
-26
src/core/variables.less
+5
-5
src/h5.html
+3
-3
src/index.html
+2
-2
src/modules/college-manage/EmployeeManage.less
+9
-0
src/modules/college-manage/EmployeeManage.tsx
+2
-2
src/modules/college-manage/UserManagePage.less
+1
-2
src/modules/college-manage/UserManagePage.tsx
+2
-2
src/modules/college-manage/modal/ChooseMembersModal.less
+2
-2
src/modules/college-manage/modal/SetEmployeeModal.less
+3
-3
src/modules/common/TeacherSelect.tsx
+1
-0
src/modules/course-manage/AddLive.jsx
+2
-2
src/modules/course-manage/AddLive.less
+20
-3
src/modules/course-manage/DataList/DataList.less
+14
-2
src/modules/course-manage/components/AddLiveBasic.jsx
+1
-1
src/modules/course-manage/components/AddLiveBasic.less
+3
-3
src/modules/course-manage/components/AddLiveClass.less
+1
-1
src/modules/course-manage/components/AddLiveIntro.less
+1
-1
src/modules/course-manage/components/GraphicsEditor.jsx
+2
-2
src/modules/course-manage/components/LiveCourseList.jsx
+5
-5
src/modules/course-manage/components/LiveCourseList.less
+4
-4
src/modules/course-manage/graphics-course/AddGraphicsCourse.jsx
+5
-5
src/modules/course-manage/graphics-course/AddGraphicsCourse.less
+6
-4
src/modules/course-manage/graphics-course/components/GraphicsCourseList.jsx
+5
-5
src/modules/course-manage/graphics-course/components/GraphicsCourseList.less
+4
-5
src/modules/course-manage/modal/ManageCoursewareModal.jsx
+1
-1
src/modules/course-manage/modal/ManageCoursewareModal.less
+1
-1
src/modules/course-manage/modal/PreviewGraphicsModal.jsx
+1
-1
src/modules/course-manage/modal/PreviewGraphicsModal.less
+4
-6
src/modules/course-manage/modal/RelatedPlanModal.less
+3
-3
src/modules/course-manage/modal/ShareLiveModal.less
+1
-1
src/modules/course-manage/offline-course/AddOfflineCourse.jsx
+8
-8
src/modules/course-manage/offline-course/AddOfflineCourse.less
+17
-6
src/modules/course-manage/offline-course/OfflineCourseData.less
+4
-3
src/modules/course-manage/offline-course/components/OfflineCourseList.jsx
+4
-4
src/modules/course-manage/offline-course/components/OfflineCourseList.less
+2
-2
src/modules/course-manage/offline-course/modal/PreviewOfflineModal.jsx
+3
-3
src/modules/course-manage/offline-course/modal/PreviewOfflineModal.less
+3
-3
src/modules/course-manage/video-course/AddVideoCourse.jsx
+3
-3
src/modules/course-manage/video-course/AddVideoCourse.less
+4
-3
src/modules/course-manage/video-course/components/VideoCourseList.jsx
+101
-117
src/modules/course-manage/video-course/components/VideoCourseList.less
+2
-3
src/modules/home/Home.jsx
+65
-61
src/modules/home/Home.less
+260
-236
src/modules/knowledge-base/ENUM.js
+1
-1
src/modules/knowledge-base/components/Classification.jsx
+3
-3
src/modules/knowledge-base/components/Classification.less
+7
-7
src/modules/knowledge-base/components/KnowledgeBaseList.jsx
+178
-248
src/modules/knowledge-base/components/KnowledgeBaseList.less
+4
-4
src/modules/knowledge-base/components/WatchData.jsx
+1
-1
src/modules/knowledge-base/index.jsx
+23
-25
src/modules/knowledge-base/modal/AddCourse.jsx
+80
-76
src/modules/knowledge-base/modal/LiveList.jsx
+4
-3
src/modules/knowledge-base/modal/LiveList.less
+4
-4
src/modules/knowledge-base/modal/VideoList.jsx
+3
-2
src/modules/personalInfo/index.less
+6
-1
src/modules/personalInfo/index.tsx
+3
-3
src/modules/plan-manage/AddPlan.jsx
+4
-4
src/modules/plan-manage/AddPlan.less
+5
-3
src/modules/plan-manage/LearningData.jsx
+1
-1
src/modules/plan-manage/LearningData.less
+1
-1
src/modules/plan-manage/components/BasicInfo.less
+1
-2
src/modules/plan-manage/components/EmployeeShareData.jsx
+1
-0
src/modules/plan-manage/components/EmployeeShareData.less
+1
-1
src/modules/plan-manage/components/PlanList.jsx
+2
-2
src/modules/plan-manage/components/PlanList.less
+2
-2
src/modules/plan-manage/components/TrainingTask.less
+2
-2
src/modules/plan-manage/components/UserLearningData.jsx
+8
-21
src/modules/plan-manage/components/UserLearningDataFilter.less
+1
-1
src/modules/plan-manage/modal/SharePlanModal.less
+1
-1
src/modules/plan-manage/modal/relatedCourseModal.jsx
+94
-120
src/modules/plan-manage/modal/relatedCourseModal.less
+52
-38
src/modules/prepare-lesson/index.less
+4
-4
src/modules/prepare-lesson/modal/SelectPrepareFileModal.less
+3
-3
src/modules/resource-disk/index.less
+7
-7
src/modules/root/App.tsx
+3
-3
src/modules/root/CollegeManagePage.less
+8
-7
src/modules/root/CreateCollege.jsx
+8
-6
src/modules/root/CreateCollege.less
+3
-0
src/modules/root/Header.jsx
+13
-21
src/modules/root/Header.less
+45
-18
src/modules/root/Login.jsx
+18
-19
src/modules/root/Login.less
+65
-46
src/modules/root/Main.less
+15
-8
src/modules/root/Menu.less
+75
-51
src/modules/root/Menu.tsx
+33
-22
src/modules/root/WechatLogin.less
+29
-25
src/modules/root/WechatLogin.tsx
+3
-2
src/modules/store-manage/CourseCatalogPage.less
+3
-3
src/modules/store-manage/StoreDecorationPage.less
+2
-2
src/modules/store-manage/StoreH5DecorationTab.jsx
+3
-3
src/modules/store-manage/StoreInfo.less
+1
-1
src/modules/store-manage/StoreWebDecorationTab.jsx
+3
-3
src/modules/teach-tool/components/CourseCategoryManage.less
+3
-3
src/modules/teach-tool/components/CourseCategorySiderTree.less
+3
-3
src/modules/teach-tool/examination-manager/AddExam.less
+6
-6
src/modules/teach-tool/examination-manager/AddExam.tsx
+6
-3
src/modules/teach-tool/examination-manager/Index.tsx
+4
-3
src/modules/teach-tool/examination-manager/index.less
+8
-0
src/modules/teach-tool/paper-manage/OperatePaper.jsx
+8
-6
src/modules/teach-tool/paper-manage/OperatePaper.less
+19
-5
src/modules/teach-tool/paper-manage/components/PaperList.less
+2
-2
src/modules/teach-tool/paper-manage/components/SelectQuestionList.jsx
+1
-1
src/modules/teach-tool/paper-manage/components/SelectQuestionList.less
+5
-5
src/modules/teach-tool/question-manage/OperateQuestion.jsx
+8
-8
src/modules/teach-tool/question-manage/OperateQuestion.less
+4
-3
src/modules/teach-tool/question-manage/components/OperateQuestionTab.jsx
+3
-3
src/modules/teach-tool/question-manage/components/OperateQuestionTab.less
+3
-3
src/modules/teach-tool/question-manage/components/QuestionEditor.less
+2
-2
src/modules/teach-tool/question-manage/components/QuestionList.less
+2
-2
src/modules/teach-tool/question-manage/modal/BatchImportQuestionModal.jsx
+2
-2
src/modules/teach-tool/question-manage/modal/BatchImportQuestionModal.less
+1
-1
src/modules/teach-tool/question-manage/modal/PreviewQuestionModal.less
+0
-2
src/routes/config/menuList.tsx
+22
-12
No files found.
config/webpack.config.js
View file @
9417fce0
...
...
@@ -124,8 +124,8 @@ module.exports = function (webpackEnv) {
options
:
{
lessOptions
:
{
modifyVars
:
{
'primary-color'
:
'
rgba(255, 183, 20, 1)
'
,
'border-radius-base'
:
'
4px'
'primary-color'
:
'
#2966FF
'
,
'border-radius-base'
:
'
2px'
,
},
javascriptEnabled
:
true
}
...
...
src/bu-components/ChooseMembersModal.less
View file @
9417fce0
...
...
@@ -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;
}
}
...
...
src/bu-components/CopyFileModal.less
View file @
9417fce0
...
...
@@ -6,7 +6,7 @@
margin-bottom: 10px;
}
.bread:hover{
color: #
5289FA
;
color: #
2966FF
;
}
}
...
...
src/bu-components/ManagingMembersModal.less
View file @
9417fce0
...
...
@@ -16,7 +16,7 @@
.managing-right{
float: right;
color: #
5289FA
;
color: #
2966FF
;
cursor: pointer;
.tool-tip-right{
margin-right: 4px;
...
...
src/bu-components/SelectPrepareFileModal.less
View file @
9417fce0
...
...
@@ -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;
}
}
...
...
src/bu-components/ShareLiveModal.less
View file @
9417fce0
...
...
@@ -109,7 +109,7 @@
margin-top: 40px;
.content {
color: #
FF7519
;
color: #
2966FF
;
cursor: pointer;
}
}
...
...
src/bu-components/ShowTip.less
View file @
9417fce0
.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 {
...
...
src/bu-components/UploadProgressModal.jsx
View file @
9417fce0
...
...
@@ -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}`
}
>
...
...
src/bu-components/UploadProgressModal.less
View file @
9417fce0
...
...
@@ -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;
...
...
src/common/js/axios.ts
View file @
9417fce0
/*
* @Author: 吴文洁
* @Date: 2020-08-31 09:34:31
* @LastEditors:
zhangleyu
an
* @LastEditTime: 2021-0
4-27 16:59:07
* @LastEditors:
wuf
an
* @LastEditTime: 2021-0
5-27 10:42:12
* @Description:
* @Copyright: 杭州杰竞科技有限公司 版权所有
*/
import
qs
from
'qs'
;
import
axios
,
{
AxiosInstance
,
AxiosRequestConfig
,
AxiosResponse
,
AxiosPromise
,
AxiosError
}
from
'axios'
;
import
{
message
}
from
'antd'
;
...
...
src/components/Breadcrumbs.less
View file @
9417fce0
@import "../core/variables.less";
.xm-breadCrumb
{
margin
-left: 16px;
.xm-breadCrumb{
padding
-left: 16px;
color: #989898;
margin-top: 10px;
margin-bottom: 10px;
+ .statistic-tips {
padding-top: 16px;
padding-bottom: 8px;
background: #fff;
width: calc(100vw - 218px);
+.statistic-tips{
position: relative;
top: -8px;
margin-bottom: 0px !important;
...
...
src/components/CheckBeforeSendCode.less
View file @
9417fce0
...
...
@@ -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
;
}
}
}
...
...
src/components/MultipleDatePicker.less
View file @
9417fce0
...
...
@@ -3,7 +3,7 @@
.multiple-calendar {
width: 295px;
border: 1px solid #e8e8e8;
border-radius:
4
px;
border-radius:
2
px;
ul {
list-style: none;
}
...
...
@@ -22,7 +22,7 @@
cursor: default;
&:hover {
background: #FFFFFF;
border-radius:
4
px;
border-radius:
2
px;
}
}
.self {
...
...
@@ -55,8 +55,8 @@
cursor: pointer;
vertical-align: top;
&:hover {
background: rgba(
255, 183, 20,.2
);
border-radius:
4
px;
background: rgba(
41, 102, 255, .1
);
border-radius:
2
px;
}
&.before-disabled {
color: #e8e8e8;
...
...
@@ -81,11 +81,11 @@
&.active {
background: @xm-color-primary;
color: #fff;
border-radius:
4
px;
border-radius:
2
px;
}
&.today {
border: 1px solid @xm-color-primary;
border-radius:
5
px;
border-radius:
2
px;
}
}
}
...
...
@@ -151,7 +151,7 @@
border-radius: none;
span {
background: @xm-color-primary;
border-radius:
4
px;
border-radius:
2
px;
}
&:hover {
span {
...
...
@@ -164,13 +164,13 @@
border-radius: none;
span {
border: 1px solid @xm-color-primary;
border-radius:
5
px;
border-radius:
2
px;
}
}
&.past {
span {
background:rgba(255,133,52,0.1);
border-radius:
4
px;
border-radius:
2
px;
color:rgba(0,0,0,0.25);
}
}
...
...
src/components/ShowTips.less
View file @
9417fce0
.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 {
...
...
src/components/TableSelectedData.less
View file @
9417fce0
...
...
@@ -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);
}
...
...
src/core/antd.less
View file @
9417fce0
...
...
@@ -6,7 +6,7 @@
*/
@import './variables.less';
@active-color: #2966
ff
;
@active-color: #2966
FF
;
// 消息提示框
.ant-message {
...
...
@@ -233,6 +233,10 @@
}
}
.ant-tabs-tab.ant-tabs-tab-active .ant-tabs-tab-btn {
font-weight: 500!important;
}
.ant-tabs-nav .ant-tabs-tab-active {
color: @active-color !important;
}
...
...
@@ -260,7 +264,7 @@
position: absolute;
width: 30px;
height: 4px;
background: #2966
ff
!important;
background: #2966
FF
!important;
left: 50%;
transform: translateX(-50%);
}
...
...
@@ -335,14 +339,14 @@ mr0 {
background: #f3f6fa;
.ant-select-selected-icon {
color:
#2966ff
!important;
color:
#2966FF
!important;
}
}
.ant-select-dropdown-menu-item-selected {
background: none;
font-weight: 400 !important;
color:
#2966ff
;
color:
#2966FF
;
}
.ant-select-open .ant-select-selection {
...
...
@@ -440,7 +444,7 @@ mr0 {
.ant-modal {
.ant-input {
&:focus {
border: 1px solid #2966
ff
!important;
border: 1px solid #2966
FF
!important;
}
}
}
...
...
@@ -453,8 +457,8 @@ mr0 {
.ant-calendar-footer-extra {
.ant-tag-blue {
background: #fff;
color: #2966
ff
;
border-color: #2966
ff
;
color: #2966
FF
;
border-color: #2966
FF
;
}
}
}
...
...
@@ -470,7 +474,7 @@ mr0 {
}
.ant-modal-confirm-info .ant-modal-confirm-body > .anticon {
color: #2966
ff
!important;
color: #2966
FF
!important;
}
.ant-breadcrumb > span:last-child .ant-breadcrumb-separator {
...
...
@@ -498,7 +502,7 @@ mr0 {
font-size: 22px !important;
line-height: 22px !important;
float: left !important;
color:
#2966ff
!important;
color:
#2966FF
!important;
margin-right: 16px !important;
&.blue {
color: #5cbaff !important;
...
...
@@ -523,8 +527,8 @@ mr0 {
float: left;
margin-right: 16px;
}
>
.confirm-icon
{
color: #2966
ff
;
>
.confirm-icon
{
color: #2966
FF
;
}
.ant-modal-confirm-content {
margin-left: 38px;
...
...
@@ -590,9 +594,9 @@ mr0 {
// background: #FAFAFA !important;
// }
.ant-table-thead > tr > th
{
font-weight:
bold !important;
color:
#333 !important;
.ant-table-thead > tr > th{
font-weight:bold !important;
color:#333 !important;
}
td.ant-table-column-sort {
background: none;
...
...
@@ -653,12 +657,11 @@ td.ant-table-column-sort {
border-color: @xm-color-text-select-primary !important;
border: none !important;
&:hover {
background-color: #2966
ff
!important;
background-color: #2966
FF
!important;
opacity: 0.8 !important;
}
&:focus,
&:active {
background-color: #5c8aff !important;
&:active{
background-color:#5C8AFF !important;
}
}
...
...
@@ -716,9 +719,10 @@ td.ant-table-column-sort {
box-shadow: none !important;
border-right: 0px !important;
}
.ant-input-search > .ant-input-group > .ant-input-group-addon:last-child .ant-input-search-button span {
color: #bfbfbf !important;
font-size: 12px;
.ant-input-search > .ant-input-group > .ant-input-group-addon:last-child .ant-input-search-button span{
color:#bfbfbf !important;
font-size:12px;
}
.ant-modal-footer {
...
...
@@ -769,3 +773,4 @@ td.ant-table-column-sort {
.ant-table-column-sorter-full {
margin-top: -0.32rem !important;
}
src/core/global.less
View file @
9417fce0
...
...
@@ -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;
}
...
...
src/core/page.less
View file @
9417fce0
...
...
@@ -7,26 +7,25 @@
left: 0px;
right: 0;
bottom: 0;
z-index:
101
;
background-color: #f
0f2f5
;
z-index:
3
;
background-color: #f
ff
;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
min-height: 100%;
.page {
position: fixed;
top:
5
0px;
top:
6
0px;
left: 180px;
right: 0;
bottom: 0;
z-index: 102;
overflow: auto;
.box {
&:first-child {
margin:0 16px;
.box{
&:first-child{
margin-bottom: 8px;
}
& + .box {
margin: 8px 16px;
}
&:last-child {
&:last-child{
margin-bottom: 16px;
}
}
...
...
@@ -47,13 +46,12 @@
line-height: 30px;
}
.content-header {
padding: 16px 16px;
padding: 16px 16px
8px 16px
;
line-height: 30px;
background: #fff;
margin: 16px 16px 0;
font-size: 24px;
color: #333;
font-weight: 500;
font-size:24px;
color:#333;
font-weight:bold;
background: #FFF;
h1 {
font-weight: normal;
display: inline-block;
...
...
@@ -62,9 +60,8 @@
.box {
padding: 16px;
margin: 0 16px;
background: #ffffff;
// min-height:
400px
;
// min-height:
calc(100vh - 126px)
;
.box-header {
line-height: 30px;
padding-bottom: 12px;
...
...
@@ -91,16 +88,7 @@
.box-footer {
margin-top: 16px;
}
&:first-child {
margin-bottom: 8px;
}
& + .box {
margin: 8px 16px;
}
}
// .ant-calendar-picker{
// top:-1px;
// }
}
.box-header {
...
...
src/core/variables.less
View file @
9417fce0
@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:
64
px;
@xm-left-min-width:
56
px;
@xm-color-text-menu:#9a9dA7;
// 下拉框
...
...
src/h5.html
View file @
9417fce0
<!--
* @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.
...
...
src/index.html
View file @
9417fce0
...
...
@@ -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.
...
...
src/modules/college-manage/EmployeeManage.less
View file @
9417fce0
.employee-manage-page{
.box-header{
margin-bottom:4px;
}
.add-show-btn{
margin-top:12px;
}
}
\ No newline at end of file
src/modules/college-manage/EmployeeManage.tsx
View file @
9417fce0
...
...
@@ -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
16
px"
,
padding
:
"0px 0
4
px"
,
}
}
>
<
div
>
...
...
src/modules/college-manage/UserManagePage.less
View file @
9417fce0
...
...
@@ -2,13 +2,12 @@
.box-header {
display: flex;
width: calc(100% - 80px);
margin-bottom:
16
px;
margin-bottom:
4
px;
.header-item {
width: 30%;
margin-right: 3%;
display: flex;
.item-name {
width: 80px;
flex-shrink: 0;
}
}
...
...
src/modules/college-manage/UserManagePage.tsx
View file @
9417fce0
...
...
@@ -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
>
);
...
...
src/modules/college-manage/modal/ChooseMembersModal.less
View file @
9417fce0
...
...
@@ -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;
}
}
...
...
src/modules/college-manage/modal/SetEmployeeModal.less
View file @
9417fce0
...
...
@@ -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
;
}
}
}
...
...
src/modules/common/TeacherSelect.tsx
View file @
9417fce0
...
...
@@ -58,6 +58,7 @@ export default function ExaminationManager(props: any) {
onPopupScroll=
{
handleScrollTeacherList
}
suffixIcon=
{
<
span
className=
"icon iconfont"
style=
{
{
fontSize
:
'12px'
,
color
:
'#BFBFBF'
}
}
>

</
span
>
}
value=
{
props
.
val
||
null
}
filterOption=
{
(
input
:
any
,
option
:
any
)
=>
option
}
onChange=
{
(
value
)
=>
{
props
.
onChange
(
value
)
}
}
...
...
src/modules/course-manage/AddLive.jsx
View file @
9417fce0
...
...
@@ -27,7 +27,7 @@ import _ from "underscore";
import
$
from
'jquery'
;
import
'./AddLive.less'
;
const
defaultCover
=
'https://image.xiaomaiketang.com/xm/Y
Nfi45JwFA
.png'
;
const
defaultCover
=
'https://image.xiaomaiketang.com/xm/Y
ip2YtFDwH
.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
>
...
...
src/modules/course-manage/AddLive.less
View file @
9417fce0
.add-live-page {
position:relative !important;
.box {
margin-bottom:
66
px !important;
margin-bottom:
52
px !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:
25
2px;
padding-right:
7
2px;
background: #fff;
border-top: 1px solid #E8E8E8;
z-index: 9999;
...
...
src/modules/course-manage/DataList/DataList.less
View file @
9417fce0
...
...
@@ -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;
...
...
src/modules/course-manage/components/AddLiveBasic.jsx
View file @
9417fce0
...
...
@@ -17,7 +17,7 @@ import Upload from '@/core/upload';
import
'./AddLiveBasic.less'
;
const
defaultCover
=
'https://image.xiaomaiketang.com/xm/Y
Nfi45JwFA
.png'
;
const
defaultCover
=
'https://image.xiaomaiketang.com/xm/Y
ip2YtFDwH
.png'
;
const
fieldNames
=
{
label
:
'categoryName'
,
value
:
'id'
,
children
:
'sonCategoryList'
};
let
cutFlag
=
false
;
let
timer
=
null
...
...
src/modules/course-manage/components/AddLiveBasic.less
View file @
9417fce0
...
...
@@ -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;
...
...
src/modules/course-manage/components/AddLiveClass.less
View file @
9417fce0
...
...
@@ -185,7 +185,7 @@
.select-day {
margin-bottom: 4px;
.mark-day {
color: #
5289FA
;
color: #
2966FF
;
}
}
}
...
...
src/modules/course-manage/components/AddLiveIntro.less
View file @
9417fce0
...
...
@@ -136,7 +136,7 @@
}
.checkExample {
width: 60px;
color: #
5289FA
;
color: #
2966FF
;
cursor: pointer;
}
.warmup {
...
...
src/modules/course-manage/components/GraphicsEditor.jsx
View file @
9417fce0
...
...
@@ -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
()
{
...
...
src/modules/course-manage/components/LiveCourseList.jsx
View file @
9417fce0
...
...
@@ -32,7 +32,7 @@ const courseStateShow = {
UN_START
:
{
code
:
1
,
title
:
"待开课"
,
color
:
"#FFB
714
"
,
color
:
"#FFB
129
"
,
},
STARTING
:
{
code
:
2
,
...
...
@@ -166,7 +166,7 @@ class LiveCourseList extends React.Component {
})
}
{
!
hasCover
&&
<
img
className=
"course-cover"
src=
{
'https://image.xiaomaiketang.com/xm/Y
Nfi45JwFA
.png'
}
/>
<
img
className=
"course-cover"
src=
{
'https://image.xiaomaiketang.com/xm/Y
ip2YtFDwH
.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'
}
}
>

</
i
></
Tooltip
>
<
Tooltip
title=
{
<
div
>
开启后,学员可在学院内查看到此课程。若课程“未成功开课”,则系统会自动“关闭”学院展示。
<
br
/>
关闭后,学院内不再展示此课程,但学员仍可通过分享的海报/链接查看此课程。
</
div
>
}
><
i
className=
"icon iconfont"
style=
{
{
marginLeft
:
'5px'
,
cursor
:
'pointer'
,
color
:
'#bfbfbf'
,
fontSize
:
'14px'
,
fontWeight
:
'normal'
}
}
>

</
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
"
}
}
>

</
span
>
...
...
@@ -400,7 +400,7 @@ class LiveCourseList extends React.Component {
})
}
{
!
hasCover
&&
<
img
className=
"course-cover"
src=
{
'https://image.xiaomaiketang.com/xm/Y
Nfi45JwFA
.png'
}
/>
<
img
className=
"course-cover"
src=
{
'https://image.xiaomaiketang.com/xm/Y
ip2YtFDwH
.png'
}
/>
}
<
div
>
{
record
.
courseName
.
length
>
17
?
...
...
src/modules/course-manage/components/LiveCourseList.less
View file @
9417fce0
...
...
@@ -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 {
...
...
src/modules/course-manage/graphics-course/AddGraphicsCourse.jsx
View file @
9417fce0
/*
* @Author: 吴文洁
* @Date: 2020-08-05 10:07:47
* @LastEditors:
zhangleyu
an
* @LastEditTime: 2021-05-
10 10:15:31
* @LastEditors:
wuf
an
* @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
>
...
...
src/modules/course-manage/graphics-course/AddGraphicsCourse.less
View file @
9417fce0
.add-
video
-course-page {
.add-
graphics
-course-page {
position:relative !important;
.box{
margin-bottom:
66
px !important;
margin-bottom:
52
px !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:
25
2px;
padding-right:
7
2px;
background: #fff;
border-top: 1px solid #E8E8E8;
z-index: 999;
...
...
src/modules/course-manage/graphics-course/components/GraphicsCourseList.jsx
View file @
9417fce0
/*
* @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'
}
}
>

</
i
></
Tooltip
>
<
Tooltip
title=
{
<
div
>
开启后,学员可在学院内查看到此课程。
<
br
/>
关闭后,学院内不再展示此课程,但学员仍可通过分享的海报/链接查看此课程。
</
div
>
}
><
i
className=
"icon iconfont"
style=
{
{
marginLeft
:
'5px'
,
cursor
:
'pointer'
,
color
:
'#bfbfbf'
,
fontSize
:
'14px'
,
fontWeight
:
'normal'
}
}
>

</
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
"
}
}
>

</
span
>
...
...
src/modules/course-manage/graphics-course/components/GraphicsCourseList.less
View file @
9417fce0
...
...
@@ -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 {
...
...
@@ -51,12 +51,11 @@
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 {
...
...
src/modules/course-manage/modal/ManageCoursewareModal.jsx
View file @
9417fce0
...
...
@@ -284,7 +284,7 @@ class ManageCoursewareModal extends React.Component {
onCancel=
{
()
=>
{
}
}
>
<
span
style=
{
{
color
:
'#
5289FA
'
,
color
:
'#
2966FF
'
,
cursor
:
'pointer'
}
}
>
删除
</
span
>
</
Popconfirm
>
...
...
src/modules/course-manage/modal/ManageCoursewareModal.less
View file @
9417fce0
...
...
@@ -60,7 +60,7 @@
}
&:hover {
.name {
color: #
FFB714
;
color: #
2966FF
;
}
}
}
...
...
src/modules/course-manage/modal/PreviewGraphicsModal.jsx
View file @
9417fce0
...
...
@@ -27,7 +27,7 @@ class PreviewGraphicsModal extends React.Component {
footer=
{
null
}
maskClosable=
{
false
}
closeIcon=
{
<
span
className=
"icon iconfont modal-close-icon"
>

</
span
>
}
className=
"preview-
live-
graphics-modal"
className=
"preview-graphics-modal"
>
<
div
className=
"container__wrap"
>
<
div
className=
"container"
>
...
...
src/modules/course-manage/modal/PreviewGraphicsModal.less
View file @
9417fce0
.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%);
}
...
...
src/modules/course-manage/modal/RelatedPlanModal.less
View file @
9417fce0
...
...
@@ -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;
}
...
...
src/modules/course-manage/modal/ShareLiveModal.less
View file @
9417fce0
...
...
@@ -131,7 +131,7 @@
margin-bottom: 40px;
.content {
color:
rgba(82, 137, 250, 1)
;
color:
#2966FF
;
cursor: pointer;
}
}
...
...
src/modules/course-manage/offline-course/AddOfflineCourse.jsx
View file @
9417fce0
...
...
@@ -2,7 +2,7 @@
* @Author: 吴文洁
* @Date: 2020-08-05 10:07:47
* @LastEditors: wufan
* @LastEditTime: 2021-05-2
5 20:00:1
8
* @LastEditTime: 2021-05-2
7 19:25:4
8
* @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
,
...
...
src/modules/course-manage/offline-course/AddOfflineCourse.less
View file @
9417fce0
.add-offline-course-page {
position:relative !important;
.box{
margin-bottom:
66
px !important;
margin-bottom:
52
px !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:
25
2px;
padding-right:
7
2px;
background: #fff;
border-top: 1px solid #E8E8E8;
z-index: 999;
...
...
src/modules/course-manage/offline-course/OfflineCourseData.less
View file @
9417fce0
...
...
@@ -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;
}
}
}
...
...
src/modules/course-manage/offline-course/components/OfflineCourseList.jsx
View file @
9417fce0
/*
* @Author: 吴文洁
* @Date: 2020-08-05 10:12:45
* @LastEditors:
zhangleyuan
* @LastEditTime: 2021-0
3-27 16:24:47
* @LastEditors:
Please set LastEditors
* @LastEditTime: 2021-0
5-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'
}
}
>

</
i
></
Tooltip
>
<
Tooltip
title=
{
<
div
>
开启后,学员可在学院内查看到此课程。若课程“取消”,则系统会自动“关闭”学院展示。
<
br
/>
关闭后,学院内不再展示此课程,但学员仍可通过分享的海报/链接查看此课程。
</
div
>
}
><
i
className=
"icon iconfont"
style=
{
{
marginLeft
:
'5px'
,
cursor
:
'pointer'
,
color
:
'#bfbfbf'
,
fontSize
:
'14px'
,
fontWeight
:
'normal'
}
}
>

</
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
"
}
}
>

</
span
>
...
...
src/modules/course-manage/offline-course/components/OfflineCourseList.less
View file @
9417fce0
...
...
@@ -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 {
...
...
src/modules/course-manage/offline-course/modal/PreviewOfflineModal.jsx
View file @
9417fce0
...
...
@@ -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"
>

</
span
>
}
className=
"preview-
live-graphics
-modal"
className=
"preview-
offline
-modal"
>
<
div
className=
"container__wrap"
>
<
div
className=
"container"
>
...
...
src/modules/course-manage/offline-course/modal/PreviewOfflineModal.less
View file @
9417fce0
.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;
}
...
...
src/modules/course-manage/video-course/AddVideoCourse.jsx
View file @
9417fce0
/*
* @Author: 吴文洁
* @Date: 2020-08-05 10:07:47
* @LastEditors:
fusanqiasng
* @LastEditTime: 2021-05-
24 21:04:03
* @LastEditors:
wufan
* @LastEditTime: 2021-05-
30 20:35:49
* @Description: 视频课新增/编辑页
* @Copyright: 杭州杰竞科技有限公司 版权所有
*/
...
...
@@ -684,7 +684,7 @@ class AddVideoCourse 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
)
}
>
...
...
src/modules/course-manage/video-course/AddVideoCourse.less
View file @
9417fce0
.add-video-course-page {
position:relative !important;
.box{
margin-bottom:
66
px !important;
margin-bottom:
52
px !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:
25
2px;
padding-right:
7
2px;
background: #fff;
border-top: 1px solid #E8E8E8;
z-index: 999;
...
...
src/modules/course-manage/video-course/components/VideoCourseList.jsx
View file @
9417fce0
/*
* @Author: 吴文洁
* @Date: 2020-08-05 10:12:45
* @LastEditors: fusanqiasng
<<<<<<< HEAD
* @LastEditTime: 2021-05-30 10:45:55
=======
<<<<<<< Updated upstream
* @LastEditTime: 2021-05-27 17:48:31
=======
* @LastEditTime: 2021-05-27 19:13:55
>>>>>>> Stashed changes
>>>>>>> feature/pangguoming/20210520/external_courses
* @Description: 视频课-列表模块
* @Copyright: 杭州杰竞科技有限公司 版权所有
*/
import
React
from
'react'
import
{
Table
,
Modal
,
message
,
Tooltip
,
Switch
,
Dropdown
}
from
'antd'
import
_
from
'underscore'
import
{
PageControl
}
from
'@/components'
import
{
LIVE_SHARE
}
from
'@/domains/course-domain/constants'
import
React
from
"react"
import
{
Table
,
Modal
,
message
,
Tooltip
,
Switch
,
Dropdown
}
from
"antd"
import
_
from
"underscore"
import
{
PageControl
}
from
"@/components"
import
{
LIVE_SHARE
}
from
"@/domains/course-domain/constants"
import
ShareLiveModal
from
'@/modules/course-manage/modal/ShareLiveModal'
import
WatchDataModal
from
'../modal/WatchDataModal'
import
CourseService
from
'@/domains/course-domain/CourseService'
import
RelatedPlanModal
from
'../../modal/RelatedPlanModal'
import
User
from
'@/common/js/user'
import
ShareLiveModal
from
"@/modules/course-manage/modal/ShareLiveModal"
import
WatchDataModal
from
"../modal/WatchDataModal"
import
CourseService
from
"@/domains/course-domain/CourseService"
import
RelatedPlanModal
from
"../../modal/RelatedPlanModal"
import
User
from
"@/common/js/user"
import
'./VideoCourseList.less'
import
"./VideoCourseList.less"
class
VideoCourseList
extends
React
.
Component
{
constructor
(
props
)
{
super
(
props
)
this
.
state
=
{
id
:
''
,
// 视频课ID
id
:
""
,
// 视频课ID
studentIds
:
[],
RelatedPlanModalVisible
:
false
,
selectPlanList
:
{},
ShelfLoading
:
false
,
ShelfLoading
:
false
// dataSource: [],
}
}
componentDidMount
()
{
const
videoCourseItem
=
localStorage
.
getItem
(
'videoCourseItem'
)
const
videoCourseItem
=
localStorage
.
getItem
(
"videoCourseItem"
)
if
(
videoCourseItem
)
{
const
_videoCourseItem
=
JSON
.
parse
(
videoCourseItem
)
this
.
handleShowShareModal
(
_videoCourseItem
,
true
)
...
...
@@ -57,7 +41,7 @@ class VideoCourseList extends React.Component {
data=
{
record
}
close=
{
()
=>
{
this
.
setState
({
watchDataModal
:
null
,
watchDataModal
:
null
})
}
}
/>
...
...
@@ -71,11 +55,11 @@ class VideoCourseList extends React.Component {
const
{
ShelfLoading
}
=
this
.
state
const
columns
=
[
{
title
:
'视频课'
,
key
:
'scheduleName'
,
dataIndex
:
'scheduleName'
,
title
:
"视频课"
,
key
:
"scheduleName"
,
dataIndex
:
"scheduleName"
,
width
:
321
,
fixed
:
'left'
,
fixed
:
"left"
,
render
:
(
val
,
record
)
=>
{
const
{
coverUrl
,
scheduleVideoUrl
}
=
record
return
(
...
...
@@ -85,7 +69,7 @@ class VideoCourseList extends React.Component {
className=
'course-cover'
src=
{
coverUrl
||
(
type
===
'internal'
?
`${scheduleVideoUrl}?x-oss-process=video/snapshot,t_0,m_fast`
:
'https://image.xiaomaiketang.com/xm/mt3ZQRxGKB.png'
)
(
type
===
"internal"
?
`${scheduleVideoUrl}?x-oss-process=video/snapshot,t_0,m_fast`
:
"https://image.xiaomaiketang.com/xm/mt3ZQRxGKB.png"
)
}
alt=
''
/>
...
...
@@ -101,31 +85,31 @@ class VideoCourseList extends React.Component {
</
Choose
>
</
div
>
)
}
,
}
},
{
title
:
(
<
span
>
<
span
>
课程分类
</
span
>
<
If
condition=
{
type
!==
'internal'
}
>
<
If
condition=
{
type
!==
"internal"
}
>
<
Tooltip
title=
{
<
div
>
外部课程的分类由系统提供,不影响企业课程分类。
</
div
>
}
>
<
i
className=
'icon iconfont'
style=
{
{
marginLeft
:
'5px'
,
cursor
:
'pointer'
,
color
:
'#bfbfbf'
,
fontSize
:
'14px'
,
fontWeight
:
'normal'
}
}
>
<
i
className=
'icon iconfont'
style=
{
{
marginLeft
:
"5px"
,
cursor
:
"pointer"
,
color
:
"#bfbfbf"
,
fontSize
:
"14px"
,
fontWeight
:
"normal"
}
}
>

</
i
>
</
Tooltip
>
</
If
>
</
span
>
),
key
:
'categoryName'
,
dataIndex
:
'categoryName'
,
key
:
"categoryName"
,
dataIndex
:
"categoryName"
,
width
:
200
,
render
:
(
val
,
record
)
=>
{
return
(
<
Choose
>
<
When
condition=
{
type
===
'internal'
}
>
<
When
condition=
{
type
===
"internal"
}
>
<
div
className=
'record__item'
>
{
record
.
categoryOneName
}
{
record
.
categoryTwoName
?
`-${record.categoryTwoName}`
:
''
}
{
record
.
categoryTwoName
?
`-${record.categoryTwoName}`
:
""
}
</
div
>
</
When
>
<
Otherwise
>
...
...
@@ -133,12 +117,12 @@ class VideoCourseList extends React.Component {
</
Otherwise
>
</
Choose
>
)
}
,
}
},
{
title
:
'创建人'
,
key
:
'createName'
,
dataIndex
:
'createName'
,
title
:
"创建人"
,
key
:
"createName"
,
dataIndex
:
"createName"
,
width
:
100
,
render
:
(
val
)
=>
{
return
(
...
...
@@ -150,7 +134,7 @@ class VideoCourseList extends React.Component {
)
}
</
div
>
)
}
,
}
},
{
title
:
(
...
...
@@ -164,62 +148,62 @@ class VideoCourseList extends React.Component {
关闭后,学院内不再展示此课程,但学员仍可通过分享的海报/链接查看此课程。
</
div
>
}
>
<
i
className=
'icon iconfont'
style=
{
{
marginLeft
:
'5px'
,
cursor
:
'pointer'
,
color
:
'#bfbfbf'
,
fontSize
:
'14px'
}
}
>
<
i
className=
'icon iconfont'
style=
{
{
marginLeft
:
"5px"
,
cursor
:
"pointer"
,
color
:
"#bfbfbf"
,
fontSize
:
"14px"
}
}
>

</
i
>
</
Tooltip
>
</
span
>
),
width
:
120
,
key
:
'shelfState'
,
dataIndex
:
'shelfState'
,
key
:
"shelfState"
,
dataIndex
:
"shelfState"
,
render
:
(
val
,
item
,
index
)
=>
{
return
(
<
Switch
loading=
{
ShelfLoading
}
checked=
{
item
.
shelfState
===
'YES'
}
checked=
{
item
.
shelfState
===
"YES"
}
defaultChecked=
{
item
.
shelfState
}
onClick=
{
(
checked
)
=>
{
this
.
changeShelfState
(
checked
,
item
,
index
)
}
}
/>
)
}
,
}
},
{
title
:
'观看学员数'
,
title
:
"观看学员数"
,
width
:
110
,
key
:
'watchUserCount'
,
dataIndex
:
'watchUserCount'
,
key
:
"watchUserCount"
,
dataIndex
:
"watchUserCount"
,
render
:
(
val
,
item
)
=>
{
return
<
div
className=
'watchUserCount'
>
{
val
||
0
}
</
div
>
}
,
}
},
{
title
:
'创建时间'
,
title
:
"创建时间"
,
width
:
181
,
key
:
'created'
,
dataIndex
:
'created'
,
key
:
"created"
,
dataIndex
:
"created"
,
sorter
:
true
,
render
:
(
val
)
=>
{
return
formatDate
(
'YYYY-MM-DD H:i'
,
val
)
}
,
return
formatDate
(
"YYYY-MM-DD H:i"
,
val
)
}
},
{
title
:
'更新时间'
,
title
:
"更新时间"
,
width
:
181
,
key
:
'updated'
,
dataIndex
:
'updated'
,
key
:
"updated"
,
dataIndex
:
"updated"
,
sorter
:
true
,
render
:
(
val
)
=>
{
return
formatDate
(
'YYYY-MM-DD H:i'
,
val
)
}
,
return
formatDate
(
"YYYY-MM-DD H:i"
,
val
)
}
},
{
title
:
'关联项'
,
title
:
"关联项"
,
width
:
200
,
key
:
'planList'
,
dataIndex
:
'planList'
,
key
:
"planList"
,
dataIndex
:
"planList"
,
render
:
(
val
,
record
)
=>
{
return
(
<
div
className=
'related-task'
>
...
...
@@ -241,14 +225,14 @@ class VideoCourseList extends React.Component {
</
Choose
>
</
div
>
)
}
,
}
},
{
title
:
'操作'
,
key
:
'operate'
,
dataIndex
:
'operate'
,
title
:
"操作"
,
key
:
"operate"
,
dataIndex
:
"operate"
,
width
:
210
,
fixed
:
'right'
,
fixed
:
"right"
,
render
:
(
val
,
record
)
=>
{
return
(
<
div
className=
'operate'
>
...
...
@@ -256,7 +240,7 @@ class VideoCourseList extends React.Component {
观看数据
</
div
>
<
If
condition=
{
type
===
'internal'
}
>
<
If
condition=
{
type
===
"internal"
}
>
<
span
className=
'operate__item split'
>
|
</
span
>
<
div
className=
'operate__item'
onClick=
{
()
=>
this
.
handleShowShareModal
(
record
)
}
>
分享
...
...
@@ -266,18 +250,18 @@ class VideoCourseList extends React.Component {
<
Dropdown
overlay=
{
this
.
renderMoreOperate
(
record
)
}
>
<
span
className=
'more-operate'
>
<
span
className=
'operate-text'
>
更多
</
span
>
<
span
className=
'iconfont icon'
style=
{
{
color
:
'#2966FF'
}
}
>
<
span
className=
'iconfont icon'
style=
{
{
color
:
"#2966FF"
}
}
>

</
span
>
</
span
>
</
Dropdown
>
</
div
>
)
}
,
}
,
}
}
]
type
!==
'internal'
&&
columns
.
splice
(
2
,
1
)
type
!==
"internal"
&&
columns
.
splice
(
2
,
1
)
return
columns
}
...
...
@@ -285,17 +269,17 @@ class VideoCourseList extends React.Component {
const
{
type
}
=
this
.
props
return
(
<
div
className=
'live-course-more-menu'
>
<
If
condition=
{
type
!==
'internal'
}
>
<
If
condition=
{
type
!==
"internal"
}
>
<
div
className=
'operate__item'
onClick=
{
()
=>
this
.
handleShowShareModal
(
item
)
}
>
分享
</
div
>
</
If
>
{
(
User
.
getUserRole
()
===
'CloudManager'
||
User
.
getUserRole
()
===
'StoreManager'
)
&&
(
{
(
User
.
getUserRole
()
===
"CloudManager"
||
User
.
getUserRole
()
===
"StoreManager"
)
&&
(
<
div
className=
'operate__item'
onClick=
{
()
=>
this
.
handleRelatedModalShow
(
item
)
}
>
关联培训计划
</
div
>
)
}
<
If
condition=
{
type
===
'internal'
}
>
<
If
condition=
{
type
===
"internal"
}
>
<
div
className=
'operate__item'
onClick=
{
()
=>
{
...
...
@@ -312,10 +296,10 @@ class VideoCourseList extends React.Component {
}
handlePlanName
=
(
planArray
)
=>
{
let
planStr
=
''
let
planStr
=
""
planArray
.
map
((
item
,
index
)
=>
{
if
(
index
<
planArray
.
length
-
1
)
{
planStr
=
planStr
+
item
.
planName
+
'、'
planStr
=
planStr
+
item
.
planName
+
"、"
}
else
{
planStr
=
planStr
+
item
.
planName
}
...
...
@@ -324,21 +308,21 @@ class VideoCourseList extends React.Component {
}
//改变上架状态
changeShelfState
=
(
checked
,
item
,
index
)
=>
{
let
_shelfState
=
checked
?
'YES'
:
'NO'
let
_shelfState
=
checked
?
"YES"
:
"NO"
if
(
checked
)
{
_shelfState
=
'YES'
_shelfState
=
"YES"
}
else
{
_shelfState
=
'NO'
_shelfState
=
"NO"
}
const
params
=
{
courseId
:
item
.
id
,
shelfState
:
_shelfState
,
shelfState
:
_shelfState
}
CourseService
.
changeVideoShelfState
(
params
).
then
(()
=>
{
if
(
_shelfState
===
'YES'
)
{
message
.
success
(
'已开启展示'
)
if
(
_shelfState
===
"YES"
)
{
message
.
success
(
"已开启展示"
)
}
else
{
message
.
success
(
'已取消展示'
)
message
.
success
(
"已取消展示"
)
}
this
.
props
.
changeShelfState
(
index
,
_shelfState
)
})
...
...
@@ -347,22 +331,22 @@ class VideoCourseList extends React.Component {
// 删除视频课
handleDeleteVideoCourse
=
(
scheduleId
)
=>
{
Modal
.
confirm
({
title
:
'你确定要删除此视频课吗?'
,
content
:
'删除后,学员将不能进行观看。'
,
title
:
"你确定要删除此视频课吗?"
,
content
:
"删除后,学员将不能进行观看。"
,
icon
:
<
span
className=
'icon iconfont default-confirm-icon'
>

</
span
>,
okText
:
'确定'
,
okType
:
'danger'
,
cancelText
:
'取消'
,
okText
:
"确定"
,
okType
:
"danger"
,
cancelText
:
"取消"
,
onOk
:
()
=>
{
const
param
=
{
courseId
:
scheduleId
,
storeId
:
User
.
getStoreId
()
,
storeId
:
User
.
getStoreId
()
}
CourseService
.
delVideoSchedule
(
param
).
then
(()
=>
{
message
.
success
(
'删除成功'
)
message
.
success
(
"删除成功"
)
this
.
props
.
onChange
()
})
}
,
}
})
}
...
...
@@ -377,7 +361,7 @@ class VideoCourseList extends React.Component {
longUrl
,
coverUrl
,
scheduleVideoUrl
,
courseName
,
courseName
}
const
shareLiveModal
=
(
...
...
@@ -389,9 +373,9 @@ class VideoCourseList extends React.Component {
title=
'视频课'
close=
{
()
=>
{
this
.
setState
({
shareLiveModal
:
null
,
shareLiveModal
:
null
})
localStorage
.
setItem
(
'videoCourseItem'
,
''
)
localStorage
.
setItem
(
"videoCourseItem"
,
""
)
}
}
/>
)
...
...
@@ -404,25 +388,25 @@ class VideoCourseList extends React.Component {
const
{
query
}
=
this
.
props
let
{
order
:
_order
}
=
query
// 按创建时间升序排序
if
(
columnKey
===
'created'
&&
order
===
'ascend'
)
{
_order
=
'CREATED_ASC'
if
(
columnKey
===
"created"
&&
order
===
"ascend"
)
{
_order
=
"CREATED_ASC"
}
// 按创建时间降序排序
if
(
columnKey
===
'created'
&&
order
===
'descend'
)
{
_order
=
'CREATED_DESC'
if
(
columnKey
===
"created"
&&
order
===
"descend"
)
{
_order
=
"CREATED_DESC"
}
// 按更新时间升序排序
if
(
columnKey
===
'updated'
&&
order
===
'ascend'
)
{
_order
=
'UPDATED_ASC'
if
(
columnKey
===
"updated"
&&
order
===
"ascend"
)
{
_order
=
"UPDATED_ASC"
}
// 按更新时间降序排序
if
(
columnKey
===
'updated'
&&
order
===
'descend'
)
{
_order
=
'UPDATED_DESC'
if
(
columnKey
===
"updated"
&&
order
===
"descend"
)
{
_order
=
"UPDATED_DESC"
}
const
_query
=
{
...
query
,
orderEnum
:
_order
,
orderEnum
:
_order
}
this
.
props
.
onChange
(
_query
)
}
...
...
@@ -439,23 +423,23 @@ class VideoCourseList extends React.Component {
this
.
setState
({
RelatedPlanModalVisible
:
true
,
selectCourseId
:
item
.
id
,
selectPlanList
:
selectPlanList
,
selectPlanList
:
selectPlanList
})
}
closeRelatedPlanModalVisible
=
()
=>
{
this
.
setState
({
RelatedPlanModalVisible
:
false
,
RelatedPlanModalVisible
:
false
})
}
onChangeSelectPlanList
=
(
selectPlanList
)
=>
{
this
.
setState
({
selectPlanList
:
selectPlanList
,
selectPlanList
:
selectPlanList
})
}
onConfirmSelectPlanList
=
()
=>
{
this
.
setState
(
{
RelatedPlanModalVisible
:
false
,
RelatedPlanModalVisible
:
false
},
()
=>
{
this
.
props
.
onChange
()
...
...
@@ -467,7 +451,7 @@ class VideoCourseList extends React.Component {
const
{
current
,
size
}
=
query
const
{
RelatedPlanModalVisible
,
selectPlanList
,
selectCourseId
}
=
this
.
state
return
(
<
div
className=
{
`video-course-list ${type !==
'internal' ? 'video-course-list-mt' : ''
}`
}
>
<
div
className=
{
`video-course-list ${type !==
"internal" ? "video-course-list-mt" : ""
}`
}
>
<
Table
rowKey=
{
(
record
)
=>
record
.
id
}
dataSource=
{
dataSource
}
...
...
src/modules/course-manage/video-course/components/VideoCourseList.less
View file @
9417fce0
...
...
@@ -31,14 +31,14 @@
padding: 16px;
}
.operate-text {
color: #
5289fa
;
color: #
2966FF
;
cursor: pointer;
}
.operate {
display: flex;
&__item {
color: #
5289fa
;
color: #
2966FF
;
cursor: pointer;
&.split {
...
...
@@ -59,7 +59,6 @@
height: 50px;
border-radius: 2px;
margin-right: 8px;
// background-color: #666;
}
.course-name {
...
...
src/modules/home/Home.jsx
View file @
9417fce0
...
...
@@ -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
(
'#FFB
71
4'
).
tooltip
(
'time*studyTime'
,
function
(
time
,
studyTime
){
this
.
_chart
.
line
().
position
(
'time*studyTime'
).
color
(
'#FFB
B5
4'
).
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"
>

</
span
>
...
...
@@ -461,7 +464,7 @@ class Home extends React.Component {
<
Geom
type=
"intervalStack"
position=
"percent"
color=
{
[
'item'
,
[
'#F
DB513'
,
'#5289FA
'
]]
}
color=
{
[
'item'
,
[
'#F
FBB54'
,
'#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"
>
学习人数与时长
...
...
src/modules/home/Home.less
View file @
9417fce0
.home-page {
padding: 0 16px 16px;
//
padding: 0 16px 16px;
min-width: 1100px;
position: relative;
z-index:3;
.g2-tooltip-marker {
border-radius: 50% !important;
}
.home-title {
height: 44px;
line-height: 44px;
color: #999;
color: #333;
padding-left:28px;
font-size:16px;
font-weight:bold;
position: relative;
padding-top:16px;
&::before{
width:4px;
height:12px;
content:'';
background-image: linear-gradient(#2966FF 83.5%, #0ACCA4 16.5%);
display:inline-block;
position: absolute;
left:16px;
top:22px;
}
}
@font-face {
font-family: 'number';
src: url('https://image.xiaomaiketang.com/xm/n2sADd2jY6.TTF');
}
.data-box {
display: flex;
justify-content: space-between;
.data-item {
position: relative;
height: 156px;
background: #fff;
width: ~'calc(16.67% - 8px)';
padding: 16px;
&.course-data {
width: ~'calc(50% - 24px)';
}
.header {
display: flex;
.header-icon {
width: 18px;
height: 18px;
margin-right: 4px;
}
.header-word {
display: inline-block;
font-size: 12px;
line-height: 18px;
color: #999;
}
}
.data-number {
font-family: 'number';
font-size: 28px;
color: #333;
margin-top: 24px;
}
.data-footer {
margin-top: 12px;
.footer-word {
font-size: 12px;
color: #999;
margin-right: 8px;
.data-wrap{
background: #FFF;
.data-box {
display: flex;
justify-content: space-between;
padding-left: 10px;
.data-item {
position: relative;
height: 156px;
background: #fff;
width: ~'calc(16.67% - 8px)';
padding: 16px;
&.course-data {
width: ~'calc(50% - 24px)';
}
.iconfont {
font-size: 12px;
margin-right: 4px;
color: #EC4B35;
.header {
display: flex;
.header-icon {
width: 18px;
height: 18px;
margin-right: 4px;
}
.header-word {
display: inline-block;
font-size: 14px;
line-height: 18px;
color: #333;
font-weight:500;
}
}
.footer-number {
font-size: 12px;
color: #999;
.data-number {
font-family: 'number';
font-size: 28px;
color: #333;
margin-top: 24px;
}
}
.course-box {
border-radius: 4px;
background: #FAFAFA;
height: 124px;
width: 66%;
position: absolute;
right: 16px;
top: 16px;
padding: 8px 24px 0;
.course-item {
display: inline-block;
width: 50%;
padding: 4px 0 12px;
.course-title {
.data-footer {
margin-top: 12px;
.footer-word {
font-size: 12px;
color: #999;
margin-right: 8px;
}
.iconfont {
font-size: 12px;
margin-right: 4px;
color: #EC4B35;
}
.footer-number {
font-size: 12px;
color: #999;
}
.data {
display: flex;
align-items: flex-end;
.course-number {
font-size: 16px;
font-family: 'number';
margin-right: 16px;
}
.course-word {
}
.course-box {
border-radius: 4px;
background: #FAFAFA;
height: 124px;
width: 66%;
position: absolute;
right: 16px;
top: 16px;
padding: 8px 24px 0;
.course-item {
display: inline-block;
width: 50%;
padding: 4px 0 12px;
.course-title {
font-size: 12px;
color: #999;
margin-right: 8px;
}
.iconfont {
font-size: 12px;
margin-right: 4px;
color: #EC4B35;
}
.add-number {
font-size: 12px;
color: #999;
.data {
display: flex;
align-items: flex-end;
.course-number {
font-size: 16px;
font-family: 'number';
margin-right: 16px;
}
.course-word {
font-size: 12px;
color: #999;
margin-right: 8px;
}
.iconfont {
font-size: 12px;
margin-right: 4px;
color: #EC4B35;
}
.add-number {
font-size: 12px;
color: #999;
}
}
}
}
}
}
}
.study-box {
display: flex;
justify-content: space-between;
.study-item {
position: relative;
height: 414px;
background: #fff;
width: ~'calc(50% - 8px)';
padding: 16px;
overflow: hidden;
.study-title {
font-size: 16px;
color: #333;
font-weight: 500;
line-height: 22px;
margin-bottom: 12px;
.iconfont {
font-size: 14px;
color: #BFBFBF;
margin-left: 4px;
}
.tip {
.study-wrap{
background: #FFF;
margin-top:16px;
.study-box {
display: flex;
justify-content: space-between;
padding-left: 10px;
.study-item {
position: relative;
height: 414px;
background: #fff;
width: ~'calc(50% - 8px)';
padding: 16px;
overflow: hidden;
.study-title {
font-size: 14px;
color: #999999;
margin-left: 8px;
font-weight: 400;
color: #333;
font-weight: 500;
line-height: 22px;
margin-bottom: 12px;
.iconfont {
font-size: 14px;
color: #BFBFBF;
margin-left: 4px;
}
.tip {
font-size: 14px;
color: #999999;
margin-left: 8px;
font-weight: 400;
}
}
}
.study-header {
display: flex
;
justify-content: space-between
;
margin-bottom: 16px;
.study-
tab {
.tab {
position: relative
;
padding-right: 24px
;
color: #666
;
cursor: pointer;
&.selected {
color: #FDB513;
&::after {
position: absolute
;
width: 24
px;
height: 2px
;
content: ''
;
background: #FDB513
;
border-radius: 1
px;
left: 9
px;
bottom: -4px;
.study-header {
display: flex;
justify-content: space-between
;
margin-bottom: 16px
;
.study-tab {
.
tab {
position: relative;
padding-right: 24px
;
color: #666
;
cursor: pointer
;
&.selected {
color: #2966FF;
&::after {
position: absolute;
width: 24px
;
height: 2
px;
content: ''
;
background: #2966FF
;
border-radius: 1px
;
left: 9
px;
bottom: -4
px;
}
}
}
}
.study-select {
.select-word {
color: #999;
margin-right: 8px;
}
}
}
.study-select {
.select-word {
.table-item {
width: 100%;
height: 60px;
display: flex;
align-items: center;
&.odd {
background: #FAFAFA;
}
.table-image {
width: 24px;
height: 24px;
}
.table-number {
width: 15%;
color: #999;
margin-right: 8px;
padding: 0 16px;
text-align: center;
}
}
}
.table-item {
width: 100%;
height: 60px;
display: flex;
align-items: center;
&.odd {
background: #FAFAFA;
}
.table-image {
width: 24px;
height: 24px;
}
.table-number {
width: 15%;
color: #999;
padding: 0 16px;
text-align: center;
}
.table-data {
width: 55%;
padding: 0 16px;
.table-name {
color: #333;
line-height: 20px;
margin-bottom: 2px;
white-space: nowrap;
text-overflow: ellipsis;
overflow: hidden;
.table-data {
width: 55%;
padding: 0 16px;
.table-name {
color: #333;
line-height: 20px;
margin-bottom: 2px;
white-space: nowrap;
text-overflow: ellipsis;
overflow: hidden;
}
.table-tag {
line-height: 17px;
color: #999;
font-size: 12px;
}
}
.table-
tag
{
line-height: 17px
;
.table-
study
{
width: 30%
;
color: #999;
font-size: 12
px;
padding: 0 16
px;
}
}
.table-study {
width: 30%;
color: #999;
padding: 0 16px;
}
}
.study-empty {
margin-top: 102px;
img {
display: block;
width: 100px;
height: 100px;
margin: 0 auto 8px;
}
div {
text-align: center;
color: #333;
.study-empty {
margin-top: 102px;
img {
display: block;
width: 100px;
height: 100px;
margin: 0 auto 8px;
}
div {
text-align: center;
color: #333;
}
}
}
.circle-box {
width: 70%;
height: 100%;
display: flex;
align-items: center;
justify-content: center;
.big-circle {
.circle-box {
width: 70%;
height: 100%;
display: flex;
align-items: center;
justify-content: center;
width: 204px;
height: 204px;
border-radius: 102px;
background: #F1F3F6;
margin-top: -20px;
.small-circle {
.big-circle {
display: flex;
align-items: center;
justify-content: center;
width: 124px;
height: 124px;
border-radius: 62px;
background: #fff;
.tip-box {
text-align: center;
width: 204px;
height: 204px;
border-radius: 102px;
background: #F1F3F6;
margin-top: -20px;
.small-circle {
display: flex;
align-items: center;
justify-content: center;
width: 124px;
height: 124px;
border-radius: 62px;
background: #fff;
.tip-box {
text-align: center;
}
}
}
}
}
.circle-tip {
position: absolute;
left: 70%;
padding-left: 16px;
&.unfinished {
top: 152px;
.spot {
background: #5289FA;
.circle-tip {
position: absolute;
left: 70%;
padding-left: 16px;
&.unfinished {
top: 152px;
.spot {
background: #2966FF;
}
}
&.finished {
top: 232px;
.spot {
background: #FFBB54;
}
}
}
&.finished {
top: 232px;
.spot {
background: #FFBB54;
position: absolute;
width: 8px;
height: 8px;
border-radius: 4px;
top: 20px;
left: 0;
}
.number {
color: #333;
font-size: 16px;
margin-bottom: 2px;
}
.word {
color: #999;
}
}
.spot {
position: absolute;
width: 8px;
height: 8px;
border-radius: 4px;
top: 20px;
left: 0;
}
.number {
color: #333;
font-size: 16px;
margin-bottom: 2px;
}
.word {
color: #999;
}
}
}
}
.study-chart {
width: 100%;
height: 432px;
background: #fff;
padding: 16px;
margin-top: 16px;
padding-bottom: 32px;
padding: 16px 16px 32px 26px;
.study-title {
font-size: 1
6
px;
font-size: 1
4
px;
color: #333;
font-weight: 500;
line-height: 22px;
...
...
@@ -328,7 +352,7 @@
align-items: center;
color: #666;
.student-dot {
background: #
5289FA
;
background: #
2966FF
;
height: 8px;
width: 8px;
border-radius: 50%;
...
...
src/modules/knowledge-base/ENUM.js
View file @
9417fce0
...
...
@@ -12,7 +12,7 @@ const ENUM = {
UN_START
:
{
code
:
1
,
title
:
"待开课"
,
color
:
"#
FFB714
"
,
color
:
"#
2966FF
"
,
},
STARTING
:
{
code
:
2
,
...
...
src/modules/knowledge-base/components/Classification.jsx
View file @
9417fce0
...
...
@@ -2,8 +2,8 @@
* @Description:
* @Author: zangsuyun
* @Date: 2021-03-19 18:05:23
* @LastEditors:
yuananting
* @LastEditTime: 2021-0
4-15 21:46:41
* @LastEditors:
wufan
* @LastEditTime: 2021-0
5-30 16:48:46
* @Copyright: © 2020 杭州杰竞科技有限公司 版权所有
*/
...
...
@@ -193,10 +193,10 @@ class Classification extends Component {
className=
"sider-search"
placeholder=
"搜索名称分类"
onSearch=
{
(
value
)
=>
{
// TODO 调用查询分类接口
this
.
queryCategoryTree
(
value
);
}
}
enterButton=
{
<
span
className=
"icon iconfont"
>

</
span
>
}
style=
{
{
width
:
230
}
}
/>
<
div
className=
"sider-btn"
>
<
Button
...
...
src/modules/knowledge-base/components/Classification.less
View file @
9417fce0
...
...
@@ -2,8 +2,8 @@
* @Description:
* @Author: zangsuyun
* @Date: 2021-03-19 18:16:58
* @LastEditors:
zangsuyu
n
* @LastEditTime: 2021-0
3-25 19:13:06
* @LastEditors:
wufa
n
* @LastEditTime: 2021-0
5-30 10:19:47
* @Copyright: © 2020 杭州杰竞科技有限公司 版权所有
*/
...
...
@@ -25,14 +25,14 @@
}
.sider-tree {
width: 2
66
px;
width: 2
44
px;
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: 2
60
px;
width: 2
34
px;
.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)
;
}
}
}
...
...
src/modules/knowledge-base/components/KnowledgeBaseList.jsx
View file @
9417fce0
...
...
@@ -3,92 +3,92 @@
* @Author: zangsuyun
* @Date: 2021-03-12 14:49:40
* @LastEditors: wufan
* @LastEditTime: 2021-05-
13 16:35:41
* @LastEditTime: 2021-05-
30 20:37:42
* @Copyright: © 2020 杭州杰竞科技有限公司 版权所有
*/
import
React
from
"react"
;
import
{
Table
,
Modal
,
message
,
Tooltip
,
Switch
,
Dropdown
,
Button
}
from
"antd"
;
import
{
Route
,
withRouter
}
from
"react-router-dom"
;
import
{
PageControl
}
from
"@/components"
;
import
{
LIVE_SHARE_MAP
}
from
"@/common/constants/academic/cloudClass"
;
import
{
appId
,
shareUrl
,
LIVE_SHARE
}
from
"@/domains/course-domain/constants"
;
import
ScanFileModal
from
"../../resource-disk/modal/ScanFileModal"
;
import
WatchData
from
"./WatchData"
;
import
KnowledgeAPI
from
"@/data-source/knowledge/request-api"
;
import
ENUM
from
"../ENUM.js"
;
import
"./KnowledgeBaseList.less"
;
import
React
from
"react"
import
{
Table
,
Modal
,
message
,
Tooltip
,
Switch
,
Dropdown
,
Button
}
from
"antd"
import
{
Route
,
withRouter
}
from
"react-router-dom"
import
{
PageControl
}
from
"@/components"
import
{
LIVE_SHARE_MAP
}
from
"@/common/constants/academic/cloudClass"
import
{
appId
,
shareUrl
,
LIVE_SHARE
}
from
"@/domains/course-domain/constants"
import
ScanFileModal
from
"../../resource-disk/modal/ScanFileModal"
import
WatchData
from
"./WatchData"
import
KnowledgeAPI
from
"@/data-source/knowledge/request-api"
import
ENUM
from
"../ENUM.js"
import
"./KnowledgeBaseList.less"
const
DEFAULT_SIZE_UNIT
=
1000
*
1000
;
// 将B转换成M
const
{
confirm
}
=
Modal
;
const
ENV
=
process
.
env
.
DEPLOY_ENV
||
"dev"
;
const
DEFAULT_SIZE_UNIT
=
1000
*
1000
// 将B转换成M
const
{
confirm
}
=
Modal
const
ENV
=
process
.
env
.
DEPLOY_ENV
||
"dev"
class
KnowledgeBaseList
extends
React
.
Component
{
constructor
(
props
)
{
super
(
props
)
;
super
(
props
)
this
.
state
=
{
id
:
""
,
scanFileModal
:
null
}
;
id
:
""
,
scanFileModal
:
null
}
}
handleAdminName
=
(
adminArray
)
=>
{
let
adminStr
=
""
;
let
adminStr
=
""
adminArray
.
map
((
item
,
index
)
=>
{
if
(
index
<
adminArray
.
length
-
1
)
{
adminStr
=
adminStr
+
item
.
adminName
+
"、"
;
adminStr
=
adminStr
+
item
.
adminName
+
"、"
}
else
{
adminStr
=
adminStr
+
item
.
adminName
;
adminStr
=
adminStr
+
item
.
adminName
}
})
;
return
adminStr
;
}
;
})
return
adminStr
}
handleUp
=
(
index
,
record
)
=>
{
if
(
index
===
0
&&
this
.
props
.
query
.
current
===
1
)
{
return
;
return
}
const
params
=
{
direction
:
"UP"
,
id
:
record
.
id
,
storeId
:
record
.
storeId
,
}
;
storeId
:
record
.
storeId
}
KnowledgeAPI
.
moveKnowledge
(
params
).
then
((
res
)
=>
{
if
(
res
.
success
)
{
message
.
success
(
"更新成功"
)
;
this
.
props
.
onChange
()
;
message
.
success
(
"更新成功"
)
this
.
props
.
onChange
()
}
})
;
}
;
})
}
handleDown
=
(
record
,
index
)
=>
{
const
{
query
,
totalCount
}
=
this
.
props
;
const
{
current
,
size
}
=
query
;
const
{
query
,
totalCount
}
=
this
.
props
const
{
current
,
size
}
=
query
if
(
totalCount
===
size
*
(
current
-
1
)
+
index
+
1
)
{
return
;
return
}
const
params
=
{
direction
:
"DOWN"
,
id
:
record
.
id
,
storeId
:
record
.
storeId
,
}
;
storeId
:
record
.
storeId
}
KnowledgeAPI
.
moveKnowledge
(
params
).
then
((
res
)
=>
{
if
(
res
.
success
)
{
message
.
success
(
"更新成功"
)
;
this
.
props
.
onChange
()
;
message
.
success
(
"更新成功"
)
this
.
props
.
onChange
()
}
})
;
}
;
})
}
getBlob
=
(
url
)
=>
{
return
new
Promise
((
resolve
)
=>
{
const
xhr
=
new
XMLHttpRequest
()
xhr
.
open
(
'GET'
,
url
,
true
)
xhr
.
responseType
=
'blob'
xhr
.
open
(
"GET"
,
url
,
true
)
xhr
.
responseType
=
"blob"
xhr
.
onload
=
()
=>
{
if
(
xhr
.
status
===
200
)
{
resolve
(
xhr
.
response
)
...
...
@@ -102,8 +102,8 @@ class KnowledgeBaseList extends React.Component {
if
(
window
.
navigator
.
msSaveOrOpenBlob
)
{
navigator
.
msSaveBlob
(
blob
,
filename
)
}
else
{
const
link
=
document
.
createElement
(
'a'
)
const
body
=
document
.
querySelector
(
'body'
)
const
link
=
document
.
createElement
(
"a"
)
const
body
=
document
.
querySelector
(
"body"
)
// 创建对象url
link
.
href
=
window
.
URL
.
createObjectURL
(
blob
)
...
...
@@ -124,15 +124,15 @@ class KnowledgeBaseList extends React.Component {
this
.
saveAs
(
blob
,
folder
.
folderName
)
})
}
// 预览文件
handleScanFile
=
(
folder
)
=>
{
console
.
log
(
folder
)
;
const
{
folderFormat
,
folderSize
,
ossUrl
}
=
folder
;
console
.
log
(
folder
)
const
{
folderFormat
,
folderSize
,
ossUrl
}
=
folder
switch
(
folderFormat
)
{
case
"PDF"
:
window
.
open
(
ossUrl
,
"_blank"
)
;
break
;
window
.
open
(
ossUrl
,
"_blank"
)
break
case
"WORD"
:
case
"DOCX"
:
case
"DOC"
:
...
...
@@ -141,11 +141,7 @@ class KnowledgeBaseList extends React.Component {
case
"PPTX"
:
case
"PDF"
:
if
(
((
folderFormat
===
"PPT"
||
folderFormat
===
"PPTX"
||
folderFormat
===
"DOCX"
||
folderFormat
===
"WORD"
||
folderFormat
===
"DOC"
)
&&
((
folderFormat
===
"PPT"
||
folderFormat
===
"PPTX"
||
folderFormat
===
"DOCX"
||
folderFormat
===
"WORD"
||
folderFormat
===
"DOC"
)
&&
folderSize
>
10
*
DEFAULT_SIZE_UNIT
)
||
(
folderFormat
===
"EXCEL"
&&
folderSize
>
5
*
DEFAULT_SIZE_UNIT
)
)
{
...
...
@@ -157,33 +153,33 @@ class KnowledgeBaseList extends React.Component {
okText
:
"下载"
,
onOk
:
()
=>
{
this
.
handleDownload
(
folder
)
}
,
})
;
break
;
}
})
break
}
const
prefixUrl
=
"https://view.officeapps.live.com/op/view.aspx?src="
;
const
scanUrl
=
`
${
prefixUrl
}${
encodeURIComponent
(
ossUrl
)}
`
;
window
.
open
(
scanUrl
,
"_blank"
)
;
break
;
const
prefixUrl
=
"https://view.officeapps.live.com/op/view.aspx?src="
const
scanUrl
=
`
${
prefixUrl
}${
encodeURIComponent
(
ossUrl
)}
`
window
.
open
(
scanUrl
,
"_blank"
)
break
default
:
const
scanFileModal
=
(
<
ScanFileModal
fileType=
{
folderFormat
}
item=
{
folder
}
close=
{
()
=>
{
this
.
setState
({
scanFileModal
:
null
})
;
this
.
setState
({
scanFileModal
:
null
})
}
}
/>
)
;
this
.
setState
({
scanFileModal
})
;
break
;
)
this
.
setState
({
scanFileModal
})
break
}
}
;
}
// 请求表头
parseColumns
=
()
=>
{
const
{
query
,
totalCount
}
=
this
.
props
;
const
{
current
,
size
}
=
query
;
const
{
query
,
totalCount
}
=
this
.
props
const
{
current
,
size
}
=
query
const
columns
=
[
{
title
:
"课程名称"
,
...
...
@@ -192,131 +188,95 @@ class KnowledgeBaseList extends React.Component {
width
:
391
,
fixed
:
"left"
,
render
:
(
val
,
record
)
=>
{
const
{
coverUrl
,
mediaCourseUrl
}
=
record
.
source
;
let
hasCover
=
false
;
const
type
=
record
.
type
;
const
{
coverUrl
,
mediaCourseUrl
,
courseDivision
}
=
record
.
source
let
hasCover
=
false
const
type
=
record
.
type
return
(
<
div
>
{
type
===
"LIVE"
&&
(
<
div
className=
"record__item"
>
<
div
className=
'record__item'
>
{
record
.
source
&&
record
.
source
.
courseMediaVOS
.
map
((
item
,
index
)
=>
{
if
(
item
.
contentType
===
"COVER"
)
{
hasCover
=
true
;
return
(
<
img
className=
"course-cover"
key=
{
index
}
src=
{
item
.
mediaUrl
}
/>
);
hasCover
=
true
return
<
img
className=
'course-cover'
key=
{
index
}
src=
{
item
.
mediaUrl
}
/>
}
})
}
{
!
hasCover
&&
(
<
img
className=
"course-cover"
src=
{
"https://image.xiaomaiketang.com/xm/Y
Nfi45JwFA
.png"
}
src=
{
"https://image.xiaomaiketang.com/xm/Y
ip2YtFDwH
.png"
}
/>
)
}
<
div
>
{
val
.
length
>
17
?
(
<
Tooltip
title=
{
val
}
>
<
div
className=
"course-name"
>
{
val
}
</
div
>
<
div
className=
'course-name'
>
{
val
}
</
div
>
</
Tooltip
>
)
:
(
<
div
className=
"course-name"
>
{
val
}
</
div
>
<
div
className=
'course-name'
>
{
val
}
</
div
>
)
}
<
div
>
<
span
className=
"course-time"
>
{
formatDate
(
"YYYY-MM-DD H:i"
,
parseInt
(
record
.
source
.
startTime
)
)
}
~
{
formatDate
(
"H:i"
,
parseInt
(
record
.
source
.
endTime
))
}
<
span
className=
'course-time'
>
{
formatDate
(
"YYYY-MM-DD H:i"
,
parseInt
(
record
.
source
.
startTime
))
}
~
{
formatDate
(
"H:i"
,
parseInt
(
record
.
source
.
endTime
))
}
</
span
>
<
span
className=
"course-status"
className=
'course-status'
style=
{
{
color
:
ENUM
.
courseStateShow
[
record
.
source
.
courseState
]
.
color
,
border
:
`1px solid ${
ENUM.courseStateShow[record.source.courseState]
.color
}`
,
}
}
>
color
:
ENUM
.
courseStateShow
[
record
.
source
.
courseState
].
color
,
border
:
`1px solid ${ENUM.courseStateShow[record.source.courseState].color}`
}
}
>
{
ENUM
.
courseStateShow
[
record
.
source
.
courseState
].
title
}
</
span
>
{
record
.
hideToUser
&&
(
<
Tooltip
title=
{
<
div
>
课程未成功开课,已在学员知识列表中隐藏
</
div
>
}
>
<
Tooltip
title=
{
<
div
>
课程未成功开课,已在学员知识列表中隐藏
</
div
>
}
>
<
i
className=
"icon iconfont"
className=
'icon iconfont'
style=
{
{
marginLeft
:
"5px"
,
cursor
:
"pointer"
,
color
:
"#FF4F4F"
,
fontSize
:
"14px"
,
}
}
>
fontSize
:
"14px"
}
}
>

</
i
>
</
Tooltip
>
)
}
</
div
>
<
div
className=
"teacher-assistant"
>
<
div
className=
'teacher-assistant'
>
{
record
.
source
.
teacherName
.
length
>
4
?
(
<
Tooltip
title=
{
record
.
source
.
teacherName
}
>
<
span
className=
"teacher"
>
讲师:
{
record
.
source
.
teacherName
}
</
span
>
<
span
className=
'teacher'
>
讲师:
{
record
.
source
.
teacherName
}
</
span
>
</
Tooltip
>
)
:
(
<
span
className=
"teacher"
>
讲师:
{
record
.
source
.
teacherName
}
</
span
>
<
span
className=
'teacher'
>
讲师:
{
record
.
source
.
teacherName
}
</
span
>
)
}
{
record
.
source
.
admins
.
length
>
0
&&
(
<>
<
span
className=
"split"
>
|
</
span
>
{
this
.
handleAdminName
(
record
.
source
.
admins
).
length
>
4
?
(
<
Tooltip
title=
{
this
.
handleAdminName
(
record
.
source
.
admins
)
}
>
<
span
className=
"assistant"
>
<
span
className=
'split'
>
|
</
span
>
{
this
.
handleAdminName
(
record
.
source
.
admins
).
length
>
4
?
(
<
Tooltip
title=
{
this
.
handleAdminName
(
record
.
source
.
admins
)
}
>
<
span
className=
'assistant'
>
助教:
{
record
.
source
.
admins
.
map
((
item
,
index
)
=>
{
return
(
<
span
>
{
item
.
adminName
}{
" "
}
{
index
<
record
.
source
.
admins
.
length
-
1
&&
(
<
span
>
、
</
span
>
)
}{
" "
}
{
item
.
adminName
}
{
index
<
record
.
source
.
admins
.
length
-
1
&&
<
span
>
、
</
span
>
}{
" "
}
</
span
>
)
;
)
})
}
</
span
>
</
Tooltip
>
)
:
(
<
span
className=
"assistant"
>
<
span
className=
'assistant'
>
助教:
{
record
.
source
.
admins
.
map
((
item
,
index
)
=>
{
return
(
<
span
key=
{
index
}
>
{
item
.
adminName
}{
" "
}
{
index
<
record
.
source
.
admins
.
length
-
1
&&
(
<
span
>
、
</
span
>
)
}{
" "
}
{
item
.
adminName
}
{
index
<
record
.
source
.
admins
.
length
-
1
&&
<
span
>
、
</
span
>
}{
" "
}
</
span
>
)
;
)
})
}
</
span
>
)
}
...
...
@@ -328,21 +288,25 @@ class KnowledgeBaseList extends React.Component {
)
}
{
type
===
"VOICE"
&&
(
<
div
className=
"record__item"
>
<
div
className=
'record__item'
>
{
/* 上传了封面的话就用上传的封面, 没有的话就取视频的第一帧 */
}
<
img
className=
"course-cover"
className=
'course-cover'
src=
{
coverUrl
||
`${mediaCourseUrl}?x-oss-process=video/snapshot,t_0,m_fast`
coverUrl
?
coverUrl
:
courseDivision
!==
"EXTERNAL"
?
`${mediaCourseUrl}?x-oss-process=video/snapshot,t_0,m_fast`
:
"https://image.xiaomaiketang.com/xm/mt3ZQRxGKB.png"
}
alt=
''
/>
{
val
.
length
>
25
?
(
<
Tooltip
title=
{
val
}
>
<
div
className=
"course-name clamp"
>
{
val
}
</
div
>
<
div
className=
'course-name clamp'
>
{
val
}
</
div
>
</
Tooltip
>
)
:
(
<
div
className=
"course-name clamp"
>
{
val
}
</
div
>
<
div
className=
'course-name clamp'
>
{
val
}
</
div
>
)
}
</
div
>
)
}
...
...
@@ -353,63 +317,54 @@ class KnowledgeBaseList extends React.Component {
className=
"course-cover"
src=
{
coverUrl
||
"https://image.xiaomaiketang.com/xm/
YNfi45JwFA
.png"
"https://image.xiaomaiketang.com/xm/
wFnpZtp2yB
.png"
}
/>
{
val
.
length
>
25
?
(
<
Tooltip
title=
{
val
}
>
<
div
className=
"course-name clamp"
>
{
val
}
</
div
>
<
div
className=
'course-name clamp'
>
{
val
}
</
div
>
</
Tooltip
>
)
:
(
<
div
className=
"course-name clamp"
>
{
val
}
</
div
>
<
div
className=
'course-name clamp'
>
{
val
}
</
div
>
)
}
</
div
>
)
}
{
type
===
"FOLDER"
&&
(
<
div
className=
"record__item"
className=
'record__item'
onClick=
{
()
=>
{
this
.
handleScanFile
(
record
.
source
);
}
}
>
<
div
className=
{
`folder-type ${
record.source && record.source.folderFormat
}`
}
/>
this
.
handleScanFile
(
record
.
source
)
}
}
>
<
div
className=
{
`folder-type ${record.source && record.source.folderFormat}`
}
/>
{
val
.
length
>
25
?
(
<
Tooltip
title=
{
val
}
>
<
div
className=
"course-name clamp"
>
{
val
}
</
div
>
<
div
className=
'course-name clamp'
>
{
val
}
</
div
>
</
Tooltip
>
)
:
(
<
div
className=
"course-name clamp"
>
{
val
}
</
div
>
<
div
className=
'course-name clamp'
>
{
val
}
</
div
>
)
}
</
div
>
)
}
</
div
>
)
;
}
,
)
}
},
{
title
:
"课程类型"
,
key
:
"type"
,
dataIndex
:
"type"
,
align
:
'center'
,
align
:
"center"
,
// width: 100,
render
:
(
val
,
record
)
=>
{
return
(
<
div
className=
""
>
{
val
?
ENUM
.
CourseTypeEnum
[
val
]
:
"-"
}
</
div
>
);
},
return
<
div
className=
''
>
{
val
?
ENUM
.
CourseTypeEnum
[
val
]
:
"-"
}
</
div
>
}
},
{
title
:
"创建人"
,
key
:
"createName"
,
dataIndex
:
"createName"
,
align
:
'center'
,
align
:
"center"
,
render
:
(
val
)
=>
{
return
(
<
div
>
...
...
@@ -419,31 +374,27 @@ class KnowledgeBaseList extends React.Component {
</
Tooltip
>
)
}
</
div
>
)
;
}
,
)
}
},
{
title
:
"观看学员数"
,
key
:
"watchUserCount"
,
dataIndex
:
"watchUserCount"
,
align
:
'right'
,
align
:
"right"
,
render
:
(
val
,
item
)
=>
{
return
val
?
(
<
div
className=
"operate"
style=
{
{
display
:
'block'
}
}
onClick=
{
()
=>
this
.
handleLinkToClassData
(
item
)
}
>
<
span
className=
"operate__item"
>
{
val
}
</
span
>
<
div
className=
'operate'
style=
{
{
display
:
"block"
}
}
onClick=
{
()
=>
this
.
handleLinkToClassData
(
item
)
}
>
<
span
className=
'operate__item'
>
{
val
}
</
span
>
</
div
>
)
:
(
0
)
;
}
,
)
}
},
{
title
:
""
,
width
:
48
,
width
:
48
},
{
title
:
"操作"
,
...
...
@@ -452,131 +403,111 @@ class KnowledgeBaseList extends React.Component {
width
:
160
,
fixed
:
"right"
,
render
:
(
val
,
record
,
index
)
=>
{
console
.
log
(
this
.
props
.
categoryId
)
;
console
.
log
(
this
.
props
.
categoryId
)
return
this
.
props
.
categoryId
===
"0"
?
(
<
div
className=
"operate"
>
<
div
className=
"operate__item"
onClick=
{
()
=>
this
.
handleDelete
(
record
)
}
>
<
div
className=
'operate'
>
<
div
className=
'operate__item'
onClick=
{
()
=>
this
.
handleDelete
(
record
)
}
>
移出
</
div
>
</
div
>
)
:
(
<
div
className=
"operate"
>
<
div
className=
{
index
===
0
&&
current
===
1
?
"operate__item disable"
:
"operate__item"
}
onClick=
{
()
=>
this
.
handleUp
(
index
,
record
)
}
>
<
div
className=
'operate'
>
<
div
className=
{
index
===
0
&&
current
===
1
?
"operate__item disable"
:
"operate__item"
}
onClick=
{
()
=>
this
.
handleUp
(
index
,
record
)
}
>
上移
</
div
>
<
span
className=
"operate__item split"
>
|
</
span
>
<
span
className=
'operate__item split'
>
|
</
span
>
<
div
className=
{
totalCount
===
size
*
(
current
-
1
)
+
index
+
1
?
"operate__item disable"
:
"operate__item"
}
onClick=
{
()
=>
this
.
handleDown
(
record
,
index
)
}
>
className=
{
totalCount
===
size
*
(
current
-
1
)
+
index
+
1
?
"operate__item disable"
:
"operate__item"
}
onClick=
{
()
=>
this
.
handleDown
(
record
,
index
)
}
>
下移
</
div
>
<
span
className=
"operate__item split"
>
|
</
span
>
<
div
className=
"operate__item"
onClick=
{
()
=>
this
.
handleDelete
(
record
)
}
>
<
span
className=
'operate__item split'
>
|
</
span
>
<
div
className=
'operate__item'
onClick=
{
()
=>
this
.
handleDelete
(
record
)
}
>
移出
</
div
>
</
div
>
)
;
}
,
}
,
]
;
return
columns
;
}
;
)
}
}
]
return
columns
}
handleDelete
=
(
record
)
=>
{
return
confirm
({
title
:
"移出知识"
,
content
:
"确定将分类中此知识移出吗?"
,
icon
:
(
<
span
className=
"icon iconfont default-confirm-icon"
>

</
span
>
),
icon
:
<
span
className=
'icon iconfont default-confirm-icon'
>

</
span
>,
okText
:
"删除"
,
okType
:
"danger"
,
cancelText
:
"取消"
,
width
:
440
,
height
:
188
,
onOk
:
()
=>
{
this
.
deleteConfirm
(
record
)
;
}
,
})
;
}
;
this
.
deleteConfirm
(
record
)
}
})
}
// 前往上课数据页面
handleLinkToClassData
=
(
item
)
=>
{
const
{
match
}
=
this
.
props
;
console
.
log
(
item
)
;
localStorage
.
setItem
(
"WatchData_CourseName"
,
item
.
name
)
;
const
{
match
}
=
this
.
props
console
.
log
(
item
)
localStorage
.
setItem
(
"WatchData_CourseName"
,
item
.
name
)
window
.
RCHistory
.
push
({
// pathname: `${match.url}/course-data?type=${item.courseType}&id=${item.liveCourseId}`,
pathname
:
`
${
match
.
url
}
/course-data?type=
${
item
.
type
}
&id=
${
item
.
id
}
`
,
})
;
}
;
pathname
:
`
${
match
.
url
}
/course-data?type=
${
item
.
type
}
&id=
${
item
.
id
}
`
})
}
deleteConfirm
=
(
item
)
=>
{
const
params
=
{
id
:
item
.
id
,
storeId
:
item
.
storeId
,
}
;
storeId
:
item
.
storeId
}
KnowledgeAPI
.
delKnowledge
(
params
).
then
((
res
)
=>
{
if
(
res
.
success
)
{
message
.
success
(
"移出成功"
)
;
this
.
props
.
onChange
()
;
this
.
props
.
updateCategoryTree
()
;
message
.
success
(
"移出成功"
)
this
.
props
.
onChange
()
this
.
props
.
updateCategoryTree
()
}
})
;
}
;
})
}
onShowSizeChange
=
(
current
,
size
)
=>
{
if
(
current
==
size
)
{
return
;
return
}
let
_query
=
this
.
props
.
query
;
_query
.
size
=
size
;
this
.
props
.
onChange
(
_query
)
;
}
;
let
_query
=
this
.
props
.
query
_query
.
size
=
size
this
.
props
.
onChange
(
_query
)
}
render
()
{
const
{
dataSource
=
[],
totalCount
,
query
,
match
}
=
this
.
props
;
const
{
current
,
size
}
=
query
;
const
{
dataSource
=
[],
totalCount
,
query
,
match
}
=
this
.
props
const
{
current
,
size
}
=
query
return
(
<
div
className=
"knowledge-base-list"
>
<
div
className=
'knowledge-base-list'
>
<
Table
rowKey=
{
(
record
)
=>
record
.
id
}
size=
"middle"
size=
'middle'
dataSource=
{
dataSource
}
columns=
{
this
.
parseColumns
()
}
pagination=
{
false
}
scroll=
{
{
x
:
900
}
}
bordered
className=
"knowledge-list-table"
className=
'knowledge-list-table'
/>
<
div
className=
"box-footer"
>
<
div
className=
'box-footer'
>
{
totalCount
>
0
&&
(
<
PageControl
current=
{
current
-
1
}
pageSize=
{
size
}
total=
{
totalCount
}
toPage=
{
(
page
)
=>
{
const
_query
=
{
...
query
,
current
:
page
+
1
}
;
this
.
props
.
onChange
(
_query
)
;
const
_query
=
{
...
query
,
current
:
page
+
1
}
this
.
props
.
onChange
(
_query
)
}
}
onShowSizeChange=
{
this
.
onShowSizeChange
}
/>
...
...
@@ -586,10 +517,9 @@ class KnowledgeBaseList extends React.Component {
<
Route
path=
{
`${match.url}/course-data`
}
component=
{
WatchData
}
/>
{
this
.
state
.
scanFileModal
}
</
div
>
)
;
)
}
}
export
default
withRouter
(
KnowledgeBaseList
)
;
export
default
withRouter
(
KnowledgeBaseList
)
src/modules/knowledge-base/components/KnowledgeBaseList.less
View file @
9417fce0
...
...
@@ -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 {
...
...
src/modules/knowledge-base/components/WatchData.jsx
View file @
9417fce0
...
...
@@ -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"
>
...
...
src/modules/knowledge-base/index.jsx
View file @
9417fce0
...
...
@@ -2,24 +2,19 @@
* @Description:
* @Author: zangsuyun
* @Date: 2021-03-12 10:43:10
<<<<<<< HEAD
* @LastEditors: fusanqiasng
* @LastEditTime: 2021-05-28 13:33:07
=======
* @LastEditors: fusanqiasng
* @LastEditTime: 2021-05-27 13:51:42
>>>>>>> 4399d60 (fix:修复外部课程相关模块bug)
* @LastEditors: wufan
* @LastEditTime: 2021-05-30 20:36:42
* @Copyright: © 2020 杭州杰竞科技有限公司 版权所有
*/
import
React
from
'react'
import
React
from
"react"
import
KnowledgeBaseFilter
from
'./components/KnowledgeBaseFilter'
import
KnowledgeBaseOpt
from
'./components/KnowledgeBaseOpt'
import
KnowledgeBaseList
from
'./components/KnowledgeBaseList'
import
Classification
from
'./components/Classification'
import
KnowledgeBaseFilter
from
"./components/KnowledgeBaseFilter"
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
)
{
...
...
@@ -29,12 +24,12 @@ export default class KnowledgeBase extends React.Component {
size
:
10
,
current
:
1
,
storeId
:
User
.
getStoreId
(),
categoryId
:
0
,
categoryId
:
0
},
dataSource
:
[],
// 知识库列表
totalCount
:
0
,
// 知识库数据总条数
categoryId
:
'0'
,
updateCategoryFlag
:
false
,
categoryId
:
"0"
,
updateCategoryFlag
:
false
}
}
...
...
@@ -45,7 +40,7 @@ export default class KnowledgeBase extends React.Component {
}
getSelectedCategoryId
=
(
categoryId
)
=>
{
this
.
setState
({
categoryId
,
categoryId
})
this
.
handleFetchScheduleList
({
categoryId
,
current
:
1
})
}
...
...
@@ -53,14 +48,14 @@ export default class KnowledgeBase extends React.Component {
// 更新分类树
updateCategoryTree
=
()
=>
{
this
.
setState
({
updateCategoryFlag
:
!
this
.
state
.
updateCategoryFlag
,
updateCategoryFlag
:
!
this
.
state
.
updateCategoryFlag
})
}
// 获取知识库列表
handleFetchScheduleList
=
(
_query
=
{},
flag
=
true
)
=>
{
const
query
=
{
...
this
.
state
.
query
,
...
_query
,
...
_query
}
// 更新请求参数
...
...
@@ -73,7 +68,7 @@ export default class KnowledgeBase extends React.Component {
const
{
records
=
[],
total
=
0
}
=
result
this
.
setState
({
dataSource
:
records
,
totalCount
:
Number
(
total
)
,
totalCount
:
Number
(
total
)
})
})
}
...
...
@@ -84,17 +79,20 @@ export default class KnowledgeBase extends React.Component {
<
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
>
<
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=
"liner"
style=
{
{
backgroundColor
:
"rgb(238, 238, 238)"
,
width
:
0.5
,
margin
:
"1px 16px 1px 2px"
}
}
></
div
>
<
div
className=
"right"
style=
{
{
width
:
"calc(100% - 265px)"
}
}
>
<
KnowledgeBaseFilter
onChange=
{
this
.
handleFetchScheduleList
}
/>
{
/* 操作模块 */
}
{
categoryId
!==
'0'
&&
(
{
categoryId
!==
"0"
&&
(
<
KnowledgeBaseOpt
onChange=
{
this
.
handleFetchScheduleList
}
updateCategoryTree=
{
this
.
updateCategoryTree
}
categoryId=
{
categoryId
}
/>
)
}
...
...
src/modules/knowledge-base/modal/AddCourse.jsx
View file @
9417fce0
...
...
@@ -3,7 +3,7 @@
* @Author: zangsuyun
* @Date: 2021-03-13 09:54:26
* @LastEditors: fusanqiasng
* @LastEditTime: 2021-05-
28 20:19:0
6
* @LastEditTime: 2021-05-
30 23:59:3
6
* @Copyright: © 2020 杭州杰竞科技有限公司 版权所有
*/
...
...
@@ -25,23 +25,23 @@ const courseStateShow = {
UN_START
:
{
code
:
1
,
title
:
'待开课'
,
color
:
'#
2966FF'
,
color
:
'#
FFB129'
},
STARTING
:
{
code
:
2
,
title
:
'上课中'
,
color
:
'#238FFF'
,
color
:
'#238FFF'
},
FINISH
:
{
code
:
3
,
title
:
'已完成'
,
color
:
'#3BBDAA'
,
color
:
'#3BBDAA'
},
EXPIRED
:
{
code
:
4
,
title
:
'未成功开课'
,
color
:
'#999'
,
}
,
color
:
'#999'
}
}
class
AddCourse
extends
React
.
Component
{
...
...
@@ -55,7 +55,7 @@ class AddCourse extends React.Component {
excludeUsed
:
true
,
courseType
:
'LIVE'
,
storeId
:
User
.
getStoreId
(),
toRefKnowledgeCategoryId
:
this
.
props
.
categoryId
,
toRefKnowledgeCategoryId
:
this
.
props
.
categoryId
},
liveTotalCount
:
0
,
selectLive
:
[],
//弹窗内已选择的直播课程
...
...
@@ -63,21 +63,21 @@ class AddCourse extends React.Component {
videoCourseDivision
:
'internal'
,
videoDataSource
:
{
external
:
[],
internal
:
[]
,
internal
:
[]
},
videoSize
:
{
external
:
10
,
internal
:
10
,
internal
:
10
},
videoSearchDefalt
:
{
external
:
{
categoryId
:
''
,
courseName
:
''
,
courseName
:
''
},
internal
:
{
categoryId
:
''
,
courseName
:
''
,
}
,
courseName
:
''
}
},
videoQuery
:
{
...
...
@@ -88,7 +88,7 @@ class AddCourse extends React.Component {
courseType
:
'VOICE'
,
excludeUsed
:
true
,
storeId
:
User
.
getStoreId
(),
toRefKnowledgeCategoryId
:
this
.
props
.
categoryId
,
toRefKnowledgeCategoryId
:
this
.
props
.
categoryId
},
internal
:
{
categoryId
:
''
,
...
...
@@ -97,20 +97,20 @@ class AddCourse extends React.Component {
courseType
:
'VOICE'
,
excludeUsed
:
true
,
storeId
:
User
.
getStoreId
(),
toRefKnowledgeCategoryId
:
this
.
props
.
categoryId
,
}
,
toRefKnowledgeCategoryId
:
this
.
props
.
categoryId
}
},
videoTotalCount
:
{
external
:
0
,
internal
:
0
,
internal
:
0
},
selectVideo
:
{
external
:
[],
internal
:
[]
,
internal
:
[]
},
//弹窗内已选择的视频课程
currentVideoCourseListData
:
{
external
:
[],
internal
:
[]
,
internal
:
[]
},
//页面中已关联的视频课程
pictureDataSource
:
[],
...
...
@@ -120,12 +120,12 @@ class AddCourse extends React.Component {
excludeUsed
:
true
,
courseType
:
'PICTURE'
,
storeId
:
User
.
getStoreId
(),
toRefKnowledgeCategoryId
:
this
.
props
.
categoryId
,
toRefKnowledgeCategoryId
:
this
.
props
.
categoryId
},
pictureTotalCount
:
0
,
selectPicture
:
[],
//弹窗内已选择的图文课程
categoryList
:
[],
//内部分类列表
categoryListExternal
:
[]
,
//外部分类列表
categoryListExternal
:
[]
//外部分类列表
}
}
componentDidMount
()
{
...
...
@@ -139,25 +139,25 @@ class AddCourse extends React.Component {
queryCategoryTree
=
(
categoryName
)
=>
{
let
query
=
{
storeId
:
User
.
getStoreId
(),
withCount
:
false
,
withCount
:
false
}
let
queryInternal
=
{
bizType
:
'QUESTION'
,
source
:
2
,
tenantId
:
User
.
getStoreId
(),
userId
:
User
.
getStoreUserId
(),
count
:
false
,
count
:
false
}
AidToolService
.
queryExternalCategoryTree
(
queryInternal
).
then
((
res
)
=>
{
const
{
categoryList
=
[]
}
=
res
.
result
this
.
setState
({
categoryListExternal
:
this
.
renderTreeNodes
(
categoryList
)
,
categoryListExternal
:
this
.
renderTreeNodes
(
categoryList
)
})
})
KnowledgeAPI
.
getCategoryTree
(
query
).
then
((
res
)
=>
{
const
{
categoryList
=
[]
}
=
res
.
result
this
.
setState
({
categoryList
:
this
.
renderTreeNodes
(
categoryList
)
,
categoryList
:
this
.
renderTreeNodes
(
categoryList
)
})
})
}
...
...
@@ -187,7 +187,7 @@ class AddCourse extends React.Component {
const
params
=
{
...
liveQuery
,
size
:
liveSize
,
size
:
liveSize
}
// CourseService.getLiveCloudCoursePage(params).then((res) => {
...
...
@@ -196,7 +196,7 @@ class AddCourse extends React.Component {
const
{
records
=
[],
total
=
0
}
=
result
this
.
setState
({
liveDataSource
:
records
,
liveTotalCount
:
Number
(
total
)
,
liveTotalCount
:
Number
(
total
)
})
})
}
...
...
@@ -208,7 +208,7 @@ class AddCourse extends React.Component {
const
params
=
{
...
videoQuery
[
videoCourseDivision
],
size
:
videoSize
[
videoCourseDivision
],
courseDivision
:
videoCourseDivision
===
'internal'
?
'INTERNAL'
:
'EXTERNAL'
,
courseDivision
:
videoCourseDivision
===
'internal'
?
'INTERNAL'
:
'EXTERNAL'
}
// CourseService.videoSchedulePage(query).then((res) => {
...
...
@@ -218,12 +218,12 @@ class AddCourse extends React.Component {
this
.
setState
({
videoDataSource
:
{
...
videoDataSource
,
[
videoCourseDivision
]:
records
,
[
videoCourseDivision
]:
records
},
videoTotalCount
:
{
...
videoTotalCount
,
[
videoCourseDivision
]:
Number
(
total
)
,
}
,
[
videoCourseDivision
]:
Number
(
total
)
}
})
})
}
...
...
@@ -234,7 +234,7 @@ class AddCourse extends React.Component {
const
params
=
{
...
pictureQuery
,
size
:
pictureSize
,
size
:
pictureSize
}
// CourseService.pictureSchedulePage(query).then((res) => {
...
...
@@ -243,7 +243,7 @@ class AddCourse extends React.Component {
const
{
records
=
[],
total
=
0
}
=
result
this
.
setState
({
pictureDataSource
:
records
,
pictureTotalCount
:
Number
(
total
)
,
pictureTotalCount
:
Number
(
total
)
})
})
}
...
...
@@ -254,7 +254,7 @@ class AddCourse extends React.Component {
}
this
.
setState
(
{
liveSize
:
size
,
liveSize
:
size
},
()
=>
{
this
.
handleFetchLiveList
()
...
...
@@ -268,7 +268,7 @@ class AddCourse extends React.Component {
}
this
.
setState
(
{
videoSize
:
size
,
videoSize
:
size
},
()
=>
{
this
.
handleFetchVideoList
()
...
...
@@ -282,7 +282,7 @@ class AddCourse extends React.Component {
}
this
.
setState
(
{
pictureSize
:
size
,
pictureSize
:
size
},
()
=>
{
this
.
handleFetchPictureList
()
...
...
@@ -304,6 +304,7 @@ class AddCourse extends React.Component {
cursor
:
'pointer'
,
color
:
'#bfbfbf'
,
fontSize
:
'14px'
,
fontWeight
:
'400'
}
}
>

</
i
>
...
...
@@ -340,7 +341,7 @@ class AddCourse extends React.Component {
className=
'course-status'
style=
{
{
color
:
courseStateShow
[
record
.
courseState
].
color
,
border
:
`1px solid ${courseStateShow[record.courseState].color}`
,
border
:
`1px solid ${courseStateShow[record.courseState].color}`
}
}
>
{
courseStateShow
[
record
.
courseState
].
title
}
</
span
>
...
...
@@ -348,7 +349,7 @@ class AddCourse extends React.Component {
</
div
>
</
div
>
)
}
,
}
},
{
title
:
'上课时间'
,
...
...
@@ -362,7 +363,7 @@ class AddCourse extends React.Component {
{
formatDate
(
'H:i'
,
parseInt
(
item
.
startTime
))
}
~
{
formatDate
(
'H:i'
,
parseInt
(
item
.
endTime
))
}
</
span
>
)
}
,
}
},
{
...
...
@@ -377,8 +378,8 @@ class AddCourse extends React.Component {
{
record
.
categoryTwoName
?
`-${record.categoryTwoName}`
:
''
}
</
div
>
)
}
,
}
,
}
}
]
return
columns
...
...
@@ -399,6 +400,7 @@ class AddCourse extends React.Component {
cursor
:
'pointer'
,
color
:
'#bfbfbf'
,
fontSize
:
'14px'
,
fontWeight
:
'400'
}
}
>

</
i
>
...
...
@@ -435,7 +437,7 @@ class AddCourse extends React.Component {
</
Choose
>
</
div
>
)
}
,
}
},
{
title
:
'课程时长'
,
...
...
@@ -444,7 +446,7 @@ class AddCourse extends React.Component {
dataIndex
:
'videoDuration'
,
render
:
(
text
,
item
)
=>
{
return
<
span
>
{
text
?
dealTimeDuration
(
text
)
:
'-'
}
</
span
>
}
,
}
},
{
...
...
@@ -465,8 +467,8 @@ class AddCourse extends React.Component {
</
Otherwise
>
</
Choose
>
)
}
,
}
,
}
}
]
return
columns
}
...
...
@@ -485,6 +487,7 @@ class AddCourse extends React.Component {
cursor
:
'pointer'
,
color
:
'#bfbfbf'
,
fontSize
:
'14px'
,
fontWeight
:
'400'
}
}
>

</
i
>
...
...
@@ -512,7 +515,7 @@ class AddCourse extends React.Component {
</
Choose
>
</
div
>
)
}
,
}
},
{
title
:
'课程分类'
,
...
...
@@ -525,8 +528,8 @@ class AddCourse extends React.Component {
{
record
.
categoryTwoName
?
`-${record.categoryTwoName}`
:
''
}
</
div
>
)
}
,
}
,
}
}
]
return
columns
}
...
...
@@ -557,8 +560,8 @@ class AddCourse extends React.Component {
this
.
setState
({
selectVideo
:
{
...
selectVideo
,
[
videoCourseDivision
]:
_list
,
}
,
[
videoCourseDivision
]:
_list
}
})
}
...
...
@@ -586,7 +589,7 @@ class AddCourse extends React.Component {
this
.
setState
(
{
videoQuery
,
videoSearchDefalt
,
videoSearchDefalt
},
()
=>
{
this
.
handleFetchVideoList
()
...
...
@@ -598,7 +601,7 @@ class AddCourse extends React.Component {
const
{
videoSearchDefalt
,
videoCourseDivision
}
=
this
.
state
videoSearchDefalt
[
videoCourseDivision
].
courseName
=
e
.
target
.
value
this
.
setState
({
videoSearchDefalt
,
videoSearchDefalt
})
}
...
...
@@ -608,7 +611,7 @@ class AddCourse extends React.Component {
liveQuery
.
current
=
1
this
.
setState
(
{
liveQuery
,
liveQuery
},
()
=>
{
this
.
handleFetchLiveList
()
...
...
@@ -622,7 +625,7 @@ class AddCourse extends React.Component {
pictureQuery
.
current
=
1
this
.
setState
(
{
pictureQuery
,
pictureQuery
},
()
=>
{
this
.
handleFetchPictureList
()
...
...
@@ -638,7 +641,7 @@ class AddCourse extends React.Component {
refIds
:
_
.
pluck
(
selectVideo
.
external
,
'id'
),
storeId
:
User
.
getStoreId
(),
type
:
'VOICE'
,
createId
:
User
.
getStoreUserId
()
,
createId
:
User
.
getStoreUserId
()
})
}
if
(
selectVideo
.
internal
.
length
)
{
...
...
@@ -647,7 +650,7 @@ class AddCourse extends React.Component {
refIds
:
_
.
pluck
(
selectVideo
.
internal
,
'id'
),
storeId
:
User
.
getStoreId
(),
type
:
'VOICE'
,
createId
:
User
.
getStoreUserId
()
,
createId
:
User
.
getStoreUserId
()
})
}
if
(
selectLive
.
length
)
{
...
...
@@ -656,7 +659,7 @@ class AddCourse extends React.Component {
refIds
:
_
.
pluck
(
selectLive
,
'liveCourseId'
),
storeId
:
User
.
getStoreId
(),
type
:
'LIVE'
,
createId
:
User
.
getStoreUserId
()
,
createId
:
User
.
getStoreUserId
()
})
}
if
(
selectPicture
.
length
)
{
...
...
@@ -665,7 +668,7 @@ class AddCourse extends React.Component {
refIds
:
_
.
pluck
(
selectPicture
,
'id'
),
storeId
:
User
.
getStoreId
(),
type
:
'PICTURE'
,
createId
:
User
.
getStoreUserId
()
,
createId
:
User
.
getStoreUserId
()
})
}
...
...
@@ -687,9 +690,9 @@ class AddCourse extends React.Component {
...
videoSearchDefalt
,
[
e
.
target
.
value
]:
{
courseName
:
videoQuery
[
e
.
target
.
value
].
courseName
,
categoryId
:
videoQuery
[
e
.
target
.
value
].
categoryId
,
}
,
}
,
categoryId
:
videoQuery
[
e
.
target
.
value
].
categoryId
}
}
},
()
=>
{
this
.
handleFetchVideoList
()
...
...
@@ -732,7 +735,7 @@ class AddCourse extends React.Component {
selectPicture
,
videoSearchDefalt
,
categoryList
,
categoryListExternal
,
categoryListExternal
}
=
this
.
state
const
LiveSelection
=
{
...
...
@@ -746,7 +749,7 @@ class AddCourse extends React.Component {
_list
=
_
.
reject
(
selectLive
,
(
item
)
=>
_
.
find
(
changeRows
,
(
data
)
=>
data
.
liveCourseId
===
item
.
liveCourseId
))
}
this
.
setState
({
selectLive
:
_list
})
}
,
}
}
const
VideoSelection
=
{
...
...
@@ -762,10 +765,10 @@ class AddCourse extends React.Component {
this
.
setState
({
selectVideo
:
{
...
selectVideo
,
[
videoCourseDivision
]:
_list
,
}
,
[
videoCourseDivision
]:
_list
}
})
}
,
}
}
const
PictureSelection
=
{
...
...
@@ -779,7 +782,7 @@ class AddCourse extends React.Component {
_list
=
_
.
reject
(
selectPicture
,
(
item
)
=>
_
.
find
(
changeRows
,
(
data
)
=>
data
.
id
===
item
.
id
))
}
this
.
setState
({
selectPicture
:
_list
})
}
,
}
}
return
(
...
...
@@ -823,10 +826,10 @@ class AddCourse extends React.Component {
this
.
setState
({
selectVideo
:
{
internal
:
[],
external
:
[]
,
external
:
[]
},
selectLive
:
[],
selectPicture
:
[]
,
selectPicture
:
[]
})
}
}
/>
...
...
@@ -851,7 +854,7 @@ class AddCourse extends React.Component {
const
_query
=
{
...
liveQuery
,
current
:
page
+
1
}
this
.
setState
(
{
liveQuery
:
_query
,
liveQuery
:
_query
},
()
=>
{
this
.
handleFetchLiveList
()
...
...
@@ -890,6 +893,7 @@ class AddCourse extends React.Component {
<
TreeSelect
treeNodeFilterProp=
'categoryName'
showSearch
value=
{
videoQuery
[
videoCourseDivision
].
categoryId
}
style=
{
{
minWidth
:
'calc(100% - 75px)'
}
}
dropdownMatchSelectWidth=
{
false
}
dropdownStyle=
{
{
maxHeight
:
400
,
overflow
:
'auto'
}
}
...
...
@@ -909,10 +913,10 @@ class AddCourse extends React.Component {
this
.
setState
({
selectVideo
:
{
internal
:
[],
external
:
[]
,
external
:
[]
},
selectLive
:
[],
selectPicture
:
[]
,
selectPicture
:
[]
})
}
}
/>
...
...
@@ -941,8 +945,8 @@ class AddCourse extends React.Component {
{
videoQuery
:
{
...
videoQuery
,
[
videoCourseDivision
]:
_query
,
}
,
[
videoCourseDivision
]:
_query
}
},
()
=>
{
this
.
handleFetchVideoList
()
...
...
@@ -994,10 +998,10 @@ class AddCourse extends React.Component {
this
.
setState
({
selectVideo
:
{
internal
:
[],
external
:
[]
,
external
:
[]
},
selectLive
:
[],
selectPicture
:
[]
,
selectPicture
:
[]
})
}
}
/>
...
...
@@ -1022,7 +1026,7 @@ class AddCourse extends React.Component {
const
_query
=
{
...
pictureQuery
,
current
:
page
+
1
}
this
.
setState
(
{
pictureQuery
:
_query
,
pictureQuery
:
_query
},
()
=>
{
this
.
handleFetchPictureList
()
...
...
src/modules/knowledge-base/modal/LiveList.jsx
View file @
9417fce0
...
...
@@ -2,8 +2,8 @@
* @Description:
* @Author: zangsuyun
* @Date: 2021-03-13 14:38:49
* @LastEditors:
zangsuyu
n
* @LastEditTime: 2021-0
3-16 15:20:51
* @LastEditors:
wufa
n
* @LastEditTime: 2021-0
5-30 10:08:02
* @Copyright: © 2020 杭州杰竞科技有限公司 版权所有
*/
...
...
@@ -22,7 +22,7 @@ const courseStateShow = {
UN_START
:
{
code
:
1
,
title
:
"待开课"
,
color
:
"#FFB
714
"
,
color
:
"#FFB
129
"
,
},
STARTING
:
{
code
:
2
,
...
...
@@ -107,6 +107,7 @@ class LiveList extends React.Component {
cursor
:
"pointer"
,
color
:
"#bfbfbf"
,
fontSize
:
"14px"
,
fontWeight
:
"400"
}
}
>

...
...
src/modules/knowledge-base/modal/LiveList.less
View file @
9417fce0
...
...
@@ -71,13 +71,13 @@
}
.courseware {
font-size: 14px;
color: #2966
ff
;
color: #2966
FF
;
line-height: 20px;
text-align: right;
cursor: pointer;
}
.quota-icon {
color: #2966
ff
;
color: #2966
FF
;
cursor: pointer;
}
.operate {
...
...
@@ -85,7 +85,7 @@
align-items: center;
flex-wrap: wrap;
.operate__item {
color: #2966
ff
;
color: #2966
FF
;
cursor: pointer;
&.split {
margin: 0 8px;
...
...
@@ -94,7 +94,7 @@
}
}
.operate-text {
color: #2966
ff
;
color: #2966
FF
;
cursor: pointer;
}
.course-start-end {
...
...
src/modules/knowledge-base/modal/VideoList.jsx
View file @
9417fce0
...
...
@@ -2,8 +2,8 @@
* @Description:
* @Author: zangsuyun
* @Date: 2021-03-13 11:48:24
* @LastEditors:
zangsuyu
n
* @LastEditTime: 2021-0
4-01 11:58:46
* @LastEditors:
wufa
n
* @LastEditTime: 2021-0
5-30 10:08:09
* @Copyright: © 2020 杭州杰竞科技有限公司 版权所有
*/
...
...
@@ -105,6 +105,7 @@ class VideoList extends React.Component {
cursor
:
"pointer"
,
color
:
"#bfbfbf"
,
fontSize
:
"14px"
,
fontWeight
:
"400"
}
}
>

...
...
src/modules/personalInfo/index.less
View file @
9417fce0
.personal-info-page{
.box{
padding:
60
px 60px 60px 40px !important;
padding:
24
px 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
src/modules/personalInfo/index.tsx
View file @
9417fce0
/*
* @Author: zhangleyuan
* @Date: 2020-11-27 15:06:31
* @LastEditors:
zangsuyu
n
* @LastEditTime: 2021-0
3-22 13:55:24
* @LastEditors:
wufa
n
* @LastEditTime: 2021-0
5-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=
{
()
=>
{
...
...
src/modules/plan-manage/AddPlan.jsx
View file @
9417fce0
/*
* @Author: zhangleyuan
* @Date: 2021-02-20 16:13:39
* @LastEditors:
fusanqiasng
* @LastEditTime: 2021-05-
24 00:00:31
* @LastEditors:
wufan
* @LastEditTime: 2021-05-
30 20:39:16
* @Description: 描述一下
* @@Copyrigh: © 2020 杭州杰竞科技有限公司 版权所有
*/
...
...
@@ -17,7 +17,7 @@ import PlanService from '@/domains/plan-domain/planService'
import
User
from
'@/common/js/user'
import
_
from
'underscore'
import
'./AddPlan.less'
const
defaultCover
=
'https://image.xiaomaiketang.com/xm/
YNfi45JwFA.png'
const
defaultCover
=
'https://image.xiaomaiketang.com/xm/
rEAetaTEh3.png'
;
const
defaultBasicData
=
{
planName
:
''
,
coverUrl
:
defaultCover
,
...
...
@@ -286,7 +286,7 @@ function AddPlan() {
)
}
</
div
>
</
div
>
<
div
className=
'footer'
>
<
div
className=
'footer
shrink-footer
'
>
<
Button
onClick=
{
handleGoBack
}
>
取消
</
Button
>
<
Button
type=
'primary'
onClick=
{
submitInfo
}
disabled=
{
submitDisabled
}
>
保存
...
...
src/modules/plan-manage/AddPlan.less
View file @
9417fce0
.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:
25
2px;
padding-right:
7
2px;
background: #fff;
border-top: 1px solid #E8E8E8;
z-index: 9999;
...
...
src/modules/plan-manage/LearningData.jsx
View file @
9417fce0
...
...
@@ -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
)
{
...
...
src/modules/plan-manage/LearningData.less
View file @
9417fce0
...
...
@@ -7,7 +7,7 @@
font-weight:normal;
}
.plan-info{
margin
:16
px;
margin
-bottom:8
px;
padding:16px;
background: #FFF;
display:flex;
...
...
src/modules/plan-manage/components/BasicInfo.less
View file @
9417fce0
...
...
@@ -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;
...
...
src/modules/plan-manage/components/EmployeeShareData.jsx
View file @
9417fce0
...
...
@@ -134,6 +134,7 @@ class EmployeeShareData extends React.Component {
)
}
},
//产品暂时性隐藏
// {
// title: '手机号',
// key: 'storeUserPhone',
...
...
src/modules/plan-manage/components/EmployeeShareData.less
View file @
9417fce0
...
...
@@ -4,7 +4,7 @@
}
.operate-item{
font-size:14px;
color:#
5289FA
;
color:#
2966FF
;
cursor: pointer;
}
.learn-num{
...
...
src/modules/plan-manage/components/PlanList.jsx
View file @
9417fce0
...
...
@@ -2,7 +2,7 @@
* @Author: zhangleyuan
* @Date: 2021-02-20 16:46:46
* @LastEditors: wufan
* @LastEditTime: 2021-05-1
3 16:36:43
* @LastEditTime: 2021-05-1
4 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
"
}
}
>

</
span
>
...
...
src/modules/plan-manage/components/PlanList.less
View file @
9417fce0
...
...
@@ -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 {
...
...
src/modules/plan-manage/components/TrainingTask.less
View file @
9417fce0
...
...
@@ -17,7 +17,7 @@
font-size:14px;
}
.add-task-btn{
color: #
5289FA
;
color: #
2966FF
;
font-size:14px;
}
}
...
...
@@ -81,7 +81,7 @@
.course-box{
.add-course-con{
padding:16px 51px;
color: #
5289FA
;
color: #
2966FF
;
font-size:14px;
.add-course-btn-disabled{
font-size:14px;
...
...
src/modules/plan-manage/components/UserLearningData.jsx
View file @
9417fce0
...
...
@@ -194,16 +194,10 @@ class UserLearningData extends React.Component {
},
},
{
title
:
(
<
span
>
<
span
>
负责人
</
span
>
<
Tooltip
title=
'培训计划的分享者/跟进人'
>
<
i
className=
'icon iconfont'
style=
{
{
marginLeft
:
'5px'
,
cursor
:
'pointer'
,
color
:
'#bfbfbf'
,
fontSize
:
'14px'
}
}
>

</
i
>
</
Tooltip
>
</
span
>
),
title
:
<
span
>
<
span
>
负责人
</
span
>
<
Tooltip
title=
"培训计划的分享者/跟进人"
><
i
className=
"icon iconfont"
style=
{
{
marginLeft
:
'5px'
,
cursor
:
'pointer'
,
color
:
'#bfbfbf'
,
fontSize
:
'14px'
,
fontWeight
:
"400"
}
}
>

</
i
></
Tooltip
>
</
span
>,
key
:
'userNameList'
,
dataIndex
:
'userNameList'
,
render
:
(
val
,
record
)
=>
{
...
...
@@ -241,17 +235,10 @@ class UserLearningData extends React.Component {
},
},
{
title
:
(
<
span
>
<
span
>
学习进度
</
span
>
<
Tooltip
title=
'学员培训计划中达到“已完成”状态的课程数/总课程数'
>
<
i
className=
'icon iconfont'
style=
{
{
marginLeft
:
'5px'
,
cursor
:
'pointer'
,
color
:
'#bfbfbf'
,
fontSize
:
'14px'
}
}
>

</
i
>
</
Tooltip
>
</
span
>
),
title
:
<
span
>
<
span
>
学习进度
</
span
>
<
Tooltip
title=
"学员培训计划中达到“已完成”状态的课程数/总课程数"
><
i
className=
"icon iconfont"
style=
{
{
marginLeft
:
'5px'
,
cursor
:
'pointer'
,
color
:
'#bfbfbf'
,
fontSize
:
'14px'
,
fontWeight
:
"400"
}
}
>

</
i
></
Tooltip
>
</
span
>,
key
:
'learnNum'
,
dataIndex
:
'learnNum'
,
width
:
130
,
...
...
src/modules/plan-manage/components/UserLearningDataFilter.less
View file @
9417fce0
...
...
@@ -15,7 +15,7 @@
margin-bottom: 12px;
.label{
font-size:14px;
color:#
666
;
color:#
333
;
vertical-align: middle;
width:70px;
text-align:right;
...
...
src/modules/plan-manage/modal/SharePlanModal.less
View file @
9417fce0
...
...
@@ -131,7 +131,7 @@
margin-bottom: 40px;
.content {
color:
rgba(82, 137, 250, 1)
;
color:
#2966FF
;
cursor: pointer;
}
}
...
...
src/modules/plan-manage/modal/relatedCourseModal.jsx
View file @
9417fce0
import
React
from
'react'
import
_
from
'underscore'
import
{
Table
,
Radio
,
Tabs
,
Modal
,
Input
,
message
,
Button
,
Tooltip
}
from
'antd'
import
React
from
"react"
import
_
from
"underscore"
import
{
Table
,
Radio
,
Tabs
,
Modal
,
Input
,
message
,
Button
,
Tooltip
}
from
"antd"
import
{
PageControl
}
from
'@/components'
import
{
PageControl
}
from
"@/components"
import
CourseService
from
'@/domains/course-domain/CourseService'
import
User
from
'@/common/js/user'
import
Service
from
'@/common/js/service'
import
dealTimeDuration
from
'../../course-manage/utils/dealTimeDuration'
import
CourseService
from
"@/domains/course-domain/CourseService"
import
User
from
"@/common/js/user"
import
Service
from
"@/common/js/service"
import
dealTimeDuration
from
"../../course-manage/utils/dealTimeDuration"
import
'./relatedCourseModal.less'
import
"./relatedCourseModal.less"
const
{
Search
}
=
Input
const
{
TabPane
}
=
Tabs
const
courseStateShow
=
{
UN_START
:
{
code
:
1
,
title
:
'待开课'
,
color
:
'#FFB714'
title
:
"待开课"
,
color
:
"#FFB129"
,
},
STARTING
:
{
code
:
2
,
title
:
'上课中'
,
color
:
'#238FFF'
title
:
"上课中"
,
color
:
"#238FFF"
},
FINISH
:
{
code
:
3
,
title
:
'已完成'
,
color
:
'#3BBDAA'
title
:
"已完成"
,
color
:
"#3BBDAA"
},
EXPIRED
:
{
code
:
4
,
title
:
'未成功开课'
,
color
:
'#999'
title
:
"未成功开课"
,
color
:
"#999"
}
}
class
SelectOperatorModal
extends
React
.
Component
{
...
...
@@ -49,7 +49,7 @@ class SelectOperatorModal extends React.Component {
currentCourseListData
:
[],
currentLiveCourseListData
:
[],
//页面中已关联的直播课程
videoCourseDivision
:
'internal'
,
videoCourseDivision
:
"internal"
,
videoDataSource
:
{
external
:
[],
internal
:
[]
...
...
@@ -59,10 +59,10 @@ class SelectOperatorModal extends React.Component {
internal
:
10
},
videoSearchName
:
{
external
:
''
,
internal
:
''
external
:
""
,
internal
:
""
},
videoSearchDefalt
:
''
,
videoSearchDefalt
:
""
,
videoQuery
:
{
external
:
{
current
:
1
...
...
@@ -93,7 +93,7 @@ class SelectOperatorModal extends React.Component {
selectPicture
:
[],
//弹窗内已选择的视频课程
currentPictureCourseListData
:
[],
//页面中已关联的视频课程
activeKey
:
'video'
,
activeKey
:
"video"
,
currentTaskCourseData
:
this
.
props
.
data
[
this
.
props
.
selectedTaskIndex
].
courseList
||
[]
}
}
...
...
@@ -111,7 +111,7 @@ class SelectOperatorModal extends React.Component {
let
currentLiveCourseListData
=
[]
_data
.
map
((
item
)
=>
{
item
.
courseList
.
map
((
childItem
,
childIndex
)
=>
{
if
(
childItem
.
courseType
===
'LIVE'
)
{
if
(
childItem
.
courseType
===
"LIVE"
)
{
currentLiveCourseListData
.
push
(
childItem
.
courseId
)
}
return
childItem
...
...
@@ -143,7 +143,7 @@ class SelectOperatorModal extends React.Component {
let
currentVideoCourseListData
=
[]
_data
.
map
((
item
,
index
)
=>
{
item
.
courseList
.
map
((
childItem
,
childIndex
)
=>
{
if
(
childItem
.
courseType
===
'VOICE'
)
{
if
(
childItem
.
courseType
===
"VOICE"
)
{
currentVideoCourseListData
.
push
(
childItem
.
courseId
)
}
return
childItem
...
...
@@ -153,12 +153,12 @@ class SelectOperatorModal extends React.Component {
const
params
=
{
...
videoQuery
[
videoCourseDivision
],
size
:
videoSize
[
videoCourseDivision
],
courseDivision
:
videoCourseDivision
===
'internal'
?
'INTERNAL'
:
'EXTERNAL'
,
courseDivision
:
videoCourseDivision
===
"internal"
?
"INTERNAL"
:
"EXTERNAL"
,
excludeCourseIdList
:
currentVideoCourseListData
}
CourseService
.
videoScheduleBasePage
(
params
).
then
((
res
)
=>
{
const
{
result
=
{}
}
=
res
console
.
log
(
'result'
,
result
)
console
.
log
(
"result"
,
result
)
const
{
records
=
[],
total
=
0
}
=
result
...
...
@@ -183,7 +183,7 @@ class SelectOperatorModal extends React.Component {
let
currentPictureCourseListData
=
[]
_data
.
map
((
item
,
index
)
=>
{
item
.
courseList
.
map
((
childItem
,
childIndex
)
=>
{
if
(
childItem
.
courseType
===
'PICTURE'
)
{
if
(
childItem
.
courseType
===
"PICTURE"
)
{
currentPictureCourseListData
.
push
(
childItem
.
courseId
)
}
return
childItem
...
...
@@ -193,12 +193,12 @@ class SelectOperatorModal extends React.Component {
const
params
=
{
...
pictureQuery
,
size
:
pictureSize
,
courseType
:
'PICTURE'
,
courseType
:
"PICTURE"
,
storeId
:
User
.
getStoreId
(),
excludeCourseIdList
:
currentPictureCourseListData
}
Service
.
Hades
(
'public/hades/mediaCoursePage'
,
params
).
then
((
res
)
=>
{
Service
.
Hades
(
"public/hades/mediaCoursePage"
,
params
).
then
((
res
)
=>
{
const
{
result
=
{}
}
=
res
const
{
records
=
[],
total
=
0
}
=
result
this
.
setState
({
...
...
@@ -287,32 +287,24 @@ class SelectOperatorModal extends React.Component {
parseLiveColumns
=
()
=>
{
const
columns
=
[
{
title
:
(
<
span
>
<
span
>
课程信息
</
span
>
<
Tooltip
title=
'仅显示未关联课程,已关联课程不支持重复选择'
>
<
i
className=
'icon iconfont'
style=
{
{
marginLeft
:
'5px'
,
cursor
:
'pointer'
,
color
:
'#bfbfbf'
,
fontSize
:
'14px'
}
}
>

</
i
>
</
Tooltip
>
</
span
>
),
title
:
<
span
><
span
>
课程信息
</
span
><
Tooltip
title=
"仅显示未关联课程,已关联课程不支持重复选择"
><
i
className=
"icon iconfont"
style=
{
{
marginLeft
:
'5px'
,
cursor
:
'pointer'
,
color
:
'#bfbfbf'
,
fontSize
:
'14px'
,
fontWeight
:
"400"
}
}
>

</
i
></
Tooltip
></
span
>,
key
:
'course'
,
dataIndex
:
'course'
,
width
:
'40%'
,
width
:
'40%'
,
render
:
(
val
,
record
)
=>
{
let
hasCover
=
false
return
(
<
div
className=
'course-info'
>
{
record
.
courseMediaVOS
.
map
((
item
)
=>
{
if
(
item
.
contentType
===
'COVER'
)
{
if
(
item
.
contentType
===
"COVER"
)
{
hasCover
=
true
return
<
img
className=
'course-cover'
src=
{
item
.
mediaUrl
}
alt=
''
/>
}
return
null
})
}
<
If
condition=
{
!
hasCover
}
>
<
img
className=
'course-cover'
src=
{
'https://image.xiaomaiketang.com/xm/YNfi45JwFA.png'
}
alt=
''
/>
<
img
className=
'course-cover'
src=
{
"https://image.xiaomaiketang.com/xm/YNfi45JwFA.png"
}
alt=
''
/>
</
If
>
<
div
>
...
...
@@ -328,31 +320,31 @@ class SelectOperatorModal extends React.Component {
}
},
{
title
:
'上课时间'
,
key
:
'courseTime'
,
dataIndex
:
'courseTime'
,
width
:
'40%'
,
title
:
"上课时间"
,
key
:
"courseTime"
,
dataIndex
:
"courseTime"
,
width
:
"40%"
,
render
:
(
val
,
record
)
=>
{
return
(
<
div
>
<
div
>
{
formatDate
(
'YYYY-MM-DD'
,
record
.
startTime
)
}
</
div
>
<
div
>
{
formatDate
(
"YYYY-MM-DD"
,
record
.
startTime
)
}
</
div
>
<
div
>
{
formatDate
(
'H:i'
,
record
.
startTime
)
}
~
{
formatDate
(
'H:i'
,
record
.
endTime
)
}
{
formatDate
(
"H:i"
,
record
.
startTime
)
}
~
{
formatDate
(
"H:i"
,
record
.
endTime
)
}
</
div
>
</
div
>
)
}
},
{
title
:
'学院展示'
,
key
:
'shelfState'
,
dataIndex
:
'shelfState'
,
width
:
'20%'
,
title
:
"学院展示"
,
key
:
"shelfState"
,
dataIndex
:
"shelfState"
,
width
:
"20%"
,
render
:
(
val
,
record
)
=>
{
return
(
<
span
>
<
Choose
>
<
When
condition=
{
record
.
shelfState
===
'YES'
}
>
<
When
condition=
{
record
.
shelfState
===
"YES"
}
>
<
span
>
开启
</
span
>
</
When
>
<
Otherwise
>
...
...
@@ -372,19 +364,10 @@ class SelectOperatorModal extends React.Component {
const
{
videoCourseDivision
}
=
this
.
state
const
columns
=
[
{
title
:
(
<
span
>
<
span
>
课程信息
</
span
>
<
Tooltip
title=
'仅显示未关联课程,已关联课程不支持重复选择'
>
<
i
className=
'icon iconfont'
style=
{
{
marginLeft
:
'5px'
,
cursor
:
'pointer'
,
color
:
'#bfbfbf'
,
fontSize
:
'14px'
}
}
>

</
i
>
</
Tooltip
>
</
span
>
),
title
:
<
span
><
span
>
课程信息
</
span
><
Tooltip
title=
"仅显示未关联课程,已关联课程不支持重复选择"
><
i
className=
"icon iconfont"
style=
{
{
marginLeft
:
'5px'
,
cursor
:
'pointer'
,
color
:
'#bfbfbf'
,
fontSize
:
'14px'
,
fontWeight
:
"400"
}
}
>

</
i
></
Tooltip
></
span
>,
key
:
'course'
,
dataIndex
:
'course'
,
width
:
'4
0%'
,
width
:
'6
0%'
,
render
:
(
val
,
record
)
=>
{
const
{
coverUrl
,
scheduleVideoUrl
}
=
record
return
(
...
...
@@ -394,9 +377,9 @@ class SelectOperatorModal extends React.Component {
className=
'course-cover'
src=
{
coverUrl
||
(
videoCourseDivision
===
'internal'
(
videoCourseDivision
===
"internal"
?
`${scheduleVideoUrl}?x-oss-process=video/snapshot,t_0,m_fast`
:
'https://image.xiaomaiketang.com/xm/mt3ZQRxGKB.png'
)
:
"https://image.xiaomaiketang.com/xm/mt3ZQRxGKB.png"
)
}
alt=
''
/>
...
...
@@ -407,23 +390,23 @@ class SelectOperatorModal extends React.Component {
}
},
{
title
:
'课程时长'
,
key
:
'courseTime'
,
dataIndex
:
'courseTime'
,
width
:
'20%'
,
title
:
"课程时长"
,
key
:
"courseTime"
,
dataIndex
:
"courseTime"
,
width
:
"20%"
,
render
:
(
val
,
record
)
=>
{
return
<
span
className=
'course-status'
>
{
dealTimeDuration
(
record
.
videoDuration
)
}
</
span
>
}
},
{
title
:
'学院展示'
,
key
:
'shelfState'
,
dataIndex
:
'shelfState'
,
width
:
'20%'
,
title
:
"学院展示"
,
key
:
"shelfState"
,
dataIndex
:
"shelfState"
,
width
:
"20%"
,
render
:
(
val
,
record
)
=>
{
return
(
<
Choose
>
<
When
condition=
{
record
.
shelfState
===
'YES'
}
>
<
When
condition=
{
record
.
shelfState
===
"YES"
}
>
<
span
>
开启
</
span
>
</
When
>
<
Otherwise
>
...
...
@@ -441,46 +424,37 @@ class SelectOperatorModal extends React.Component {
parsePictureColumns
=
()
=>
{
const
columns
=
[
{
title
:
(
<
span
>
<
span
>
课程信息
</
span
>
<
Tooltip
title=
'仅显示未关联课程,已关联课程不支持重复选择'
>
<
i
className=
'icon iconfont'
style=
{
{
marginLeft
:
'5px'
,
cursor
:
'pointer'
,
color
:
'#bfbfbf'
,
fontSize
:
'14px'
}
}
>

</
i
>
</
Tooltip
>
</
span
>
),
title
:
<
span
><
span
>
课程信息
</
span
><
Tooltip
title=
"仅显示未关联课程,已关联课程不支持重复选择"
><
i
className=
"icon iconfont"
style=
{
{
marginLeft
:
'5px'
,
cursor
:
'pointer'
,
color
:
'#bfbfbf'
,
fontSize
:
'14px'
,
fontWeight
:
"400"
}
}
>

</
i
></
Tooltip
></
span
>,
key
:
'course'
,
dataIndex
:
'course'
,
width
:
'55%'
,
width
:
'55%'
,
render
:
(
val
,
record
)
=>
{
const
{
coverUrl
}
=
record
return
(
<
div
className=
'course-info'
>
{
/* 上传了封面的话就用上传的封面, 没有的话就取视频的第一帧 */
}
<
img
className=
'course-cover'
src=
{
coverUrl
||
'https://image.xiaomaiketang.com/xm/YNfi45JwFA.png'
}
alt=
''
/>
<
img
className=
'course-cover'
src=
{
coverUrl
||
"https://image.xiaomaiketang.com/xm/YNfi45JwFA.png"
}
alt=
''
/>
<
div
className=
'course-name'
>
{
record
.
courseName
}
</
div
>
</
div
>
)
}
},
{
title
:
'更新时间'
,
key
:
'updated'
,
dataIndex
:
'updated'
,
width
:
'25%'
,
title
:
"更新时间"
,
key
:
"updated"
,
dataIndex
:
"updated"
,
width
:
"25%"
,
render
:
(
val
,
record
)
=>
{
return
<
span
className=
'course-status'
>
{
formatDate
(
'YYYY-MM-DD'
,
record
.
updated
)
}
</
span
>
return
<
span
className=
'course-status'
>
{
formatDate
(
"YYYY-MM-DD"
,
record
.
updated
)
}
</
span
>
}
},
{
title
:
'学院展示'
,
key
:
'shelfState'
,
dataIndex
:
'shelfState'
,
width
:
'20%'
,
title
:
"学院展示"
,
key
:
"shelfState"
,
dataIndex
:
"shelfState"
,
width
:
"20%"
,
render
:
(
val
,
record
)
=>
{
return
<
span
>
{
record
.
shelfState
===
'YES'
?
'开启'
:
'关闭'
}
</
span
>
return
<
span
>
{
record
.
shelfState
===
"YES"
?
"开启"
:
"关闭"
}
</
span
>
}
}
]
...
...
@@ -495,7 +469,7 @@ class SelectOperatorModal extends React.Component {
_list
=
_
.
reject
(
selectLive
,
(
item
)
=>
item
.
liveCourseId
===
record
.
liveCourseId
)
}
if
(
_list
.
length
+
currentTaskCourseData
.
length
+
selectVideo
.
length
+
selectPicture
.
length
>
20
)
{
message
.
warning
(
'无法继续选择,一个任务最多关联20个课程'
)
message
.
warning
(
"无法继续选择,一个任务最多关联20个课程"
)
return
}
this
.
setState
({
selectLive
:
_list
})
...
...
@@ -513,7 +487,7 @@ class SelectOperatorModal extends React.Component {
_list
=
_
.
reject
(
selectList
,
(
item
)
=>
item
.
id
===
record
.
id
)
}
if
(
_list
.
length
+
currentTaskCourseData
.
length
+
selectLive
.
length
+
selectPicture
.
length
>
20
)
{
message
.
warning
(
'无法继续选择,一个任务最多关联20个课程'
)
message
.
warning
(
"无法继续选择,一个任务最多关联20个课程"
)
return
}
this
.
setState
({
...
...
@@ -533,7 +507,7 @@ class SelectOperatorModal extends React.Component {
_list
=
_
.
reject
(
selectPicture
,
(
item
)
=>
item
.
id
===
record
.
id
)
}
if
(
_list
.
length
+
currentTaskCourseData
.
length
+
selectLive
.
length
+
selectVideo
.
length
>
20
)
{
message
.
warning
(
'无法继续选择,一个任务最多关联20个课程'
)
message
.
warning
(
"无法继续选择,一个任务最多关联20个课程"
)
return
}
this
.
setState
({
selectPicture
:
_list
})
...
...
@@ -553,7 +527,7 @@ class SelectOperatorModal extends React.Component {
return
selectVideo
.
map
((
item
)
=>
{
let
_item
=
{}
_item
.
courseId
=
item
.
id
_item
.
courseType
=
'VOICE'
_item
.
courseType
=
"VOICE"
_item
.
courseName
=
item
.
courseName
return
_item
...
...
@@ -564,7 +538,7 @@ class SelectOperatorModal extends React.Component {
return
selectLive
.
map
((
item
,
index
)
=>
{
let
_item
=
{}
_item
.
courseId
=
item
.
liveCourseId
_item
.
courseType
=
'LIVE'
_item
.
courseType
=
"LIVE"
_item
.
courseName
=
item
.
courseName
_item
.
courseState
=
item
.
courseState
return
_item
...
...
@@ -587,46 +561,46 @@ class SelectOperatorModal extends React.Component {
return
selectPicture
.
map
((
item
,
index
)
=>
{
let
_item
=
{}
_item
.
courseId
=
item
.
id
_item
.
courseType
=
'PICTURE'
_item
.
courseType
=
"PICTURE"
_item
.
courseName
=
item
.
courseName
return
_item
})
}
renderFooter
=
()
=>
{
const
{
activeKey
}
=
this
.
state
let
href
=
''
let
href
=
""
switch
(
activeKey
)
{
case
'live'
:
case
"live"
:
href
=
(
<
a
target=
'_blank'
rel=
'noopener noreferrer'
className=
'link-create-course'
href=
{
window
.
location
.
origin
+
window
.
location
.
pathname
+
'#/create-live-course?type=add'
}
href=
{
window
.
location
.
origin
+
window
.
location
.
pathname
+
"#/create-live-course?type=add"
}
onClick=
{
this
.
props
.
onClose
}
>
没有找到需要的直播课?
<
span
>
去创建
</
span
>
</
a
>
)
break
case
'video'
:
case
"video"
:
href
=
(
<
a
target=
'_blank'
rel=
'noopener noreferrer'
className=
'link-create-course'
href=
{
window
.
location
.
origin
+
window
.
location
.
pathname
+
'#/create-video-course?type=add'
}
href=
{
window
.
location
.
origin
+
window
.
location
.
pathname
+
"#/create-video-course?type=add"
}
onClick=
{
this
.
props
.
onClose
}
>
没有找到需要的视频课?
<
span
>
去创建
</
span
>
</
a
>
)
break
case
'picture'
:
case
"picture"
:
href
=
(
<
a
target=
'_blank'
rel=
'noopener noreferrer'
className=
'link-create-course'
href=
{
window
.
location
.
origin
+
window
.
location
.
pathname
+
'#/create-graphics-course?type=add'
}
href=
{
window
.
location
.
origin
+
window
.
location
.
pathname
+
"#/create-graphics-course?type=add"
}
onClick=
{
this
.
props
.
onClose
}
>
没有找到需要的图文课?
<
span
>
去创建
</
span
>
</
a
>
...
...
@@ -741,8 +715,8 @@ class SelectOperatorModal extends React.Component {
pagination=
{
false
}
bordered
rowSelection=
{
{
type
:
'checkbox'
,
selectedRowKeys
:
_
.
pluck
(
selectLive
,
'liveCourseId'
),
type
:
"checkbox"
,
selectedRowKeys
:
_
.
pluck
(
selectLive
,
"liveCourseId"
),
onSelect
:
(
record
,
selected
)
=>
{
this
.
selectLiveList
(
record
,
selected
)
},
...
...
@@ -754,7 +728,7 @@ class SelectOperatorModal extends React.Component {
_list
=
_
.
reject
(
selectLive
,
(
item
)
=>
_
.
find
(
changeRows
,
(
data
)
=>
data
.
liveCourseId
===
item
.
liveCourseId
))
}
if
(
_list
.
length
+
currentTaskCourseData
.
length
+
selectVideo
.
length
+
selectPicture
.
length
>
20
)
{
message
.
warning
(
'无法继续选择,一个任务最多关联20个课程'
)
message
.
warning
(
"无法继续选择,一个任务最多关联20个课程"
)
const
extraLength
=
_list
.
length
+
currentTaskCourseData
.
length
+
selectVideo
.
length
+
selectPicture
.
length
-
20
_list
.
splice
(
_list
.
length
-
extraLength
,
extraLength
)
}
...
...
@@ -788,7 +762,7 @@ class SelectOperatorModal extends React.Component {
</
TabPane
>
<
TabPane
tab=
'视频课'
key=
'video'
>
<
Radio
.
Group
value=
{
videoCourseDivision
}
onChange=
{
this
.
videoCourseDivisionChange
}
style=
{
{
marginBottom
:
8
}
}
>
<
Radio
.
Group
value=
{
videoCourseDivision
}
onChange=
{
this
.
videoCourseDivisionChange
}
style=
{
{
marginBottom
:
16
}
}
>
<
Radio
.
Button
value=
'internal'
>
内部课程
</
Radio
.
Button
>
<
Radio
.
Button
value=
'external'
>
外部课程
</
Radio
.
Button
>
</
Radio
.
Group
>
...
...
@@ -832,8 +806,8 @@ class SelectOperatorModal extends React.Component {
pagination=
{
false
}
bordered
rowSelection=
{
{
type
:
'checkbox'
,
selectedRowKeys
:
_
.
pluck
(
selectVideo
[
videoCourseDivision
],
'id'
),
type
:
"checkbox"
,
selectedRowKeys
:
_
.
pluck
(
selectVideo
[
videoCourseDivision
],
"id"
),
onSelect
:
(
record
,
selected
)
=>
{
this
.
selectVideoList
(
record
,
selected
)
},
...
...
@@ -845,7 +819,7 @@ class SelectOperatorModal extends React.Component {
_list
=
_
.
reject
(
selectVideo
[
videoCourseDivision
],
(
item
)
=>
_
.
find
(
changeRows
,
(
data
)
=>
data
.
id
===
item
.
id
))
}
if
(
_list
.
length
+
currentTaskCourseData
.
length
+
selectLive
.
length
+
selectPicture
.
length
>
20
)
{
message
.
warning
(
'无法继续选择,一个任务最多关联20个课程'
)
message
.
warning
(
"无法继续选择,一个任务最多关联20个课程"
)
const
extraLength
=
_list
.
length
+
currentTaskCourseData
.
length
+
selectLive
.
length
+
selectPicture
.
length
-
20
_list
.
splice
(
_list
.
length
-
extraLength
,
extraLength
)
}
...
...
@@ -927,8 +901,8 @@ class SelectOperatorModal extends React.Component {
pagination=
{
false
}
bordered
rowSelection=
{
{
type
:
'checkbox'
,
selectedRowKeys
:
_
.
pluck
(
selectPicture
,
'id'
),
type
:
"checkbox"
,
selectedRowKeys
:
_
.
pluck
(
selectPicture
,
"id"
),
onSelect
:
(
record
,
selected
)
=>
{
this
.
selectPictureList
(
record
,
selected
)
},
...
...
@@ -940,7 +914,7 @@ class SelectOperatorModal extends React.Component {
_list
=
_
.
reject
(
selectPicture
,
(
item
)
=>
_
.
find
(
changeRows
,
(
data
)
=>
data
.
id
===
item
.
id
))
}
if
(
_list
.
length
+
currentTaskCourseData
.
length
+
selectVideo
.
length
+
selectLive
.
length
>
20
)
{
message
.
warning
(
'无法继续选择,一个任务最多关联20个课程'
)
message
.
warning
(
"无法继续选择,一个任务最多关联20个课程"
)
const
extraLength
=
_list
.
length
+
currentTaskCourseData
.
length
+
selectVideo
.
length
+
selectLive
.
length
-
20
_list
.
splice
(
_list
.
length
-
extraLength
,
extraLength
)
}
...
...
src/modules/plan-manage/modal/relatedCourseModal.less
View file @
9417fce0
.related-course-modal {
.ant-tabs-tab.ant-tabs-tab-active .ant-tabs-tab-btn {
font-weight:
normal
;
font-weight:
500
;
}
// .ant-tabs-nav .ant-tabs-tab {
// padding: 6px 12px !important;
// margin: 0;
// border: 1px solid #e8e8e8;
// font-size: 14px !important;
// color: #999;
// &:nth-child(1) {
// border-radius: 4px 0px 0px 4px;
// }
// &:nth-child(2) {
// 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;
// }
.ant-modal-footer {
display: flex;
}
.link-create-course {
color: #666666;
font-size: 14px;
width: 638px;
text-align: left;
display: inline-block;
span {
color: #5289fa;
.link-create-course{
color:#666666;
font-size:14px;
width:638px;
text-align:left;
display:inline-block;
span{
color:#2966FF;
}
}
.search-container{
margin-bottom:16px;
}
.select-area{
margin-bottom:12px;
display:flex;
justify-content:space-between;
.select-box{
display:inline-box;
width: 186px;
background: #E9EFFF;
border-radius: 4px;
padding:6px 16px;
margin-right:8px;
display: flex;
justify-content: space-between;
.tip-icon{
color:#2966FF;
font-size:14px;
margin-right:4px;
}
.select-num{
color:#666666;
font-size:14px;
}
.clear-btn{
text-align:right;
color:#2966FF;
font-size:14px;
}
}
.related-box{
padding:6px 16px;
background: #E9EFFF;
border-radius: 4px;
flex:1;
color:#666666;
font-size:14px;
}
}
.search-container {
margin-bottom: 16px;
...
...
@@ -48,14 +62,14 @@
.select-box {
display: inline-box;
width: 186px;
background: #
fff4dd
;
background: #
e9efff
;
border-radius: 4px;
padding: 6px 16px;
margin-right: 8px;
display: flex;
justify-content: space-between;
.tip-icon {
color: #
ff9d14
;
color: #
2966ff
;
font-size: 14px;
margin-right: 4px;
}
...
...
@@ -71,7 +85,7 @@
}
.related-box {
padding: 6px 16px;
background: #
fff4dd
;
background: #
e9efff
;
border-radius: 4px;
flex: 1;
color: #666666;
...
...
src/modules/prepare-lesson/index.less
View file @
9417fce0
...
...
@@ -45,11 +45,11 @@
}
&:hover {
background: rgba(
255,133,52,
0.06);
background: rgba(
41, 102, 255,
0.06);
}
&.active {
background: rgba(
255,133,52,
0.06);
background: rgba(
41, 102, 255,
0.06);
.iconfont, .disk-name {
font-weight: 500;
}
...
...
@@ -163,7 +163,7 @@
&:not(:last-child) {
cursor: pointer;
&:hover {
color: #
5289FA
;
color: #
2966FF
;
}
&::before {
content: '/';
...
...
@@ -200,7 +200,7 @@
}
.file-path {
cursor: pointer;
color: #
5289FA
;
color: #
2966FF
;
}
.ant-dropdown-trigger {
cursor: pointer;
...
...
src/modules/prepare-lesson/modal/SelectPrepareFileModal.less
View file @
9417fce0
...
...
@@ -38,7 +38,7 @@
&:not(:last-child) {
cursor: pointer;
&:hover {
color: #
5289FA
;
color: #
2966FF
;
}
&::before {
content: '/';
...
...
@@ -83,7 +83,7 @@
color: #BFBFBF;
font-size:12px;
&.correct {
color: #
FFB714
;
color: #
2966FF
;
}
}
}
...
...
@@ -102,7 +102,7 @@
}
.footer__left {
color: #
5289fa
;
color: #
2966FF
;
cursor: pointer;
}
}
...
...
src/modules/resource-disk/index.less
View file @
9417fce0
...
...
@@ -40,11 +40,11 @@
}
&:hover {
background: rgba(
255, 183, 20, 0.05
);
background: rgba(
41, 102, 255, 0.06
);
}
&.active {
background: rgba(
255, 183, 20, 0.05
);
background: rgba(
41, 102, 255, 0.06
);
.iconfont, .disk-name {
font-weight: 500;
}
...
...
@@ -55,7 +55,7 @@
right: 0;
width: 4px;
height: 100%;
background-color: #
FFB714
;
background-color: #
2966FF
;
}
}
...
...
@@ -79,7 +79,7 @@
position: absolute;
left: 33px;
bottom: 24px;
color: #
5289FA
;
color: #
2966FF
;
}
}
...
...
@@ -172,7 +172,7 @@
&:not(:last-child) {
cursor: pointer;
&:hover {
color: #
5289FA
;
color: #
2966FF
;
}
&::before {
content: '/';
...
...
@@ -204,12 +204,12 @@
}
&__text:hover {
color: #
5289FA
;
color: #
2966FF
;
}
}
.file-path {
cursor: pointer;
color: #
5289FA
;
color: #
2966FF
;
}
.ant-dropdown-trigger {
cursor: pointer;
...
...
src/modules/root/App.tsx
View file @
9417fce0
/*
* @Author: 吴文洁
* @Date: 2019-07-10 10:30:49
* @LastEditors:
wufan
* @LastEditTime: 2021-0
3-26 16:13:48
* @LastEditors:
Please set LastEditors
* @LastEditTime: 2021-0
5-24 16:29:05
* @Description:
*/
import
React
,
{
useContext
,
useEffect
,
useState
}
from
'react'
;
...
...
@@ -127,7 +127,7 @@ const App: React.FC = (props: any) => {
<
ConfigProvider
locale=
{
zhCN
}
autoInsertSpaceInButton=
{
false
}
>
<
Main
menuType=
{
menuType
}
/>
</
ConfigProvider
>
<
Menu
menuType=
{
menuType
}
/>
<
Menu
menuType=
{
menuType
}
handleMenuType=
{
handleMenuType
}
/>
</
div
>
)
}
...
...
src/modules/root/CollegeManagePage.less
View file @
9417fce0
...
...
@@ -13,6 +13,7 @@
display: flex;
justify-content: center;
background: #fff;
z-index: 999;
.box {
height: 60px;
width: 1280px;
...
...
@@ -38,7 +39,7 @@
}
.logout {
font-size: 14px;
color: #
5289FA
;
color: #
2966FF
;
cursor: pointer;
}
}
...
...
@@ -102,8 +103,8 @@
padding: 0 8px;
line-height: 18px;
border-radius: 9px;
border: 1px solid #
5289FA
;
color: #
5289FA
;
border: 1px solid #
2966FF
;
color: #
2966FF
;
font-size: 12px;
}
}
...
...
@@ -124,7 +125,7 @@
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
color: #
5289FA
;
color: #
2966FF
;
font-size: 16px;
}
.control-box {
...
...
@@ -135,7 +136,7 @@
.control-button {
margin-left: 10px;
cursor: pointer;
color: #
5289FA
;
color: #
2966FF
;
}
.disable-button {
display: none;
...
...
@@ -171,14 +172,14 @@
}
.disable-button {
display: block;
color: #
5289FA
;
color: #
2966FF
;
}
}
}
}
}
.college-create {
border: 1px dashed #
5289FA
;
border: 1px dashed #
2966FF
;
}
}
}
...
...
src/modules/root/CreateCollege.jsx
View file @
9417fce0
...
...
@@ -190,12 +190,14 @@ export default class CreateCollege extends React.Component {
<
img
className=
"box-image"
src=
"https://image.xiaomaiketang.com/xm/fe4NCjr7XF.png"
/>
</
div
>
</
div
>
<
Breadcrumbs
navList=
"创建企学院"
goBack=
{
()
=>
{
window
.
RCHistory
.
goBack
();
}
}
/>
<
div
className=
"breadcrumb-wrap"
>
<
Breadcrumbs
navList=
"创建企学院"
goBack=
{
()
=>
{
window
.
RCHistory
.
goBack
();
}
}
/>
</
div
>
<
div
className=
"create-box"
>
<
div
className=
"image-box"
>
<
img
className=
"image"
src=
"https://image.xiaomaiketang.com/xm/fe4NCjr7XF.png"
/>
...
...
src/modules/root/CreateCollege.less
View file @
9417fce0
.college-manage-page {
.breadcrumb-wrap {
margin-left: 57px;
}
.create-box {
padding-top: 108px;
margin: 0 auto;
...
...
src/modules/root/Header.jsx
View file @
9417fce0
...
...
@@ -2,7 +2,7 @@
* @Author: 吴文洁
* @Date: 2019-09-10 18:26:03
* @LastEditors: Please set LastEditors
* @LastEditTime: 2021-05-
12 17:30:25
* @LastEditTime: 2021-05-
27 19:44:42
* @Description:
*/
import
React
,
{
useRef
,
useContext
,
useEffect
,
useState
}
from
"react"
;
...
...
@@ -219,23 +219,8 @@ function Header(props) {
<
div
id=
"top-container"
className=
"top-container"
>
<
div
className=
"top top-nav"
>
<
div
>
{
menuType
?
<
img
src=
'https://image.xiaomaiketang.com/xm/fe4NCjr7XF.png'
className=
"logo"
alt=
""
/>:<
img
src=
"https://image.xiaomaiketang.com/xm/c4KiP2epBP.png"
className=
"logo"
alt=
""
/>
}
<
img
src=
'https://image.xiaomaiketang.com/xm/WEsMPAYxAs.png'
className=
"logo"
alt=
""
/>
</
div
>
{
menuType
?
(
<
span
className=
"icon iconfont cursor ml20 handLike"
onClick=
{
handleMenu
}
>

</
span
>
)
:
(
<
span
className=
"icon iconfont cursor ml20 handLike"
onClick=
{
handleMenu
}
>

</
span
>
)
}
<
div
className=
"message-help"
>
{
list
.
length
?
(
<
ClickOutside
...
...
@@ -313,10 +298,15 @@ function Header(props) {
</
div
>
)
}
<
div
className=
"right-box"
>
<
div
className=
"right-bg-img"
>
<
img
src=
"https://image.xiaomaiketang.com/xm/WCwjyyXYda.png"
></
img
>
</
div
>
<
div
className=
"link-to-store"
>
<
div
className=
"link"
>
<
span
className=
"icon iconfont tool-tip-right"
>

</
span
>
<
div
className=
"text"
>
前往学院
</
div
>
<
span
className=
"link-btn"
>
<
span
className=
"icon iconfont tool-tip-right"
>

</
span
>
<
span
className=
"text"
>
前往学院
</
span
>
</
span
>
<
div
className=
"store-popover"
>
<
div
className=
"pc-url"
>
<
div
className=
"name"
>
网页端学院
</
div
>
...
...
@@ -337,8 +327,10 @@ function Header(props) {
</
div
>
</
div
>
<
div
className=
"share"
onClick=
{
handleCopy
}
>
<
span
className=
"icon iconfont tool-tip-right"
>

</
span
>
<
div
className=
"text"
>
分享学院
</
div
>
<
span
className=
"share-btn"
>
<
span
className=
"icon iconfont tool-tip-right"
>

</
span
>
<
span
className=
"text"
>
分享学院
</
span
>
</
span
>
</
div
>
</
div
>
<
Dropdown
overlay=
{
userMenu
()
}
arrow
>
...
...
src/modules/root/Header.less
View file @
9417fce0
@import "../../core/variables.less";
@top-height:
5
0px;
@top-height:
6
0px;
@icon-color: #939393;
.top-container {
position: absolute;
...
...
@@ -7,8 +7,17 @@
left: 0;
right: 0;
height: @top-height;
background-color: #fff;
z-index: 112;
background-color: #2966FF;
// z-index:2;
&::after{
content:'';
width:100%;
height:60px;
background: linear-gradient(180deg, #2966FF 0%, rgba(41, 102, 255, 0.82) 29%, rgba(41, 102, 255, 0.58) 55%, rgba(41, 102, 255, 0.27) 77%, rgba(7, 78, 255, 0) 100%);
position:absolute;
z-index:2;
top:59px;
}
.logo {
display: inline-block;
height: 30px;
...
...
@@ -17,7 +26,7 @@
.logo-name {
font-size: 14px;
font-weight: 500;
color: #
ffb714
;
color: #
2966FF
;
line-height: 20px;
vertical-align: middle;
font-weight: bold;
...
...
@@ -177,7 +186,7 @@
flex: 1;
-webkit-flex: 1;
justify-content: space-between;
margin-left:
54
px;
margin-left:
62
px;
.college-container {
position: relative;
width: 360px;
...
...
@@ -195,7 +204,7 @@
cursor: pointer;
}
.college-name {
color:
#666
;
color:
#FFFFFF
;
white-space: nowrap;
text-overflow: ellipsis;
overflow: hidden;
...
...
@@ -204,9 +213,9 @@
.icon {
font-size: 14px;
margin-left: 8px;
color: #
8c8e93
;
color: #
FFF
;
&:hover {
color:
#555
;
color:
#FFF
;
}
}
}
...
...
@@ -274,9 +283,9 @@
align-items: center;
.store-name {
font-size: 14px;
color: #
666
;
color: #
FFF
;
line-height: 49px;
margin-left:
36
px;
margin-left:
8
px;
white-space: nowrap;
text-overflow: ellipsis;
overflow: hidden;
...
...
@@ -294,26 +303,36 @@
display: flex;
align-items: center;
}
.right-bg-img{
img{
width:277px;
height:60px;
}
}
.link-to-store {
display: flex;
height: 49px;
line-height: 49px;
.text {
font-size: 14px;
color: #
666
;
color: #
FFF
;
line-height: 49px;
margin-left: 7px;
}
.iconfont {
color: #8c8e93;
&:hover {
color: #555;
}
color: #FFF;
}
.link {
display: flex;
cursor: pointer;
position: relative;
.link-btn{
padding:3px 12px;
border: 1px solid rgba(255, 255, 255, 0.5);
border-radius: 4px;
&:hover{
border: 1px solid rgba(255, 255, 255, 1);
}
}
.store-popover {
display: none;
}
...
...
@@ -343,7 +362,7 @@
line-height: 20px;
}
.url-link {
color: #
5289fa
;
color: #
2966FF
;
font-size: 14px;
line-height: 20px;
}
...
...
@@ -374,8 +393,15 @@
}
.share {
cursor: pointer;
display: flex;
margin-left: 16px;
.share-btn{
padding:3px 12px;
border: 1px solid rgba(255, 255, 255, 0.5);
border-radius: 4px;
&:hover{
border: 1px solid rgba(255, 255, 255, 1);
}
}
}
}
.drop-menu {
...
...
@@ -503,6 +529,7 @@
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
color:#FFF;
}
}
}
...
...
src/modules/root/Login.jsx
View file @
9417fce0
...
...
@@ -147,20 +147,19 @@ function Login(props) {
}
return
(
<
div
className=
'login-page'
>
<
div
className=
'login-main'
>
<
div
className=
'left-banner'
>
<
div
>
<
img
src=
'https://image.xiaomaiketang.com/xm/Newk4NrxKC.png'
alt=
''
style=
{
{
width
:
60
,
height
:
61
}
}
/>
</
div
>
<
div
className=
'name'
>
小麦企学院
</
div
>
<
div
className=
'desc'
>
一键开启直播授课 让知识更有价值
</
div
>
<
div
className=
"login-page"
>
<
div
className=
"logo-img-box"
><
img
src=
"https://image.xiaomaiketang.com/xm/6k8PPCmywG.png"
className=
"logo-img"
/></
div
>
<
div
className=
"login-main"
>
<
div
className=
"left-banner"
>
<
div
className=
"img-box"
><
img
src=
"https://image.xiaomaiketang.com/xm/CDCcdAdaPs.png"
alt=
""
/></
div
>
</
div
>
<
div
className=
'login-box'
>
<
div
className=
'login'
>
<
div
className=
'r'
>
<
Tabs
defaultActiveKey=
'1'
>
<
TabPane
tab=
'企业微信登录'
key=
'1'
>
<
div
className=
"login-box"
>
<
div
className=
"left-top-block color-block"
></
div
>
<
div
className=
"right-bottom-block color-block"
></
div
>
<
div
className=
"login"
>
<
div
className=
"r"
>
<
Tabs
defaultActiveKey=
"1"
>
<
TabPane
tab=
"企业微信登录"
key=
"1"
>
<
WechatLogin
></
WechatLogin
>
</
TabPane
>
<
TabPane
tab=
'手机号登录'
key=
'2'
>
...
...
@@ -172,7 +171,7 @@ function Login(props) {
autoComplete=
'off'
name=
'account'
maxLength=
{
11
}
placeholder=
'手机号'
placeholder=
"请输入手机号"
value=
{
phone
}
onChange=
{
(
e
)
=>
{
setPhone
(
e
.
target
.
value
)
...
...
@@ -182,11 +181,11 @@ function Login(props) {
<
div
className=
'error-message'
></
div
>
<
div
className=
'phoneverify'
>
<
Input
type=
'text'
id=
'phoneverify'
name=
'phoneverify'
placeholder=
'验证码'
autoComplete=
'off'
type=
"text"
id=
"phoneverify"
name=
"phoneverify"
placeholder=
"请输入验证码"
autoComplete=
"off"
value=
{
phoneverify
}
maxLength=
{
4
}
onChange=
{
(
e
)
=>
{
...
...
src/modules/root/Login.less
View file @
9417fce0
...
...
@@ -4,49 +4,61 @@
font-family: "微软雅黑";
padding: 0;
min-width: 1200px;
background: #
21242e
;
background: #
F4F6FA
;
height: 100%;
overflow-y: hidden;
.logo-img-box{
position: absolute;
top:24px;
right:32px;
z-index:1;
.logo-img{
width:120px;
display: inline-block;
}
}
.login-main {
min-width: 1200px;
display: flex;
}
.left-banner {
position: fixed;
min-width: 315px;
text-align: center;
top: 50%;
left: 30%;
-webkit-transform: translate(-50%, -50%);
-moz-transform: translate(-50%, -50%);
-ms-transform: translate(-50%, -50%);
-o-transform: translate(-50%, -50%);
transform: translate(-50%, -50%);
.name {
font-size: 30px;
font-weight: 500;
color: #ffffff;
line-height: 42px;
margin-top: 11px;
}
.desc {
font-size: 14px;
font-weight: 400;
color: #ffffff;
line-height: 20px;
margin-top: 10px;
position: relative;
width: 540px;
height: 100vh;
.img-box {
background: #2966FF;
width: 540px;
height: 100vh;
img {
width: 540px;
height: 800px;
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%,-50%);
}
}
}
.login-box {
min-width: 360px;
height: 340px;
position: fixed;
top: 50%;
left: 70%;
-webkit-transform: translate(-50%, -50%);
-moz-transform: translate(-50%, -50%);
-ms-transform: translate(-50%, -50%);
-o-transform: translate(-50%, -50%);
transform: translate(-50%, -50%);
min-width: 740px;
height: 100vh;
width: calc(100vw - 500px);
position: relative;
.color-block {
width: 256px;
height: 256px;
background: rgba(41, 102, 255, 0.05);
position: absolute;
top:0;
left: 0;
&.right-bottom-block {
top:auto;
left: auto;
bottom: 0;
right: 0;
}
}
.go-to-site {
position: absolute;
bottom: -80px;
...
...
@@ -74,15 +86,18 @@
display: -webkit-flex;
flex-direction: row;
-webkit-flex-direction: row;
height: 100%;
width: 420px;
height: 420px;
position: absolute;
left: 50%;
top:50%;
transform: translate(-50%,-50%);
overflow: hidden;
background-color: #ffffff;
border-radius: 4px;
//box-shadow: 0 0 17px @sun;
border-radius: 4px;
.ant-tabs-tab-btn {
color: #999999;
font-size: 16px;
font-family: PingFangSC-Medium, PingFang SC;
font-weight: 500;
font-size: 18px;
line-height: 25px;
&.ant-tabs-tab-active {
color: #333333;
...
...
@@ -92,6 +107,7 @@
.ant-tabs-tab-active {
.ant-tabs-tab-btn {
color: #333333;
font-weight:500!important;
}
}
.ant-tabs-nav::before {
...
...
@@ -165,7 +181,7 @@
flex: 1;
-webkit-flex: 1;
height: 100%;
padding:
24
px;
padding:
40
px;
box-sizing: border-box;
position: relative;
&.show-qrcode {
...
...
@@ -181,6 +197,9 @@
}
}
}
.login-form{
margin-top:32px;
}
.qrcode {
display: none;
text-align: center;
...
...
@@ -364,9 +383,9 @@
border-radius: 3px;
margin-top: 60px;
font-size: 14px; // font-weight: 300;
color:#
5289FA
;
color:#
2966FF
;
&:hover {
color: #
ffb714
;
color: #
2966FF
;
}
&::before {
content: "";
...
...
@@ -397,7 +416,7 @@
}
.refresh {
font-size: 14px;
color: #
5289fa
;
color: #
2966FF
;
cursor: pointer;
}
}
...
...
@@ -411,7 +430,7 @@
}
}
.submit {
margin-top:
11
px;
margin-top:
24
px;
button {
// font-weight: 300;
}
...
...
@@ -450,7 +469,7 @@
text-align:center;
&:hover {
opacity: 0.7;
background:
linear-gradient(90deg, #ffb714 0%, #ffad34 100%)
;
background:
#5C8AFF
;
}
}
}
...
...
src/modules/root/Main.less
View file @
9417fce0
...
...
@@ -4,7 +4,7 @@
@import '../../core/global.less';
@import '../../core/filter.less';
@top-height:
5
0px;
@top-height:
6
0px;
.right-container {
position: absolute;
...
...
@@ -13,13 +13,20 @@
right: 0;
bottom: 0;
background-color: #f0f2f5;
overflow-x: scroll;
z-index: 1;
height: calc(~'100% - 50px');
&.right-container-vertical {
left: @xm-left-min-width;
.page {
.page {
overflow-x: auto;
padding:0 16px;
// z-index: 1;
&.right-container-vertical{
left:@xm-left-min-width;
.page{
.footer {
left: 80px;
width: calc(100% - 102px);
}
.xm-breadCrumb {
width: 100%;
}
.page{
left: @xm-left-min-width;
}
}
...
...
src/modules/root/Menu.less
View file @
9417fce0
@import '../../core/variables.less';
@top-height:
5
0px;
@menu-bakg: #
2B2E37
;
@active-color: #
FFB714
;
@top-height:
6
0px;
@menu-bakg: #
FFF
;
@active-color: #
2966FF
;
.left-container {
position: absolute;
z-index: 2;
...
...
@@ -11,10 +11,19 @@
bottom: 0;
width: @xm-left-width;
background: @menu-bakg;
color: #FFFFFF;
color: #333;
.menu-type-icon{
margin:4px 0 0px 150px;
cursor: pointer;
.icon{
font-size:14px;
color:#5E606A;
}
}
.ant-menu {
padding-left: 0 !important;
background: transparent;
color: #333;
background: #FFF !important;
}
.left {
-webkit-user-select: none;
...
...
@@ -25,13 +34,11 @@
display: -webkit-flex;
flex-direction: column;
-webkit-flex-direction: column;
height: 100%;
.nav {
-webkit-flex: 1;
cursor: default;
font-size: 16px;
margin-top: 16px;
height: calc(~'100% - 72px');
overflow: auto;
&::-webkit-scrollbar {
...
...
@@ -40,6 +47,11 @@
.icon {
margin-right: 20px
}
.icon-img{
width:16px;
height:16px;
margin-right:16px;
}
.listType {
width: 5px;
height: 5px;
...
...
@@ -49,12 +61,32 @@
left: 38px;
position: absolute;
}
.ant-menu-item{
padding-left: 13px !important;
padding-right: 0px;
margin: 6px 8px;
width: calc(100% - 15px);
&:hover{
background: #F3F6FA;
border-radius: 2px;
color:#333;
}
}
.ant-menu-item-selected{
color:@active-color;
background-color:@active-color;
color:#FFF;
border-radius:2px;
&:hover{
color:#FFF;
}
}
.ant-menu-sub{
.ant-menu-submenu{
.ant-menu-submenu-title{
margin:6px 8px;
padding-left:13px !important;
}
.ant-menu-item{
padding-left:
58px
padding-left:
46px !important;
}
}
...
...
@@ -69,78 +101,70 @@
}
}
.ant-menu-submenu-arrow{
right:22px;
color:#5E606A;
}
}
}
&.left-container-vertical {
width: 62px;
width: 56px;
.menu-type-icon{
margin:4px 0 0px 22px;
}
.left {
.ant-menu-submenu-arrow{
display:none !important;
}
}
}
.shink-footer {
left: 74px;
}
// &:hover{
// .menu-type-icon{
// display:inline-block;
// }
// }
}
.ant-menu
-dark.ant-menu-dark
:not(.ant-menu-horizontal) .ant-menu-item-selected {
background:@
menu-bakg
!important;
.ant-menu:not(.ant-menu-horizontal) .ant-menu-item-selected {
background:@
active-color
!important;
}
.ant-menu.ant-menu-dark, .ant-menu-dark .ant-menu-sub, .ant-menu.ant-menu-dark .ant-menu-sub{
background: @menu-bakg !important;
}
.ant-menu-submenu-popup{
left:67px !important;
}
.ant-menu-submenu-popup>.ant-menu {
background: @menu-bakg !important;
color: #9A9DA7;
padding-left: 15px;
color: #333;
width: 132px;
min-width: auto;
li {
padding-left: 22px;
padding-right: 0;
width: 117px;
margin-bottom:0 !important;
&:first-child{
margin-top:8px !important;
width: calc(100% - 16px);
padding-left: 20px;
margin:12px 8px !important;
&:hover{
background: #F3F6FA;
border-radius: 2px;
color:#333 !important;
}
&:last-child{
margin-bottom:8px !important;
}
}
.listType {
width: 5px;
height: 5px;
background: #9A9DA7;
border-radius: 50%;
top: 18px;
left: 10px;
position: absolute;
}
.ant-menu-item-selected {
background: @
menu-bakg
;
background: @
active-color
;
color: #fff;
.listType {
background: @active-color;
&:hover{
color: #fff !important;
}
}
&:hover {
.ant-menu-item-active {
color: #fff;
.listType {
background: #fff;
}
}
.ant-menu-item-selected {
.listType {
background: @active-color;
}
}
}
}
src/modules/root/Menu.tsx
View file @
9417fce0
...
...
@@ -10,7 +10,7 @@ import "./Menu.less";
const
{
SubMenu
}
=
Menu
;
function
Aside
(
props
:
any
)
{
const
{
menuType
}
=
props
const
{
menuType
,
handleMenuType
}
=
props
const
ctx
:
any
=
useContext
(
XMContext
);
const
[
selectKey
,
setSelectKey
]
=
useState
();
const
[
openKeys
,
setOpenKeys
]
=
useState
([
''
]);
...
...
@@ -41,6 +41,9 @@ function Aside(props: any) {
setOpenKeys
([
key
]);
}
}
function
handleMenu
()
{
handleMenuType
();
}
return
(
<
div
...
...
@@ -51,6 +54,21 @@ function Aside(props: any) {
:
"left-container left-container-vertical"
}
>
<
div
className=
"menu-type-icon"
onClick=
{
handleMenu
}
>
{
menuType
?
(
<
span
className=
"icon iconfont"
>

</
span
>
)
:
(
<
span
className=
"icon iconfont"
>

</
span
>
)
}
</
div
>
<
div
className=
"left"
>
<
div
className=
"nav"
>
...
...
@@ -58,7 +76,6 @@ function Aside(props: any) {
style=
{
{
minHeight
:
"100%"
,
background
:
'#0E1935'
}
}
selectedKeys=
{
selectKey
}
openKeys=
{
openKeys
}
theme=
"dark"
inlineCollapsed=
{
false
}
mode=
{
menuType
?
"inline"
:
"vertical"
}
>
...
...
@@ -68,31 +85,19 @@ function Aside(props: any) {
return
null
;
}
if
(
item
.
children
)
{
return
<
SubMenu
key=
{
item
.
groupCode
}
style=
{
{
marginTop
:
0
}
}
className=
"first-menu-item"
title=
{
<
div
>
<
span
style=
{
{
marginRight
:
6
}
}
className=
"iconfont icon"
dangerouslySetInnerHTML=
{
{
__html
:
item
.
icon
}
}
></
span
>
{
menuType
&&
<
span
>
{
item
.
groupName
}
</
span
>
}
</
div
>
}
onTitleClick=
{
()
=>
onOpenChange
(
item
.
groupCode
)
}
>
return
<
SubMenu
key=
{
item
.
groupCode
}
style=
{
{
marginTop
:
0
}
}
className=
"first-menu-item"
title=
{
<
div
>
{
/* <span style={{ marginRight: 16 }} className="iconfont icon" dangerouslySetInnerHTML={{ __html:item.icon}}></span> */
}
<
img
src=
{
item
.
img
}
className=
"icon-img"
></
img
>
{
menuType
&&
<
span
>
{
item
.
groupName
}
</
span
>
}
</
div
>
}
onTitleClick=
{
()
=>
onOpenChange
(
item
.
groupCode
)
}
>
{
item
.
children
.
map
((
_item
:
any
,
_index
:
any
)
=>
{
if
(
ctx
.
xmState
.
storeUserPermissionList
.
indexOf
(
_item
.
groupCode
)
===
-
1
)
{
return
null
;
}
return
<
Menu
.
Item
onClick=
{
()
=>
{
toggleMenu
(
_item
)
}
}
style=
{
{
marginTop
:
0
}
}
key=
{
_item
.
groupCode
+
index
+
_index
}
>
<
span
className=
"listType"
></
span
>
<
span
className=
"name"
>
{
_item
.
groupName
}
</
span
>
</
Menu
.
Item
>
...
...
@@ -101,8 +106,14 @@ function Aside(props: any) {
</
SubMenu
>
}
else
{
return
<
Menu
.
Item
onClick=
{
()
=>
{
toggleMenu
(
item
)
}
}
key=
{
item
.
groupCode
}
className=
"first-menu-item"
>
{
/* <span style={{ marginRight: 16 }} className="iconfont icon" dangerouslySetInnerHTML={{ __html:item.icon}}></span> */
}
{
selectKey
===
item
.
groupCode
?
<
img
src=
{
item
.
selectImg
}
className=
"icon-img"
></
img
>
:
<
img
src=
{
item
.
img
}
className=
"icon-img"
></
img
>
}
<
span
style=
{
{
marginRight
:
6
}
}
className=
"iconfont icon"
dangerouslySetInnerHTML=
{
{
__html
:
item
.
icon
}
}
></
span
>
{
menuType
&&
<
span
>
{
item
.
groupName
}
</
span
>
}
...
...
src/modules/root/WechatLogin.less
View file @
9417fce0
...
...
@@ -9,35 +9,39 @@
color: #999999;
line-height: 20px;
}
.rwm
{
.rwm{
position: relative;
width:
16
0px;
height:
16
0px;
width:
21
0px;
height:
21
0px;
text-align: center;
display: inline-block;
margin-top: 24px;
.error {
position: absolute;
width: 100%;
height: 100%;
background: rgba(255, 255, 255, 0.95);
display: flex;
align-items: center;
justify-content: center;
left: 0px;
top: 0px;
div {
margin: 0 10px;
font-size: 14px;
font-family: PingFangSC-Regular, PingFang SC;
font-weight: 400;
color: #333333;
line-height: 20px;
}
.ope {
cursor: pointer;
color: rgba(82, 137, 250, 1);
}
border: 1px solid #e8e8e8;
border-radius: 2px;
padding:15px;
.error{
position: absolute;
width: 200px;
height: 200px;
background: rgba(255, 255, 255, 0.95);
display: flex;
align-items:center;
justify-content:center;
left:5px;
top:5px;
div{
margin: 0 10px;
font-size: 14px;
font-family: PingFangSC-Regular, PingFang SC;
font-weight: 400;
color: #333333;
line-height: 20px;
}
.ope{
cursor: pointer;
color:rgba(82, 137, 250, 1);
}
}
}
...
...
src/modules/root/WechatLogin.tsx
View file @
9417fce0
...
...
@@ -36,8 +36,9 @@ export default function WechatLogin(props: any) {
let
qrnode
=
new
qrcode
({
text
:
redirect
,
correctLevel
:
2
,
size
:
160
,
image
:
'https://image.xiaomaiketang.com/xm/Newk4NrxKC.png'
,
size
:
180
,
// image: 'https://image.xiaomaiketang.com/xm/Newk4NrxKC.png',
image
:
'https://image.xiaomaiketang.com/xm/bFkRBz7teA.png'
,
imageSize
:
50
});
qrcodeWrapDom
.
innerHTML
=
''
;
...
...
src/modules/store-manage/CourseCatalogPage.less
View file @
9417fce0
...
...
@@ -4,19 +4,19 @@
}
.add-btn{
font-weight: 400;
color: #
5289FA
;
color: #
2966FF
;
line-height: 20px;
cursor: pointer;
}
.edit-btn{
font-weight: 400;
color: #
5289FA
;
color: #
2966FF
;
line-height: 20px;
cursor: pointer;
}
.delete-btn{
font-weight: 400;
color: #
5289FA
;
color: #
2966FF
;
line-height: 20px;
cursor: pointer;
}
...
...
src/modules/store-manage/StoreDecorationPage.less
View file @
9417fce0
...
...
@@ -51,14 +51,14 @@
.operation {
.edit {
color: #
5289fa
;
color: #
2966FF
;
cursor: pointer;
}
.divider-line {
color:#BFBFBF
}
.delete {
color: #
5289fa
;
color: #
2966FF
;
cursor: pointer;
}
}
...
...
src/modules/store-manage/StoreH5DecorationTab.jsx
View file @
9417fce0
/*
* @Author: wufan
* @Date: 2020-11-30 10:47:38
* @LastEditors:
zhangleyu
an
* @LastEditTime: 2021-0
2-01 14:02:11
* @LastEditors:
wuf
an
* @LastEditTime: 2021-0
5-28 16:20:26
* @Description: web学院banner页面
* @@Copyrigh: © 2020 杭州杰竞科技有限公司 版权所有
*/
...
...
@@ -372,7 +372,7 @@ class StoreH5Decoration extends React.Component {
/>
);
return
(
<
div
className=
"
user-manage
-page"
>
<
div
className=
"
store-decoration-h5
-page"
>
<
div
className=
"box-header"
>
<
div
className=
"banner-setting"
>
<
div
className=
"title"
>
banner设置
</
div
>
...
...
src/modules/store-manage/StoreInfo.less
View file @
9417fce0
...
...
@@ -40,7 +40,7 @@
}
.operate-con{
.upload-btn{
color:#
5289FA
;
color:#
2966FF
;
font-size:14px;
margin-bottom:4px;
}
...
...
src/modules/store-manage/StoreWebDecorationTab.jsx
View file @
9417fce0
/*
* @Author: wufan
* @Date: 2020-11-30 10:47:38
* @LastEditors:
yuananting
* @LastEditTime: 2021-0
3-18 11:29:43
* @LastEditors:
wufan
* @LastEditTime: 2021-0
5-28 16:21:04
* @Description: web学院banner页面
* @@Copyrigh: © 2020 杭州杰竞科技有限公司 版权所有
*/
...
...
@@ -370,7 +370,7 @@ class StoreWebDecoration extends React.Component {
/>
);
return
(
<
div
className=
"
user-manage
-page"
>
<
div
className=
"
store-decoration-web
-page"
>
<
div
className=
"box-header"
>
<
div
className=
"banner-setting"
>
<
div
className=
"title"
>
banner设置
</
div
>
...
...
src/modules/teach-tool/components/CourseCategoryManage.less
View file @
9417fce0
...
...
@@ -11,7 +11,7 @@
}
.course-category-tree {
position: relative;
margin-top: 1
6
px;
margin-top: 1
2
px;
width: 900px;
border: 1px solid #e8e8e8;
.ant-tree.ant-tree-directory {
...
...
@@ -29,7 +29,7 @@
vertical-align: middle;
}
.ant-tree-node-content-wrapper.ant-tree-node-selected {
color: #
666666
;
color: #
2966FF
;
}
.ant-tree-node-content-wrapper {
display: flex;
...
...
@@ -50,7 +50,7 @@
}
.ant-tree-treenode-selected:hover::before,
.ant-tree-treenode-selected::before {
background:
#fffbf1
;
background:
rgba(238, 243, 255, 1)
;
}
}
}
...
...
src/modules/teach-tool/components/CourseCategorySiderTree.less
View file @
9417fce0
...
...
@@ -17,14 +17,14 @@
}
.sider-tree {
width: 24
0
px;
width: 24
4
px;
overflow: scroll;
height: calc(100vh - 300px);
.empty-tree-tip {
text-align: center;
margin-top: 100%;
.empty-tree-btn {
color: #
ffb714
;
color: #
2966FF
;
cursor: pointer;
}
}
...
...
@@ -49,7 +49,7 @@
}
.ant-tree-treenode-selected:hover::before,
.ant-tree-treenode-selected::before {
background:
#fffbf1
;
background:
rgba(238, 243, 255, 1)
;
}
}
}
...
...
src/modules/teach-tool/examination-manager/AddExam.less
View file @
9417fce0
.examPage{
padding-bottom: 62px;
.ant-alert-info{
background: rgba(255, 244, 221, 1);
border: none;
padding-bottom: 50px;
.box {
padding-bottom: 40px!important;
}
.ant-form-item{
&:last-child{
...
...
@@ -66,13 +65,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:
25
2px;
padding-right:
7
2px;
background: #fff;
border-top: 1px solid #E8E8E8;
z-index: 9999;
...
...
src/modules/teach-tool/examination-manager/AddExam.tsx
View file @
9417fce0
...
...
@@ -9,6 +9,8 @@ import _ from 'underscore'
import
GraphicsEditor
from
'../../course-manage/components/GraphicsEditor'
;
import
SelectPaperModal
from
'./SelectPaperModal'
import
PreviewModal
from
'./PreviewModal'
import
ShowTips
from
"@/components/ShowTips"
;
import
'./AddExam.less'
;
const
{
RangePicker
}
=
DatePicker
;
...
...
@@ -230,8 +232,9 @@ function AddExam(props: any) {
<
Breadcrumbs
navList=
{
props
.
type
===
'edit'
?
"编辑考试"
:
"新建考试"
}
goBack=
{
handleGoBack
}
/>
<
div
className=
"box"
>
<
Alert
message=
"请遵守国家相关规定,切勿上传低俗色情、暴力恐怖、谣言诈骗、侵权盗版等相关内容,小麦企学院保有依据国家规定及平台规则进行处理的权利"
type=
"info"
showIcon
/>
<
div
className=
"form"
>
<
div
className=
"show-tips"
>
<
ShowTips
message=
"请遵守国家相关规定,切勿上传低俗色情、暴力恐怖、谣言诈骗、侵权盗版等相关内容,小麦企学院保有依据国家规定及平台规则进行处理的权利"
/>
</
div
>
<
div
className=
"form"
>
<
div
className=
"title"
>
基本信息
</
div
>
<
Form
labelCol=
{
{
span
:
3
}
}
...
...
@@ -418,7 +421,7 @@ function AddExam(props: any) {
setPaperInfo
(
info
)
}
}
paperInfo=
{
paperInfo
}
close=
{
()
=>
{
setShowModal
(
false
)
}
}
></
SelectPaperModal
>
}
<
div
className=
"footer"
>
<
div
className=
"footer
shrink-footer
"
>
<
Button
onClick=
{
handleGoBack
}
>
取消
</
Button
>
<
Button
onClick=
{
()
=>
{
setPreview
(
true
)
}
}
>
预览
</
Button
>
<
Button
type=
"primary"
onClick=
{
handleSave
}
>
保存
</
Button
>
...
...
src/modules/teach-tool/examination-manager/Index.tsx
View file @
9417fce0
...
...
@@ -129,6 +129,7 @@ function ExaminationManager(props: any) {
{
title
:
"创建时间"
,
dataIndex
:
"examCreateTime"
,
align
:
fixStr
.
right
,
sorter
:
true
,
sortOrder
:
field
===
"examCreateTime"
?
order
:
sortStatus
.
type
,
render
:
(
text
:
any
,
record
:
any
)
=>
<
span
>
{
moment
(
text
).
format
(
"YYYY-MM-DD HH:mm"
)
}
</
span
>,
...
...
@@ -293,7 +294,7 @@ function ExaminationManager(props: any) {
<
div
style=
{
{
display
:
'flex'
}
}
>
<
div
className=
"search-condition"
>
<
div
className=
"search-condition__item"
>
<
span
className=
"search-name"
>
考试名称
:
</
span
>
<
span
className=
"search-name"
>
考试名称
:
</
span
>
<
Search
value=
{
query
.
examName
}
className=
'search-input'
...
...
@@ -321,7 +322,7 @@ function ExaminationManager(props: any) {
></
TeacherSelect
>
<
div
className=
"search-condition__item"
>
<
span
className=
"search-name"
>
考试时间
:
</
span
>
<
span
className=
"search-name"
>
考试时间
:
</
span
>
<
RangePicker
className=
'search-input'
value=
{
[
...
...
@@ -339,7 +340,7 @@ function ExaminationManager(props: any) {
</
div
>
{
!!
expandFilter
&&
<
div
className=
"search-condition__item"
>
<
span
className=
"search-name"
>
创建时间
:
</
span
>
<
span
className=
"search-name"
>
创建时间
:
</
span
>
<
RangePicker
className=
'search-input'
value=
{
[
...
...
src/modules/teach-tool/examination-manager/index.less
View file @
9417fce0
...
...
@@ -6,4 +6,11 @@
padding: 2px 4px;
line-height: 16px;
}
.ant-table-column-sorters {
justify-content: flex-end;
}
.ant-table-column-sorter {
margin-top: 0px !important;
}
}
\ No newline at end of file
src/modules/teach-tool/paper-manage/OperatePaper.jsx
View file @
9417fce0
/*
* @Author: yuananting
* @Date: 2021-03-27 16:15:13
* @LastEditors:
zhangleyu
an
* @LastEditTime: 2021-05-
10 10:16:31
* @LastEditors:
wuf
an
* @LastEditTime: 2021-05-
30 16:56:15
* @Description: 助学工具-新建/复制/编辑试卷
* @Copyrigh: © 2020 杭州杰竞科技有限公司 版权所有
*/
...
...
@@ -490,7 +490,7 @@ class OperatePaper extends Component {
title
:
"题型"
,
dataIndex
:
"questionType"
,
key
:
"questionType"
,
width
:
"1
6
%"
,
width
:
"1
2
%"
,
sorter
:
true
,
showSorterTooltip
:
false
,
filters
:
[
...
...
@@ -552,7 +552,8 @@ class OperatePaper extends Component {
<
Tooltip
title=
"多选题和填空题的漏选/半对得分不能高于题目本身分值"
>
<
span
className=
"icon iconfont"
style=
{
{
color
:
"#BFBFBF"
,
fontSize
:
14
}
}
style=
{
{
color
:
"#BFBFBF"
,
fontSize
:
14
,
fontWeight
:
"400"
}
}
>

</
span
>
...
...
@@ -707,7 +708,7 @@ class OperatePaper extends Component {
<
div
className=
"show-tips"
>
<
ShowTips
message=
"请遵守国家相关规定,切勿上传低俗色情、暴力恐怖、谣言诈骗、侵权盗版等相关内容,小麦企学院保有依据国家规定及平台规则进行处理的权利"
/>
</
div
>
<
Form
ref=
{
this
.
formRef
}
style=
{
{
marginTop
:
24
}
}
>
<
Form
ref=
{
this
.
formRef
}
style=
{
{
marginTop
:
24
,
marginBottom
:
'85px'
}
}
>
<
Form
.
Item
name=
"paperName"
label=
"试卷名称:"
...
...
@@ -798,11 +799,12 @@ class OperatePaper extends Component {
dataSource=
{
selectQuestionList
}
pagination=
{
false
}
onChange=
{
this
.
sortByQuestionType
}
selections=
{
false
}
/>
</
ConfigProvider
>
</
Form
>
</
div
>
<
div
className=
"footer"
>
<
div
className=
"footer
shrink-footer
"
>
<
Button
onClick=
{
this
.
handleGoBack
}
>
取消
</
Button
>
<
Button
onClick=
{
this
.
previewPaper
}
>
预览
</
Button
>
<
Button
type=
"primary"
onClick=
{
this
.
savePaper
}
>
...
...
src/modules/teach-tool/paper-manage/OperatePaper.less
View file @
9417fce0
.operate-paper-page {
.box {
margin-bottom:
66
px !important;
margin-bottom:
52
px !important;
.table-style {
border: 1px solid #f0f0f0 !important;
}
...
...
@@ -20,14 +20,14 @@
color: #999999;
line-height: 20px;
span {
color: #
ffb714
;
color: #
2966FF
;
}
}
.record-operate {
display: flex;
&__item {
color: #
5289fa
;
color: #
2966FF
;
cursor: pointer;
&.split {
...
...
@@ -44,13 +44,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:
25
2px;
padding-right:
7
2px;
background: #fff;
border-top: 1px solid #e8e8e8;
z-index: 999;
...
...
@@ -58,6 +59,19 @@
margin-left: 10px;
}
}
.ant-table tbody tr {
&:last-child {
td {
border-bottom: none!important;
}
}
}
.ant-table-thead>tr>th:not(:last-child):not(.ant-table-selection-column):not(.ant-table-row-expand-icon-cell):not([colspan]) {
&::before {
width: 0!important;
}
}
}
.aid-tool-list {
...
...
src/modules/teach-tool/paper-manage/components/PaperList.less
View file @
9417fce0
...
...
@@ -47,7 +47,7 @@
position: relative;
margin-top: 16px;
.empty-list-tip {
color: #
ffb714
;
color: #
2966FF
;
cursor: pointer;
}
.record-name {
...
...
@@ -59,7 +59,7 @@
display: flex;
&__item {
color: #
5289fa
;
color: #
2966FF
;
cursor: pointer;
&.split {
...
...
src/modules/teach-tool/paper-manage/components/SelectQuestionList.jsx
View file @
9417fce0
...
...
@@ -381,7 +381,7 @@ class SelectQuestionList extends Component {
<
div
className=
"select-tip-box"
>
<
div
>
<
span
className=
"icon iconfont tip-icon"
>

</
span
>
<
span
style=
{
{
marginRight
:
8
}
}
>
已选
<
span
style=
{
{
color
:
"#
FFB714
"
}
}
>
{
selectQuestionKeys
.
length
}
</
span
>
题
</
span
>
<
span
style=
{
{
marginRight
:
8
}
}
>
已选
<
span
style=
{
{
color
:
"#
2966FF
"
}
}
>
{
selectQuestionKeys
.
length
}
</
span
>
题
</
span
>
{
selectQuestionKeys
.
length
>
0
&&
(
<
span
>
(
{
singleCount
>
0
&&
` 单选题${singleCount}题 `
}
...
...
src/modules/teach-tool/paper-manage/components/SelectQuestionList.less
View file @
9417fce0
...
...
@@ -44,7 +44,7 @@
position: relative;
margin-top: 16px;
.empty-list-tip {
color: #
ffb714
;
color: #
2966FF
;
cursor: pointer;
}
.record-name {
...
...
@@ -56,7 +56,7 @@
display: flex;
&__item {
color: #
5289fa
;
color: #
2966FF
;
cursor: pointer;
&.split {
...
...
@@ -67,13 +67,13 @@
}
}
.select-tip-box {
background: #
fff4dd
;
background: #
E9EFFF
;
border-radius: 4px;
padding: 6px 16px;
display: flex;
justify-content: space-between;
.tip-icon {
color: #
ff9d14
;
color: #
2966FF
;
font-size: 14px;
margin-right: 4px;
}
...
...
@@ -82,7 +82,7 @@
font-size: 14px;
}
.clear-btn {
color: #
5289fa
;
color: #
2966FF
;
font-size: 14px;
cursor: pointer;
}
...
...
src/modules/teach-tool/question-manage/OperateQuestion.jsx
View file @
9417fce0
/*
* @Author: yuananting
* @Date: 2021-02-25 13:46:35
* @LastEditors:
yuananting
* @LastEditTime: 2021-05-
10 20:33:16
* @LastEditors:
wufan
* @LastEditTime: 2021-05-
24 11:32:47
* @Description: 助学工具-题库-新建/编辑题目
* @Copyrigh: © 2020 杭州杰竞科技有限公司 版权所有
*/
...
...
@@ -325,7 +325,7 @@ class OperateQuestion extends Component {
className=
"icon iconfont"
style=
{
{
color
:
activeKey
===
"SINGLE_CHOICE"
?
"#
ffb714
"
:
"#CCCCCC"
,
activeKey
===
"SINGLE_CHOICE"
?
"#
2966FF
"
:
"#CCCCCC"
,
}
}
>

{
" "
}
...
...
@@ -354,7 +354,7 @@ class OperateQuestion extends Component {
className=
"icon iconfont"
style=
{
{
color
:
activeKey
===
"MULTI_CHOICE"
?
"#
ffb714
"
:
"#CCCCCC"
,
activeKey
===
"MULTI_CHOICE"
?
"#
2966FF
"
:
"#CCCCCC"
,
}
}
>

{
" "
}
...
...
@@ -382,7 +382,7 @@ class OperateQuestion extends Component {
<
span
className=
"icon iconfont"
style=
{
{
color
:
activeKey
===
"JUDGE"
?
"#
ffb714
"
:
"#CCCCCC"
,
color
:
activeKey
===
"JUDGE"
?
"#
2966FF
"
:
"#CCCCCC"
,
}
}
>

{
" "
}
...
...
@@ -410,7 +410,7 @@ class OperateQuestion extends Component {
className=
"icon iconfont"
style=
{
{
color
:
activeKey
===
"GAP_FILLING"
?
"#
ffb714
"
:
"#CCCCCC"
,
activeKey
===
"GAP_FILLING"
?
"#
2966FF
"
:
"#CCCCCC"
,
}
}
>

{
" "
}
...
...
@@ -439,7 +439,7 @@ class OperateQuestion extends Component {
style=
{
{
color
:
activeKey
===
"INDEFINITE_CHOICE"
?
"#
ffb714
"
?
"#
2966FF
"
:
"#CCCCCC"
,
}
}
>
...
...
@@ -472,7 +472,7 @@ class OperateQuestion extends Component {
</
TabPane
>
</
Tabs
>
</
div
>
<
div
className=
"footer"
>
<
div
className=
"footer
shrink-footer
"
>
<
Button
onClick=
{
()
=>
{
this
.
handleGoBack
();
...
...
src/modules/teach-tool/question-manage/OperateQuestion.less
View file @
9417fce0
.operate-question-page {
.box {
margin-bottom:
66
px !important;
margin-bottom:
52
px !important;
.ant-tabs {
color: #666666;
}
...
...
@@ -8,13 +8,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:
25
2px;
padding-right:
7
2px;
background: #fff;
border-top: 1px solid #e8e8e8;
z-index: 999;
...
...
src/modules/teach-tool/question-manage/components/OperateQuestionTab.jsx
View file @
9417fce0
/*
* @Author: yuananting
* @Date: 2021-02-25 14:34:29
* @LastEditors:
yuananting
* @LastEditTime: 2021-0
3-29 16:22:15
* @LastEditors:
wufan
* @LastEditTime: 2021-0
5-14 18:17:08
* @Description: 助学工具-题库-操作题目Tab
* @Copyrigh: © 2020 杭州杰竞科技有限公司 版权所有
*/
...
...
@@ -600,7 +600,7 @@ class OperateQuestionTab extends Component {
/>
)
}
<
Tag
style=
{
{
color
:
"#
5289FA
"
,
fontSize
:
14
}
}
style=
{
{
color
:
"#
2966FF
"
,
fontSize
:
14
}
}
onClick=
{
()
=>
{
this
.
addAnswerTag
(
optionItem
);
}
}
...
...
src/modules/teach-tool/question-manage/components/OperateQuestionTab.less
View file @
9417fce0
...
...
@@ -24,7 +24,7 @@
color: #999999;
margin-top: 8px;
.fill-info_icon {
color: #
5289fa
;
color: #
2966FF
;
font-size: 14px;
padding-left: 9px;
cursor: pointer;
...
...
@@ -229,7 +229,7 @@
line-height: 33px;
align-self: stretch;
.option-operate_item__icon:hover {
color: #
ffb714
;
color: #
2966FF
;
}
.icon {
color: #bfbfbf;
...
...
@@ -252,7 +252,7 @@
border-radius: 4px;
border: 1px dashed #e8e8e8;
font-size: 14px;
color: #
5289fa
;
color: #
2966FF
;
line-height: 44px;
text-align: center;
cursor: pointer;
...
...
src/modules/teach-tool/question-manage/components/QuestionEditor.less
View file @
9417fce0
...
...
@@ -26,7 +26,7 @@
}
.editor-fill-info_icon {
color: #
5289fa
!important;
color: #
2966FF
!important;
font-size: 14px;
padding-left: 9px !important;
cursor: pointer;
...
...
@@ -163,7 +163,7 @@
&:hover {
.edtior-media_item__icon {
color: #
ffb714
;
color: #
2966FF
;
}
}
...
...
src/modules/teach-tool/question-manage/components/QuestionList.less
View file @
9417fce0
...
...
@@ -44,7 +44,7 @@
position: relative;
margin-top: 16px;
.empty-list-tip {
color: #
ffb714
;
color: #
2966FF
;
cursor: pointer;
}
.record-name {
...
...
@@ -56,7 +56,7 @@
display: flex;
&__item {
color: #
5289fa
;
color: #
2966FF
;
cursor: pointer;
&.split {
...
...
src/modules/teach-tool/question-manage/modal/BatchImportQuestionModal.jsx
View file @
9417fce0
...
...
@@ -183,11 +183,11 @@ class BatchImportQuestionModal extends Component {
/>
<
p
className=
"status"
>
导入完成
</
p
>
<
p
className=
"status-tip"
>
<
span
style=
{
{
color
:
successCnt
===
0
?
""
:
"#
FF9D14
"
}
}
>
<
span
style=
{
{
color
:
successCnt
===
0
?
""
:
"#
2966FF
"
}
}
>
{
successCnt
}
</
span
>
个题目导入成功,
<
span
style=
{
{
color
:
failCnt
===
0
?
""
:
"#
FF9D14
"
}
}
>
<
span
style=
{
{
color
:
failCnt
===
0
?
""
:
"#
2966FF
"
}
}
>
{
failCnt
}
</
span
>
个题目导入失败。
...
...
src/modules/teach-tool/question-manage/modal/BatchImportQuestionModal.less
View file @
9417fce0
...
...
@@ -63,7 +63,7 @@
}
.down-btn {
text-align: left;
color: #
5289fa
;
color: #
2966FF
;
font-size: 12px;
display: block;
margin-top: 8px;
...
...
src/modules/teach-tool/question-manage/modal/PreviewQuestionModal.less
View file @
9417fce0
...
...
@@ -209,7 +209,6 @@
color: #666666;
.desc-input-box {
margin-bottom: 8px;
display: inline-block;
*:not(p) {
font-weight: normal !important;
font-size: 14px !important;
...
...
@@ -219,7 +218,6 @@
}
}
.desc-picture-box {
display: inline-flex;
margin-bottom: 16px;
.picture-box {
width: 88px;
...
...
src/routes/config/menuList.tsx
View file @
9417fce0
/*
* @Author: yuananting
* @Date: 2021-02-21 15:53:31
* @LastEditors:
wufan
* @LastEditTime: 2021-05-
13 16:40:11
* @LastEditors:
Please set LastEditors
* @LastEditTime: 2021-05-
30 11:00:09
* @Description: 描述一下咯
* @Copyrigh: © 2020 杭州杰竞科技有限公司 版权所有
*/
...
...
@@ -10,13 +10,16 @@ export const menuList: any = [
{
groupName
:
"中心首页"
,
groupCode
:
"CloudPage"
,
icon
:
''
,
link
:
'/home'
icon
:
''
,
link
:
'/home'
,
img
:
'https://image.xiaomaiketang.com/xm/ni3BFJDT3a.png'
,
selectImg
:
'https://image.xiaomaiketang.com/xm/GRDztTAWaM.png'
},
{
groupName
:
"课程管理"
,
groupCode
:
"CloudCourse"
,
icon
:
''
,
icon
:
''
,
img
:
'https://image.xiaomaiketang.com/xm/jBGrGjM7HQ.png'
,
children
:
[
{
groupName
:
"直播课"
,
...
...
@@ -43,19 +46,24 @@ export const menuList: any = [
{
groupName
:
"知识库"
,
groupCode
:
"CloudKnowledge"
,
icon
:
''
,
link
:
'/knowledge-base'
icon
:
''
,
link
:
'/knowledge-base'
,
img
:
'https://image.xiaomaiketang.com/xm/8sbP5rGQWh.png'
,
selectImg
:
'https://image.xiaomaiketang.com/xm/hJKCfibC22.png'
},
{
groupName
:
"资料云盘"
,
groupCode
:
"CloudDisk"
,
icon
:
''
,
link
:
'/resource-disk'
icon
:
''
,
link
:
'/resource-disk'
,
img
:
'https://image.xiaomaiketang.com/xm/zGKbXJPzXx.png'
,
selectImg
:
'https://image.xiaomaiketang.com/xm/5sN4MzjxYc.png'
,
},
{
groupName
:
"培训管理"
,
groupCode
:
"TrainManage"
,
icon
:
''
,
icon
:
''
,
img
:
'https://image.xiaomaiketang.com/xm/Yy6pZ6G6kS.png'
,
children
:
[
{
groupName
:
"培训计划"
,
...
...
@@ -67,7 +75,8 @@ export const menuList: any = [
{
groupName
:
"助学工具"
,
groupCode
:
"AidTool"
,
icon
:
''
,
icon
:
''
,
img
:
'https://image.xiaomaiketang.com/xm/xsma4hx3b3.png'
,
children
:
[
{
groupName
:
"题库"
,
...
...
@@ -89,7 +98,8 @@ export const menuList: any = [
{
groupName
:
"学院管理"
,
groupCode
:
"CloudShop"
,
icon
:
''
,
icon
:
''
,
img
:
'https://image.xiaomaiketang.com/xm/Q8i5RSMKNc.png'
,
children
:
[
{
groupName
:
"学院信息"
,
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment