Commit 9417fce0 by guomingpang

Merge branch 'master' into rc

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