Commit 4b543d8d by wufan

Merge branch 'feature/zhangleyuan/20200119/style-optimize' into 'master'

Feature/zhangleyuan/20200119/style optimize

See merge request !3
parents d4330b87 8595031d
......@@ -60,6 +60,7 @@
"jquery": "^3.4.1",
"less": "^3.12.2",
"less-loader": "^6.2.0",
"lottie-web": "^5.7.6",
"microevent": "^1.0.0",
"mini-css-extract-plugin": "0.9.0",
"moment": "^2.27.0",
......
......@@ -203,8 +203,10 @@ class ChooseMembersModal extends React.Component {
title: '全选', // 实际为头像,但在表格上这行要求显示为全选
key: 'avatar',
dataIndex: 'avatar',
width: '30px',
width: '40%',
render: (value, record) => {
const { adminName } = record;
return (
<div className='avatar'>
{
......@@ -212,21 +214,10 @@ class ChooseMembersModal extends React.Component {
[<img className='avatar-img' src={ value } key='avatar' alt=""/>]
: [<img className='avatar-img' src='https://image.xiaomaiketang.com/xm/dEyxDRKwFw.png' key='avatar' alt=""/>]
}
</div>
)
}
},{
title: '',
key: 'adminNameLeft',
dataIndex: 'adminName',
width: '30%',
align: 'left',
render: (value, record) => {
const { adminName } = record;
return (
<span className='userImg'>
{ adminName }
</span>
</div>
)
}
}
......@@ -309,7 +300,7 @@ class ChooseMembersModal extends React.Component {
// bordered={true}
size={'small'}
rowSelection={{
columnWidth : 30,
columnWidth : 24,
selectedRowKeys,
onChange : this.onChangeRow,
getCheckboxProps : this.getCheckboxProps,
......
......@@ -50,6 +50,7 @@
height: 23px;
width: 23px;
border-radius: 50%;
margin-right: 8px;
}
}
}
......@@ -68,9 +69,9 @@
.span-right{
float: right;
margin-right: 10px;
color:#5289FA;
color: #999;
.span-right-l{
color: #FD9A6A;
color: #5289FA;
cursor: pointer;
}
}
......
......@@ -251,12 +251,6 @@ class CopyFileModal extends React.Component {
</Button>
]}
>
{/* <div className='copy-header'>
<Radio.Group>
<Radio.Button value={'MYSELF'} onClick={() => this.getFileList('MYSELF')}>我的文件</Radio.Button>
<Radio.Button onClick={() => this.getFileList('COMMON')}>公共文件</Radio.Button>
</Radio.Group>
</div> */}
<div className='copy-body'>
{/* 面包屑 */}
<div className="bread-crumbs">
......
......@@ -59,6 +59,7 @@
.lottie-box {
border:1px solid #E8E8E8;
border-radius:4px;
height: 320px;
}
.lottie-icon{
......
......@@ -194,7 +194,7 @@ class ManagingMembersModal extends React.Component {
title : '头像',
key : 'avatar',
dataIndex : 'avatar',
width : '20%',
width : '8%',
align : 'right',
render : (value, record) => {
return (
......@@ -224,7 +224,7 @@ class ManagingMembersModal extends React.Component {
title : '权限',
key : 'rights',
dataIndex : 'rights',
width : '40%',
width : '50%',
align :'right',
render : (value, record) => {
const imgSrcList = ['https://image.xiaomaiketang.com/xm/Th5cKisf6f.png', 'https://image.xiaomaiketang.com/xm/nzAcc6ryTp.png'];
......
......@@ -15,7 +15,7 @@
.managing-right{
float: right;
color: #FFB714;
color: #5289FA;
cursor: pointer;
.tool-tip-right{
margin-right: 4px;
......
......@@ -50,9 +50,14 @@
}
.file-list {
// border: 1px solid #E8E8E8;
// border-radius: 4px;
height: 100%;
border-top: 1px solid #E8E8E8;
border-top-left-radius: 4px;
border-top-right-radius: 4px;
border: 1px solid #E8E8E8;
border-radius: 4px;
overflow: auto;
.file-item {
display: flex;
align-items: center;
......
......@@ -55,7 +55,9 @@
cursor: pointer;
vertical-align: top;
&:hover {
background: #e8e8e8;
background: #FFB714;
opacity:0.2;
border-radius:4px;
}
&.before-disabled {
color: #e8e8e8;
......
......@@ -41,6 +41,8 @@
}
.ant-btn-primary {
text-shadow: none !important;
box-shadow: none !important;
i {
color: #fff !important;
}
......@@ -225,11 +227,7 @@
line-height:20px !important;
font-weight: 400 !important;
border: 1px solid #e8e8e8;
&:focus,
:active {
border: 1px solid #ffb000 !important;
color: #ffb000 !important;
}
box-shadow: none !important;
}
.ant-input-search-button {
......@@ -382,13 +380,6 @@ mr0 {
background-color: #fdb089 !important;
border-color: #fdb089 !important;
}
&:focus,
:active {
border: 1px solid @xm-color-text-select-primary !important;
background-color: @xm-color-text-select-primary !important;
}
span {
color: #fff !important;
}
......@@ -642,3 +633,12 @@ mr0 {
.row-dragging .drag-visible {
visibility: visible;
}
.ant-select-dropdown .rc-virtual-list-scrollbar .rc-virtual-list-scrollbar-thumb{
background: #D6D6D6 !important;
}
.ant-table.ant-table-bordered > .ant-table-container > .ant-table-content > table > thead > tr > .ant-table-cell-fix-right-first::after,
.ant-table.ant-table-bordered > .ant-table-container > .ant-table-content > table > tbody > tr > .ant-table-cell-fix-right-first::after
{
border-right:none !important;
}
\ No newline at end of file
/*
* @Author: 陈剑宇
* @Date: 2020-05-07 14:43:01
* @LastEditTime: 2021-01-18 21:05:12
* @LastEditTime: 2021-01-25 20:05:28
* @LastEditors: zhangleyuan
* @Description:
* @FilePath: /wheat-web-demo/src/domains/basic-domain/constants.ts
......@@ -9,7 +9,7 @@
import { MapInterface } from '@/domains/basic-domain/interface'
// 默认是 dev 环境
const ENV: string = process.env.DEPLOY_ENV || 'prod';
const ENV: string = process.env.DEPLOY_ENV || 'rc';
console.log("process.env.DEPLOY_ENV",process)
const BASIC_HOST_MAP: MapInterface = {
dev: 'https://dev-heimdall.xiaomai5.com/',
......
......@@ -2,12 +2,12 @@
* @Author: 吴文洁
* @Date: 2020-08-20 09:21:40
* @LastEditors: zhangleyuan
* @LastEditTime: 2021-01-18 21:05:31
* @LastEditTime: 2021-01-25 20:04:20
* @Description:
* @Copyright: 杭州杰竞科技有限公司 版权所有
*/
import { MapInterface } from '@/domains/basic-domain/interface'
const ENV: string = process.env.DEPLOY_ENV || 'prod';
const ENV: string = process.env.DEPLOY_ENV || 'rc';
const appIdMap: MapInterface = {
dev: 'wx3ea60e78ddfa277e',
......
......@@ -27,6 +27,7 @@ class DateRangePicker extends React.Component {
this.props.onChange(date)
}}
{...showTime}
suffixIcon={<span class="icon iconfont">&#xe838;</span>}
/>
)
}
......
......@@ -219,7 +219,7 @@ class DataList extends React.Component {
<Table
columns={this.getVisiterColumns()}
dataSource={this.state.teacherData.visitorInfoVOList}
scroll={{ y: 75 }}
scroll={{ y: 80 }}
size={"small"}
style={{ width: 450 }}
pagination={false}
......
......@@ -175,7 +175,6 @@ class LiveCourseFilter extends React.Component {
format={"YYYY-MM-DD"}
onChange={(dates) => { this.handleChangeDates(dates) }}
style={{ width: "calc(100% - 70px)" }}
/>
</div>
{ User.getUserRole()!=="CloudLecturer" &&
......
......@@ -36,6 +36,7 @@
line-height: 20px;
.fold-icon {
font-size: 12px;
margin-left:4px;
}
}
}
......
......@@ -32,7 +32,7 @@ const courseStateShow = {
UN_START: {
code: 1,
title: "待开课",
color: "#FDBE31",
color: "#FFB714",
},
STARTING: {
code: 2,
......@@ -147,7 +147,7 @@ class LiveCourseList extends React.Component {
columns = [
{
title: "直播课",
width: "25%",
width: "23%",
key: "course",
dataIndex: "courseName",
render: (val, record) => {
......@@ -259,9 +259,9 @@ class LiveCourseList extends React.Component {
{
title: <span>
<span>店铺展示</span>
<Tooltip title={<div>开启后,用户可在店铺内查看到此课程。若课程“未成功开课”,则系统会自动“关闭”店铺展示。<br/>关闭后,店铺内不再展示此课程,但用户仍可通过分享的海报/链接查看此课程。</div>}><i className="icon iconfont" style={{ marginLeft: '5px',cursor:'pointer',color:'#bfbfbf'}}>&#xe61d;</i></Tooltip>
<Tooltip title={<div>开启后,用户可在店铺内查看到此课程。若课程“未成功开课”,则系统会自动“关闭”店铺展示。<br/>关闭后,店铺内不再展示此课程,但用户仍可通过分享的海报/链接查看此课程。</div>}><i className="icon iconfont" style={{ marginLeft: '5px',cursor:'pointer',color:'#bfbfbf',fontSize:'14px'}}>&#xe61d;</i></Tooltip>
</span>,
width: "7%",
width: "9%",
dataIndex: "courseware",
render: (val, item, index) => {
return (
......
......@@ -9,7 +9,7 @@ import { Modal, Button, Table, Progress, message, Tooltip, Spin, Popconfirm } fr
import { QuestionCircleOutlined,LoadingOutlined} from "@ant-design/icons";
import _ from 'underscore';
import moment from 'moment';
// import User from '@/core/user';
import Lottie from "lottie-web";
import User from '@/common/js/user';
import { suffixType, DEFAULT_SIZE_UNIT, SupportFileType } from '@/common/constants/academic/liveEnum';
import { FileVerifyMap, FileTypeIcon, DISK_MAP } from '@/common/constants/academic/lessonEnum';
......@@ -20,6 +20,7 @@ import './ManageCoursewareModal.less';
class ManageCoursewareModal extends React.Component {
constructor(props) {
super(props)
......@@ -38,21 +39,17 @@ class ManageCoursewareModal extends React.Component {
componentDidMount() {
this.getCoursewareList();
// this.handleFetchDiskList();
// if (teacherId) {
// this.judgeLessonPermisson();
// }
var animation = Lottie.loadAnimation({
path: "https://image.xiaomaiketang.com/xm/MQwp2aJaxf.json",
name: "test",
renderer: "svg",
loop: true,
autoplay: true,
container: document.getElementById("lottie-box")
});
}
// 判断资料云盘权限
// judgeLessonPermisson = () => {
// const query = {
// permissionCode: "2001"
// };
// axios.Apollo("public/apollo/judgeLessonPermission", query).then(res => {
// this.setState({ isLessonPermission: res.result })
// });
// };
// 获取课件列表
getCoursewareList(id) {
......@@ -104,21 +101,6 @@ class ManageCoursewareModal extends React.Component {
})
}
// 获取机构可见的磁盘目录
// handleFetchDiskList = () => {
// Service.Hades('public/apollo/getUserDisk', {}).then((res) => {
// const { result = [] } = res;
// const diskList = result.map((item) => {
// return {
// ...item,
// folderName: DISK_MAP[item.disk]
// }
// });
// this.setState({
// diskList,
// });
// });
// }
// 上传文件
addFile() {
......@@ -233,27 +215,6 @@ class ManageCoursewareModal extends React.Component {
}
};
// 校验余额
// handleCheckBalance = async () => {
// const { type } = this.props;
// const balanceRes = await axios.Business("public/liveAssets/query", { });
// // 判断是否欠费,旗舰版用户不需要校验余额
// const ultimateRes = await axios.Business('public/inst/checkInstProduct', {
// productCodeList: ['ULTIMATESELL', 'PIP_TO_ULTIMATE', 'HIGH_TO_ULTIMATE']
// });
// const { result } = balanceRes;
// // balance小于0表示已经欠费
// if ((!result || result.balance <= 0) && !ultimateRes.result && type === 'interactive') {
// Modal.info({
// title: '无法继续操作',
// content: '直播服务已升级,请联系运营老师。',
// icon: <span className="icon iconfont default-confirm-icon">&#xe6f4;</span>
// })
// return false;
// }
// return true;
// };
render() {
const columns = [
......@@ -351,7 +312,8 @@ class ManageCoursewareModal extends React.Component {
>
{_.isEmpty(_list) ?
<div className="empty-body">
<img className="empty-image" src="https://image.xiaomaiketang.com/xm/s8xkAPCDex.png" alt="" />
{/* <img className="empty-image" src="https://image.xiaomaiketang.com/xm/s8xkAPCDex.png" alt="" /> */}
<div id="lottie-box" className="empty-image"></div>
<Button
className="empty-button"
type="primary"
......
......@@ -8,6 +8,8 @@
.empty-image {
display: block;
margin: 24px auto 12px;
width:100px;
height:100px;
}
.empty-button {
display: block;
......@@ -58,7 +60,7 @@
}
&:hover {
.name {
color: #FF7519;
color: #FFB714;
}
}
}
......
......@@ -24,6 +24,7 @@ class ShareLiveModal extends React.Component {
constructor(props) {
super(props);
this.state = {
shareUrl: 'https://xiaomai5.com/liveShare?courseId=12'
}
......@@ -32,6 +33,43 @@ class ShareLiveModal extends React.Component {
componentDidMount() {
// 获取短链接
this.handleConvertShortUrl();
// const { needStr, data, type } = this.props;
// const { courseName, coverUrl = DEFAULT_COVER, scheduleVideoUrl } = data;
// const { shareUrl ,time} = this.state;
// // 判断是否是默认图, 默认图不需要在URL后面增加字符串
// const isDefaultCover = coverUrl === DEFAULT_COVER;
// let coverImgSrc = coverUrl;
// if(type === 'videoClass'){
// if(!coverUrl || isDefaultCover){
// coverImgSrc = `${scheduleVideoUrl}?x-oss-process=video/snapshot,t_0,m_fast&anystring=anystring`
// }
// }else{
// data.courseMediaVOS.map((item,index)=>{
// if( item.contentType === "COVER"){
// coverImgSrc = item.mediaUrl;
// }
// })
// }
// let image = new Image()
// image.src =coverImgSrc + '?v=' + Math.random()
// image.crossOrigin = "*"
// image.onload = ()=>{
// let imgData = getBase64Image(image)
// this.setState({imgData})
// }
// function getBase64Image (img) {
// let canvas = document.createElement("canvas")
// canvas.width = img.width
// canvas.height = img.height
// let ctx = canvas.getContext("2d")
// ctx.drawImage(img, 0, 0, img.width, img.height)
// let dataURL = canvas.toDataURL("image/png")
// return dataURL
// }
}
handleConvertShortUrl = () => {
......@@ -42,6 +80,7 @@ class ShareLiveModal extends React.Component {
urls: [longUrl]
}).then((res) => {
const { result = [] } = res;
this.setState({
shareUrl: result[0].shortUrl
}, () => {
......@@ -62,15 +101,24 @@ class ShareLiveModal extends React.Component {
// 下载海报
handleDownloadPoster = () => {
const dom = document.querySelector('#poster');
html2canvas(dom, {
useCORS: true,
}).then(canvas => {
this.setState({
showImg:true,
time:new Date().valueOf()
},()=>{
this.setState({time:new Date().valueOf()},()=>{
let node = document.getElementById('poster');
domtoimage.toPng(node)
.then((imgData) => {
console.log(imgData)
const download = document.createElement('a');
const { courseName } = this.props.data;
const dataUrl = canvas.toDataURL('image/png');
$(download).attr('href', dataUrl).attr('download', `${courseName}.png`).get(0).click();
$(download).attr('href', imgData).attr('download', `${courseName}.png`).get(0).click();
// this.props.close()
})
})
})
}
// 复制分享链接
......@@ -84,17 +132,23 @@ class ShareLiveModal extends React.Component {
render() {
const { needStr, data, type } = this.props;
const { courseName, coverUrl = DEFAULT_COVER, scheduleVideoUrl } = data;
const { shareUrl } = this.state;
const { shareUrl ,imgData,showImg,time} = this.state;
// 判断是否是默认图, 默认图不需要在URL后面增加字符串
const isDefaultCover = coverUrl === DEFAULT_COVER;
const coverImgSrc = type === 'videoClass'
// 如果是默认图, 显示视频的第一帧, 否则显示上传的视频封面
? ((!coverUrl || isDefaultCover)
? `${scheduleVideoUrl}?x-oss-process=video/snapshot,t_0,m_fast&anystring=anystring`
: `${coverUrl}`)
: `${coverUrl}`
let coverImgSrc = coverUrl;
if(type === 'videoClass'){
if(!coverUrl || isDefaultCover){
coverImgSrc = `${scheduleVideoUrl}?x-oss-process=video/snapshot,t_0,m_fast&anystring=anystring`
}
}else{
data.courseMediaVOS.map((item,index)=>{
if( item.contentType === "COVER"){
coverImgSrc = item.mediaUrl;
}
})
}
return (
......@@ -107,7 +161,8 @@ class ShareLiveModal extends React.Component {
className="share-live-modal"
onCancel={this.props.close}
>
<div className="left" id="poster">
<div className="left">
<div id="poster">
<div className="store-name">
<span className="text">{storeName}</span>
</div>
......@@ -117,13 +172,16 @@ class ShareLiveModal extends React.Component {
type === "liveClass" &&
<div class="live-couse-name">{courseName}</div>
}
<img
src={coverImgSrc}
{
showImg ? <img
crossOrigin='*'
src={coverImgSrc+`?=${time}`}
className="course-cover"
/>: <img
src={coverImgSrc+`?=${time}`}
className="course-cover"
/>
}
<div className="qrcode-wrap">
<div className="qrcode-wrap__left">
<div className="text">长按识别二维码进入观看</div>
......@@ -132,7 +190,7 @@ class ShareLiveModal extends React.Component {
<div className="qrcode-wrap__right" id="qrcodeWrap">
</div>
</div>
</div>
</div>
<div className="right">
<div className="share-poster right__item">
......@@ -142,8 +200,6 @@ class ShareLiveModal extends React.Component {
}
{ type === "videoClass" &&
<div className="sub-title">用户可通过微信识别二维码,报名观看视频</div>
}
<div className="content" onClick={this.handleDownloadPoster}>下载海报</div>
......@@ -162,7 +218,6 @@ class ShareLiveModal extends React.Component {
<Button type="primary" onClick={this.handleCopy}>复制</Button>
</div>
</div>
</div>
</Modal>
)
......
.share-live-modal {
.ant-modal-body {
display: flex;
#poster{
background: #FFF;
margin:0;
padding: 20px;
}
.left {
width: 303px;
padding: 20px;
margin: 0 32px 0 16px;
box-shadow:0px 2px 10px 0px rgba(0,0,0,0.05);
border-radius: 12px;
.course-name-title {
font-size: 14px;
color: #333;
......
......@@ -2,7 +2,7 @@
* @Author: 吴文洁
* @Date: 2020-08-05 10:07:47
* @LastEditors: zhangleyuan
* @LastEditTime: 2021-01-18 18:18:49
* @LastEditTime: 2021-01-25 13:46:13
* @Description: 视频课新增/编辑页
* @Copyright: 杭州杰竞科技有限公司 版权所有
*/
......@@ -540,6 +540,7 @@ class AddVideoCourse extends React.Component {
</div>
{/* 选择备课文件弹窗 */}
{ showSelectFileModal &&
<SelectPrepareFileModal
operateType="select"
selectTypeList={['MP4']}
......@@ -557,7 +558,7 @@ class AddVideoCourse extends React.Component {
}}
onSelect={this.handleSelectVideo}
/>
}
<ImgCutModalNew
title="裁剪"
width={550}
......
.add-video-course-page {
.box{
margin-bottom:16px !important;
}
.ant-radio-group {
display: flex;
flex-direction: column;
......@@ -25,7 +27,11 @@
.form {
margin-top: 16px;
padding: 0 16px;
.label{
display:inline-block;
text-align:right;
width:85px;
}
.required {
position: relative;
......@@ -33,7 +39,7 @@
position: absolute;
content: '*';
color: red;
left: -10px;
left: 5px;
top: 6px;
}
......@@ -110,7 +116,7 @@
}
.sub-content {
margin-left: 70px;
margin-left: 85px;
margin-top: 4px;
.tips {
......
......@@ -187,17 +187,15 @@ class AddVideoIntro extends React.Component {
<div className="allow-tourist-join">
<span className="label">观看设置:</span>
<div className="content">
<Row>
<Col span={3}>
<div>
<Switch checked={whetherVisitorsJoin==="YES"? true:false} onChange={this.whetherVisitorsJoinChange}/>
</Col>
<Col span={21}>
</div>
<div>
<div className="desc">
<div>开启:允许未绑定手机号的用户进入直播间观看直播</div>
<div>关闭:仅限绑定了手机号的用户可以进入直播间观看直播</div>
</div>
</Col>
</Row>
</div>
</div>
</div>
<div className="store-show">
......@@ -217,7 +215,7 @@ class AddVideoIntro extends React.Component {
</div>
</div>
<div className="introduce">
<span className="label">视频课简介:</span>
<span className="label">视频课简介</span>
<div className="content">
<div className="intro-list">
{
......@@ -266,6 +264,7 @@ class AddVideoIntro extends React.Component {
</div>
</div>
{/* 选择暖场图文件弹窗 */}
{ showSelectFileModal &&
<SelectPrepareFileModal
operateType="select"
accept={selectType==="INTRO"?"image/jpeg,image/png,image/jpg":"video/mp4,image/jpeg,image/png,image/jpg"}
......@@ -277,7 +276,7 @@ class AddVideoIntro extends React.Component {
}}
onSelect={this.handleSelectVideo}
/>
}
</div>
)
}
......
.add-video__intro-info {
.playback {
margin-bottom: 10px;
.require {
......@@ -9,7 +8,11 @@
color: #999;
}
}
.label{
display:inline-block;
text-align:right;
width:85px;
}
.playback,
.introduce {
display: flex;
......@@ -17,10 +20,14 @@
}
.allow-tourist-join{
display:flex;
.content{
display:flex;
}
.desc{
margin-left:16px;
font-size:14px;
color:#999;
display:inline-block;
}
}
.store-show{
......@@ -31,6 +38,7 @@
margin-left:16px;
font-size:14px;
color:#999;
display:inline-block;
}
}
.radio {
......
......@@ -37,6 +37,7 @@
line-height: 20px;
.fold-icon {
font-size: 12px;
margin-left:4px;
}
}
}
......
......@@ -2,7 +2,7 @@
* @Author: 吴文洁
* @Date: 2020-08-05 10:12:45
* @LastEditors: zhangleyuan
* @LastEditTime: 2021-01-18 21:03:40
* @LastEditTime: 2021-01-25 20:12:47
* @Description: 视频课-列表模块
* @Copyright: 杭州杰竞科技有限公司 版权所有
*/
......@@ -23,7 +23,7 @@ import User from '@/common/js/user'
import './VideoCourseList.less';
const ENV = process.env.DEPLOY_ENV || 'prod';
const ENV = process.env.DEPLOY_ENV || 'rc';
class VideoCourseList extends React.Component {
......@@ -68,7 +68,8 @@ class VideoCourseList extends React.Component {
title: '视频课',
key: 'scheduleName',
dataIndex: 'scheduleName',
width:'15%',
width:321,
fixed: 'left',
render: (val, record) => {
const { coverUrl, scheduleVideoUrl } = record;
return (
......@@ -90,7 +91,7 @@ class VideoCourseList extends React.Component {
title: '课程分类',
key: 'categoryName',
dataIndex: 'categoryName',
width: '10%',
width: '20%',
render: (val, record) => {
return (
<div className="record__item">
......@@ -103,7 +104,7 @@ class VideoCourseList extends React.Component {
title: '创建人',
key: 'createName',
dataIndex: 'createName',
width: '8%',
width: '10%',
render: (val) => {
return (
<div>
......@@ -123,7 +124,7 @@ class VideoCourseList extends React.Component {
{
title: <span>
<span>店铺展示</span>
<Tooltip title={<div>开启后,用户可在店铺内查看到此课程。若课程“未成功开课”,则系统会自动“关闭”店铺展示。<br/>关闭后,店铺内不再展示此课程,但用户仍可通过分享的海报/链接查看此课程。</div>}><i className="icon iconfont" style={{ marginLeft: '5px',cursor:'pointer',color:'#bfbfbf'}}>&#xe61d;</i></Tooltip>
<Tooltip title={<div>开启后,用户可在店铺内查看到此课程。若课程“未成功开课”,则系统会自动“关闭”店铺展示。<br/>关闭后,店铺内不再展示此课程,但用户仍可通过分享的海报/链接查看此课程。</div>}><i className="icon iconfont" style={{ marginLeft: '5px',cursor:'pointer',color:'#bfbfbf',fontSize:'14px'}}>&#xe61d;</i></Tooltip>
</span>,
width: '12%',
dataIndex: "courseware",
......@@ -168,7 +169,8 @@ class VideoCourseList extends React.Component {
title: '操作',
key: 'operate',
dataIndex: 'operate',
width: "20%",
width: 256,
fixed: 'right',
render: (val, record) => {
return (
<div className="operate">
......@@ -325,6 +327,8 @@ class VideoCourseList extends React.Component {
columns={this.parseColumns()}
onChange={this.handleChangeTable}
pagination={false}
scroll={{ x: 1500}}
bordered
/>
<div className="box-footer">
......
.video-course-opt {
margin-top: 16px;
.link {
color: #FF8534;
}
......
......@@ -119,7 +119,7 @@ class WatchDataModal extends React.Component {
}
render() {
const { visible,size,dataSource,totalCount,query,current } = this.state;
const { visible,size,dataSource,totalCount,query} = this.state;
return (
<Modal
title="视频课观看数据"
......@@ -144,7 +144,7 @@ class WatchDataModal extends React.Component {
{dataSource.length >0 &&
<div className="box-footer">
<PageControl
current={current - 1}
current={query.current - 1}
pageSize={size}
total={totalCount}
toPage={(page) => {
......
......@@ -122,7 +122,7 @@ function Login(props) {
<div className="login-box">
<div className="login">
<div className="r">
<Tabs defaultActiveKey="1" >
<Tabs defaultActiveKey="1">
<TabPane tab="企业微信登录" key="1">
<WechatLogin></WechatLogin>
</TabPane>
......
@import url('../../core/variables.less');
@import url("../../core/variables.less");
.login-page {
position: static;
font-family: "微软雅黑";
padding: 0;
min-width: 1200px;
background: #21242E;
height:100%;
background: #21242e;
height: 100%;
.login-main {
min-width: 1200px;
}
.left-banner {
position: fixed;
min-width:315px;
text-align:center;
min-width: 315px;
text-align: center;
top: 50%;
left: 30%;
-webkit-transform: translate(-50%, -50%);
-moz-transform: translate(-50%, -50%);
-ms-transform: translate(-50%, -50%);
-o-transform: translate(-50%, -50%);
transform:translate(-50%, -50%);
.name{
transform: translate(-50%, -50%);
.name {
font-size: 30px;
font-weight: 500;
color: #FFFFFF;
color: #ffffff;
line-height: 42px;
margin-top:11px;
margin-top: 11px;
}
.desc{
.desc {
font-size: 14px;
font-weight: 400;
color: #FFFFFF;
color: #ffffff;
line-height: 20px;
margin-top:10px;
margin-top: 10px;
}
}
.login-box {
......@@ -41,10 +41,10 @@
position: fixed;
top: 50%;
left: 70%;
-webkit-transform:translate(-50%, -50%);
-webkit-transform: translate(-50%, -50%);
-moz-transform: translate(-50%, -50%);
-ms-transform: translate(-50%, -50%);
-o-transform:translate(-50%, -50%);
-o-transform: translate(-50%, -50%);
transform: translate(-50%, -50%);
.go-to-site {
......@@ -55,7 +55,7 @@
left: 50%;
margin-left: -50px;
a {
color: #FFF;
color: #fff;
text-decoration: none;
}
span.icon {
......@@ -78,43 +78,49 @@
overflow: hidden;
background-color: #ffffff;
border-radius: 4px; //box-shadow: 0 0 17px @sun;
.ant-tabs-tab-btn{
.ant-tabs-tab-btn {
color: #999999;
font-size: 16px;
font-family: PingFangSC-Medium, PingFang SC;
font-weight: 500;
line-height: 25px;
&.ant-tabs-tab-active{
&.ant-tabs-tab-active {
color: #333333;
}
}
.ant-tabs-tab-active{
.ant-tabs-tab-btn{
.ant-tabs-tab-active {
.ant-tabs-tab-btn {
color: #333333;
}
}
.ant-tabs-nav::before{
.ant-tabs-nav::before {
display: none;
}
.ant-tabs-tab{
.ant-tabs-tab {
width: 105px;
text-align: center;
}
.ant-tabs > .ant-tabs-nav .ant-tabs-nav-list{
.ant-tabs > .ant-tabs-nav .ant-tabs-nav-list {
margin: 0 auto;
}
.ant-tabs-top > .ant-tabs-nav .ant-tabs-ink-bar{
.ant-tabs-top > .ant-tabs-nav .ant-tabs-ink-bar {
width: 24px !important;
height: 4px;
margin-left: 30px;
margin-left: 47px;
}
.l {
width: 280px;
height: 100%;
background: @primary;
background: -webkit-gradient(linear, left top, left bottom, from(#ffaa1a), to(#ff8634)) !important;
background: -webkit-gradient(
linear,
left top,
left bottom,
from(#ffaa1a),
to(#ff8634)
) !important;
display: flex;
display: -webkit-flex;
-webkit-flex-direction: column;
......@@ -135,7 +141,7 @@
margin-bottom: 20px;
}
.desc {
opacity: .7;
opacity: 0.7;
margin-bottom: 20px;
}
.items {
......@@ -143,11 +149,11 @@
padding: 0;
li {
.icon {
-webkit-transform: scale(.8);
-moz-transform: scale(.8);
-ms-transform: scale(.8);
-o-transform: scale(.8);
transform: scale(.8);
-webkit-transform: scale(0.8);
-moz-transform: scale(0.8);
-ms-transform: scale(0.8);
-o-transform: scale(0.8);
transform: scale(0.8);
display: inline-block;
margin-right: 10px;
}
......@@ -181,7 +187,7 @@
display: none;
text-align: center;
position: absolute;
background: #FFF;
background: #fff;
z-index: 1;
left: 20px;
top: 28px;
......@@ -219,7 +225,7 @@
height: 150%;
top: 0;
margin-left: -100%;
background: #FFF;
background: #fff;
transform-origin: right top;
transform: rotate(-45deg);
}
......@@ -233,11 +239,10 @@
font-weight: 500;
color: #333333;
line-height: 25px;
text-align:center;
font-weight:bold;
margin-bottom:43px;
text-align: center;
font-weight: bold;
margin-bottom: 43px;
&::after {
}
.text1 {
color: black;
......@@ -259,12 +264,12 @@
font-weight: 500;
color: #333;
&::after {
content: '';
content: "";
display: block;
width: 24px;
height: 4px;
border-radius: 3px;
background: #FF8534;
background: #ff8534;
margin: 10px auto 0;
}
}
......@@ -274,16 +279,16 @@
}
}
#password-icon {
color: #BFBFBF;
color: #bfbfbf;
margin-right: 10px;
cursor: pointer;
&:hover {
color: #FC9C6B;
color: #fc9c6b;
}
-webkit-user-select: none;
-moz-user-select:none;
-o-user-select:none;
-ms-user-select:none;
-moz-user-select: none;
-o-user-select: none;
-ms-user-select: none;
}
input {
display: block;
......@@ -298,11 +303,11 @@
background-image: none;
border-radius: 4px;
box-sizing: border-box;
-webkit-transition: all .3s linear;
-moz-transition: all .3s linear;
-ms-transition: all .3s linear;
-o-transition: all .3s linear;
transition: all .3s linear;
-webkit-transition: all 0.3s linear;
-moz-transition: all 0.3s linear;
-ms-transition: all 0.3s linear;
-o-transition: all 0.3s linear;
transition: all 0.3s linear;
&:focus,
&:active,
&:hover {
......@@ -326,7 +331,7 @@
}
:-ms-input-placeholder {
/* Internet Explorer 10-11 */
color: #ccc
color: #ccc;
}
input:-webkit-autofill,
textarea:-webkit-autofill,
......@@ -356,17 +361,17 @@
position: absolute;
right: 10px;
top: -53px; // border: 1px solid @sun;
color: #333;
height: 25px;
width: 90px;
border-radius: 3px;
margin-top: 60px;
font-size: 14px; // font-weight: 300;
color:#5289FA;
&:hover {
color: #FFB714;
color: #ffb714;
}
&::before {
content: '';
content: "";
display: block;
height: 20px;
width: 1px;
......@@ -375,26 +380,26 @@
}
}
}
.error-message{
.error-message {
font-size: 14px;
font-weight: 400;
color: @warning;
line-height: 20px;
margin-top:9px;
}
.network-message{
text-align:center;
font-size:14px;
color:#000;
margin-top:11px;
.icon{
font-size:14px;
color:@primary;
margin-right:8px;
}
.refresh{
font-size:14px;
color:#5289FA;
margin-top: 9px;
}
.network-message {
text-align: center;
font-size: 14px;
color: #000;
margin-top: 11px;
.icon {
font-size: 14px;
color: @primary;
margin-right: 8px;
}
.refresh {
font-size: 14px;
color: #5289fa;
cursor: pointer;
}
}
......@@ -404,10 +409,11 @@
.phoneverify-voice {
// padding-left: 5px;
margin-top: 10px;
&::after {}
&::after {
}
}
.submit {
margin-top:11px;
margin-top: 11px;
button {
// font-weight: 300;
}
......@@ -423,7 +429,7 @@
margin-left: 7px;
}
&:hover {
color: #FC9C6B;
color: #fc9c6b;
}
}
.btn {
......@@ -436,21 +442,20 @@
font-weight: 400;
line-height: 40px;
border-radius: 4px;
-webkit-transition: all .3s;
-moz-transition: all .3s;
-ms-transition: all .3s;
-o-transition: all .3s;
transition: all .3s;
-webkit-transition: all 0.3s;
-moz-transition: all 0.3s;
-ms-transition: all 0.3s;
-o-transition: all 0.3s;
transition: all 0.3s;
cursor: pointer;
border: none;
&:hover {
opacity: 0.7;
background: linear-gradient(90deg, #FFB714 0%, #FFAD34 100%);
background: linear-gradient(90deg, #ffb714 0%, #ffad34 100%);
}
}
}
}
}
}
}
......@@ -76,12 +76,6 @@
&.left-container-vertical {
width: 62px;
.left {
// .ant-menu-item {
// text-align: center;
// }
// .icon {
// margin-right: 0px;
// }
.ant-menu-submenu-arrow{
display:none !important;
}
......@@ -96,50 +90,50 @@
background: @menu-bakg !important;
}
// .ant-menu-submenu-popup>.ant-menu {
// background: @menu-bakg !important;
// color: #9A9DA7;
// padding-left: 15px;
// width: 132px;
// min-width: auto;
.ant-menu-submenu-popup>.ant-menu {
background: @menu-bakg !important;
color: #9A9DA7;
padding-left: 15px;
width: 132px;
min-width: auto;
// li {
// padding-left: 22px;
// padding-right: 0;
// width: 117px;
// }
li {
padding-left: 22px;
padding-right: 0;
width: 117px;
}
// .listType {
// width: 5px;
// height: 5px;
// background: #9A9DA7;
// border-radius: 50%;
// top: 18px;
// left: 5px;
// position: absolute;
// }
.listType {
width: 5px;
height: 5px;
background: #9A9DA7;
border-radius: 50%;
top: 18px;
left: 10px;
position: absolute;
}
// .ant-menu-item-selected {
// background: @menu-bakg;
// color: #fff;
.ant-menu-item-selected {
background: @menu-bakg;
color: #fff;
// .listType {
// background: @active-color;
// }
// }
.listType {
background: @active-color;
}
}
// &:hover {
// .ant-menu-item-active {
// color: #fff;
// .listType {
// background: #fff;
// }
// }
&:hover {
.ant-menu-item-active {
color: #fff;
.listType {
background: #fff;
}
}
// .ant-menu-item-selected {
// .listType {
// background: @active-color;
// }
// }
// }
// }
.ant-menu-item-selected {
.listType {
background: @active-color;
}
}
}
}
......@@ -7,7 +7,6 @@
margin-top: 12px;
font-size: 14px;
font-family: PingFangSC-Regular, PingFang SC;
font-weight: 400;
color: #999999;
line-height: 20px;
}
......
......@@ -26,7 +26,7 @@ export default function WechatLogin(props: any) {
if (status === 0) {
Service.Hades("anon/hades/getTicket", {}).then((res: any) => {
setTicket(res.result)
const redirect = `${location.origin + location.pathname.replace('index.html', '') + 'h5.html'}?ticket=${res.result}&appTermEnum=XIAOMAI_CLOUD_CLASS_PC_WEB_ADMIN&env=${process.env.DEPLOY_ENV || 'dev'}`
const redirect = `${location.origin + location.pathname.replace('index.html', '') + 'h5.html'}?ticket=${res.result}&appTermEnum=XIAOMAI_CLOUD_CLASS_PC_WEB_ADMIN&env=${process.env.DEPLOY_ENV || 'rc'}`
// console.log(redirect)
// const url = `https://open.weixin.qq.com/connect/oauth2/authorize?appid=ww409ccf9c6e31f19e&redirect_uri=${encodeURIComponent(redirect)}&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect`
// console.log(url)
......
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