Conflicts:
	public/react/src/AppConfig.js
	public/react/src/modules/courses/graduation/tasks/GraduationTasksappraise.js
dev_forum
caishi 6 years ago
commit 7cd8b09b14

@ -3,10 +3,9 @@
"version": "0.1.0",
"private": true,
"dependencies": {
"@novnc/novnc": "^1.1.0",
"@flatten/array": "^1.1.7",
"@icedesign/base": "^0.2.5",
"@novnc/novnc": "^1.1.0",
"antd": "^3.6.5",
"array-flatten": "^2.1.2",
"autoprefixer": "7.1.6",
@ -41,6 +40,7 @@
"fs-extra": "3.0.1",
"html-webpack-plugin": "2.29.0",
"immutability-helper": "^2.6.6",
"install": "^0.12.2",
"jest": "20.0.4",
"js-file-download": "^0.4.7",
"lodash": "^4.17.5",

@ -296,7 +296,7 @@ label.infolabel{display: block;float: left;width: 56px;text-align: right;margin-
.subshaicontent a{float: left;margin-right: 20px;color: #999;cursor: pointer}
.search-new{width: 248px;height:32px;position: relative}
.search-new{width: 248px;height:32px;position: relative;margin-right: 35px;}
.search-span{display: block;position: absolute;width: 100%;height: 100%;left:0px;top:0px;background-color: #F4F4F4;border: 1px solid #EAEAEA; border-radius: 4px;z-index: 1}
.search-new-input{height: 32px;padding-left: 5px;width: 225px;border: none;box-sizing: border-box;background: none;outline: none;position: absolute;left:0px;top:1px;z-index: 2}
.search-new img,.search-new a,.search-new .searchicon{cursor: pointer;position: absolute;right:2px;top:2px;z-index: 2}

@ -4,6 +4,7 @@ import axios from 'axios';
import { requestProxy } from "./indexEduplus2RequestProxy";
import { broadcastChannelOnmessage } from 'educoder'
import { notification } from 'antd';
import './index.css'
broadcastChannelOnmessage('refreshPage', () => {
window.location.reload()
})
@ -30,8 +31,7 @@ export function initAxiosInterceptors(props) {
// proxy = "http://testbdweb.trustie.net"
// proxy = "http://testbdweb.educoder.net"
proxy = "https://testeduplus2.educoder.net"
proxy = "http://47.96.87.25:48080"
//proxy="http://47.96.87.25:48080"
// 在这里使用requestMap控制避免用户通过双击等操作发出重复的请求
// 如果需要支持重复的请求考虑config里面自定义一个allowRepeat参考来控制
@ -115,7 +115,9 @@ export function initAxiosInterceptors(props) {
notification.open({
message:"提示",
description: response.data.message || '服务器异常,请联系管理员。',
style: {
zIndex: 99999999
},
});
// notification['error']({
// message:"提示",

@ -1,7 +1,19 @@
/**
EDU_ADMIN = 1 # 超级管理员
EDU_BUSINESS = 2 # 运营人员
EDU_SHIXUN_MANAGER = 3 # 实训管理员
EDU_SHIXUN_MEMBER = 4 # 实训成员
EDU_CERTIFICATION_TEACHER = 5 # 平台认证的老师
EDU_GAME_MANAGER = 6 # TPI的创建者
EDU_TEACHER = 7 # 平台老师,但是未认证
EDU_NORMAL = 8 # 普通用户
*/
export const EDU_ADMIN = 1 // 超级管理员
export const EDU_SHIXUN_MANAGER = 2 // 实训管理员
export const EDU_SHIXUN_MEMBER = 3 // 实训成员
export const EDU_CERTIFICATION_TEACHER = 4 // 平台认证的老师
export const EDU_GAME_MANAGER = 5 // TPI的创建者
export const EDU_TEACHER = 6 // 平台老师,但是未认证
export const EDU_NORMAL = 7 // 普通用户
export const EDU_BUSINESS = 2 // # 运营人员
export const EDU_SHIXUN_MANAGER = 3 // 实训管理员
export const EDU_SHIXUN_MEMBER = 4 // 实训成员
export const EDU_CERTIFICATION_TEACHER = 5 // 平台认证的老师
export const EDU_GAME_MANAGER = 6 // TPI的创建者
export const EDU_TEACHER = 7 // 平台老师,但是未认证
export const EDU_NORMAL = 8 // 普通用户

@ -24,7 +24,7 @@ export { toStore as toStore, fromStore as fromStore } from './Store'
export { trace_collapse, trace, debug, info, warn, error, trace_c, debug_c, info_c, warn_c, error_c } from './LogUtil'
export { EDU_ADMIN, EDU_SHIXUN_MANAGER, EDU_SHIXUN_MEMBER, EDU_CERTIFICATION_TEACHER
export { EDU_ADMIN, EDU_BUSINESS, EDU_SHIXUN_MANAGER, EDU_SHIXUN_MEMBER, EDU_CERTIFICATION_TEACHER
, EDU_GAME_MANAGER, EDU_TEACHER, EDU_NORMAL} from './Const'
export { ModalHOC } from './components/ModalHOC'

File diff suppressed because it is too large Load Diff

@ -33,4 +33,7 @@ body {
}
.anticon anticon-paper-clip{
color: #29bd8b !important;
}
.notificationmystyle{
z-index: 99999999;
}

@ -180,6 +180,12 @@ class CommonWorkAppraise extends Component{
</div> */}
<div className={" "} style={{}}>
<style>{`
.workAppraise>div:last-child {
border-bottom: none !important;
}
`}</style>
<div className={"workAppraise"}>
{(description || (attachments && attachments.length != 0)) && <div className={"stud-class-set bor-bottom-greyE edu-back-white"} style={{ padding: '20px 20px 20px 20px'}}>
<div className={"color-grey-6 h20 mb20 font-16"}>
内容
@ -209,7 +215,7 @@ class CommonWorkAppraise extends Component{
{ update_time &&
<React.Fragment>
<span className={"color9B9B fr"}>更新</span>
<span className={"fr font-13 mr10 ml10"}>{update_user_name}</span>
<span className={"fr font-14 mr10 ml10"}>{update_user_name}</span>
<span className={"color9B9B fr"}>
{moment(update_time).format('YYYY-MM-DD HH:mm')==="Invalid date"?"":moment(update_time).format('YYYY-MM-DD HH:mm')}
</span>
@ -218,7 +224,7 @@ class CommonWorkAppraise extends Component{
{ commit_time &&
<React.Fragment>
<span className={"color9B9B fr mr30"}>提交</span>
<span className={"fr font-13 mr10 ml10"}>{author_name}</span>
<span className={"fr font-14 mr10 ml10"}>{author_name}</span>
<span className={" color9B9B fr"}>
{moment(commit_time).format('YYYY-MM-DD HH:mm')==="Invalid date"?"":moment(commit_time).format('YYYY-MM-DD HH:mm')}
</span>
@ -286,6 +292,7 @@ class CommonWorkAppraise extends Component{
</div>
</div>
}
</div>
{/* task_type={datalist&&datalist.task_type} */}

@ -8,7 +8,6 @@ import { WordsBtn } from 'educoder'
import AccessoryModal2 from '../coursesPublic/AccessoryModal2'
import AccessoryModal from '../coursesPublic/AccessoryModal'
import axios from 'axios'
import ConnectProject from './ConnectProject'
class CommonWorkItem extends Component{
constructor(props){
super(props);
@ -98,6 +97,13 @@ class CommonWorkItem extends Component{
setupdate = () => {
}
toCreateProject = () => {
if (window.location.port == 3007) {
window.location.href = '/testbdweb.educoder.net/projects/new'
} else {
window.location.href = '/projects/new'
}
}
render(){
let { mainList,workType }=this.props;
const { aModalVisible, fileList, revise_reason } = this.state
@ -128,7 +134,7 @@ class CommonWorkItem extends Component{
}
</style>
{
mainList && mainList.homeworks.length>0 && mainList.homeworks.map((item,index)=>{
mainList && mainList.homeworks && mainList.homeworks.length>0 && mainList.homeworks.map((item,index)=>{
let canNotLink = !isAdminOrStudent && item.private_icon == true
return(
<div className="mt20 edu-back-white padding02010" key={index} >
@ -196,12 +202,22 @@ class CommonWorkItem extends Component{
<li className="fr">
{ //
item.work_status && item.work_status.indexOf('关联项目') != -1 &&
<ConnectProject className="fl" {...this.props} work={item}></ConnectProject>
<React.Fragment>
<WordsBtn style="blue" className={` font-16 fl`} onClick={() => this.props.toCreateProject(item)}>创建项目</WordsBtn>
<WordsBtn style="blue" className={` font-16 fl ml28`} onClick={() => this.props.openConnectionProject(item)}>关联项目</WordsBtn>
</React.Fragment>
}
{ //
item.work_status && item.work_status.indexOf('取消关联') != -1 &&
<WordsBtn style="blue" className={` font-16 fl`} onClick={() => this.props.cancelConnectionProject(item)}>取消关联</WordsBtn>
}
{ //
item.work_status && item.work_status.indexOf('提交作品') != -1 &&
<WordsBtn style="blue" className="fl font-16 ml28" onClick={() => this.props.toWorkPostPage(this.props.match.params, item.homework_id)}>提交作品</WordsBtn>
}
{
//
item.work_status && item.work_status.indexOf('补交作品') != -1 &&

@ -31,7 +31,9 @@ function renderScore(score, content) {
} else if (score >= 60) {
color = '#FF6800'
}
return <a href="javascript:;" style={{ color, minWidth: '30px', display: 'inline-block', textAlign: 'center' }}>{score == '--' ? '--': (content || score)}</a>
return <a href="javascript:;" style={{ color, minWidth: '30px', display: 'inline-block', textAlign: 'center' }}>
{score == null || score == undefined || score == '--' ? '--': (content || score)}
</a>
}
function getScoreTip(score, dom) {
return score == '--' ? '未评分' : score == '**' ? '未公开' : dom
@ -47,9 +49,14 @@ function buildColumns(that, student_works) {
}
let courseId= that.props.match.params.coursesId;
let workId= that.props.match.params.workId;
const { course_group_count } = that.state;
const { course_group_count, homework_status } = that.state;
const isAdmin = that.props.isAdmin()
const isAdminOrStudent = that.props.isAdminOrStudent()
const isStudent = that.props.isStudent()
const isNiPing = homework_status && homework_status.indexOf('匿评中') != -1
// https://www.trustie.net/issues/21450 分组作业作品列表 学时视角,匿评阶段的列表显示信息不正确
const niPingAndIsStudent = isStudent && isNiPing
let columns = [{
width: 60,
title: '序号',
@ -76,21 +83,24 @@ function buildColumns(that, student_works) {
{text}
</div>
),
}, {
width: 180,
title: '学号',
dataIndex: 'student_id',
key: 'student_id',
render: (text, record) => (
<span>
<a href="javascript:;" style={{color:'#9A9A9A'}}>{record.student_id}</a>
</span>
),
}]
if (!niPingAndIsStudent) {
columns.push({
width: 88,
title: '学号',
dataIndex: 'student_id',
key: 'student_id',
render: (text, record) => (
<span>
<a href="javascript:;" style={{color:'#9A9A9A'}}>{record.student_id}</a>
</span>
),
})
}
// TODO 只有有分班时才显示分班列
if (course_group_count != 0) {
if (course_group_count != 0 && !niPingAndIsStudent) {
columns.push( {
title: '分班',
key: 'group_name',
@ -103,7 +113,7 @@ function buildColumns(that, student_works) {
),
} )
}
if (gotWorkGroup) {
if (gotWorkGroup && !niPingAndIsStudent) {
columns.push({
width: 72,
title: '分组',
@ -144,7 +154,7 @@ function buildColumns(that, student_works) {
</span>
)},
}, {
width: 133,
width: 150,
title: '更新时间',
dataIndex: 'update_time',
key: 'update_time',
@ -154,45 +164,52 @@ function buildColumns(that, student_works) {
<a href="javascript:;" style={{color:'#989898'}}>{update_time ? moment(update_time).format('YYYY-MM-DD hh:mm') : '--'}</a>
</span>
),
}, {
width: 72,
title: '教师评分',
key: 'teacher_score',
dataIndex: 'teacher_score',
render: (teacher_score, record) => (
<Tooltip title={ getScoreTip(teacher_score, teacher_score) }>
}])
if (!niPingAndIsStudent) {
columns.push({
width: 72,
title: '教师评分',
key: 'teacher_score',
dataIndex: 'teacher_score',
render: (teacher_score, record) => (
<Tooltip title={ getScoreTip(teacher_score, teacher_score) }>
<span>
{ renderScore(teacher_score) }
</span>
</Tooltip>
),
})
columns.push({
width: 72,
title: '助教评分',
key: 'teaching_asistant_score',
dataIndex: 'teaching_asistant_score',
/**
* 2名助教进行了评分
平均分85.0
*
*/
render: (teaching_asistant_score, record) => (
<span>
{ renderScore(teacher_score) }
</span>
</Tooltip>
),
}, {
width: 72,
title: '助教评分',
key: 'teaching_asistant_score',
dataIndex: 'teaching_asistant_score',
/**
* 2名助教进行了评分
平均分85.0
*
*/
render: (teaching_asistant_score, record) => (
<span>
{ <Tooltip placement="bottom" title={
getScoreTip(teaching_asistant_score,
<div>
<div>{record.ta_comment_count}名助教进行了评分</div>
<div>{that.state.ta_mode == 1 ? '平均分': '复审分'}{teaching_asistant_score}</div>
</div>) }
>
{renderScore(teaching_asistant_score) }
</Tooltip> }
</span>
),
}])
{ <Tooltip placement="bottom" title={
getScoreTip(teaching_asistant_score,
<div>
<div>{record.ta_comment_count}名助教进行了评分</div>
<div>{that.state.ta_mode == 1 ? '平均分': '复审分'}{teaching_asistant_score}</div>
</div>) }
>
{renderScore(teaching_asistant_score) }
</Tooltip> }
</span>
),
})
}
if (that.state.anonymous_comment) {
/**
@ -211,7 +228,7 @@ function buildColumns(that, student_works) {
<Tooltip title={
getScoreTip(student_score,
<div>
<div>{`${record.student_comment_count}名学生进行了匿评`}</div>
{record.student_comment_count && <div>{`${record.student_comment_count}名学生进行了匿评`}</div>}
<div>有效平均分{record.student_score}</div>
</div>
)
@ -235,43 +252,45 @@ function buildColumns(that, student_works) {
{ !!appeal_all_count &&
<Tooltip placement="bottom" title={`共有${appeal_all_count}条匿评申诉,${record.appeal_deal_count}条待处理`}>
<span style={{ minWidth: '30px', display: 'inline-block', textAlign: 'center' }}>
{`${appeal_all_count}/${record.appeal_deal_count}`}
{`${record.appeal_deal_count}/${appeal_all_count}`}
</span>
</Tooltip> }
{ !appeal_all_count && '-/-'}
</span>
),
})
}
columns.push({
width: 72,
title: '最终成绩',
key: 'work_score',
dataIndex: 'work_score',
render: (work_score, record) => {
return (
<span>
<Tooltip title={
getScoreTip(work_score,
<div>
<div>{`${record.user_name}${record.user_login}`}</div>
{ record.ultimate_score ?
<div>最终调整成绩{record.work_score}</div> :
if (!niPingAndIsStudent) {
columns.push({
width: 72,
title: '最终成绩',
key: 'work_score',
dataIndex: 'work_score',
render: (work_score, record) => {
return (
<span>
<Tooltip title={
getScoreTip(work_score,
<div>
{ record.final_score && <div>作业评分{record.final_score}</div> }
{ record.late_penalty >= 0 && <div>迟交扣分{record.late_penalty}</div>}
{ record.absence_penalty >= 0 && <div>缺评扣分{record.absence_penalty}</div>}
{ record.appeal_penalty >= 0 && <div>违规匿评扣分{record.appeal_penalty}</div>}
<div>最终成绩{record.work_score}</div>
</div> }
</div>)
}>
{ renderScore(work_score) }
</Tooltip>
</span>
)
},
})
<div>{`${record.user_name}${record.user_login}`}</div>
{ record.ultimate_score ?
<div>最终调整成绩{record.work_score}</div> :
<div>
{ record.final_score && <div>作业评分{record.final_score}</div> }
{ record.late_penalty >= 0 && <div>迟交扣分{record.late_penalty}</div>}
{ record.absence_penalty >= 0 && <div>缺评扣分{record.absence_penalty}</div>}
{ record.appeal_penalty >= 0 && <div>违规匿评扣分{record.appeal_penalty}</div>}
<div>最终成绩{record.work_score}</div>
</div> }
</div>)
}>
{ renderScore(work_score) }
</Tooltip>
</span>
)
},
})
}
if (isAdminOrStudent || that.props.work_public == true) {
columns.push({
width: 92,

@ -173,7 +173,7 @@ class CommonWorkPost extends Component{
}
if(isGroup){
if(userids!=undefined){
if(userids.length<memberNumMin){
if(userids.length + 1<memberNumMin){
this.setState({
minvalue: memberNumMin,
setvalue:"小于",
@ -181,7 +181,7 @@ class CommonWorkPost extends Component{
})
return
}else if(userids.length>memberNumMax){
}else if(userids.length + 1>memberNumMax){
this.setState({
minvalue: memberNumMax,
setvalue:"大于",

@ -101,14 +101,13 @@ class CommonWorkQuestion extends Component{
{isGroup && <div className="df mt10">
<div style={{flex: '0 0 160px'}}>
<div>分组要求</div>
<div>分组人数 {group_info.min_num} - {group_info.max_num} </div>
<div>{group_info.base_on_project ? '基于项目实施' : '不基于项目实施'}</div>
<div>分组要求 {group_info.min_num} ~ {group_info.max_num}</div>
<div>{group_info.base_on_project ? '基于项目实施' : '不基于项目'}</div>
</div>
<div style={{color: '#9B9B9B'}}>
<div>提交作品时需要关联同组成员组内成员作品共享</div>
<div>{group_info.base_on_project ? '基于项目,则项目管理员角色的成员可以提交作品' : '非基于项目,则任意小组成员可以提交作品'}</div>
<div>各小组必须在educoder平台创建项目</div>
<div>学生提交作品时需要关联同组成员组内成员作品共享</div>
<div>{group_info.base_on_project ? '学生必须在本平台创建项目,项目管理员可以提交作品' : '无需再平台创建项目,任意小组成员均可以提交作品'}</div>
{/* <div>各小组必须在educoder平台创建项目</div> */}
</div>
</div>}

@ -259,15 +259,20 @@ class CommonWorkSetting extends Component{
unified_setting: checked
})
}
// 启用匿评
anonymous_comment_change = (e) => {
const checked = e.target.checked;
const { end_time } = this.state;
const currentEndTime = this._getCurrentEndTime()
let evaluation_start, evaluation_end, evaluation_num = 0, absence_penalty = 0;
if (checked) {
if (end_time) {
evaluation_start = moment(end_time).add(7, 'days').format(dateFormat)
evaluation_end = moment(end_time).add(21, 'days').format(dateFormat)
if (currentEndTime) {
evaluation_start = moment(currentEndTime).add(7, 'days').format(dateFormat)
evaluation_end = moment(currentEndTime).add(21, 'days').format(dateFormat)
}
if (!this.state.evaluation_num) {
evaluation_num = 3
}
if (!this.state.absence_penalty) {
absence_penalty = 2
}
} else {
@ -310,6 +315,7 @@ class CommonWorkSetting extends Component{
absence_penalty:value
})
}
// 启用匿评申诉
anonymous_appeal_change = (e) => {
const { evaluation_end } = this.state;
const anonymous_appeal = e.target.checked
@ -389,9 +395,10 @@ class CommonWorkSetting extends Component{
this.setState({
late_penalty: 5
})
if (this.state.end_time && !this.state.late_time) {
const currentEndTime = this._getCurrentEndTime();
if (currentEndTime && !this.state.late_time) {
this.setState({
late_time: moment(handleDateString(this.state.end_time)).add(1, 'months').format(dateFormat)
late_time: moment(handleDateString(currentEndTime)).add(1, 'months').format(dateFormat)
})
}
}
@ -469,6 +476,20 @@ class CommonWorkSetting extends Component{
// }
}
_getCurrentEndTime = () => {
const { unified_setting, end_time, rules } = this.state;
if (unified_setting) {
return end_time
} else {
let max_un_unified_setting_end_time = null;
rules.map(item => {
if (!max_un_unified_setting_end_time || moment(item.end_time) > moment(max_un_unified_setting_end_time)) {
max_un_unified_setting_end_time = item.end_time;
}
})
return max_un_unified_setting_end_time
}
}
saveWorkSetting=()=>{
let workId=this.props.match.params.workId;
@ -524,8 +545,8 @@ class CommonWorkSetting extends Component{
let temp_publish_time
let temp_end_time
if (unified_setting) {
let temp_publish_time = publish_time
let temp_end_time = end_time
temp_publish_time = publish_time
temp_end_time = end_time
if (!temp_publish_time) {
const publish_time_moment = getNextHalfHourOfMoment(moment());
temp_publish_time = publish_time_moment.format(dateFormat);
@ -1077,6 +1098,7 @@ class CommonWorkSetting extends Component{
course_group={adaptered_group_settings}
rulesCheckInfo={(info)=>this.rulesCheckInfo(info)}
flagPageEdit={true}
moduleName="作业"
></PollDetailTabForthRules>
}
@ -1254,7 +1276,7 @@ class CommonWorkSetting extends Component{
margin-left: 18px;
}
`}</style>
<PopInstruction width={448} id={1}>
<PopInstruction width={458} id={1}>
<p className="font-14 edu-txt-left pop-instruction">
允许学生对自己作品的匿评评分进行申诉由教师和助教处理申诉<br/>
@ -1297,7 +1319,7 @@ class CommonWorkSetting extends Component{
</span>
</Tooltip>
<span className={"font-14 color-grey-9 ml10"}></span>
<span className={"font-14 color-grey-9 ml10"}>学生提交匿评申诉的时间截点</span>
</div>
{<div className={" appeal_time_tip color-red ml60 mb6"}>{appeal_time_tip}</div>}
@ -1311,7 +1333,7 @@ class CommonWorkSetting extends Component{
/>
</span>
</Tooltip>
<span className={"font-14 color-grey-9 ml10"}></span>
<span className={"font-14 color-grey-9 ml10"}>学生违规匿评TA人作品时其成绩将被扣减的分值</span>
</div>
{this.state.appeal_penalty_tip && <div className={" appeal_penalty_tip color-red ml60"} style={{marginTop: '-6px'}}>{this.state.appeal_penalty_tip}</div>}
@ -1346,21 +1368,17 @@ class CommonWorkSetting extends Component{
<RadioGroup onChange={this.final_mode_change} value={final_mode}>
<Radio style={radioStyle} value={false} disabled={noAuth}>
多项评分配比<span className={"font-14 color-grey-9 ml10"}>选中则按照比例计算最终成绩</span>
<PopInstruction width={500} id={2}>
<PopInstruction width={512} id={2}>
<p className="font-14 edu-txt-left pop-instruction">
计算说明<br/>
优先顺序排前的非零评分 * 100% - <br/>
( 迟交扣分 + 缺评扣分 * 缺评数 + 违规匿评扣分 * 违规匿评数 )<br/>
有教师评分则教师评分100%否则教辅评分100%依次类推
{/* 教师评分 * 其百分比 + 助教评分 * 其百分比 + 学生匿评平均分 * 其百分比 - <br/>
( 迟交扣分 + 缺评扣分 * 缺评数 + 违规匿评扣分 * 违规匿评数 )<br/>
<br/>
教师评分 * 其百分比 + 助教评分 * 其百分比 + 学生匿评平均分 * 其百分比 - ( <br/>
迟交扣分 + 缺评扣分 * 缺评数 + 违规匿评扣分 * 违规匿评数 )<br/><br/>
注意<br/>
非零百分比的评分选项在没有评分记录的情况下其百分比平摊到另外的评<br/>
分选项上例如教师评分40% + 助教评分35% + 学生匿评25%学生A没<br/>
有得到教师评分则最终成绩将按照助教评分55% + 学生匿评45%进行计算 */}
非零百分比的评分选项若评分记录为空则其百分比将自动平摊到其它非零<br/>
评分选项上<br/>
教师评分40% + 助教评分35% + 学生匿评25%学生A没有教师评分记<br/>
则其最终成绩按照助教评分55% + 学生匿评45%进行计算
</p>
</PopInstruction>
@ -1392,12 +1410,30 @@ class CommonWorkSetting extends Component{
{<div className={"color-red ml30 final_mode_false_tip"}>{final_mode_false_tip}</div>}
<Radio style={radioStyle} value={true} disabled={noAuth}>
单项评分优先<span className={"font-14 color-grey-9 ml10"}>选中则按照优先顺序计算最终成绩</span>
<PopInstruction width={500} id={3}>
<p className="font-14 edu-txt-left pop-instruction">
计算说明<br/>
优先顺序排前的非零评分 * 100% - <br/>
( 迟交扣分 + 缺评扣分 * 缺评数 + 违规匿评扣分 * 违规匿评数 )<br/>
有教师评分则教师评分100%否则教辅评分100%依次类推
{/* 教师评分 * 其百分比 + 助教评分 * 其百分比 + 学生匿评平均分 * 其百分比 - <br/>
( 迟交扣分 + 缺评扣分 * 缺评数 + 违规匿评扣分 * 违规匿评数 )<br/>
<br/>
注意<br/>
非零百分比的评分选项在没有评分记录的情况下其百分比平摊到另外的评<br/>
分选项上例如教师评分40% + 助教评分35% + 学生匿评25%学生A没<br/>
有得到教师评分则最终成绩将按照助教评分55% + 学生匿评45%进行计算 */}
</p>
</PopInstruction>
</Radio>
</RadioGroup>
<div className={"font-16"} style={{ marginLeft: '25px' }}>
<span>教师评分 教辅评分 学生匿评评分</span>
<span className={"font-14 color-grey-9 ml10"}>有教师评分则教师评分100%否则教辅评分100%依次类推 </span>
{/* <span className={"font-14 color-grey-9 ml10"}>有教师评分则教师评分100%否则教辅评分100%,依次类推 </span> */}
</div>
</div>

@ -5,6 +5,7 @@ import '../css/members.css'
import { WordsBtn } from 'educoder'
import axios from 'axios'
import InfiniteScroll from 'react-infinite-scroller';
import NoneData from "../coursesPublic/NoneData"
const Search =Input.Search;
const LIMIT = 15
@ -36,13 +37,14 @@ class ConnectProject extends Component{
this.connectProject(radioValue)
}
connectProject = (project_id) => {
let workId=this.props.work.homework_id;
let workId=this.work.homework_id;
const url = `/homework_commons/${workId}/student_works/relate_project.json`
axios.post(url, {
project_id: project_id
}).then((result)=>{
if(result.data.status==0){
this.closeConnectionProject()
this.props.connectSuccess()
this.props.showNotification('关联成功')
}
}).catch((error)=>{
@ -75,6 +77,9 @@ class ConnectProject extends Component{
loading: false,
hasMore: result.data.projects.length != 0
})
if (page == 1) {
this.setState({ haveProjects: result.data.projects.length > 0 })
}
}
}).catch((error)=>{
console.log(error);
@ -84,11 +89,12 @@ class ConnectProject extends Component{
if (window.location.port == 3007) {
window.location.href = '/testbdweb.educoder.net/projects/new'
} else {
window.location.href = '/educoder.net/projects/new'
window.location.href = '/projects/new'
}
}
//关联项目
openConnectionProject=()=>{
openConnectionProject=(work)=>{
this.work = work;
this.fetchData()
this.setState({
project_flag:true
@ -104,10 +110,9 @@ class ConnectProject extends Component{
}
render(){
let {project_flag, projects, loading, hasMore }=this.state;
let {project_flag, projects, loading, hasMore, haveProjects }=this.state;
return(
<React.Fragment>
<WordsBtn style="blue" className={` font-16 ${this.props.className || ''}`} onClick={this.openConnectionProject}>关联项目</WordsBtn>
<Modal
visible={project_flag}
title="关联项目"
@ -118,16 +123,33 @@ class ConnectProject extends Component{
footer={null}
destroyOnClose={true}
>
<div className="newupload_conbox clearfix">
<style>{`
.connectProject .ant-radio {
float: left;
line-height: 18px;
}
.connectProject .ant-radio-wrapper .name {
max-width: 480px;
display: inline-block;
overflow: hidden;
text-overflow:ellipsis;
white-space: nowrap;
}
.connectProject .ant-radio-wrapper>span:last-child {
line-height: 18px;
}
`}</style>
<div className="newupload_conbox clearfix connectProject">
{
projects && !!projects.length &&
(projects && !!projects.length || this.state.keyword) &&
<div>
<Search placeholder="请输入项目名称进行搜索" className="with100"
value={this.state.keyword} onInput={(e) => {this.setState({keyword: e.target.value})}}
onSearch={this.onSearchValue}
></Search>
<Radio.Group onChange={this.onChange} value={this.state.radioValue} className={"with100"}>
<div className="mt15" style={{"maxHeight":"161px","overflow-y":"auto"}}>
<div className="mt15" style={{"maxHeight":"228px","overflow-y":"auto", "overflow-x": 'hidden'}}>
<InfiniteScroll
threshold={20}
initialLoad={false}
@ -137,7 +159,9 @@ class ConnectProject extends Component{
useWindow={false}
>
{ projects.map(item => {
return <p className="mb7" key={item.id}><Radio value={item.id}>{item.name}</Radio></p>
return <p className="mb7" key={item.id}><Radio value={item.id}>
<span title={item.name.length > 12 ? item.name : ''} className="name">{item.name}</span>
</Radio></p>
})}
</InfiniteScroll>
</div>
@ -145,7 +169,11 @@ class ConnectProject extends Component{
</div>
}
{
(!projects || projects.length == 0) &&
haveProjects && projects.length == 0 &&
<NoneData></NoneData>
}
{
(!haveProjects) &&
<div className="edu-txt-center">
您当前尚未管理任何项目请先<WordsBtn style="blue" className="" onClick={this.toCreateProject}>创建项目</WordsBtn>
</div>

@ -75,12 +75,6 @@ class CoursesWorkIndex extends Component{
(props) => (<CommonWorkDetailIndex {...this.props} {...props} {...this.state} />)
}
></Route>
<Route exact path="/courses/:coursesId/common_homeworks/new"
render={
(props) => (<NewWork {...this.props} {...props} {...this.state} />)
}
></Route>
{/* 作业问答 */}
<Route exact path="/courses/:coursesId/common_homeworks/:workId/question"
render={
@ -120,7 +114,7 @@ class CoursesWorkIndex extends Component{
(props) => (<NewWork {...this.props} {...props} {...this.state} />)
}
></Route>
<Route exact path="/courses/:coursesId/common_homeworks/new"
<Route exact path="/courses/:coursesId/common_homeworks/:categroy_id/new"
render={
(props) => (<NewWork {...this.props} {...props} {...this.state} />)
}

@ -117,7 +117,7 @@ class CoursesWorkIndex extends Component{
(props) => (<NewWork {...this.props} {...props} {...this.state} />)
}
></Route>
<Route exact path="/courses/:coursesId/group_homeworks/new"
<Route exact path="/courses/:coursesId/group_homeworks/:categroy_id/new"
render={
(props) => (<NewWork {...this.props} {...props} {...this.state} />)
}

@ -52,9 +52,9 @@ class PublishRightnow extends Component{
modalname: isPublish ? "立即发布" : "立即截止",
modaltype:1,
visible:true,
Topval: isPublish ? "本操作只对“未发布”的对象生效" : "本操作只对“提交中”的对象生效",
Botvalleft: isPublish ? "暂不发布" : "暂不截止",
Botval: isPublish ? "则通过后续手动设置,定时发布" : "则将根据已设置的截止时间,定时截止",
Topval: isPublish ? "学生将立即收到作业" : "学生将不能再提交作品",
// Botvalleft: isPublish ? "暂不发布" : "暂不截止",
Botval: this.props.fromListPage ? (isPublish ? "本操作只对“未发布”的分班有效" : "本操作只对“提交中”的分班有效") : '',
starttime: isPublish ? `发布时间:${startMoment.format(dateFormat)}` : '',
starttimes:isPublish ? `${startMoment.format(dateFormat)}` : '',
endtime: isPublish ? `截止时间:${startMoment.add(1, 'months').add(1, 'hours').minutes(0).format(dateFormat)}` : '',

@ -67,9 +67,9 @@ export function RouteHOC(options = {}) {
this.props.history.push(`/courses/${_courseId}/${secondName}/${_workId}/${_studentWorkId}/appraise`)
}
}
toNewPage = (courseId, workId) => {
toNewPage = (courseId) => {
const secondName = this.getModuleName()
this.props.history.push(`/courses/${courseId.coursesId}/${secondName}/new`)
this.props.history.push(`/courses/${courseId.coursesId}/${secondName}/${courseId.category_id}/new`)
}
toListPage = (_courseId, _workId) => {
const secondName = this.getModuleName()

@ -9,6 +9,7 @@ import '../css/busyWork.css'
import CoursesListType from '../coursesPublic/CoursesListType'
import CommonWorkItem from './CommonWorkItem'
import PublishRightnow from './PublishRightnow'
import ConnectProject from './ConnectProject'
import { WordsBtn } from 'educoder'
import Modals from '../../modals/Modals'
@ -53,7 +54,9 @@ class commonWork extends Component{
let {page,search,order}=this.state;
this.getList(page,search,order);
}
openConnectionProject = (work) => {
this.refs['connectProject'].openConnectionProject(work)
}
// 新建
createCommonWork=(type)=>{
@ -72,7 +75,6 @@ class commonWork extends Component{
}
componentDidUpdate(prevProps, prevState) {
debugger;
if (prevProps.match.path != this.props.match.path) {
this.componentDidMount()
}
@ -195,6 +197,7 @@ class commonWork extends Component{
this.clearSelection()
let {search,order}=this.state;
this.getList(1,search,order);
this.props.updataleftNavfun()
}
console.log(response)
}).catch((error) => {
@ -276,6 +279,26 @@ class commonWork extends Component{
console.log(error)
})
}
connectSuccess = () => {
let {page,search,order}=this.state;
this.getList(page,search,order);
}
cancelConnectionProject = (work) => {
let workId=this.props.match.params.workId;
let courseId=this.props.match.params.coursesId;
const url = `/homework_commons/${work.homework_id}/student_works/cancel_relate_project.json`
axios.get(url).then((response)=> {
if (response.data.status == 0) {
let {page,search,order}=this.state;
this.getList(page,search,order);
this.props.showNotification('取消关联成功')
}
}).catch((error)=>{
console.log(error)
})
}
render(){
@ -338,6 +361,8 @@ class commonWork extends Component{
</div>
</div>
</div> */}
<ConnectProject ref="connectProject" {...this.props} connectSuccess={this.connectSuccess}></ConnectProject>
<Titlesearchsection
title={main_category_name}
@ -390,11 +415,11 @@ class commonWork extends Component{
</li>
<li className="li_line">
<PublishRightnow showActionButton={true} {...this.props} checkBoxValues={checkBoxValues}
isPublish={true} doWhenSuccess={this.doWhenSuccess}></PublishRightnow>
isPublish={true} doWhenSuccess={this.doWhenSuccess} fromListPage={true}></PublishRightnow>
</li>
<li className="li_line">
<PublishRightnow showActionButton={true} {...this.props} checkBoxValues={checkBoxValues}
isPublish={false} doWhenSuccess={this.doWhenSuccess}></PublishRightnow>
isPublish={false} doWhenSuccess={this.doWhenSuccess} fromListPage={true}></PublishRightnow>
</li>
{ !!course_public && <li className="li_line"><a href="javascript:void(0)" onClick={this.onSetPublic} className="color-grey-9">设为公开</a></li>}
@ -418,12 +443,15 @@ class commonWork extends Component{
<Spin size="large" spinning={this.state.isSpin}>
<Checkbox.Group style={{"width":"100%"}} onChange={this.onChangeSelect} value={checkBoxValues}>
<CommonWorkItem mainList={mainList} {...this.props} workType={workType} onItemClick={this.onItemClick}></CommonWorkItem>
<CommonWorkItem mainList={mainList} {...this.props} workType={workType} onItemClick={this.onItemClick}
openConnectionProject={this.openConnectionProject}
cancelConnectionProject={this.cancelConnectionProject}
></CommonWorkItem>
</Checkbox.Group>
</Spin>
{
mainList && mainList.homeworks.length==0 && <NoneData></NoneData>
mainList && mainList.homeworks && mainList.homeworks.length==0 && <NoneData></NoneData>
}
{

@ -28,6 +28,14 @@ export function CNotificationHOC(options = {}) {
notification.open(data);
}
bytesToSize = (bytes) => {
if (bytes === 0) return '0 B';
let k = 1024,
sizes = ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'],
i = Math.floor(Math.log(bytes) / Math.log(k));
return (bytes / Math.pow(k, i)). toFixed(2) + ' ' + sizes[i];
}
configNotification = (placement) => {
placement && notification.config({
placement: placement,
@ -127,6 +135,7 @@ export function CNotificationHOC(options = {}) {
</Modals>
<WrappedComponent {...this.props}
showNotification= { this.showNotification }
bytesToSize={this.bytesToSize}
getNowFormatDates={(value,type)=>this.getNowFormatDates(value,type)}
configNotification={ this.configNotification }
confirm={ this.confirm }

@ -46,9 +46,9 @@ class CCommentItem extends Component{
let { item, commentIndex }=this.props;
const url = `/student_works/${studentWorkId}/cancel_appeal.json`
axios.post(url, { data: {
axios.post(url, {
score_id: item.id
}})
})
.then((response) => {
if (response.data.status == 0) {
this.showNotification('撤销成功')
@ -262,9 +262,21 @@ class CCommentItem extends Component{
return(
<div className="ccomment comment_item_cont df clearfix" key={item.id}>
<div className="J_Comment_Face fl">
<a href={`${_origin}/users/${item.user_login}`} target="_blank">
{item.image_url == '--' ?
<a href={`javascript:void(0)`} >
<img alt="用户头像" height="50"
src={`${getUrl()}/images/edu_user/anony.png`} width="50"/>
</a>
: <a href={`${_origin}/users/${item.user_login}`} target="_blank">
<img alt="用户头像" height="50"
src={`${getUrl()}/images/${item.image_url}`}
width="50"/>
</a>}
{/* <a href={`${_origin}/users/${item.user_login}`} target="_blank">
<img alt="用户头像" height="50" src={getImageUrl(`images/${item.image_url}`)} width="50"/>
</a>
</a> */}
</div>
<div className="t_content fl">

@ -1,7 +1,7 @@
import React, {Component} from 'react';
import {Link} from "react-router-dom";
import axios from 'axios';
import {getImageUrl, trigger} from 'educoder';
import {getImageUrl, trigger, on, off} from 'educoder';
import { Tooltip, message,Popover} from 'antd';
import CoursesListType from '../coursesPublic/CoursesListType';
import Addcourses from '../coursesPublic/Addcourses';
@ -9,7 +9,6 @@ import '../css/Courses.css';
import Modals from "../../modals/Modals";
import AddStudentModal from '../members/modal/AddStudentModal'
import AddTeacherModal from '../members/modal/AddTeacherModal'
import Trialapplication from "../../login/Trialapplication";
// 点击按钮复制功能
// function jsCopy(){
@ -44,39 +43,33 @@ class CoursesBanner extends Component {
modalsBottomval: "",
antIcon:false,
coursedata:undefined,
user_phone_binded:false,
isRenders:false,
showTrial:false,
}
console.log("CoursesBanner");
console.log("48");
console.log(props);
}
componentDidMount() {
this.updatabanner()
this.setState({
user_phone_binded :this.props.user_phone_binded,
})
this.onloadupdatabanner()
on('updatabanner', this.updatabanner)
}
componentWillUnmount() {
off('updatabanner', this.updatabanner)
}
onloadupdatabanner=()=>{
this.updatabanner()
}
updatabanner=()=>{
let courseId = this.props.match.params.coursesId;
let url = "/courses/" + courseId + "/top_banner.json"
axios.get(url).then((result) => {
if( result!=undefined){
let data = result.data;
if(result.data.status === 407){
this.setState({
isRenders:true,
coursedata: data,
showTrial:false,
})
}else{
this.setState({
coursedata: data,
showTrial:true,
})
}
}else{
this.onloadupdatabanner()
}
})
}
@ -332,11 +325,10 @@ class CoursesBanner extends Component {
}
render() {
let { Addcoursestypes, coursedata, modalsType, modalsTopval, loadtype,modalsBottomval,antIcon,user_phone_binded} = this.state;
let { Addcoursestypes, coursedata, modalsType, modalsTopval, loadtype,modalsBottomval,antIcon} = this.state;
return (
<div>
<Trialapplication {...this.state} user_phone_binded={user_phone_binded} ></Trialapplication>
{
coursedata === undefined || coursedata.status===401? <div id="course_info_1309" className="courseHead" style={{height: '206px'}}></div>:<div id="course_info_1309" className="courseHead" style={{height: '206px'}}>
@ -370,7 +362,7 @@ class CoursesBanner extends Component {
{
coursedata===undefined || coursedata.status===401 || coursedata.status===407?"":
<Tooltip placement="bottom" title={coursedata&&coursedata.name.length<38?"":coursedata.name}>
<Tooltip placement="bottom" title={coursedata&&coursedata.name && coursedata.name.length<38?"":coursedata.name}>
<span className="font-24 fl bannername">{coursedata.name}</span>
</Tooltip>
@ -411,7 +403,9 @@ class CoursesBanner extends Component {
<div>
{coursedata.switch_to_student === true ?
<Tooltip placement="bottom" title={"切换至学生可进行提交作品、答题等操作"}>
<Tooltip placement="bottom" title={
<pre>由教师/助教身份切换至学生<br/>可进行提交作品答题等操作</pre>
}>
<a className="fr user_default_btn user_blue_btn mr20 font-18"
onClick={()=>this.switchidentity(1)}
> 切换为学生 </a>
@ -419,7 +413,9 @@ class CoursesBanner extends Component {
:""}
{coursedata.switch_to_teacher === true ?
<Tooltip placement="bottom" title={"由学生身份切换至教师"}>
<Tooltip placement="bottom" title={
<pre>由学生身份切换至教师<br/>拥有添加成员发布作业等管理权限</pre>
}>
<a className="fr user_default_btn user_blue_btn mr20 font-18"
onClick={()=>this.switchidentity(2)}
> 切换为老师 </a>
@ -427,7 +423,9 @@ class CoursesBanner extends Component {
{coursedata.switch_to_assistant === true ?
<Tooltip placement="bottom" title={"由学生身份切换至助教"}>
<Tooltip placement="bottom" title={
<pre>由学生身份切换至助教<br/>拥有添加成员发布作业等管理权限</pre>
}>
<a className="fr user_default_btn user_blue_btn mr20 font-18"
onClick={()=>this.switchidentity(3)}
> 切换为助教 </a>
@ -466,7 +464,9 @@ class CoursesBanner extends Component {
<Link to={"/courses/"+this.props.match.params.coursesId+"/students"}>
<span className="color-grey-c fl font-16">学生</span>
<span
className={coursedata.credit===null?"color-white fl font-16":"color-white fl font-16 bannerurli"}>{coursedata.student_count}</span>
className={coursedata.credit===null?"color-white fl font-16 bannerurlis":"color-white fl font-16 bannerurli"}>
{coursedata.student_count}
</span>
</Link>
</li>
@ -530,10 +530,13 @@ class CoursesBanner extends Component {
{coursedata.code_halt === true? "已停用" : coursedata.invite_code}
{coursedata.code_halt === true ? "" :
<Tooltip placement="bottom" title={
<pre>
成员可以通过邀请码主动加入课堂<br/>
点击立刻复制邀请码
</pre>
coursedata.code_halt === true? <pre>
邀请码已停用<br/>
成员不能主动加入课堂
</pre>:<pre>
成员可以通过邀请码主动加入课堂<br/>
点击立刻复制邀请码
</pre>
}>
<i className="iconfont icon-fuzhi color-white font-14 ml10"
onClick={() => {

@ -119,14 +119,29 @@ class Addcourses extends Component{
}
submitasyn=(course_id)=>{
let{professor}=this.state;
if(professor===1){
this.setState({
loadtype:true,
modalsType:true,
modalsTopval:"申请已提交,请等待审核",
modalSave:(course_id)=>this.submitasyns(course_id),
Addcoursestype:false
})
this.props.hideAddcoursestype();
}else{
// let{course_id}=this.state;
this.setState({
Addcoursestype:false
})
this.props.hideAddcoursestype();
window.location.href ="/courses/"+course_id+"/students";
}
// let{course_id}=this.state;
this.setState({
Addcoursestype:false
})
this.props.hideAddcoursestype();
window.location.href ="/courses/"+course_id+"/students";
}
submitasyns=(course_id)=>{
window.location.href ="/courses/"+course_id+"/students";
}
submittojoinclass=()=>{
let {invite_code,professor,assistant_professor,student}=this.state;

@ -1,246 +1,246 @@
import React,{ Component } from "react";
import { Modal,Checkbox,Select,Input,Tooltip } from "antd";
import axios from'axios';
import Loading from '@icedesign/base/lib/loading';
import '@icedesign/base/lib/loading/style.js';
import Modals from '../../modals/Modals';
const Option = Select.Option;
const Search = Input.Search;
class PathModal extends Component{
constructor(props){
super(props);
this.state={
StudentList_value:"",
Searchvalue:undefined,
type:'all',
page:1,
patheditarry:undefined
}
}
hidecouseShixunModal=()=>{
this.props.hidecouseShixunModal()
}
//tag
changeTag=(types)=>{
let {Searchvalue}=this.state;
this.setState({
type:types,
page:1,
})
this.props.funshixunpathlist(Searchvalue,types,true,1)
}
//搜索
SenttotheValue=(e)=>{
this.setState({
Searchvalue:e.target.value
})
}
SenttotheSearch=(value)=>{
let{type}=this.state;
this.setState({
page:1,
})
this.props.funshixunpathlist(value,type,true,1)
}
//勾选实训
shixunhomeworkedit=(list)=>{
this.setState({
patheditarry:list
})
// this.props.funpatheditarry(newpatheditarry)
}
contentViewScrolledit=(e)=>{
//滑动到底判断
if(e.currentTarget.scrollHeight-e.currentTarget.scrollTop===e.currentTarget.clientHeight){
let {Searchvalue,type,page,shixunpathlist}=this.state;
let newpage=page+1
this.props.funshixunpathlist(Searchvalue,type,true,newpage)
this.setState({
page:newpage
})
}
}
//提交
savecouseShixunModal=()=>{
let {patheditarry}=this.state;
let {coursesId,Coursename,page,order,category_id,datas}=this.props;
let url="/courses/"+coursesId+"/homework_commons/create_subject_homework.json";
if(patheditarry===undefined){
this.setState({
patheditarrytype:true,
patheditarryvalue:"请先选择实训课程"
})
return
}else if(patheditarry.length===0){
this.setState({
patheditarrytype:true,
patheditarryvalue:"请先选择实训课程"
})
return
}
axios.post(url, {
// category_id: datas&&datas.category_name===undefined||datas&&datas.category_name===null?undefined:category_id,
subject_ids:patheditarry,
}
).then((response) => {
if(response.data.status===-1){
// this.setState({
// Modalstype:true,
// Modalstopval:response.data.message,
// ModalsBottomval:"",
// ModalSave:this.cancelmodel,
// Loadtype:true
// })
this.props.showNotification(response.data.message)
}else{
// this.homeworkstart
//调用立即发布弹窗
this.props.hidecouseShixunModal();
this.props.courseshomeworkstart(response.data.category_id,response.data.homework_ids)
// this.props.showNotification("选用成功")
// this.props.showNotification(response.data.message)
// this.props.homeworkupdatalists(Coursename,page,order);
}
// if(response.status===200) {
// this.props.courseshomeworkstart(response.data.category_id,response.data.homework_ids)
// }
}).catch((error) => {
console.log(error)
})
}
render(){
let {Searchvalue,type,Modalstype}=this.state;
let {visible,shixunmodallist,hometypepvisible,newshixunmodallist}=this.props;
return(
<div>
{/*提示*/}
{Modalstype&&Modalstype===true?<Modals
modalsType={this.state.Modalstype}
modalsTopval={this.state.Modalstopval}
modalCancel={this.state.ModalCancel}
modalSave={this.state.ModalSave}
modalsBottomval={this.state.ModalsBottomval}
loadtype={this.state.Loadtype}
/>:""}
<Modal
keyboard={false}
title="选择实训课程"
visible={visible}
closable={false}
footer={null}
width="840px"
destroyOnClose={true}
>
<Loading visible={false} shape="dot-circle" color='#4AC7FF'>
<div className="newupload_conbox">
{ shixunmodallist && shixunmodallist.tags.length===0?"":<div className="clearfix mb20 shixun_work_div newshixun_tab_div cdefault" style={{"marginRight":"4px"}} id="shixun_tab_div">
<li className="fl mr5 mt5"> <a onClick={()=>this.changeTag("all")} className={ type==="all" ? "active edu-filter-cir-grey font-12":"edu-filter-cir-grey font-12"}>全部</a></li>
{
shixunmodallist && shixunmodallist.tags.map((item,key)=>{
return(
<li className="fl mr5 mt5" key={key}>
<a onClick={()=>this.changeTag(item.tag_id)} className={ parseInt(type) === parseInt(item.tag_id) ? "active edu-filter-cir-grey font-12":"edu-filter-cir-grey font-12"}>{item.tag_name}</a>
</li>
)
})
}
</div>}
<div className="clearfix mb20" id="shixun_search_form_div" style={{height:"30px"}}>
<span className="fl color-grey-9 font-16 mt3">
<span></span>
<span className="color-orange-tip">{shixunmodallist === undefined ? "":shixunmodallist.subjects_count}</span>
<span>个实训</span>
</span>
<div className="fr search-new">
<Search
placeholder="输入实训名称的关键字搜索"
value={Searchvalue}
onInput={this.SenttotheValue}
onSearch={(value) => this.SenttotheSearch(value)}
style={{width: '100%'}}
/>
</div>
</div>
<ul className="clearfix greybackHead edu-txt-center">
<li className="fl with40 paddingleft22">实训路径名称</li>
<li className="fl with30 edu-txt-left">已发布实训数</li>
<li className="fl with10">使用人数</li>
<li className="fl with10"></li>
</ul>
<style>
{`
.pl40{
padding-left:40px
}
.newtaskhide{
margin-top:0px !important;
height: 40px;
}
`}
</style>
<div className="over210 pl20 pr20"
onScroll={this.contentViewScrolledit}
style={{"Height":"204px"}}>
<Loading visible={hometypepvisible} shape="dot-circle" className="newnext-loading" color='#4AC7FF'>
<Checkbox.Group style={{ width: '100%' }} onChange={this.shixunhomeworkedit}>
{
newshixunmodallist&&newshixunmodallist.map((item,key)=>{
return(
<div className="clearfix edu-txt-center lineh-40 bor-bottom-greyE" key={key}>
<li className="fl with40 newtaskhide">
<Checkbox
id={"shixun_input_"+item.subject_id} value={item.subject_id}
className="task-hide edu-txt-left newtaskhide"
style={{"width":"280px"}}
name="shixun_homework[]"
>
<label style={{"textAlign":"left","color":"#05101A"}} className="task-hide color-grey-name" title="frerere">{item.subject_name}</label>
</Checkbox>
</li>
<li className="fl with30 edu-txt-left task-hide pl40">{item.shixun_count}</li>
<li className="fl with10 paddingl10">{item.myshixun_count}</li>
<Tooltip title="查看详情">
<li className="fr with10"><a className="color-blue" href={"/paths/"+item.subject_id} target="_blank">详情</a></li>
</Tooltip>
</div>
)
})
}
</Checkbox.Group>
</Loading>
</div>
{ this.state.patheditarrytype===true?<span className={"color-red"}>{this.state.patheditarryvalue}</span>:""}
<div className="mt20 marginauto clearfix edu-txt-center">
<a className="pop_close task-btn mr30 margin-tp26" onClick={this.hidecouseShixunModal}>取消</a>
<a className="task-btn task-btn-orange margin-tp26" id="submit_send_shixun" onClick={this.savecouseShixunModal}>确定</a>
</div>
</div>
</Loading>
</Modal>
</div>
)
}
}
import React,{ Component } from "react";
import { Modal,Checkbox,Select,Input,Tooltip } from "antd";
import axios from'axios';
import Loading from '@icedesign/base/lib/loading';
import '@icedesign/base/lib/loading/style.js';
import Modals from '../../modals/Modals';
const Option = Select.Option;
const Search = Input.Search;
class PathModal extends Component{
constructor(props){
super(props);
this.state={
StudentList_value:"",
Searchvalue:undefined,
type:'all',
page:1,
patheditarry:undefined
}
}
hidecouseShixunModal=()=>{
this.props.hidecouseShixunModal()
}
//tag
changeTag=(types)=>{
let {Searchvalue}=this.state;
this.setState({
type:types,
page:1,
})
this.props.funshixunpathlist(Searchvalue,types,true,1)
}
//搜索
SenttotheValue=(e)=>{
this.setState({
Searchvalue:e.target.value
})
}
SenttotheSearch=(value)=>{
let{type}=this.state;
this.setState({
page:1,
})
this.props.funshixunpathlist(value,type,true,1)
}
//勾选实训
shixunhomeworkedit=(list)=>{
this.setState({
patheditarry:list
})
// this.props.funpatheditarry(newpatheditarry)
}
contentViewScrolledit=(e)=>{
//滑动到底判断
if(e.currentTarget.scrollHeight-e.currentTarget.scrollTop===e.currentTarget.clientHeight){
let {Searchvalue,type,page,shixunpathlist}=this.state;
let newpage=page+1
this.props.funshixunpathlist(Searchvalue,type,true,newpage)
this.setState({
page:newpage
})
}
}
//提交
savecouseShixunModal=()=>{
let {patheditarry}=this.state;
let {coursesId,Coursename,page,order,category_id,datas}=this.props;
let url="/courses/"+coursesId+"/homework_commons/create_subject_homework.json";
if(patheditarry===undefined){
this.setState({
patheditarrytype:true,
patheditarryvalue:"请先选择实训课程"
})
return
}else if(patheditarry.length===0){
this.setState({
patheditarrytype:true,
patheditarryvalue:"请先选择实训课程"
})
return
}
axios.post(url, {
// category_id: datas&&datas.category_name===undefined||datas&&datas.category_name===null?undefined:category_id,
subject_ids:patheditarry,
}
).then((response) => {
if(response.data.status===-1){
// this.setState({
// Modalstype:true,
// Modalstopval:response.data.message,
// ModalsBottomval:"",
// ModalSave:this.cancelmodel,
// Loadtype:true
// })
this.props.showNotification(response.data.message)
}else{
// this.homeworkstart
//调用立即发布弹窗
this.props.hidecouseShixunModal();
this.props.courseshomeworkstart(response.data.category_id,response.data.homework_ids)
// this.props.showNotification("选用成功")
// this.props.showNotification(response.data.message)
// this.props.homeworkupdatalists(Coursename,page,order);
}
// if(response.status===200) {
// this.props.courseshomeworkstart(response.data.category_id,response.data.homework_ids)
// }
}).catch((error) => {
console.log(error)
})
}
render(){
let {Searchvalue,type,Modalstype}=this.state;
let {visible,shixunmodallist,hometypepvisible,newshixunmodallist}=this.props;
return(
<div>
{/*提示*/}
{Modalstype&&Modalstype===true?<Modals
modalsType={this.state.Modalstype}
modalsTopval={this.state.Modalstopval}
modalCancel={this.state.ModalCancel}
modalSave={this.state.ModalSave}
modalsBottomval={this.state.ModalsBottomval}
loadtype={this.state.Loadtype}
/>:""}
<Modal
keyboard={false}
title="选择实训课程"
visible={visible}
closable={false}
footer={null}
width="840px"
destroyOnClose={true}
>
<Loading visible={false} shape="dot-circle" color='#4AC7FF'>
<div className="newupload_conbox">
{ shixunmodallist && shixunmodallist.tags.length===0?"":<div className="clearfix mb20 shixun_work_div newshixun_tab_div cdefault" style={{"marginRight":"4px"}} id="shixun_tab_div">
<li className="fl mr5 mt5"> <a onClick={()=>this.changeTag("all")} className={ type==="all" ? "active edu-filter-cir-grey font-12":"edu-filter-cir-grey font-12"}>全部</a></li>
{
shixunmodallist && shixunmodallist.tags.map((item,key)=>{
return(
<li className="fl mr5 mt5" key={key}>
<a onClick={()=>this.changeTag(item.tag_id)} className={ parseInt(type) === parseInt(item.tag_id) ? "active edu-filter-cir-grey font-12":"edu-filter-cir-grey font-12"}>{item.tag_name}</a>
</li>
)
})
}
</div>}
<div className="clearfix mb20" id="shixun_search_form_div" style={{height:"30px"}}>
<span className="fl color-grey-9 font-16 mt3">
<span></span>
<span className="color-orange-tip">{shixunmodallist === undefined ? "":shixunmodallist.subjects_count}</span>
<span>个实训</span>
</span>
<div className="fr search-new">
<Search
placeholder="请输入创建者或者实训名称进行搜索"
value={Searchvalue}
onInput={this.SenttotheValue}
onSearch={(value) => this.SenttotheSearch(value)}
style={{width: '115%'}}
/>
</div>
</div>
<ul className="clearfix greybackHead edu-txt-center">
<li className="fl with40 paddingleft22">实训路径名称</li>
<li className="fl with30 edu-txt-left">已发布实训数</li>
<li className="fl with10">使用人数</li>
<li className="fl with10"></li>
</ul>
<style>
{`
.pl40{
padding-left:40px
}
.newtaskhide{
margin-top:0px !important;
height: 40px;
}
`}
</style>
<div className="over210 pl20 pr20"
onScroll={this.contentViewScrolledit}
style={{"Height":"204px"}}>
<Loading visible={hometypepvisible} shape="dot-circle" className="newnext-loading" color='#4AC7FF'>
<Checkbox.Group style={{ width: '100%' }} onChange={this.shixunhomeworkedit}>
{
newshixunmodallist&&newshixunmodallist.map((item,key)=>{
return(
<div className="clearfix edu-txt-center lineh-40 bor-bottom-greyE" key={key}>
<li className="fl with40 newtaskhide">
<Checkbox
id={"shixun_input_"+item.subject_id} value={item.subject_id}
className="task-hide edu-txt-left newtaskhide"
style={{"width":"280px"}}
name="shixun_homework[]"
>
<label style={{"textAlign":"left","color":"#05101A"}} className="task-hide color-grey-name" title="frerere">{item.subject_name}</label>
</Checkbox>
</li>
<li className="fl with30 edu-txt-left task-hide pl40">{item.shixun_count}</li>
<li className="fl with10 paddingl10">{item.myshixun_count}</li>
<Tooltip title="查看详情">
<li className="fr with10"><a className="color-blue" href={"/paths/"+item.subject_id} target="_blank">详情</a></li>
</Tooltip>
</div>
)
})
}
</Checkbox.Group>
</Loading>
</div>
{ this.state.patheditarrytype===true?<span className={"color-red"}>{this.state.patheditarryvalue}</span>:""}
<div className="mt20 marginauto clearfix edu-txt-center">
<a className="pop_close task-btn mr30 margin-tp26" onClick={this.hidecouseShixunModal}>取消</a>
<a className="task-btn task-btn-orange margin-tp26" id="submit_send_shixun" onClick={this.savecouseShixunModal}>确定</a>
</div>
</div>
</Loading>
</Modal>
</div>
)
}
}
export default PathModal;

@ -285,6 +285,11 @@ class Selectresource extends Component{
padding: 0 30px;
padding-top:30px;
}
.search-news{
width: 237px!important;
height: 30px;
margin-bottom: 30px;
}
`}</style>
<div className="newupload_conbox newupload_conboxtop">
@ -292,7 +297,7 @@ class Selectresource extends Component{
<li className="fl mr5 mt5"> <a onClick={()=>this.changeTag("all")} className={ type==="all" ? "active edu-filter-cir-grey font-12":"edu-filter-cir-grey font-12"}>全部</a></li>
<li className="fl mr5 mt5 ml15"> <a onClick={()=>this.changeTag("my")} className={ type==="my" ? " active edu-filter-cir-grey font-12":"edu-filter-cir-grey font-12"}>我的资源</a></li>
<div className="fr search-new">
<div className="fr search-news" >
<Search
placeholder="请输入发布人或名称进行搜索"
value={Searchvalue}

@ -7,13 +7,7 @@ import moment from 'moment';
import Modals from '../../modals/Modals';
const Option = Select.Option;
function bytesToSize(bytes) {
if (bytes === 0) return '0 B';
let k = 1024,
sizes = ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'],
i = Math.floor(Math.log(bytes) / Math.log(k));
return (bytes / Math.pow(k, i)). toFixed(2) + ' ' + sizes[i];
}
const dateFormat ="YYYY-MM-DD HH:mm"
function range(start, end) {
const result = [];
@ -619,7 +613,7 @@ class Selectsetting extends Component{
{item.name}
</span>
<span className="color656565 mt2 color-grey-6 font-12 mr8">
{item.response===undefined?"":isNaN(bytesToSize(item.response.filesize))?"":bytesToSize(item.response.filesize)}
{item.response===undefined?"":isNaN(this.props.bytesToSize(item.response.filesize))?"":this.props.bytesToSize(item.response.filesize)}
</span>
<i className="font-14 iconfont icon-guanbi "
id={item.response===undefined?"":item.response.id}

@ -1,320 +1,320 @@
import React,{ Component } from "react";
import { Modal,Checkbox,Select,Input,Tooltip,Spin,Icon} from "antd";
import axios from'axios';
// import Loading from '@icedesign/base/lib/loading';
// import '@icedesign/base/lib/loading/style.js';
const Option = Select.Option;
const Search = Input.Search;
class ShixunModal extends Component{
constructor(props){
super(props);
this.state={
Searchvalue:undefined,
type:'all',
category_id:0,
page:1
}
}
componentDidMount() {
}
//勾选实训
shixunhomeworkedit=(list)=>{
let newpatheditarry=[];
if (this.props.singleChoose == true) {
if (list.length > 0) {
newpatheditarry.push(list[list.length - 1])
}
} else {
for(var i=0; i<list.length;i++){
newpatheditarry.push(list[i])
}
}
// this.setState({
// patheditarry:newpatheditarry
// })
this.props.funpatheditarry(newpatheditarry)
}
contentViewScrolledit=(e)=>{
//滑动到底判断
if(e.currentTarget.scrollHeight-e.currentTarget.scrollTop===e.currentTarget.clientHeight){
let {Searchvalue,type,page}=this.state;
let newpage=page+1
this.props.funshixunmodallist(Searchvalue,type,true,newpage)
this.setState({
page:newpage
})
}
}
//搜索
SenttotheValue=(e)=>{
this.setState({
Searchvalue:e.target.value
})
}
SenttotheSearch=(value)=>{
let{type}=this.state;
this.setState({
page:1,
})
this.props.funshixunmodallist(value,type,true,1)
this.props.funpatheditarry([])
}
//tag
changeTag=(types)=>{
let {Searchvalue}=this.state;
this.setState({
type:types,
page:1,
})
this.props.funshixunmodallist(Searchvalue,types,true,1)
this.props.funpatheditarry([])
}
hidecouseShixunModal=()=>{
this.props.hidecouseShixunModal()
}
savecouseShixunModal=()=>{
let {coursesId,patheditarry,datas}=this.props;
let{category_id}=this.state;
if (this.props.chooseShixun) {
this.props.chooseShixun(patheditarry)
return;
}
if(patheditarry.length===0){
this.setState({
shixunmodelchke:true,
chekicmessage:"请先选择实训"
})
return
}
let url="/courses/"+coursesId+"/homework_commons/create_shixun_homework.json";
axios.post(url, {
category_id:this.props.category_id===null||this.props.category_id===undefined?undefined:parseInt(this.props.category_id),
shixun_ids:patheditarry,
}
).then((response) => {
if(response.data.status===-1){
// this.props.showNotification(response.data.message)
}else{
this.props.courseshomeworkstart(response.data.category_id,response.data.homework_ids)
this.props.hidecouseShixunModal()
}
// category_id: 3
// homework_ids: (5) [9171, 9172, 9173, 9174, 9175]
}).catch((error) => {
console.log(error)
})
}
selectCloseList=(value)=>{
this.setState({
category_id:value
})
}
render(){
let {Searchvalue,type,category_id}=this.state;
let {visible,shixunmodallist,hometypepvisible,newshixunmodallist,patheditarry}=this.props;
const antIcon = <Icon type="loading" style={{ fontSize: 24 }} spin />;
// console.log(patheditarry)
return(
<div>
<Modal
keyboard={false}
title="选择实训"
visible={visible}
closable={false}
footer={null}
width="840px"
destroyOnClose={true}
>
<style>
{
`
.ant-spin-lg .ant-spin-dot {
font-size: 32px !important;
}
`
}
</style>
<Spin indicator={antIcon} spinning={hometypepvisible} className="newnext-loading" color='#4AC7FF' size="large">
{/*<Spin shape="dot-circle" >*/}
{/*{*/}
{/*shixunmodallist === undefined ? "":shixunmodallist.homework_category.length>0?<div>*/}
{/*<div className={"fl"}>选择目录名称:</div>*/}
{/*<div className="fl mb20">*/}
{/*<Select*/}
{/*placeholder="请选择您要发送的课堂"*/}
{/*value={isNaN(parseInt(category_id))?"":parseInt(category_id)}*/}
{/*style={{"width":"660px","marginTop": "-7px"}}*/}
{/*onSelect={this.selectCloseList}*/}
{/*// onMouseEnter={this.openList}*/}
{/*defaultOpen={false}*/}
{/*// open={openSearch}*/}
{/*optionLabelProp="name"*/}
{/*>*/}
{/*{ shixunmodallist.main_category.map((item,key)=>{*/}
{/*return(*/}
{/*<Option key={key} value={item.main_category_id} name={item.main_category_name}>{item.main_category_name}</Option>*/}
{/*)*/}
{/*})*/}
{/*}*/}
{/*{*/}
{/*shixunmodallist.homework_category.map((item,key)=>{*/}
{/*return(*/}
{/*<Option key={key} value={item.category_id} name={item.category_name}>{item.category_name}</Option>*/}
{/*)*/}
{/*})*/}
{/*}*/}
{/*</Select>*/}
{/*</div>*/}
{/*</div>:""}*/}
<div className="newupload_conbox">
<style>
{
`
#shixun_tab_div{
max-height: 65px;
}
`
}
</style>
<div className="clearfix mb10 shixun_work_div newshixun_tab_div cdefault" style={{"marginRight":"4px"}} id="shixun_tab_div">
<li className="fl mr5 mt5">
<a onClick={()=>this.changeTag("all")} className={ type==="all" ? "active edu-filter-cir-grey font-12":"edu-filter-cir-grey font-12"}>全部</a>
</li>
{
shixunmodallist && shixunmodallist.tags.map((item,key)=>{
return(
<li className="fl mr5 mt5" key={key}>
<a onClick={()=>this.changeTag(item.tag_id)} className={ parseInt(type) === parseInt(item.tag_id) ? "active edu-filter-cir-grey font-12":"edu-filter-cir-grey font-12"}>{item.tag_name}</a>
</li>
)
})
}
</div>
<div className="clearfix mb10" id="shixun_search_form_div" style={{height:"30px"}}>
<span className="fl color-grey-9 font-16 mt3">
<span></span>
<span className="color-orange-tip">{shixunmodallist === undefined ? "":shixunmodallist.shixuns_count}</span>
<span>个实训</span>
</span>
<div className="fr search-new">
<Search
placeholder="输入实训名称的关键字搜索"
value={Searchvalue}
onInput={this.SenttotheValue}
onSearch={(value) => this.SenttotheSearch(value)}
style={{width: '100%'}}
/>
</div>
</div>
{
<style>
{
`.paddingleft22{
text-align: left;
padding-left: 23px;
}
`
}
</style>
}
<ul className="clearfix greybackHead edu-txt-center">
<li className="fl with40 paddingleft22" >实训名称</li>
<li className="fl with30 edu-txt-left">使用院校</li>
<li className="fl with10">使用人数</li>
<li className="fl with10">评价等级</li>
<li className="fl with10"></li>
</ul>
<div className="over210 pl20 pr20"
onScroll={this.contentViewScrolledit}
style={{height:"158px"}}>
<style>
{
`
.next-loading{
width: 100%;
height: 230px;
}
.newtaskhide{
margin-top:0px !important;
height: 40px;
}
`
}
</style>
{/*<Loading visible={hometypepvisible} shape="dot-circle" className="newnext-loading" color='#4AC7FF'>*/}
<Checkbox.Group style={{ width: '100%' }} value={patheditarry} onChange={this.shixunhomeworkedit}>
{
newshixunmodallist === undefined ? "": newshixunmodallist.map((item,key)=>{
return(
<div className="clearfix edu-txt-center lineh-40 bor-bottom-greyE" key={key}>
<li className="fl with40 edu-txt-left task-hide paddingl5 newtaskhide">
<Checkbox
id={"shixun_input_"+item.shixun_id} value={item.shixun_id}
className=" task-hide edu-txt-left newtaskhide"
style={{"width":"280px"}}
name="shixun_homework[]"
>
<span style={{"textAlign":"left","color":"#05101A"}} className="task-hide color-grey-name">{item.shixun_name}</span>
</Checkbox>
</li>
<li className="fl with30 edu-txt-left task-hide paddingl5">{item.school_users}</li>
<li className="fl with10 paddingl10">{item.myshixuns_count}</li>
<li className="fl with10 color-orange-tip paddingl10">{item.preference}</li>
<Tooltip title="新窗口查看详情">
<li className="fl with10"><a className="color-blue" href={"/shixuns/"+item.identifier+"/challenges"} target="_blank">详情</a></li>
</Tooltip>
</div>
)
})
}
</Checkbox.Group>
{/*</Loading>*/}
</div>
</div>
</Spin>
{this.state.shixunmodelchke===true?<span className={"color-red"}>{this.state.chekicmessage}</span>:""}
<div className="mt20 marginauto clearfix edu-txt-center">
<a className="pop_close task-btn mr30 margin-tp26" onClick={this.hidecouseShixunModal}>取消</a>
<a className="task-btn task-btn-orange margin-tp26" id="submit_send_shixun" onClick={this.savecouseShixunModal}>确定</a>
</div>
</Modal>
</div>
)
}
}
import React,{ Component } from "react";
import { Modal,Checkbox,Select,Input,Tooltip,Spin,Icon} from "antd";
import axios from'axios';
// import Loading from '@icedesign/base/lib/loading';
// import '@icedesign/base/lib/loading/style.js';
const Option = Select.Option;
const Search = Input.Search;
class ShixunModal extends Component{
constructor(props){
super(props);
this.state={
Searchvalue:undefined,
type:'all',
category_id:0,
page:1
}
}
componentDidMount() {
}
//勾选实训
shixunhomeworkedit=(list)=>{
let newpatheditarry=[];
if (this.props.singleChoose == true) {
if (list.length > 0) {
newpatheditarry.push(list[list.length - 1])
}
} else {
for(var i=0; i<list.length;i++){
newpatheditarry.push(list[i])
}
}
// this.setState({
// patheditarry:newpatheditarry
// })
this.props.funpatheditarry(newpatheditarry)
}
contentViewScrolledit=(e)=>{
//滑动到底判断
if(e.currentTarget.scrollHeight-e.currentTarget.scrollTop===e.currentTarget.clientHeight){
let {Searchvalue,type,page}=this.state;
let newpage=page+1
this.props.funshixunmodallist(Searchvalue,type,true,newpage)
this.setState({
page:newpage
})
}
}
//搜索
SenttotheValue=(e)=>{
this.setState({
Searchvalue:e.target.value
})
}
SenttotheSearch=(value)=>{
let{type}=this.state;
this.setState({
page:1,
})
this.props.funshixunmodallist(value,type,true,1)
this.props.funpatheditarry([])
}
//tag
changeTag=(types)=>{
let {Searchvalue}=this.state;
this.setState({
type:types,
page:1,
})
this.props.funshixunmodallist(Searchvalue,types,true,1)
this.props.funpatheditarry([])
}
hidecouseShixunModal=()=>{
this.props.hidecouseShixunModal()
}
savecouseShixunModal=()=>{
let {coursesId,patheditarry,datas}=this.props;
let{category_id}=this.state;
if (this.props.chooseShixun) {
this.props.chooseShixun(patheditarry)
return;
}
if(patheditarry.length===0){
this.setState({
shixunmodelchke:true,
chekicmessage:"请先选择实训"
})
return
}
let url="/courses/"+coursesId+"/homework_commons/create_shixun_homework.json";
axios.post(url, {
category_id:this.props.category_id===null||this.props.category_id===undefined?undefined:parseInt(this.props.category_id),
shixun_ids:patheditarry,
}
).then((response) => {
if(response.data.status===-1){
// this.props.showNotification(response.data.message)
}else{
this.props.courseshomeworkstart(response.data.category_id,response.data.homework_ids)
this.props.hidecouseShixunModal()
}
// category_id: 3
// homework_ids: (5) [9171, 9172, 9173, 9174, 9175]
}).catch((error) => {
console.log(error)
})
}
selectCloseList=(value)=>{
this.setState({
category_id:value
})
}
render(){
let {Searchvalue,type,category_id}=this.state;
let {visible,shixunmodallist,hometypepvisible,newshixunmodallist,patheditarry}=this.props;
const antIcon = <Icon type="loading" style={{ fontSize: 24 }} spin />;
// console.log(patheditarry)
return(
<div>
<Modal
keyboard={false}
title="选择实训"
visible={visible}
closable={false}
footer={null}
width="840px"
destroyOnClose={true}
>
<style>
{
`
.ant-spin-lg .ant-spin-dot {
font-size: 32px !important;
}
`
}
</style>
<Spin indicator={antIcon} spinning={hometypepvisible} className="newnext-loading" color='#4AC7FF' size="large">
{/*<Spin shape="dot-circle" >*/}
{/*{*/}
{/*shixunmodallist === undefined ? "":shixunmodallist.homework_category.length>0?<div>*/}
{/*<div className={"fl"}>选择目录名称:</div>*/}
{/*<div className="fl mb20">*/}
{/*<Select*/}
{/*placeholder="请选择您要发送的课堂"*/}
{/*value={isNaN(parseInt(category_id))?"":parseInt(category_id)}*/}
{/*style={{"width":"660px","marginTop": "-7px"}}*/}
{/*onSelect={this.selectCloseList}*/}
{/*// onMouseEnter={this.openList}*/}
{/*defaultOpen={false}*/}
{/*// open={openSearch}*/}
{/*optionLabelProp="name"*/}
{/*>*/}
{/*{ shixunmodallist.main_category.map((item,key)=>{*/}
{/*return(*/}
{/*<Option key={key} value={item.main_category_id} name={item.main_category_name}>{item.main_category_name}</Option>*/}
{/*)*/}
{/*})*/}
{/*}*/}
{/*{*/}
{/*shixunmodallist.homework_category.map((item,key)=>{*/}
{/*return(*/}
{/*<Option key={key} value={item.category_id} name={item.category_name}>{item.category_name}</Option>*/}
{/*)*/}
{/*})*/}
{/*}*/}
{/*</Select>*/}
{/*</div>*/}
{/*</div>:""}*/}
<div className="newupload_conbox">
<style>
{
`
#shixun_tab_div{
max-height: 65px;
}
`
}
</style>
<div className="clearfix mb10 shixun_work_div newshixun_tab_div cdefault" style={{"marginRight":"4px"}} id="shixun_tab_div">
<li className="fl mr5 mt5">
<a onClick={()=>this.changeTag("all")} className={ type==="all" ? "active edu-filter-cir-grey font-12":"edu-filter-cir-grey font-12"}>全部</a>
</li>
{
shixunmodallist && shixunmodallist.tags.map((item,key)=>{
return(
<li className="fl mr5 mt5" key={key}>
<a onClick={()=>this.changeTag(item.tag_id)} className={ parseInt(type) === parseInt(item.tag_id) ? "active edu-filter-cir-grey font-12":"edu-filter-cir-grey font-12"}>{item.tag_name}</a>
</li>
)
})
}
</div>
<div className="clearfix mb10" id="shixun_search_form_div" style={{height:"30px"}}>
<span className="fl color-grey-9 font-16 mt3">
<span></span>
<span className="color-orange-tip">{shixunmodallist === undefined ? "":shixunmodallist.shixuns_count}</span>
<span>个实训</span>
</span>
<div className="fr search-new">
<Search
placeholder="请输入创建者或者实训名称进行搜索"
value={Searchvalue}
onInput={this.SenttotheValue}
onSearch={(value) => this.SenttotheSearch(value)}
style={{width: '115%'}}
/>
</div>
</div>
{
<style>
{
`.paddingleft22{
text-align: left;
padding-left: 23px;
}
`
}
</style>
}
<ul className="clearfix greybackHead edu-txt-center">
<li className="fl with40 paddingleft22" >实训名称</li>
<li className="fl with30 edu-txt-left">使用院校</li>
<li className="fl with10">使用人数</li>
<li className="fl with10">评价等级</li>
<li className="fl with10"></li>
</ul>
<div className="over210 pl20 pr20"
onScroll={this.contentViewScrolledit}
style={{height:"158px"}}>
<style>
{
`
.next-loading{
width: 100%;
height: 230px;
}
.newtaskhide{
margin-top:0px !important;
height: 40px;
}
`
}
</style>
{/*<Loading visible={hometypepvisible} shape="dot-circle" className="newnext-loading" color='#4AC7FF'>*/}
<Checkbox.Group style={{ width: '100%' }} value={patheditarry} onChange={this.shixunhomeworkedit}>
{
newshixunmodallist === undefined ? "": newshixunmodallist.map((item,key)=>{
return(
<div className="clearfix edu-txt-center lineh-40 bor-bottom-greyE" key={key}>
<li className="fl with40 edu-txt-left task-hide paddingl5 newtaskhide">
<Checkbox
id={"shixun_input_"+item.shixun_id} value={item.shixun_id}
className=" task-hide edu-txt-left newtaskhide"
style={{"width":"280px"}}
name="shixun_homework[]"
>
<span style={{"textAlign":"left","color":"#05101A"}} className="task-hide color-grey-name">{item.shixun_name}</span>
</Checkbox>
</li>
<li className="fl with30 edu-txt-left task-hide paddingl5">{item.school_users}</li>
<li className="fl with10 paddingl10">{item.myshixuns_count}</li>
<li className="fl with10 color-orange-tip paddingl10">{item.preference}</li>
<Tooltip title="新窗口查看详情">
<li className="fl with10"><a className="color-blue" href={"/shixuns/"+item.identifier+"/challenges"} target="_blank">详情</a></li>
</Tooltip>
</div>
)
})
}
</Checkbox.Group>
{/*</Loading>*/}
</div>
</div>
</Spin>
{this.state.shixunmodelchke===true?<span className={"color-red"}>{this.state.chekicmessage}</span>:""}
<div className="mt20 marginauto clearfix edu-txt-center">
<a className="pop_close task-btn mr30 margin-tp26" onClick={this.hidecouseShixunModal}>取消</a>
<a className="task-btn task-btn-orange margin-tp26" id="submit_send_shixun" onClick={this.savecouseShixunModal}>确定</a>
</div>
</Modal>
</div>
)
}
}
export default ShixunModal;

@ -1,163 +1,171 @@
import React,{ Component } from "react";
import { WordsBtn } from 'educoder';
import {Tooltip,message,Modal} from 'antd';
import {Link} from 'react-router-dom';
import axios from 'axios';
import Modals from '../../modals/Modals';
class Startshixuntask extends Component{
constructor(props){
super(props);
this.state = {
startbtn:false
}
}
componentDidMount() {
}
taskoperationId=(list)=>{
this.setState({
startbtn:true,
})
let url= list+".json";
axios.get(url).then((response) => {
if(response.status===200){
if(response.data.status===-2){
this.setState({
startbtn:false,
shixunsreplace:true,
hidestartshixunsreplacevalue:response.data.message+".json"
})
}else if(response.data.status===-1){
console.log(response)
}else if(response.data.status===-3){
this.setState({
shixunsmessage:response.data.message,
startshixunCombattype:true,
startbtn:false
})
}else{
if(response.data.status!=401&&response.data.status!=403){
window.location.href = "/tasks/"+response.data.game_identifier;
}
}
}
}).catch((error) => {
this.setState({
startbtn:false
})
});
}
hidestartshixunsreplace=(url)=>{
axios.get(url).then((response) => {
if(response.status===200){
this.setState({
shixunsreplace:false
})
message.success('重置成功,正在进入实训!');
let path="/shixuns/"+response.data.shixun_identifier+"/challenges";
this.props.history.push(path);
}}
).catch((error) => {
this.setState({
startbtn:false,
shixunsreplace:false
})
});
}
hidestartshixunCombattype=()=>{
this.setState({
startshixunCombattype:false
})
}
render(){
let {
Modalstype,
Modalstopval,
Modalsbottomval,
cardsModalcancel,
cardsModalsavetype,
loadtype,
shixunsreplace,
hidestartshixunsreplacevalue,
startshixunCombattype,
shixunsmessage,
startbtn
} = this.state;
return(
<a className="fr color-blue font-16" >
<Modals
modalsType={Modalstype}
modalsTopval={Modalstopval}
modalsBottomval={Modalsbottomval}
modalCancel={cardsModalcancel}
modalSave={cardsModalsavetype}
loadtype={loadtype}
/>
<Modal
title="提示"
visible={shixunsreplace}
closable={false}
footer={null}
keyboard={false}
>
<div className="task-popup-content">
<p className="task-popup-text-center font-16 pb20">实训已经更新了正在为您重置!</p>
</div>
<div className="task-popup-submit clearfix">
<a className="task-btn task-btn-orange fr mr51"
onClick={() => this.hidestartshixunsreplace(hidestartshixunsreplacevalue)}>知道了</a>
</div>
</Modal>
<Modal
title="提示"
visible={startshixunCombattype}
closable={false}
footer={null}
keyboard={false}
>
<div className="task-popup-content">
<p className="task-popup-text-center font-16 pb20">本实训的开启时间{shixunsmessage} <br/>开启时间之前不能挑战
</p>
</div>
<div className="task-popup-submit clearfix">
{/*<a onClick={this.hidestartshixunCombattype} className="task-btn fl">取消</a>*/}
<a className="task-btn task-btn-orange fr mr51" onClick={this.hidestartshixunCombattype}>知道啦</a>
</div>
{/*<p className="inviteTipbtn with100 fl">*/}
{/*<a onClick={this.hidestartshixunCombattype}>知道了</a>*/}
{/*</p>*/}
</Modal>
{this.props.isStudent?
<span>
{this.props.data.task_operation&&this.props.data.task_operation?startbtn===false?<span onClick={()=>this.taskoperationId( this.props.data.task_operation[1])}>
{this.props.data.task_operation[0]}
</span>:"":""}
</span>:""
}
</a>
)
}
}
import React,{ Component } from "react";
import { WordsBtn } from 'educoder';
import {Tooltip,message,Modal,Spin} from 'antd';
import {Link} from 'react-router-dom';
import axios from 'axios';
import Modals from '../../modals/Modals';
class Startshixuntask extends Component{
constructor(props){
super(props);
this.state = {
startbtn:false,
isSpin:false,
}
}
componentDidMount() {
}
taskoperationId=(list)=>{
this.setState({
startbtn:true,
})
let url= list+".json";
axios.get(url).then((response) => {
if(response.status===200){
if(response.data.status===-2){
this.setState({
startbtn:false,
shixunsreplace:true,
hidestartshixunsreplacevalue:response.data.message+".json"
})
}else if(response.data.status===-1){
console.log(response)
}else if(response.data.status===-3){
this.setState({
shixunsmessage:response.data.message,
startshixunCombattype:true,
startbtn:false
})
}else{
if(response.data.status!=401&&response.data.status!=403){
window.location.href = "/tasks/"+response.data.game_identifier;
}
}
}
}).catch((error) => {
this.setState({
startbtn:false
})
});
}
hidestartshixunsreplace=(url)=>{
this.setState({
isSpin:true
})
axios.get(url).then((response) => {
if(response.status===200){
this.setState({
shixunsreplace:false,
isSpin:false,
})
message.success('重置成功,正在进入实训!');
let path="/shixuns/"+response.data.shixun_identifier+"/challenges";
this.props.history.push(path);
}}
).catch((error) => {
this.setState({
startbtn:false,
shixunsreplace:false,
isSpin:false,
})
});
}
hidestartshixunCombattype=()=>{
this.setState({
startshixunCombattype:false
})
}
render(){
let {
Modalstype,
Modalstopval,
Modalsbottomval,
cardsModalcancel,
cardsModalsavetype,
loadtype,
shixunsreplace,
hidestartshixunsreplacevalue,
startshixunCombattype,
shixunsmessage,
startbtn,
isSpin
} = this.state;
return(
<a className="fr color-blue font-16" >
<Modals
modalsType={Modalstype}
modalsTopval={Modalstopval}
modalsBottomval={Modalsbottomval}
modalCancel={cardsModalcancel}
modalSave={cardsModalsavetype}
loadtype={loadtype}
/>
<Modal
title="提示"
visible={shixunsreplace}
closable={false}
footer={null}
keyboard={false}
>
<Spin size="large" spinning={isSpin}>
<div className="task-popup-content">
<p className="task-popup-text-center font-16 pb20">实训已经更新了正在为您重置!</p>
</div>
<div className="task-popup-submit clearfix">
<a className="task-btn task-btn-orange fr mr51"
onClick={() => this.hidestartshixunsreplace(hidestartshixunsreplacevalue)}>知道了</a>
</div>
</Spin>
</Modal>
<Modal
title="提示"
visible={startshixunCombattype}
closable={false}
footer={null}
keyboard={false}
>
<div className="task-popup-content">
<p className="task-popup-text-center font-16 pb20">本实训的开启时间{shixunsmessage} <br/>开启时间之前不能挑战
</p>
</div>
<div className="task-popup-submit clearfix">
{/*<a onClick={this.hidestartshixunCombattype} className="task-btn fl">取消</a>*/}
<a className="task-btn task-btn-orange fr mr51" onClick={this.hidestartshixunCombattype}>知道啦</a>
</div>
{/*<p className="inviteTipbtn with100 fl">*/}
{/*<a onClick={this.hidestartshixunCombattype}>知道了</a>*/}
{/*</p>*/}
</Modal>
{this.props.isStudent?
<span>
{this.props.data.task_operation&&this.props.data.task_operation?startbtn===false?<span onClick={()=>this.taskoperationId( this.props.data.task_operation[1])}>
{this.props.data.task_operation[0]}
</span>:"":""}
</span>:""
}
</a>
)
}
}
export default Startshixuntask;

@ -230,11 +230,11 @@ class ShixunModal extends Component{
</span>
<div className="fr search-new">
<Search
placeholder="输入实训名称的关键字搜索"
placeholder="请输入创建者或者实训名称进行搜索"
value={Searchvalue}
onInput={this.SenttotheValue}
onSearch={(value) => this.SenttotheSearch(value)}
style={{width: '100%'}}
style={{width: '115%'}}
/>
</div>
</div>

@ -22,13 +22,6 @@ function disabledDateTime() {
};
}
function bytesToSize(bytes) {
if (bytes === 0) return '0 B';
let k = 1024,
sizes = ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'],
i = Math.floor(Math.log(bytes) / Math.log(k));
return (bytes / Math.pow(k, i)). toFixed(2) + ' ' + sizes[i];
}
const dateFormat="YYYY-MM-DD HH:mm";
class Sendresource extends Component{
constructor(props){
@ -456,7 +449,7 @@ class Sendresource extends Component{
{item.name}
</span>
<span className="color656565 mt2 color-grey-6 font-12 mr8">
{item.response===undefined?"":isNaN(bytesToSize(item.response.filesize))?"":bytesToSize(item.response.filesize)}
{item.response===undefined?"":isNaN(this.props.bytesToSize(item.response.filesize))?"":this.props.bytesToSize(item.response.filesize)}
</span>
<i className="font-14 iconfont icon-guanbi "
id={item.response===undefined?"":item.response.id}

@ -460,6 +460,10 @@ a.white-btn.use_scope-btn:hover{
width: 70px;
margin-left: -10px;
}
.bannerurlis{
width: 70px;
margin-left: -10px;
}
.pathInfobox li{
margin-right: 20px;
height: 15px;
@ -1206,6 +1210,7 @@ a.white-btn.use_scope-btn:hover{
width:237px!important;
height: 30px;
margin-bottom: 30px;
margin-right: 35px;
}
.search-new-input {
padding-left: 16px;

@ -1,5 +1,5 @@
import React,{Component} from "React";
import { Form, Select, Input, Button,Checkbox,Upload,Icon,message,Modal,Spin} from "antd";
import { Form, Select, Input, Button,Checkbox,Upload,Icon,message,Modal,Spin,Tooltip} from "antd";
import {Link} from 'react-router-dom';
import TPMMDEditor from '../../../tpm/challengesnew/TPMMDEditor';
import { WordsBtn,getUrl } from 'educoder';
@ -212,7 +212,7 @@ class GraduationTasksSubmitedit extends Component{
this.setState({ fileList });
}
onAttachmentRemove = (file) => {
//onAttachmentRemove = (file) => {
// confirm({
// title: '确定要删除这个附件吗?',
@ -228,14 +228,14 @@ class GraduationTasksSubmitedit extends Component{
// });
// return false;
this.setState({
Modalstype:true,
Modalstopval:'确定要删除这个附件吗?',
ModalSave: ()=>this.deleteAttachment(file),
ModalCancel:this.cancelAttachment
})
return false;
}
// this.setState({
// Modalstype:true,
// Modalstopval:'确定要删除这个附件吗?',
// ModalSave: ()=>this.deleteAttachment(file),
// ModalCancel:this.cancelAttachment
// })
// return false;
//}
cancelAttachment=()=>{
this.setState({
@ -246,8 +246,8 @@ class GraduationTasksSubmitedit extends Component{
})
}
deleteAttachment = (file) => {
let {attachments}=this.state;
onAttachmentRemove = (file) => {
let {attachments,fileList}=this.state;
const url = `/attachments/${file.uid===undefined?file.id:file.uid}.json`
axios.delete(url, {
})
@ -426,7 +426,7 @@ class GraduationTasksSubmitedit extends Component{
multiple: true,
// https://github.com/ant-design/ant-design/issues/15505
// showUploadList={false},然后外部拿到 fileList 数组自行渲染列表。
// showUploadList: false,
showUploadList: false,
action: `${getUrl()}/api/attachments.json`,
onChange: this.handleChange,
onRemove: this.onAttachmentRemove,
@ -553,7 +553,37 @@ class GraduationTasksSubmitedit extends Component{
)
})}
<style>
{
`
.maxwidth500{
max-width:500px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
color: #05101a;
}
`
}
</style>
{this.state.fileList.length===0?"":this.state.fileList.map((item,key)=>{
return(
<p className="color-grey mt10" key={key} >
<a className="color-grey fl">
<i className="font-14 color-green iconfont icon-fujian mr8" aria-hidden="true"></i>
</a>
<span className="mr12 color9B9B maxwidth500 fl" length="58">
{item.name}
</span>
<span className="color656565 mt2 color-grey-6 font-12 mr8">
{item.response===undefined?"":isNaN(this.props.bytesToSize(item.response.filesize))?"":this.props.bytesToSize(item.response.filesize)}
</span>
<i className="font-14 iconfont icon-guanbi "
id={item.response===undefined?"":item.response.id}
aria-hidden="true" onClick={()=>this.onAttachmentRemove(item.response===undefined?"":item.response.id&&item.response.id)}></i>
</p>
)
})}
@ -571,7 +601,7 @@ class GraduationTasksSubmitedit extends Component{
<div className={"fl ml20"}>成员要求25</div>
<Search
className={"fl mt5 ml20"}
style={{width:"20%"}}
style={{width:"270px"}}
placeholder="请输入姓名或学号搜索"
id="subject_search_input"
value={search}
@ -581,26 +611,54 @@ class GraduationTasksSubmitedit extends Component{
></Search>
</div>
<style>{`
.fonthidden{
overflow:hidden;
text-overflow:ellipsis;
white-space:nowrap
}
.width87{
width: 87px;
height: 24px;
}
img.edu-nodata-img {
width: 200px;
margin: 50px 90px 20px;
display: block;
}
`}</style>
</Form.Item>
<div className={"ml20"} style={{width:"100%"}}>
<div className={"ml20 mt10"} style={{width:"100%"}}>
<div className={"members fl"}
onScroll={this.contentViewScroll}>
<CheckboxGroup value={task_status} onChange={this.funtaskstatus} style={{ paddingTop: '4px'}}>
{memberslist&&memberslist.members.map((item,key)=>{
{memberslist===undefined?"":memberslist.members.length===0? <div className="square-list clearfix">
<div className="edu-tab-con-box clearfix edu-txt-center">
<img className="edu-nodata-img mb20" src={getImageUrl("images/educoder/nodata.png")}/>
<p className="edu-nodata-p mb20">未找到包含{search}的学生</p>
</div>
</div>:memberslist&&memberslist.members.map((item,key)=>{
return(
<div key={key} style={{
width: '375px',
height: '30px'
}}>
<Checkbox value={item.user_id} checked={parseInt(task_status[key])===item.user_id?true:false} disabled={item.commit_status===true?true:false} className="fl "></Checkbox>
<div className={"fl ml5"} style={{width: '70px'}}>{item.user_name}</div>
<div className={"fl ml40 color-grey-9"}>{item.group_name}</div>
<div className={"fl ml40 color-grey-9"}>{item.student_id}</div>
<div className={"fl ml40"}>{item.commit_status===true?<span className={"color-orange"}>已提交</span> :""}</div>
<Checkbox value={item.user_id}
checked={
task_status.map((item,key)=>{
return parseInt(task_status[key])===item.user_id?true:false
})
}
disabled={item.commit_status===true?true:false} className="fl "></Checkbox>
<Tooltip placement="bottom" title={item.user_name}>
<div className={"fl ml5 fonthidden width87"} style={{width: '70px'}}>{item.user_name}</div>
</Tooltip>
<div className={"fl ml5 fonthidden width87 color-grey-9"} style={{width: '70px'}}>{item.group_name}</div>
<div className={"fl ml5 color-grey-9 fonthidden width87"} style={{width: '70px'}}>{item.student_id}</div>
<div className={"fl ml20"}>{item.commit_status===false?<span className={"color-orange"}>已提交</span> :""}</div>
</div>
)
})}
@ -622,10 +680,12 @@ class GraduationTasksSubmitedit extends Component{
height: '30px',
display:item.user_name===undefined?"none":""
}}>
<div className={"fl ml5"} style={{width: '50px'}}>{item.user_name}</div>
<div className={"fl ml40 color-grey-9"}>{item.group_name}</div>
<div className={"fl ml40 color-grey-9"}>{item.student_id}</div>
{key>0?<div className={"fr"}><i className={"iconfont icon-shanchudiao fl "} style={{marginTop:'-4px'}} onClick={()=>this.delecttask_status(item.user_id)}></i></div>:""}
<Tooltip placement="bottom" title={item.user_name}>
<div className={"fl ml5 fonthidden width87"} style={{width: '50px'}}>{item.user_name}</div>
</Tooltip>
<div className={"fl ml5 fonthidden width87 color-grey-9"}>{item.group_name}</div>
<div className={"fl ml5 color-grey-9 fonthidden width87"}>{item.student_id}</div>
{key>0?<div className={"fl ml20"}><i className={"iconfont icon-shanchudiao fl "} style={{marginTop:'-4px'}} onClick={()=>this.delecttask_status(item.user_id)}></i></div>:""}
</div>
)
})}

@ -2,7 +2,7 @@ import React,{Component} from "React";
import { Form, Select, Input, Button,Checkbox,Upload,Icon,message,Modal,Tooltip,Spin} from "antd";
import {Link} from 'react-router-dom';
import TPMMDEditor from '../../../tpm/challengesnew/TPMMDEditor';
import { WordsBtn,getUrl } from 'educoder';
import { WordsBtn,getUrl,getImageUrl} from 'educoder';
import axios from 'axios';
import Modals from '../../../modals/Modals';
const Search = Input.Search;
@ -83,7 +83,7 @@ class GraduationTasksSubmitnew extends Component{
}
handleSubmit=(e) => {
console.log("86");
let {fileList,selectmemberslist,workslist}=this.state;
if(fileList.length === 0){
@ -91,7 +91,7 @@ class GraduationTasksSubmitnew extends Component{
Modalstype:true,
Modalstopval:'请上传附件!',
Loadtype:true,
ModalCancel:this.cancelAttachment
ModalSave:this.cancelAttachment,
})
@ -119,7 +119,7 @@ class GraduationTasksSubmitnew extends Component{
listid.push(list.response.id)
}
e.preventDefault();
// e.preventDefault();
if( GraduationTasksnewtype===true){
this.props.form.validateFields((err, values) => {
if (!err) {
@ -367,7 +367,6 @@ class GraduationTasksSubmitnew extends Component{
let newlist =memberslist.members;
let newcheckedValues=checkedValues;
let selects=[];
selects.push(selectobjct)
for(var i=0; i<newlist.length; i++){
for(var z=0; z<newcheckedValues.length; z++){
@ -392,6 +391,7 @@ class GraduationTasksSubmitnew extends Component{
let selects=selectmemberslist;
for(var i=0; i<newlist.length; i++){
if(newlist[i]===id){
newlist.splice(i,1)
}
@ -402,12 +402,33 @@ class GraduationTasksSubmitnew extends Component{
selects.splice(z,1)
}
}
this.setState({
task_status:newlist,
selectmemberslist:selects
})
}
onSearchKeywordKeyUp = (e) => {
if (e.keyCode === 13) {
}
}
onSearckeyd=(e)=>{
if(e.keyCode){
let {search} = this.state;
this.searchList(search,1,10)
}
}
onSearchKeywordKeyUps= (e)=>{
if(e.keyCode=== 13){
}
}
onKeywordSearchKeyDown = (e) => {
if(e.keyCode == 13) {
return false;
}
}
gocannel=()=>{
window.history.go(-1)
}
@ -482,7 +503,8 @@ render(){
<a className="color-grey-6 fr font-16 ml30 mt10 mr20" onClick={this.goback}>返回</a>
</div>
<Form labelCol={{ span: 5 }} wrapperCol={{ span: 12 }} onSubmit={GraduationTasksnewtype===true?this.handleSubmit:""} >
{/*<Form labelCol={{ span: 5 }} wrapperCol={{ span: 12 }} onSubmit={GraduationTasksnewtype===true?this.handleSubmit:"return false"}*/}
{/*>*/}
<div className="stud-class-set pd20 coursenavbox edu-back-white">
<style>{`
.uploadBtn.ant-btn {
@ -535,16 +557,29 @@ render(){
>
<div>
<div className={"fl ml20"}>成员要求25</div>
<input type="text" style={{width:"0px",height:"0px",display:"none"}} onKeyUp={(e) => this.onSearchKeywordKeyUp(e)}
onkeydown={(e)=>this.onSearchKeywordKeyUps(e)}/>
<Search
style={{width:"0px",height:"0px",display:"none"}}
onKeyUp={(e) => this.onSearchKeywordKeyUp(e)}
onkeydown={(e)=>this.onSearchKeywordKeyUps(e)}
onPressEnter={this.onKeywordSearchKeyDown}
autoComplete="off"
></Search>
<Search
className={"fl mt5 ml20"}
style={{width:"20%"}}
style={{width:"270px"}}
placeholder="请输入姓名或学号搜索"
id="subject_search_input"
value={search}
onInput={this.inputSearchValue}
onSearch={this.searchValue}
onPressEnter={this.onKeywordSearchKeyDown}
onKeyUp={(e) => this.onSearckeyd(e)}
autoComplete="off"
></Search>
<input type="text" style={{display: "none",height:0, width: 0, border: "none"}}/>
</div>
@ -556,6 +591,15 @@ render(){
text-overflow:ellipsis;
white-space:nowrap
}
.width87{
width: 87px;
height: 24px;
}
img.edu-nodata-img {
width: 200px;
margin: 50px 90px 20px;
display: block;
}
`}</style>
<div className={"ml20"} style={{width:"100%"}}>
@ -563,17 +607,31 @@ render(){
<div className={"members fl"}
onScroll={this.contentViewScroll}>
<CheckboxGroup value={task_status} onChange={this.funtaskstatus} style={{ paddingTop: '4px'}}>
{memberslist&&memberslist.members.map((item,key)=>{
{memberslist===undefined?"":memberslist.members.length===0?
<div className="square-list clearfix">
<div className="edu-tab-con-box clearfix edu-txt-center">
<img className="edu-nodata-img mb20" src={getImageUrl("images/educoder/nodata.png")}/>
<p className="edu-nodata-p mb20">未找到包含{search}的学生</p>
</div>
</div>:memberslist&&memberslist.members.map((item,key)=>{
return(
<div key={key} style={{
width: '375px',
height: '30px'
}}>
<Checkbox value={item.user_id} checked={parseInt(task_status[key])===item.user_id?true:false} disabled={item.commit_status===true?true:false} className="fl "></Checkbox>
<Tooltip placement="bottom" title={item.user_nam}><div className={"fl ml5 fonthidden"} style={{width: '70px'}}>{item.user_name}</div></Tooltip>
<div className={"fl ml40 color-grey-9"}>{item.group_name}</div>
<div className={"fl ml40 color-grey-9"}>{item.student_id}</div>
<div className={"fl ml40"}>{item.commit_status===true?<span className={"color-orange"}>已提交</span> :""}</div>
<Checkbox value={item.user_id} checked={
task_status.map((item,key)=>{
return parseInt(task_status[key])===item.user_id?true:false
})
}
disabled={item.commit_status===true?true:false} className="fl "></Checkbox>
<Tooltip placement="bottom" title={item.user_name}>
<div className={"fl ml5 fonthidden width87"}>{item.user_name}</div>
</Tooltip>
<div className={"fl ml5 fonthidden width87 color-grey-9"} title={item.group_name}>{item.group_name}</div>
<div className={"fl ml5 color-grey-9 fonthidden width87"} title={item.student_id}>{item.student_id}</div>
<div className={"fl ml20"}>{item.commit_status===true?<span className={"color-orange"}>已提交</span> :""}</div>
</div>
)
})}
@ -599,12 +657,13 @@ render(){
height: '30px',
display:item.user_name===undefined?"none":""
}}>
<Tooltip placement="bottom" title={item.user_nam}>
<div className={"fl ml5 fonthidden"} style={{width: '50px'}}>{item.user_name}</div>
<Tooltip placement="bottom" title={item.user_name}>
<div className={"fl ml5 fonthidden width87"}>{item.user_name}</div>
</Tooltip>
<div className={"fl ml40 color-grey-9"}>{item.group_name}</div>
<div className={"fl ml40 color-grey-9"}>{item.student_id}</div>
{key>0?<div className={"fr"}><i className={"iconfont icon-shanchudiao fl "} style={{marginTop:'-4px'}} onClick={()=>this.delecttask_status(item.user_id)}></i></div>:""}
<div className={"fl ml5 fonthidden width87 color-grey-9"}>{item.group_name}</div>
<div className={"fl ml5 color-grey-9 fonthidden width87"}>{item.student_id}</div>
{key>0?<div className={"fl ml20"}><i className={"iconfont icon-shanchudiao fl "} style={{marginTop:'-4px'}} onClick={()=>this.delecttask_status(item.user_id)}></i></div>:""}
</div>
)
})}
@ -627,11 +686,11 @@ render(){
<Form.Item>
<div className="clearfix mt30 mb30">
<Button type="primary" htmlType="submit" className="defalutSubmitbtn fl mr20">提交</Button>
<Button type="primary" htmlType="submit" onClick={this.handleSubmit} className="defalutSubmitbtn fl mr20">提交</Button>
<a onClick={this.gocannel} className="defalutCancelbtn fl">取消</a>
</div>
</Form.Item>
</Form>
{/*</Form>*/}
</div>
</div>

@ -256,29 +256,39 @@ class GraduationTasksappraise extends Component{
<div className={"ml20"}>
补交原因{firelistdata&&firelistdata.revise_reason}
</div>
{firelistdata===undefined?"":firelistdata.length===0?"":firelistdata.revise_attachments.map((item,key)=>{
return(
<div className="color-grey" key={key}>
<a className="color-grey ml20">
<i className="font-14 color-green iconfont icon-fujian mr8" aria-hidden="true"></i>
</a>
<a href={item.url}
className="mr12 color9B9B" length="58">
{item.title}
</a>
<span className="color656565 mt2 color-grey-6 font-12 mr8">{item.filesize}</span>
{item.delete===true?<i className="font-14 iconfont icon-guanbi " id={item.id} aria-hidden="true" onClick={()=>this.onAttachmentRemove(item.id)}></i>:""}
</div>
)
})}
<div className={"color-grey-6 h20 ml20"}>
<span className={"color9B9B fr mr10"}>更新</span>
<span className={"fr font-13 mr10 ml10"}>{firelistdata&&firelistdata.atta_update_user}</span>
<span className={"color9B9B fr"}>
{moment(firelistdata&&firelistdata.atta_update_time).format('YYYY-MM-DD HH:mm:ss')==="Invalid date"?"":moment(firelistdata&&firelistdata.atta_update_time).format('YYYY-MM-DD HH:mm:ss')}
</span>
</div>
<div className="color-grey" key={key}>
{firelistdata===undefined?"":firelistdata.length===0?"":firelistdata.revise_attachments.map((item,key)=>{
return(
<span>
<a className="color-grey ml20">
<i className="font-14 color-green iconfont icon-fujian mr8" aria-hidden="true"></i>
</a>
<a href={item.url}
className="mr12 color9B9B" length="58">
{item.title}
</a>
<span className="color656565 mt2 color-grey-6 font-12 mr8">{item.filesize}</span>
{item.delete===true?<i className="font-14 iconfont icon-guanbi " id={item.id} aria-hidden="true" onClick={()=>this.onAttachmentRemove(item.id)}></i>:""}
</span>
)
})}
</div>
<div className={"color-grey-6 h20 ml20"}>
<span className={"color9B9B fr mr10"}>更新</span>
<span className={"fr font-13 mr10 ml10"}>{firelistdata&&firelistdata.atta_update_user}</span>
<span className={"color9B9B fr"}>
{moment(firelistdata&&firelistdata.atta_update_time).format('YYYY-MM-DD HH:mm:ss')==="Invalid date"?"":moment(firelistdata&&firelistdata.atta_update_time).format('YYYY-MM-DD HH:mm:ss')}
</span>
</div>
</div>}
{datalist&&datalist.project_info===undefined?"":
<div className={"stud-class-set edu-back-white padding20-30 bor-top-greyE"}>

@ -197,7 +197,6 @@ class GraduationTasksappraiseMainEditor extends Component{
.mainEditor {
padding: 0 10px;
padding-bottom: 8px;
height: 288px;
}
.mainEditorTitle {
margin-bottom: 6px;
@ -218,7 +217,7 @@ class GraduationTasksappraiseMainEditor extends Component{
</Upload>
<div>
<div style={{height: '36px'}}>
<div style={{ float: 'left' }}>
<InputNumber placeholder="请填写分数" value={score} onChange={this.onScoreChange} className={numberErrorMessage ? 'numberInputError' : ''}
style={{width:"120px", marginRight: '6px'}}

@ -94,7 +94,7 @@ class GraduationTaskssettinglist extends Component{
for (var i = 0; i < worklists.length; i++) {
datalist.push({
name: worklists[i].name,
number: (parseInt(page)-1)*parseInt(limit)+(i+1),
number: (parseInt(pages)-1)*parseInt(limit)+(i+1),
stduynumber: worklists[i].student_id,
classroom: worklists[i].class_grouping_name,
grouping: result.data.have_grouping === true ? worklists[i].grouping_name : null,
@ -1279,9 +1279,6 @@ class GraduationTaskssettinglist extends Component{
text-overflow: ellipsis;
white-space: nowrap;
}
.ant-table-tbody > tr:last-child > td{
border:none!important;
}
`
}
</style>
@ -1548,24 +1545,43 @@ class GraduationTaskssettinglist extends Component{
<div id="graduation_work_list" style={{padding:'0px 40px 10px 40px'}}>
<div className="clearfix">
{this.props.isAdmin()?<span className="fl color-grey-9 font-12"><span className="color-orange-tip">{taskslistdata&&taskslistdata.work_count}</span>{taskslistdata&&taskslistdata.work_count} </span>:""}
{
this.props.isAdmin() ?
<div className="fr">
<li className="drop_down edu-txt-center">
<span className="color-grey-6">{order==="updated_at"?"更新时间":order==="work_score"?"最终成绩":order==="student_id"?"学生学号":""}排序</span>
<i className="iconfont icon-xiajiantou ml5 font-12 color-grey-9"></i>
<ul className="drop_down_normal with100">
<li onClick={(e)=>this.funorder("updated_at")}><a data-remote="true">更新时间</a></li>
<li onClick={(e)=>this.funorder("work_score" )}><a data-remote="true">最终成绩</a></li>
<li onClick={(e)=>this.funorder("student_id" )}><a data-remote="true">学生学号</a></li>
</ul>
{this.props.isAdmin()===true?<span className="fl color-grey-6 font-12">
<span className="color-orange-tip">{taskslistdata&&taskslistdata.work_count}</span>
个检索结果{taskslistdata&&taskslistdata.work_count} 学生 </span>:""}
{this.props.isAdmin()===true?<div className="fr color-grey-6 edu-menu-panel">
<p>
<a data-remote="true">
{order==="updated_at"?"更新时间":order==="work_score"?"最终成绩":order==="student_id"?"学生学号":""}排序</a>
<i className="iconfont icon-xiajiantou ml5 font-12 color-grey-6"></i></p>
<ul className="edu-menu-list">
<li onClick={(e)=>this.funorder("updated_at")}><a data-remote="true">更新时间</a>
</li>
</div>
:""
}
<li onClick={(e)=>this.funorder("work_score" )}><a data-remote="true">最终成绩</a>
</li>
<li onClick={(e)=>this.funorder("student_id" )}><a data-remote="true">学生学号</a>
</li>
</ul>
</div>:""}
</div>
{this.props.isStudent()===true?
<div className="clearfix">
<span className="mr15 color-grey9">
<span className={"color-orange"}>{taskslistdata&&taskslistdata.commit_count}
</span> </span>
<span className="mr15 color-grey9">
<span className={"color-orange"}>{taskslistdata&&taskslistdata.uncommit_count}
</span> </span>
<Tooltip title={taskslistdata&&taskslistdata.left_time.status} placement="bottom">
<span className="mr15 color-grey9">
{taskslistdata&&taskslistdata.left_time.status} :
<span className={"ml10 color-orange"}>
{taskslistdata&&taskslistdata.left_time.time}</span>
</span>
</Tooltip>
</div>
:""}
</div>
{
@ -1785,24 +1801,49 @@ class GraduationTaskssettinglist extends Component{
<div id="graduation_work_list" style={{ padding: '18px 40px 10px',height: '56px'}}>
<div className="clearfix">
<span className="fl color-grey-6 font-12"><span className="color-orange-tip">{taskslistdata&&taskslistdata.work_count}</span>{taskslistdata&&taskslistdata.work_count} </span>
<div className="fr color-grey-6 edu-menu-panel">
<p><a data-remote="true">
{order==="updated_at"?"时间":order==="work_score"?"成绩":order==="student_id"?"学号":""}排序</a><i
className="iconfont icon-xiajiantou ml5 font-12 color-grey-6"></i></p>
<ul className="edu-menu-list">
<li onClick={(e)=>this.funorder("updated_at")} className={order==="updated_at"?"none":""}><a data-remote="true">时间</a>
</li>
<li onClick={(e)=>this.funorder("work_score" )} className={order==="work_score"?"none":""}><a data-remote="true">成绩</a>
</li>
<li onClick={(e)=>this.funorder("student_id" )} className={order==="student_id"?"none":""}><a data-remote="true">学号</a>
</li>
</ul>
</div>
</div>
{this.props.isAdmin()===true?
<div className="clearfix">
<span className="fl color-grey-6 font-12">
<span className="color-orange-tip">{taskslistdata&&taskslistdata.work_count}</span>
个检索结果{taskslistdata&&taskslistdata.work_count} 学生
</span>
<div className="fr color-grey-6 edu-menu-panel">
<p><a data-remote="true">
{order==="updated_at"?"时间":order==="work_score"?"成绩":order==="student_id"?"学号":""}排序</a><i
className="iconfont icon-xiajiantou ml5 font-12 color-grey-6"></i></p>
<ul className="edu-menu-list">
<li onClick={(e)=>this.funorder("updated_at")} className={order==="updated_at"?"none":""}><a data-remote="true">时间</a>
</li>
<li onClick={(e)=>this.funorder("work_score" )} className={order==="work_score"?"none":""}><a data-remote="true">成绩</a>
</li>
<li onClick={(e)=>this.funorder("student_id" )} className={order==="student_id"?"none":""}><a data-remote="true">学号</a>
</li>
</ul>
</div>
</div>
:""}
{this.props.isStudent()===true?
<div className="clearfix">
<span className="mr15 color-grey9">
<span className={"color-orange"}>{taskslistdata&&taskslistdata.commit_count}
</span> </span>
<span className="mr15 color-grey9">
<span className={"color-orange"}>{taskslistdata&&taskslistdata.uncommit_count}
</span> </span>
<Tooltip title={taskslistdata&&taskslistdata.left_time.status} placement="bottom">
<span className="mr15 color-grey9">
{taskslistdata&&taskslistdata.left_time.status} :
<span className={"ml10 color-orange"}>
{taskslistdata&&taskslistdata.left_time.time}</span>
</span>
</Tooltip>
</div>
:""}
</div>

@ -1,5 +1,5 @@
import React,{ Component } from "react";
import { Input,Checkbox,Table, Pagination, Modal,Menu ,Spin} from "antd";
import { Input,Checkbox,Table, Pagination, Modal,Menu ,Spin, Tooltip} from "antd";
import ClipboardJS from 'clipboard'
import '../css/Courses.css'
import '../css/members.css'
@ -31,14 +31,6 @@ const dataSource = [{
const buildColumns = (that) => {
const columns=[{
title: '',
dataIndex: 'check',
key: 'check',
render: (text, item) => {
return <Checkbox value={item.course_member_id}></Checkbox>
},
width:"5%"
},{
title: '序号',
dataIndex: 'id',
key: 'id',
@ -71,10 +63,23 @@ const buildColumns = (that) => {
width:"50%",
className:"color-grey-6"
}];
const isAdmin = that.props.isAdmin()
if (isAdmin) {
columns.unshift({
title: '',
dataIndex: 'check',
key: 'check',
render: (text, item) => {
return <Checkbox value={item.course_member_id}></Checkbox>
},
width:"5%"
})
}
return columns;
}
// 1-按照学号排序 2-按照分班排序,
// 1-按照学生学号 2-按照分班名称
const ORDER_BY_NUM = 1;
const ORDER_BY_GROUP = 2;
@ -312,6 +317,8 @@ class studentsList extends Component{
if (result.data.status == 0) {
this.props.showNotification('移动成功')
this.fetchAll()
this.props.updataleftNavfun()
}
}).catch((error)=>{
console.log(error);
@ -357,6 +364,7 @@ class studentsList extends Component{
this.props.showNotification('删除成功')
this.fetchAll()
this.setState({checkBoxValues: []})
trigger('updatabanner')
}
}).catch((error)=>{
console.log(error);
@ -423,9 +431,9 @@ class studentsList extends Component{
checkBoxValues,
checkAllValue
}=this.state;
let currentOrderName = '学排序'
let currentOrderName = '学生学号'
if (order == ORDER_BY_GROUP) {
currentOrderName = '分班排序'
currentOrderName = '分班名称'
}
const { coursesids } = this.props
const course_group_id = this.props.match.params.course_group_id
@ -445,7 +453,14 @@ class studentsList extends Component{
<span className="color-orange font-16">
{invite_code}
</span>
<i class="iconfont icon-fuzhi font-14 ml10 copybtn" style={{color: '#FF6800', cursor: 'pointer', verticalAlign: 'baseline'}} data-clipboard-text={invite_code} ></i>
<Tooltip title={<div>
<div>成员可以通过邀请码主动加入课堂</div>
<div>点击立刻复制邀请码</div>
</div>}>
<span>
<i class="iconfont icon-fuzhi font-14 ml10 copybtn" style={{color: '#FF6800', cursor: 'pointer', verticalAlign: 'baseline'}} data-clipboard-text={invite_code} ></i>
</span>
</Tooltip>
</React.Fragment>
}
@ -528,7 +543,7 @@ class studentsList extends Component{
total_count > 0 ?
<div className="mt20 edu-back-white padding20">
<div className="clearfix stu_head" style={{paddingLeft: '15px'}}>
<Checkbox className="fl" onChange={this.onCheckAll} checked={checkAllValue} >已选 {checkBoxValues.length} </Checkbox>
{isAdmin && <Checkbox className="fl" onChange={this.onCheckAll} checked={checkAllValue} >已选 {checkBoxValues.length} </Checkbox>}
<div className="studentList_operation_ul">
{isAdmin && <li className="li_line"><a href="javascript:void(0)" className="color-grey-9" onClick={this.onDelete}>删除</a></li>}
{isAdmin && <li className="li_line drop_down">
@ -562,8 +577,8 @@ class studentsList extends Component{
<li className="drop_down">
{currentOrderName}<i className="iconfont icon-xiajiantou font-12 ml2"></i>
<ul className="drop_down_normal">
<li onClick={() => this.onSortTypeChange(ORDER_BY_NUM)} >排序</li>
<li onClick={() => this.onSortTypeChange(ORDER_BY_GROUP)} >分班排序</li>
<li onClick={() => this.onSortTypeChange(ORDER_BY_NUM)} >生学</li>
<li onClick={() => this.onSortTypeChange(ORDER_BY_GROUP)} >分班名称</li>
</ul>
</li>
</div>

@ -32,13 +32,6 @@ function buildColumns(that) {
const isAdminOrTeacher = that.props.isAdminOrTeacher()
const { course_groups } = that.state
const columns = [{
title: '',
dataIndex: 'course_member_id',
key: 'course_member_id',
render: (content, item, index) => {
return <Checkbox value={content}></Checkbox>
}
},{
title: '序号',
// dataIndex: 'name',
key: 'index',
@ -62,7 +55,7 @@ function buildColumns(that) {
dataIndex: 'role',
key: 'role',
}]
that.course_groups && that.course_groups.length && columns.push({
that.state.course_groups && that.state.course_groups.length && columns.push({
title: <Tooltip title="仅能批阅指定分班的作品">管理权限</Tooltip>,
width: 230,
key: 'course_groups',
@ -116,7 +109,8 @@ function buildColumns(that) {
}
,
});
if (that.hasGraduationModule()) {
const hasGraduationModule = that.hasGraduationModule()
if (hasGraduationModule) {
columns.push({
title: '答辩组',
key: 'graduation_group',
@ -156,6 +150,16 @@ function buildColumns(that) {
},
})
}
if(isAdmin && hasGraduationModule) {
columns.unshift({
title: '',
dataIndex: 'course_member_id',
key: 'course_member_id',
render: (content, item, index) => {
return <Checkbox value={content}></Checkbox>
}
})
}
return columns
}
@ -185,7 +189,7 @@ class studentsList extends Component{
searchValue:e.target.value
})
}
// approval 2 - 拒绝
onAgree = (record, approval = 1) => {
const courseId = this.props.match.params.coursesId
@ -198,7 +202,7 @@ class studentsList extends Component{
})
.then((response) => {
if (response.data.status == 0) {
this.props.showNotification(`${approval ? '同意' : '拒绝'}`)
this.props.showNotification(`${approval == 1? '同意' : '拒绝'}`)
this.fetchAll(1)
}
})
@ -216,14 +220,22 @@ class studentsList extends Component{
})
this.fetchAll(1);
const isAdminOrTeacher = this.props.isAdminOrTeacher()
const isAdmin = this.props.isAdmin()
isAdminOrTeacher && this.getGroupList();
this.getCourseGroups();
on('addTeacherSuccess', this.addTeacherSuccessListener)
isAdmin && on('updateNavSuccess', this.updateNavSuccess)
}
componentWillUnmount() {
off('addTeacherSuccess', this.addTeacherSuccessListener)
const isAdmin = this.props.isAdmin()
isAdmin && off('updateNavSuccess', this.updateNavSuccess)
}
updateNavSuccess = () => {
this.getCourseGroups()
}
addTeacherSuccessListener = (e, data) => {
// const params = JSON.parse(data)
@ -454,6 +466,7 @@ class studentsList extends Component{
if (response.data.status == 0) {
// {"status":1,"message":"删除成功"}
this.props.showNotification('删除成功')
trigger('updatabanner')
this.fetchAll()
}
})
@ -499,6 +512,7 @@ class studentsList extends Component{
})
}
const isAdminOrTeacher = this.props.isAdminOrTeacher()
const hasGraduationModule = this.hasGraduationModule()
return(
<React.Fragment>
@ -544,9 +558,9 @@ class studentsList extends Component{
`}</style>
<div className="mt20 edu-back-white padding20 teacherList">
<div className="clearfix stu_head" style={{paddingLeft: '15px'}}>
<Checkbox className="fl" onChange={this.onCheckAll} checked={checkAllValue} >已选 {checkBoxValues.length} </Checkbox>
{ isAdmin && hasGraduationModule && <Checkbox className="fl" onChange={this.onCheckAll} checked={checkAllValue} >已选 {checkBoxValues.length} </Checkbox> }
{ <div className="studentList_operation_ul">
{ this.hasGraduationModule() && isAdminOrTeacher && <li className="li_line drop_down">
{ hasGraduationModule && isAdminOrTeacher && <li className="li_line drop_down">
加入答辩组<i className="iconfont icon-xiajiantou font-12 ml2"></i>
<ul className="drop_down_menu" style={{"right":"0px","left":"unset", minWidth: '222px'}}>

@ -340,8 +340,8 @@ class PollDetailTabForthRules extends Component{
<div className="bor-top-greyE pt20">
<p className="clearfix mb10">
<span className="fl with40 pr20">&nbsp;</span>
<span className="fl pr20 color-grey-c with25">(学生收到{this.props.type==="Exercise"?"试卷":"问卷"}的时间)</span>
<span className="fl color-grey-c">(学生可以答题的时间截点)</span>
<span className="fl pr20 color-grey-c with25">(学生收到{this.props.moduleName || (this.props.type==="Exercise"?"试卷":"问卷")}的时间)</span>
<span className="fl color-grey-c">({this.props.moduleName == '作业' ? '学生“按时”提交作品的时间截点' : '学生可以答题的时间截点'})</span>
</p>
{

@ -299,9 +299,11 @@ class Listofworks extends Component {
var data = {
search: "",
order: "",
b_order: "",
b_order: "asc",
work_status: "",
course_group: "",
page:1,
limit:20,
}
axios.post(urll, data).then((result) => {
if (result !== undefined) {

@ -90,7 +90,9 @@ class Listofworksstudentone extends Component {
var data = {
search: "",
order: "",
b_order: "",
b_order: "asc",
page:1,
limit:20,
work_status: "",
course_group: "",
}

@ -210,7 +210,7 @@ class ShixunhomeWorkItem extends Component{
</div>
<div className="task-popup-submit clearfix">
<a className="task-btn task-btn-orange fr mr51"
onClick={() => this.hidestartshixunsreplace(hidestartshixunsreplacevalue)}>知道了</a>
onClick={() => this.hidestartshixunsreplace(hidestartshixunsreplacevalue)}>知道了</a>
</div>
</Modal>
<Modal

@ -36,9 +36,11 @@ class TraineetraininginformationModal extends Component {
props: this.props,
userids: this.props.userids,
game_list:this.props.game_list,
gline:0,
})
// console.log("TraineetraininginformationModal")
// console.log(JSON.stringify(this.props))
// console.log(this.props)
}
@ -47,6 +49,7 @@ class TraineetraininginformationModal extends Component {
}
componentDidMount() {
// this.seacthdata();
}
// 设置数据
// seacthdata = () => {
@ -54,68 +57,116 @@ class TraineetraininginformationModal extends Component {
// console.log(datalist)
// }
render() {
let columns = [
{
title: '关卡',
dataIndex: 'number',
key: 'number',
width: 150,
align: "center",
render: (text, record) => (
<span >
<a style={{"color":'#07111B', "text-align": "center"}}>{record.number}</a>
const columns = [
{
title: '关卡',
dataIndex: 'number',
key: 'number',
align: "center",
render: (text, record) => (
<span >
<a style={{"color":'#07111B', "text-align": "center"}}>{record.number}</a>
</span>
),
},
{
title: '完成时间',
dataIndex: 'name',
key: 'name',
width: 178,
align: "center",
render: (text, record) => (
<span >
<a style={{"color":'#989898', "text-align": "center"}} >{record.name==='Invalid date'?"--":record.name}</a>
</span>
),
},
{
title: '耗时',
dataIndex: 'stduynumber',
key: 'stduynumber',
align: "center",
render: (text, record) => (
<span>
<a style={{"color":'#989898', "text-align": "center"}}>{record.stduynumber}</a>
</span>
),
},
{
title: '经验值',
key: 'classroom',
dataIndex: 'classroom',
align: "center",
render: (text, record) => (
<span>
<a style={{"color":'#29BD8B', "text-align": "center"}}>{record.classroom}</a>
</span>
),
},
{
title: '完成时间',
dataIndex: 'name',
key: 'name',
width: 150,
align: "center",
render: (text, record) => (
<span >
),
}
];
const columnss = [
{
title: '关卡',
dataIndex: 'number',
key: 'number',
width: 92,
align: "center",
render: (text, record) => (
<span >
<a style={{"color":'#07111B', "text-align": "center"}}>{record.number}</a>
</span>
),
},
{
title: '完成时间',
dataIndex: 'name',
key: 'name',
width: 178,
align: "center",
render: (text, record) => (
<span >
<a style={{"color":'#989898', "text-align": "center"}} >{record.name==='Invalid date'?"--":record.name}</a>
</span>
),
},
{
title: '',
dataIndex: 'complete_status',
key: 'complete_status',
width: 150,
align: "center",
render: (text, record) => (
<span>
{record.complete_status===2?<img src={delay}/>:record.complete_status===3?<img src={invalid}/>:""}
),
},
{
title: '',
dataIndex: 'complete_status',
key: 'complete_status',
width: 100,
align: "center",
render: (text, record) => (
<span>
{record.complete_status===2?<img src={delay}/>:record.complete_status===3?<img src={invalid}/>:""}
</span>
),
},
{
title: '耗时',
dataIndex: 'stduynumber',
key: 'stduynumber',
width: 150,
align: "center",
render: (text, record) => (
<span>
),
},
{
title: '耗时',
dataIndex: 'stduynumber',
key: 'stduynumber',
width: 92,
align: "center",
render: (text, record) => (
<span>
<a style={{"color":'#989898', "text-align": "center"}}>{record.stduynumber}</a>
</span>
),
},
{
title: '经验值',
key: 'classroom',
width: 150,
dataIndex: 'classroom',
align: "center",
render: (text, record) => (
<span>
),
},
{
title: '经验值',
key: 'classroom',
width: 92,
dataIndex: 'classroom',
align: "center",
render: (text, record) => (
<span>
<a style={{"color":'#29BD8B', "text-align": "center"}}>{record.classroom}</a>
</span>
),
}
];
),
}
];
return (
<div>
@ -128,62 +179,81 @@ class TraineetraininginformationModal extends Component {
onCancel={this.Cancel}
>
<div style={{width:"100%" }}className="login_register_content" >
<div style={{"width": "100%","text-align": "center"}}>
<a style={{"text-align": "center"}}>{this.props.viewtrainingdata === undefined ? "" : this.props.viewtrainingdata.shixun_name}</a>
<a className="ml20 " style={{"text-align": "center","color":'#29BD8B'}} >经验值<span style={{"color":'#29BD8B'}}> {this.props.viewtrainingdata === undefined ? "" : this.props.viewtrainingdata.shixun_score}</span></a>
<div style={{"width": "100%","text-align": "left","clear": "both"}}>
<div className="mt5 fl" >
<span style={{"text-align": "left"}}>{this.props.viewtrainingdata === undefined ? "" : this.props.viewtrainingdata.shixun_name}</span>
<span className="ml10 " style={{"text-align": "left","color":'#29BD8B'}} >经验值<span style={{"color":'#29BD8B'}}> {this.props.viewtrainingdata === undefined ? "" : this.props.viewtrainingdata.shixun_score}</span></span>
</div>
{/*<Button type="primary" className="ml30" >实训报告</Button>*/}
<a className="ml30 color-blue " style={{"text-align": "center"}} target={"_blank"} href={`/courses/${this.props.coursesId}/shixun_homeworks/${this.props.viewtrainingdata.work_id}/shixun_work_report`}>
实训报告
</a>
<Button type="primary" className="lh38 fr" style={{"text-align": "center","width": "100px",color: "#fff"}} href={`/courses/${this.props.coursesId}/shixun_homeworks/${this.props.viewtrainingdata.work_id}/shixun_work_report`}>
实训报告
</Button>
{/*这里到时候要做判断*/}
</div>
</div>
<div className=" bor-bottom-greyE mt10"></div>
<div className=" bor-bottom-greyE mt45 "></div>
<div style={{"clear": "both"}}>
<div className="fl edu-back-white ml10 ">
<img alt="头像" className="radius mt10" height="70" id="nh_user_logo" name="avatar_image"
src={this.props.viewtrainingdata === undefined ? "" : "https://www.educoder.net/images/" + `${this.props.viewtrainingdata.image_url}`}
width="70"/>
</div>
<div className="fl edu-back-white ml20 mt10">
<li>{this.props.viewtrainingdata === undefined ? "" :this.props.viewtrainingdata.username}<span style={{"color":"#323232"}}> 通关</span><span style={{"color": '#FF6800'}}>{this.props.viewtrainingdata === undefined ? "" :this.props.viewtrainingdata.complete_count}/{this.props.viewtrainingdata === undefined ? "" :this.props.viewtrainingdata.challenges_count}</span></li>
<li><span style={{"color":"#989898"}} >完成效率</span><span style={{"color":"#4C4C4C"}}>{this.props.viewtrainingdata === undefined ? "" :this.props.viewtrainingdata.efficiency}</span></li>
<li><span style={{"color":"#989898"}}>通关时间</span> <span style={{"color":"#4C4C4C"}}>{this.props.viewtrainingdata === undefined ? "":moment(this.props.viewtrainingdata.passed_time).format('YYYY-MM-DD HH:mm')==="Invalid date"?"--":moment(this.props.viewtrainingdata.passed_time).format('YYYY-MM-DD HH:mm')}</span> </li>
<img alt="头像" className="radius mt10" height="70" id="nh_user_logo" name="avatar_image"
src={this.props.viewtrainingdata === undefined ? "" : "https://www.educoder.net/images/" + `${this.props.viewtrainingdata.image_url}`}
width="70"/>
</div>
<div className="fl edu-back-white ml20 mt10">
<li className="mt20"> <span style={{"color":"#989898"}}>课堂最高完成效率</span> <span style={{"color":"#4C4C4C"}}>{this.props.viewtrainingdata === undefined ? "" :this.props.viewtrainingdata.max_efficiency} </span> </li>
<li><span style={{"color":"#989898"}}>总耗时:</span> <span style={{"color":"#4C4C4C"}}> {this.props.viewtrainingdata === undefined ? "" :this.props.viewtrainingdata.total_spend_time}</span> </li>
<div className="fl edu-back-white ml20 mt10">
<li>{this.props.viewtrainingdata === undefined ? "" :this.props.viewtrainingdata.username}<span style={{"color":"#323232"}}> 通关</span><span style={{"color": '#FF6800'}}>{this.props.viewtrainingdata === undefined ? "" :this.props.viewtrainingdata.complete_count}/{this.props.viewtrainingdata === undefined ? "" :this.props.viewtrainingdata.challenges_count}</span></li>
<li><span style={{"color":"#989898"}} >完成效率</span><span style={{"color":"#4C4C4C"}}>{this.props.viewtrainingdata === undefined ? "" :this.props.viewtrainingdata.efficiency}</span></li>
<li><span style={{"color":"#989898"}}>通关时间</span> <span style={{"color":"#4C4C4C"}}>{this.props.viewtrainingdata === undefined ? "":moment(this.props.viewtrainingdata.passed_time).format('YYYY-MM-DD HH:mm')==="Invalid date"?"--":moment(this.props.viewtrainingdata.passed_time).format('YYYY-MM-DD HH:mm')}</span> </li>
</div>
<div className="fl edu-back-white ml20 mt10">
<li className="mt20"> <span style={{"color":"#989898"}}>课堂最高完成效率</span> <span style={{"color":"#4C4C4C"}}>{this.props.viewtrainingdata === undefined ? "" :this.props.viewtrainingdata.max_efficiency} </span> </li>
<li><span style={{"color":"#989898"}}>总耗时:</span> <span style={{"color":"#4C4C4C"}}> {this.props.viewtrainingdata === undefined ? "" :this.props.viewtrainingdata.total_spend_time}</span> </li>
</div>
</div>
{
this.props.game_list === undefined?"" : this.props.game_list.length<4?
<style>
{
` .ant-table-body{
overflow: hidden !important;
}`
}
</style>
:""
}
<div className={"both"}></div>
{this.props.game_list === undefined ? "" : <Table
className="mt20"
dataSource={this.props.game_list}
columns={columns}
pagination={{ //分页
{
this.props.game_list === undefined?"" : this.props.game_list.length<4?
<div>
<style>
{
` .ant-table-body{
overflow: hidden !important;
}`
}
</style>
<div className={"both"}></div>
{this.props.game_list === undefined ? "" : <Table
className="mt20"
dataSource={this.props.game_list}
columns={columns}
loading={false}
pagination={false}
onChange={this.TablePagination}
/>}
</div>
:
<div>
<div className={"both"}></div>
{this.props.game_list === undefined ? "" : <Table
className="mt20"
dataSource={this.props.game_list}
columns={columns}
pagination={{ //分页
total: this.props.game_list.length, //数据总数量
pageSize: this.props.game_list.length, //一页显示几条
current: 1,
}}
loading={false}
pagination={false}
onChange={this.TablePagination}
scroll={{ y: 300 }}
/>}
</Modal>
loading={false}
pagination={false}
onChange={this.TablePagination}
scroll={{ y: 300 }}
/>}
</div>
}
</Modal>
</div>

@ -141,7 +141,7 @@ class Trainingjobsetting extends Component {
// console.log(homeworkid)
let url = `/homework_commons/${homeworkid}/settings.json`;
axios.get(url).then((result) => {
if (result.status === 200) {
if (result!=undefined) {
// console.log(result.data.code_review)
// console.log("设置页")
// console.log(JSON.stringify(result))
@ -637,11 +637,12 @@ class Trainingjobsetting extends Component {
//允许补交
onChanges = (e) => {
// debugger
// console.log("640");
// console.log(this.state.end_time);
if(e.target.value ==="允许补交"){
if(this.state.end_time !== null && this.state.end_time!== undefined){
// console.log(this.state.end_time);
var times = this.state.end_time.format('YYYY-MM-DD HH:mm');
var times = this.state.deadline.format('YYYY-MM-DD HH:mm');
this.setState({
late_time:moment(handleDateString(times)).add(1, 'months'),
late_times:moment(handleDateString(times)).add(1, 'months').format('YYYY-MM-DD HH:mm'),
@ -955,26 +956,60 @@ class Trainingjobsetting extends Component {
disabledEndDate = (end_time) => {
const publish_time = this.state.publish_time;
if (!end_time || !publish_time) {
// disabledEndDate = (end_time) => {
// const publish_time = this.state.publish_time;
// if (!end_time || !publish_time) {
// return false;
// }
// return end_time.valueOf() <= publish_time.valueOf();
//
// }
// disabledEndDates = (end_time) => {
// const publish_time = this.state.end_time
// if (!end_time || !publish_time) {
// return false;
// }
// console.log("end_time.valueOf()")
// // console.log(end_time.valueOf());
// // console.log(publish_time.valueOf());
// return end_time.valueOf() <= publish_time.valueOf();
//
//
// }
disabledStartDatestart= (startValue) => {
const endValue = this.state.end_time
if (!startValue || !endValue) {
return false;
}
return end_time.valueOf() <= publish_time.valueOf();
var endValues= moment(endValue).subtract(1, 'days');
return startValue.valueOf() > endValues.valueOf();
};
}
disabledEndDates = (end_time) => {
const publish_time = this.state.end_time
if (!end_time || !publish_time) {
disabledEndDateend = (endValue) => {
const startValue = this.state.publish_time;
if (!endValue || !startValue) {
return false;
}
console.log("end_time.valueOf()")
// console.log(end_time.valueOf());
// console.log(publish_time.valueOf());
return end_time.valueOf() <= publish_time.valueOf();
var endValuesys= moment(startValue).subtract(1, 'days');
return endValue.valueOf() <= endValuesys.valueOf();
};
disabledEndDateendd = (endsValue) => {
const endValues = this.state.end_time
if (!endsValue|| !endValues) {
return false;
}
var endValuesyss= moment(endValues).subtract(1, 'days');
return endsValue.valueOf() <= endValuesyss.valueOf();
};
}
onChangedata = (field, value, dateString) => {
this.setState({
[field]: handleDateString(dateString),
@ -1085,7 +1120,10 @@ class Trainingjobsetting extends Component {
// console.log(value);
console.log(dateString);
// console.log(handleDateString(dateString));
this.onChangedata('publish_time', value, dateString);
// this.onChangedata('publish_time', value, dateString);
this.setState({
publish_time:moment(handleDateString(dateString))
})
if(this.state.allowreplenishment === "允许补交") {
this.setState({
end_time:moment(handleDateString(dateString)).add(1, 'months'),
@ -1123,13 +1161,15 @@ class Trainingjobsetting extends Component {
deadline:undefined,
})
} else {
// console.log(moment(value, "YYYY-MM-DD HH:mm"));
// console.log(moment(this.state.publish_time, "YYYY-MM-DD HH:mm"));
if (moment(value, "YYYY-MM-DD HH:mm") <= moment(this.state.publish_time, "YYYY-MM-DD HH:mm")) {
this.setState({
unit_e_tip: "截止时间不能早于发布时间",
p_flag: true,
borredss:"bor-reds",
end_time:undefined,
deadline:undefined,
end_time:value.format('YYYY-MM-DD HH:mm'),
deadline:value.format('YYYY-MM-DD HH:mm'),
})
return
@ -1144,11 +1184,13 @@ class Trainingjobsetting extends Component {
} catch (e) {
}
this.onChangedata('end_time', value, dateString);
// this.onChangedata('end_time', value, dateString);
if(this.state.allowreplenishment === "允许补交"){
this.setState({
late_time:moment(handleDateString(dateString)).add(1, 'months'),
late_times:moment(handleDateString(dateString)).add(1, 'months').format('YYYY-MM-DD HH:mm'),
end_time:moment(handleDateString(dateString)),
deadline:moment(handleDateString(dateString)).format('YYYY-MM-DD HH:mm'),
late_time:moment(handleDateString(dateString)).add(2, 'months'),
late_times:moment(handleDateString(dateString)).add(2, 'months').format('YYYY-MM-DD HH:mm'),
})
}
@ -1164,7 +1206,7 @@ class Trainingjobsetting extends Component {
})
return;
}
let{publish_time,unifiedsetting,rulesdata}=this.state;
let{publish_time,end_time,unifiedsetting,rulesdata}=this.state;
if(unifiedsetting===true){
if (moment(value, "YYYY-MM-DD HH:mm") <= moment(publish_time)) {
@ -1172,20 +1214,30 @@ class Trainingjobsetting extends Component {
hand__e_tip: "补交时间不能早于发布时间",
hand_flags: true,
handclass:"bor-reds",
late_times:undefined,
late_time:undefined,
late_times:value.format('YYYY-MM-DD HH:mm'),
late_time:value.format('YYYY-MM-DD HH:mm'),
})
} else {
}
else if (moment(value, "YYYY-MM-DD HH:mm") <= moment(end_time)) {
this.setState({
hand__e_tip: "补交时间不能早于截止时间",
hand_flags: true,
handclass:"bor-reds",
late_times: value.format('YYYY-MM-DD HH:mm'),
late_time:value.format('YYYY-MM-DD HH:mm'),
})
}
else {
try {
this.setState({
late_times: value.format('YYYY-MM-DD HH:mm'),
late_time:value.format('YYYY-MM-DD HH:mm'),
hand__e_tip: "",
hand_flags: false,
handclass:"",
})
this.onChangedata('late_time', value, dateString);
}catch (e) {
}
@ -1206,11 +1258,11 @@ class Trainingjobsetting extends Component {
}else{
this.setState({
late_times: value.format('YYYY-MM-DD HH:mm'),
late_time:value.format('YYYY-MM-DD HH:mm'),
hand__e_tip: "",
hand_flags: false,
handclass:undefined,
})
this.onChangedata('late_time', value, dateString);
}
}
@ -1587,6 +1639,19 @@ class Trainingjobsetting extends Component {
{this.props.isAdmin()?this.state.code_review===false?"": <Link
to={`/courses/${this.state.props.match.params.coursesId}/${this.state.shixuntypes}/${this.state.props.match.params.homeworkid}/student_work`}>代码查重</Link> : ""}
<style>{
`
.poll_list a.active:after {
content: '';
width: 57px;
left: 10px;
bottom: 0px;
height: 2px;
background-color: #4CACFF;
position: absolute;
}
`
}</style>
<Link className="active"
to={`/courses/${this.state.props.match.params.coursesId}/${this.state.shixuntypes}/${this.state.props.match.params.homeworkid}/settings`}
>设置</Link>
@ -1611,7 +1676,7 @@ class Trainingjobsetting extends Component {
<div className="stud-class-set bor-bottom-greyE edu-back-white">
<div className=" mt20 pl20">
<p className=" clearfix ">
<span className="font-16 fl "style={{"color":"#05101A"}}>发布设置 <span className="ml15 color-grey-9" style={{"font-size":"14px","text-align":"left"}}>(课堂管理员教师助教拥有设置权限)</span></span>
<span className="font-16 fl "style={{"color":"#05101A"}}>发布设置 <span className="ml15 color-grey-9" style={{"font-size":"14px","text-align":"left"}}>(选中则所有分班使用相同的发布设置否则各个分班单独设置)</span></span>
{
!flagPageEdit && this.props.isAdmin() === true ?
<a className="fr" onClick={this.editSetting}><Tooltip title="编辑"><i
@ -1647,7 +1712,7 @@ class Trainingjobsetting extends Component {
<DatePicker
showToday={false}
id={"publishtimeid"}
disabledDate={this.disabledDateTime}
disabledDate={this.disabledStartDatestart}
disabledTime={disabledDateTime}
className={borreds}
showTime={{ format: 'HH:mm' }}
@ -1679,7 +1744,6 @@ class Trainingjobsetting extends Component {
<DatePicker
showToday={false}
id={"end_timeid"}
disabledDate={this.disabledDateTime}
disabledTime={disabledDateTime}
showTime={{ format: 'HH:mm' }}
className={borredss}
@ -1712,6 +1776,7 @@ class Trainingjobsetting extends Component {
>
<PollDetailTabForthRules
rules={rules}
moduleName={"作业"}
course_group={rulest}
flagPageEdit={flagPageEdit}
rulesCheckInfo={(info)=>this.rulesCheckInfo(info)}
@ -1760,7 +1825,6 @@ class Trainingjobsetting extends Component {
<DatePicker
showToday={false}
id={"late_timeid"}
disabledDate={this.disabledEndDates}
disabledTime={disabledDateTime}
format="YYYY-MM-DD HH:mm"
value={late_time && moment(late_time, dataformat)}
@ -1806,7 +1870,7 @@ class Trainingjobsetting extends Component {
<RadioGroup className="ml60 mt20" onChange={this.onChangeslevel} value={this.state.level}>
<Radio style={radioStyle} disabled={!flagPageEdit} className="c_grey" value={"扣分"}>按查看答案级别扣分<span
className="color-grey-9 font-14 ml15" style={{"text-align":"left"}}>(根据学员选择查看的实训答案级别(解题思路完整答案)扣减相应的分值)</span></Radio>
className="color-grey-9 font-14 ml15" style={{"text-align":"left"}}>根据学员选择查看的实训答案级别(解题思路完整答案)扣减相应的分值</span></Radio>
<Radio style={radioStyle} disabled={!flagPageEdit} className="c_grey mt15"
value={"满分"}>不扣分 </Radio>
</RadioGroup>
@ -1820,7 +1884,7 @@ class Trainingjobsetting extends Component {
checked={this.state.completionefficiencyscore} style={{"color":"#666666"}}>效率分<span
className={"font-14 color-grey-9 font-14 ml15"} style={{"text-align":"left"}}>(选中则学生最终成绩包含效率分)</span></Checkbox>
</div>
<div className="ml80 mt20">
<div className="ml80 mt30">
<span className="c_grey mr10" style={{"color":"#999999"}}>分值</span>
<InputNumber min={0} disabled={!flagPageEdit} max={100} className="ml10 h40 mr10 color-grey-9"
style={{width: "100px","color":"#999999"}}
@ -1867,7 +1931,7 @@ class Trainingjobsetting extends Component {
</div>
</div>
{/*公开设置*/}
<div className="stud-class-set bor-bottom-greyE bor-top-greyE edu-back-white mt35 ">
<div className="stud-class-set bor-top-greyE edu-back-white mt35 pb5 ">
<div className=" clearfix edu-back-white poll_list mt20">
<div className={"font-16 color-dark fl pl20 "} style={{"color":"#05101A"}}>公开设置</div>
</div>
@ -1879,7 +1943,6 @@ class Trainingjobsetting extends Component {
</div>
</div>

@ -427,7 +427,7 @@ class Workquestionandanswer extends Component {
</div>
</div>
{jobsettingsdata === undefined|| jobsettingsdata.data.description===null? "" : <div className=" clearfix edu-back-white poll_list mt20 mr20 ">
{jobsettingsdata === undefined|| jobsettingsdata.data.description===null? "" : <div className=" clearfix edu-back-white poll_list mt20 mr20 ">
<span>
<div className={"font-16 color-dark fl pl20 "}>
<div dangerouslySetInnerHTML={{__html: markdownToHTML(jobsettingsdata.data.description).replace(/▁/g,"▁▁▁")}}></div>
@ -466,7 +466,8 @@ class Workquestionandanswer extends Component {
<span>
<div className="font-16 color-dark break_word flex1 pl20 " style={{"padding":"10px 10px 10px 20px"}}>
{jobsettingsdata === undefined ? "" : jobsettingsdata === null ? "" : jobsettingsdata === "null" ? "" :
{jobsettingsdata === undefined ? "无" : jobsettingsdata === null ? "无" : jobsettingsdata === "null" ? "无" :
jobsettingsdata.data.explanation=== undefined?"无" :jobsettingsdata.data.explanation=== null?"无":
<div dangerouslySetInnerHTML={{__html:markdownToHTML(jobsettingsdata.data.explanation).replace(/▁/g,"▁▁▁")}}></div>
}
</div>

@ -1,52 +1,53 @@
/* 右侧搜索区域*/
.searchFor .searchCon {
width: 215px;
}
.search-new {
width:237px!important;
height: 30px;
margin-bottom: 30px;
}
.search-new-input {
padding-left: 16px;
height: 30px;
}
.search-span {
border-radius: 17px;
}
.search-new img {
right: 10px;
}
/* 右侧 热门标签 */
.HotLabelList a{display: block;float: left;padding: 0px 9px;height: 28px;line-height: 28px;border-radius: 14px;background-color: #f5f5f5;color: #666;margin-right: 10px;margin-bottom: 9px;}
.HotLabelList a.selected {
background: #4CACFF;
color: #fff;
}
/* 右侧 热门问题 */
.hotQuestionItem{padding:20px 0px;border-bottom: 1px solid #eee;}
.questiontName{max-width: 100%;display: block;}
/* 用户信息-UserSection*/
.user_default_btn {width: 114px;}
.userPrivateName{line-height: 25px;margin-bottom: 9px;}
.userPrivatePost{line-height: 20px;}
.noteDetailTitle{line-height: 38px;font-size: 24px;font-weight: normal;text-align:justify }
.noteDetailNum{float: left;padding:0px 12px;position: relative;color: #999!important;height: 28px;line-height: 26px;}
.noteDetailNum.rightline:after{position: absolute;content: '';right: 0px;width: 1px;background-color: #EAEAEA;height: 8px;top:10px;}
/*帖子详情点赞*/
.noteDetailPoint{width: 100px;height: 70px;background-color: #4cacff;border-radius: 35px;color: #FFFFff;text-align: center;margin: 0px auto;box-sizing: border-box;padding: 2px 0px;cursor: pointer; line-height: 22px;
padding-top: 12px;}
.Pointed{background-color:#f0f0f0;color: #b3b3b3; cursor: default}
.notefileDownload{height: 25px;line-height: 22px;}
/* 右侧搜索区域*/
.searchFor .searchCon {
width: 215px;
}
.search-new {
width:237px!important;
height: 30px;
margin-bottom: 30px;
margin-right: 35px;
}
.search-new-input {
padding-left: 16px;
height: 30px;
}
.search-span {
border-radius: 17px;
}
.search-new img {
right: 10px;
}
/* 右侧 热门标签 */
.HotLabelList a{display: block;float: left;padding: 0px 9px;height: 28px;line-height: 28px;border-radius: 14px;background-color: #f5f5f5;color: #666;margin-right: 10px;margin-bottom: 9px;}
.HotLabelList a.selected {
background: #4CACFF;
color: #fff;
}
/* 右侧 热门问题 */
.hotQuestionItem{padding:20px 0px;border-bottom: 1px solid #eee;}
.questiontName{max-width: 100%;display: block;}
/* 用户信息-UserSection*/
.user_default_btn {width: 114px;}
.userPrivateName{line-height: 25px;margin-bottom: 9px;}
.userPrivatePost{line-height: 20px;}
.noteDetailTitle{line-height: 38px;font-size: 24px;font-weight: normal;text-align:justify }
.noteDetailNum{float: left;padding:0px 12px;position: relative;color: #999!important;height: 28px;line-height: 26px;}
.noteDetailNum.rightline:after{position: absolute;content: '';right: 0px;width: 1px;background-color: #EAEAEA;height: 8px;top:10px;}
/*帖子详情点赞*/
.noteDetailPoint{width: 100px;height: 70px;background-color: #4cacff;border-radius: 35px;color: #FFFFff;text-align: center;margin: 0px auto;box-sizing: border-box;padding: 2px 0px;cursor: pointer; line-height: 22px;
padding-top: 12px;}
.Pointed{background-color:#f0f0f0;color: #b3b3b3; cursor: default}
.notefileDownload{height: 25px;line-height: 22px;}

@ -149,7 +149,7 @@ class EducoderLogin extends Component {
"align-items": "center",
"width": "100%",
}}>
<div style={{"margin-top": "40px","height":"500px"}}>
<div style={{"margin-top": "40px","height":"530px"}}>
<LoginRegisterComponent {...this.props} {...this.state}
Setshowbool={this.Setshowbool} ></LoginRegisterComponent>
@ -163,7 +163,7 @@ class EducoderLogin extends Component {
"align-items": "center",
"width": "100%",
}}>
<div style={{"margin-top": "40px","height":"500px"}}>
<div style={{"margin-top": "40px","height":"530px"}}>
<FindPasswordComponent {...this.props} {...this.state}
Setshowbool={this.Setshowbool}></FindPasswordComponent>
@ -171,15 +171,13 @@ class EducoderLogin extends Component {
</div>
}
<div style={{"height":"250px",
<div style={{"height":"180px",
"display": "flex",
"justify-content": "center",
"align-items": "center",
"width": "100%",
}}>
<div className="font-14 color-grey-9 " style={{marginTop:"15px"}}>© 2019 EduCoder 湘ICP备17009477号 Trustie & IntelliDE inside</div>
<div className="font-14 color-grey-9 " style={{marginTop:"15px"}}><span className="font-18">©</span>&nbsp;2019&nbsp;EduCoder<span className="ml15 mr15">ICP17009477</span><a href="https://team.trustie.net" style={{"color":"#888"}} target="_blank">Trustie</a>&nbsp;&nbsp;&nbsp;&amp;&nbsp;&nbsp;&nbsp;IntelliDE inside.</div>
</div>
</div>
</div>

@ -12,7 +12,7 @@ import {broadcastChannelPostMessage} from 'educoder'
import {Tabs, Input, Checkbox, Button, notification, Menu} from 'antd';
//试用申请页面
//试用申请
class Trialapplication extends Component {
// isRender控制弹出窗口显示
constructor(props) {
@ -34,8 +34,8 @@ class Trialapplication extends Component {
showTrial: false,
}
//user_phone_binded 判断是否手机号验证
console.log("Trialapplication");
console.log(props);
// console.log("Trialapplication");
// console.log(props);
}
Cancel = () => {
@ -77,9 +77,9 @@ class Trialapplication extends Component {
//TODO 这里如果样式变了会出现css不加载的情况
});
console.log(this.props.isRenders);
console.log("89");
console.log(this.state.props.user_phone_binded );
// console.log(this.props.isRenders);
// console.log("89");
// console.log(this.state.props.user_phone_binded );
try {
if (this.state.props.user_phone_binded !== undefined) {
console.log(this.state.props.user_phone_binded);

@ -1,375 +1,376 @@
.page--header {
z-index: 1399 !important;
}
/* 左右分隔条 */
.b-label {
background: #111c24;
}
.b-label>.resize-helper {
height: 30px;
position: relative;
margin-top: -20px;
margin-left: -17px;
left: 50%;
top: 50%;
z-index: 50;
}
.b-label>.resize-helper button{
width: 24px;
height: 24px;
min-height: 24px;
opacity: 0.7;
}
.b-label>.resize-helper button:hover {
opacity: 1;
}
.b-label>.resize-helper button path {
color: #666666;
fill: currentColor;
}
/* 所有i都加上动画 */
#game_right_contents i {
transition: transform .3s ease;
}
/* */
.h-center {
height: 3px;
background: rgb(17, 28, 36);
border-top: 1px solid rgb(25, 82, 123);
}
/* */
/* codemirror初始化的时候高度没100% */
#codetab_con_1 {
/*display: flex;*/
}
.CodeMirror{
/*height: -webkit-fill-available !important;*/
line-height: 1.2;
/*height: auto !important;
flex: 1 1 auto;*/
}
/* LeftView markdown */
#game_show_content #tab_con_1 .editormd-preview, #game_show_content #tab_con_2 .editormd-preview
,#game_show_content #tab_con_3 .editormd-preview
,#game_show_content #tab_con_5 .editormd-preview {
width: 100% !important;
height: 100% !important;
}
/* tab 样式覆盖 */
#blacktab_nav {
background-color: #111C24;
border-bottom: 1px solid #222C34;
}
.blacktab_hover {
}
.blacktab_hover a:after {
content: '';
position: absolute;
left: 50%;
margin-left: -10px;
top: auto;
bottom: 0;
right: auto;
height: 2px;
width: 20px;
background-color: #29BD8B;
}
button.buttonHoverColor:hover a {
color: #FF7500!important;
}
/*--------------------------------------------------- Header Start */
.leftNavDrawer {
z-index: 8000 !important;
}
.leftNavDrawer>div:nth-child(2) {
/*left:80px !important;*/
z-index: 8000 !important;
top: 54px;
overflow: hidden;
}
.leftNavDrawer .MuiDrawer-paper-2 {
width: 500px;
}
.leftNavDrawer .page--over {
left: 0px;
position: static;
}
.leftNavDrawer .col-width-3 {
position: static;
width: 400px;
border: none;
}
#myshixun_top {
display: flex;
height: 54px;
}
.headerLeft {
flex: 0 0 400px;
}
#user_grade a {
color: white;
}
.-header-right {
right: inherit;
margin-left: 24px;
display: inline-block;
top: 10px;
height: 32px;
padding: 3px 15px
}
.userInfo {
display: inline-block;
top: 4px;
position: relative;
margin-left: 10px;
}
.userInfo img {
border-radius: 18px;
vertical-align: bottom;
}
.userInfo .userInfoName {
margin-left: 12px;
color: #fff;
font-size: 16px;
}
#user_grade {
margin-top: -1px;
}
.headerCenter {
flex: 1 1 auto;
text-align: center;
flex-direction: column;
}
.headerCenter h2 {
max-width: none;
width: 100%;
font-size: 16px;
flex: 0 0 24px;
}
.headerCenter .timeRecord {
font-size: 13px;
color: #CCCCCC;
width: 100px;
margin: auto;
}
.headerRight {
flex: 0 0 400px;
}
.headerRight a {
color: #1A3F5F;
font-size: 16px;
}
.headerRight .exitBtn {
color: #1a3f5f !important;
}
.headerRight a:hover {
color: #4CACFF !important;
}
.headerRight i {
font-size: 24px !important;
margin-right: 8px;
margin-top: 12px;
vertical-align: -4px;
}
/*--------------------------------------------------- Header End */
/* picture_display 样式language_display处理*/
.photo_display {
padding-top: 54px;
padding-left: 0px;
}
.with33{ width: 33%;}
.with49{ width: 49%;}
.mr1precent{margin-right: 1%;}
.mr03precent{margin-right: 0.3%;}
/*TPI输出TXT文件显示*/
.output-txt{padding: 10px;box-shadow:1px 6px 24px rgba(17,28,36,0.2);min-height: 500px;width: 100%;box-sizing: border-box;outline: none;}
/* -------------------------------------- m design 控件样式修改*/
.rootSnackbar {
top: 60px !important;
z-index: 99999999 !important;
}
.rootSnackbar>div>div {
margin: 0 auto;
}
/* Dialog */
#alert-dialog-title>h2 {
text-align: center;
}
#alert-dialog-title {
border-bottom: 1px solid #eee;
margin-bottom: 18px;
}
body>div[role=dialog]>div[role=document]>div:nth-child(3) {
justify-content: center;
}
body>div[role=dialog]>div {
/* tpi dialog按钮改成平铺的大按钮 */
/* padding-bottom: 10px; */
}
/* tpi 窗口宽度*/
body>div[role=dialog] div[role=document] {
min-width: 400px;
}
#alert-dialog-title + div {
text-align: center;
}
body>div>div[role=tooltip] {
font-size: 12px;
}
/* -------------------------------------- m design 控件样式修改 END*/
/*rc-tree样式*/
.repoFilesDrawer .rc-tree li span.rc-tree-checkbox, .rc-tree li span.rc-tree-iconEle, .rc-tree li span.rc-tree-switcher {
background-image:url('../../images/component/rc-tree.png');
}
.rc-tree li span.rc-tree-node-selected .rc-tree-iconEle {
background-image:url('../../images/component/selectFile.png');
background-position: 0;
margin-bottom: 4px;
}
.repoFilesDrawer .rc-tree li span.rc-tree-icon_loading {
margin-right: 2px;
vertical-align: top;
background: url(data:image/gif;base64,R0lGODlhEAAQAKIGAMLY8YSx5HOm4Mjc88/g9Ofw+v///wAAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQFCgAGACwAAAAAEAAQAAADMGi6RbUwGjKIXCAA016PgRBElAVlG/RdLOO0X9nK61W39qvqiwz5Ls/rRqrggsdkAgAh+QQFCgAGACwCAAAABwAFAAADD2hqELAmiFBIYY4MAutdCQAh+QQFCgAGACwGAAAABwAFAAADD1hU1kaDOKMYCGAGEeYFCQAh+QQFCgAGACwKAAIABQAHAAADEFhUZjSkKdZqBQG0IELDQAIAIfkEBQoABgAsCgAGAAUABwAAAxBoVlRKgyjmlAIBqCDCzUoCACH5BAUKAAYALAYACgAHAAUAAAMPaGpFtYYMAgJgLogA610JACH5BAUKAAYALAIACgAHAAUAAAMPCAHWFiI4o1ghZZJB5i0JACH5BAUKAAYALAAABgAFAAcAAAMQCAFmIaEp1motpDQySMNFAgA7) no-repeat scroll 0 0 transparent;
}
/*去除选中的颜色*/
.repoFilesDrawer .rc-tree-node-selected {
background-color: #4CACFF;
border: 1px solid #4CACFF;
opacity: 1;
height: 26px !important;
}
.repoFilesDrawer .rc-tree-node-selected span.rc-tree-title {
color: #fff;
}
/*
Name: Railscasts
Author: Ryan Bates (http://railscasts.com)
CodeMirror template by Jan T. Sott (https://github.com/idleberg/base16-codemirror)
Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16)
*/
.cm-s-railscasts.CodeMirror {background: #2b2b2b;color: #f4f1ed;line-height: 21px;}
.cm-s-railscasts div.CodeMirror-selected {background: #214283 !important;}
.cm-s-railscasts .CodeMirror-gutters {/*background: #2b2b2b; */border-right: 0px;}
.cm-s-railscasts .CodeMirror-linenumber {color: #5a647e;}
.cm-s-railscasts .CodeMirror-cursor {border-left: 1px solid #d4cfc9 !important;}
.cm-s-railscasts span.cm-comment {color: #bc9458;}
.cm-s-railscasts span.cm-atom {color: #b6b3eb;}
.cm-s-railscasts span.cm-number {color: #b6b3eb;}
.cm-s-railscasts span.cm-property, .cm-s-railscasts span.cm-attribute {color: #a5c261;}
.cm-s-railscasts span.cm-keyword {color: #da4939;}
.cm-s-railscasts span.cm-string {color: #ffc66d;}
.cm-s-railscasts span.cm-variable {color: #a5c261;}
.cm-s-railscasts span.cm-variable-2 {color: #6d9cbe;}
.cm-s-railscasts span.cm-def {color: #cc7833;}
/*.cm-s-railscasts span.cm-error {background: #da4939; color: #d4cfc9;}*/
.cm-s-railscasts span.cm-bracket {color: #f4f1ed;}
.cm-s-railscasts span.cm-tag {color: #da4939;}
.cm-s-railscasts span.cm-link {color: #b6b3eb;}
.cm-s-railscasts .CodeMirror-matchingbracket { text-decoration: underline; color: white !important;}
.cm-s-railscasts .CodeMirror-activeline-background { background: #303040; }
/* evaluateView*/
.CodeMirror-lines{padding: 0px!important;}
.cm-s-blackboard.CodeMirror {background: #0C1021; color: #F8F8F8; }
.cm-s-blackboard div.CodeMirror-selected { background: #253B76; }
.cm-s-blackboard .CodeMirror-line::selection, .cm-s-blackboard .CodeMirror-line > span::selection, .cm-s-blackboard .CodeMirror-line > span > span::selection { background: rgba(37, 59, 118, .99); }
.cm-s-blackboard .CodeMirror-line::-moz-selection, .cm-s-blackboard .CodeMirror-line > span::-moz-selection, .cm-s-blackboard .CodeMirror-line > span > span::-moz-selection { background: rgba(37, 59, 118, .99); }
.cm-s-blackboard .CodeMirror-gutters { background: #585858; border-right: 0; }
.cm-s-blackboard .CodeMirror-guttermarker { color: #FBDE2D; }
.cm-s-blackboard .CodeMirror-guttermarker-subtle { color: #888; }
.cm-s-blackboard .CodeMirror-linenumber { color: #888;/*background: #585858;*/ }
.cm-s-blackboard .CodeMirror-cursor { border-left: 1px solid #A7A7A7; }
.cm-s-blackboard .cm-keyword { color: #FBDE2D; }
.cm-s-blackboard .cm-atom { color: #D8FA3C; }
.cm-s-blackboard .cm-number { color: #D8FA3C; }
.cm-s-blackboard .cm-def { color: #8DA6CE; }
.cm-s-blackboard .cm-variable { color: #FF6400; }
.cm-s-blackboard .cm-operator { color: #FBDE2D; }
.cm-s-blackboard .cm-comment { color: #AEAEAE; }
.cm-s-blackboard .cm-string { color: #61CE3C; }
.cm-s-blackboard .cm-string-2 { color: #61CE3C; }
.cm-s-blackboard .cm-meta { color: #D8FA3C; }
.cm-s-blackboard .cm-builtin { color: #8DA6CE; }
.cm-s-blackboard .cm-tag { color: #8DA6CE; }
.cm-s-blackboard .cm-attribute { color: #8DA6CE; }
.cm-s-blackboard .cm-header { color: #FF6400; }
.cm-s-blackboard .cm-hr { color: #AEAEAE; }
.cm-s-blackboard .cm-link { color: #8DA6CE; }
.cm-s-blackboard .cm-error { background: #9D1E15; color: #F8F8F8; }
.cm-s-blackboard .CodeMirror-activeline-background { background: #3C3636; }
.cm-s-blackboard .CodeMirror-matchingbracket { outline:1px solid grey;color:white !important; }
.cm-s-railscasts span.cm-error {
color: #bc9458;
}
/* 弹框 */
.popupAll{width: 100%;height: 100%;position: fixed;z-index: 99998;background-color: rgba(5,16,26,0.6);left: 0;top:0;}
.task-popup{ width: 30%;background: #fff; border:1px solid #e8e8e8; border-radius:10px; -webkit-box-shadow:0 0 10px #ccc; -moz-box-shadow:0 0 10px #ccc; box-shadow:0 0 10px #ccc;}
.task-popup-text-center{ text-align: center; color: #333;}
.task-popup-title{ border-bottom: 1px solid #eee; padding:0px 15px;text-align: center;box-sizing: border-box;line-height: 70px;height: 70px; border-radius: 10px 10px 0px 0px;font-size: 16px; }
.task-popup-content{ padding:15px;}
/*注释这个地方是因为会影响到实训哪块合作者删除的样式*/
/*.task-popup-submit{ margin:0px auto 15px; width: 120px;}*/
.task-popup-sure{ margin:0px auto 15px; width: 54px;}
.task-popup-right-sure{margin:0px auto 15px;text-align: center}
.task-popup-OK{ margin:15px auto; text-align: center}
.task-popup-bggrey{ background:#fff; color:#333;}
a.task-btn-orange{background: #4CACFF; color:#fff!important;}
a:hover.task-btn-orange{background: #4CACFF; color:#fff!important;}
/* 代码区域样式 */
#games_repository_contents .readRepoFailed {
color: #fff;
width: 100%;
text-align: center;
margin-top: 120px;
}
#games_repository_contents .readRepoFailed .retry {
color:#4CACFF;
}
.page--header {
z-index: 1399 !important;
}
/* 左右分隔条 */
.b-label {
background: #111c24;
}
.b-label>.resize-helper {
height: 30px;
position: relative;
margin-top: -20px;
margin-left: -17px;
left: 50%;
top: 50%;
z-index: 50;
}
.b-label>.resize-helper button{
width: 24px;
height: 24px;
min-height: 24px;
opacity: 0.7;
}
.b-label>.resize-helper button:hover {
opacity: 1;
}
.b-label>.resize-helper button path {
color: #666666;
fill: currentColor;
}
/* 所有i都加上动画 */
#game_right_contents i {
transition: transform .3s ease;
}
/* */
.h-center {
height: 3px;
background: rgb(17, 28, 36);
border-top: 1px solid rgb(25, 82, 123);
}
/* */
/* codemirror初始化的时候高度没100% */
#codetab_con_1 {
/*display: flex;*/
}
.CodeMirror{
/*height: -webkit-fill-available !important;*/
line-height: 1.2;
/*height: auto !important;
flex: 1 1 auto;*/
}
/* LeftView markdown */
#game_show_content #tab_con_1 .editormd-preview, #game_show_content #tab_con_2 .editormd-preview
,#game_show_content #tab_con_3 .editormd-preview
,#game_show_content #tab_con_5 .editormd-preview {
width: 100% !important;
height: 100% !important;
}
/* tab 样式覆盖 */
#blacktab_nav {
background-color: #111C24;
border-bottom: 1px solid #222C34;
}
.blacktab_hover {
}
.blacktab_hover a:after {
content: '';
position: absolute;
left: 50%;
margin-left: -10px;
top: auto;
bottom: 0;
right: auto;
height: 2px;
width: 20px;
background-color: #29BD8B;
}
button.buttonHoverColor:hover a {
color: #FF7500!important;
}
/*--------------------------------------------------- Header Start */
.leftNavDrawer {
z-index: 8000 !important;
}
.leftNavDrawer>div:nth-child(2) {
/*left:80px !important;*/
z-index: 8000 !important;
top: 54px;
overflow: hidden;
}
.leftNavDrawer .MuiDrawer-paper-2 {
width: 500px;
}
.leftNavDrawer .page--over {
left: 0px;
position: static;
}
.leftNavDrawer .col-width-3 {
position: static;
width: 400px;
border: none;
}
#myshixun_top {
display: flex;
height: 54px;
}
.headerLeft {
flex: 0 0 400px;
}
#user_grade a {
color: white;
}
.-header-right {
right: inherit;
margin-left: 24px;
display: inline-block;
top: 10px;
height: 32px;
padding: 3px 15px
}
.userInfo {
display: inline-block;
top: 4px;
position: relative;
margin-left: 10px;
}
.userInfo img {
border-radius: 18px;
vertical-align: bottom;
}
.userInfo .userInfoName {
margin-left: 12px;
color: #fff;
font-size: 16px;
}
#user_grade {
margin-top: -1px;
}
.headerCenter {
flex: 1 1 auto;
text-align: center;
flex-direction: column;
}
.headerCenter h2 {
max-width: none;
width: 100%;
font-size: 16px;
flex: 0 0 24px;
}
.headerCenter .timeRecord {
font-size: 13px;
color: #CCCCCC;
width: 100px;
margin: auto;
}
.headerRight {
flex: 0 0 400px;
}
.headerRight a {
color: #1A3F5F;
font-size: 16px;
}
.headerRight .exitBtn {
color: #1a3f5f !important;
}
.headerRight a:hover {
color: #4CACFF !important;
}
.headerRight i {
font-size: 24px !important;
margin-right: 8px;
margin-top: 12px;
vertical-align: -4px;
}
/*--------------------------------------------------- Header End */
/* picture_display 样式language_display处理*/
.photo_display {
padding-top: 54px;
padding-left: 0px;
}
.with33{ width: 33%;}
.with49{ width: 49%;}
.mr1precent{margin-right: 1%;}
.mr03precent{margin-right: 0.3%;}
/*TPI输出TXT文件显示*/
.output-txt{padding: 10px;box-shadow:1px 6px 24px rgba(17,28,36,0.2);min-height: 500px;width: 100%;box-sizing: border-box;outline: none;}
/* -------------------------------------- m design 控件样式修改*/
.rootSnackbar {
top: 60px !important;
z-index: 99999999 !important;
}
.rootSnackbar>div>div {
margin: 0 auto;
}
/* Dialog */
#alert-dialog-title>h2 {
text-align: center;
}
#alert-dialog-title {
border-bottom: 1px solid #eee;
margin-bottom: 18px;
}
body>div[role=dialog]>div[role=document]>div:nth-child(3) {
justify-content: center;
}
body>div[role=dialog]>div {
/* tpi dialog按钮改成平铺的大按钮 */
/* padding-bottom: 10px; */
}
/* tpi 窗口宽度*/
body>div[role=dialog] div[role=document] {
min-width: 400px;
}
#alert-dialog-title + div {
text-align: center;
}
body>div>div[role=tooltip] {
font-size: 12px;
}
/* -------------------------------------- m design 控件样式修改 END*/
/*rc-tree样式*/
.repoFilesDrawer .rc-tree li span.rc-tree-checkbox, .rc-tree li span.rc-tree-iconEle, .rc-tree li span.rc-tree-switcher {
background-image:url('../../images/component/rc-tree.png');
}
.rc-tree li span.rc-tree-node-selected .rc-tree-iconEle {
background-image:url('../../images/component/selectFile.png');
background-position: 0;
margin-bottom: 4px;
}
.repoFilesDrawer .rc-tree li span.rc-tree-icon_loading {
margin-right: 2px;
vertical-align: top;
background: url(data:image/gif;base64,R0lGODlhEAAQAKIGAMLY8YSx5HOm4Mjc88/g9Ofw+v///wAAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQFCgAGACwAAAAAEAAQAAADMGi6RbUwGjKIXCAA016PgRBElAVlG/RdLOO0X9nK61W39qvqiwz5Ls/rRqrggsdkAgAh+QQFCgAGACwCAAAABwAFAAADD2hqELAmiFBIYY4MAutdCQAh+QQFCgAGACwGAAAABwAFAAADD1hU1kaDOKMYCGAGEeYFCQAh+QQFCgAGACwKAAIABQAHAAADEFhUZjSkKdZqBQG0IELDQAIAIfkEBQoABgAsCgAGAAUABwAAAxBoVlRKgyjmlAIBqCDCzUoCACH5BAUKAAYALAYACgAHAAUAAAMPaGpFtYYMAgJgLogA610JACH5BAUKAAYALAIACgAHAAUAAAMPCAHWFiI4o1ghZZJB5i0JACH5BAUKAAYALAAABgAFAAcAAAMQCAFmIaEp1motpDQySMNFAgA7) no-repeat scroll 0 0 transparent;
}
/*去除选中的颜色*/
.repoFilesDrawer .rc-tree-node-selected {
background-color: #4CACFF;
border: 1px solid #4CACFF;
opacity: 1;
height: 26px !important;
}
.repoFilesDrawer .rc-tree-node-selected span.rc-tree-title {
color: #fff;
}
/*
Name: Railscasts
Author: Ryan Bates (http://railscasts.com)
CodeMirror template by Jan T. Sott (https://github.com/idleberg/base16-codemirror)
Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16)
*/
.cm-s-railscasts.CodeMirror {background: #2b2b2b;color: #f4f1ed;line-height: 21px;}
.cm-s-railscasts div.CodeMirror-selected {background: #214283 !important;}
.cm-s-railscasts .CodeMirror-gutters {/*background: #2b2b2b; */border-right: 0px;}
.cm-s-railscasts .CodeMirror-linenumber {color: #5a647e;}
.cm-s-railscasts .CodeMirror-cursor {border-left: 1px solid #d4cfc9 !important;}
.cm-s-railscasts span.cm-comment {color: #bc9458;}
.cm-s-railscasts span.cm-atom {color: #b6b3eb;}
.cm-s-railscasts span.cm-number {color: #b6b3eb;}
.cm-s-railscasts span.cm-property, .cm-s-railscasts span.cm-attribute {color: #a5c261;}
.cm-s-railscasts span.cm-keyword {color: #da4939;}
.cm-s-railscasts span.cm-string {color: #ffc66d;}
.cm-s-railscasts span.cm-variable {color: #a5c261;}
.cm-s-railscasts span.cm-variable-2 {color: #6d9cbe;}
.cm-s-railscasts span.cm-def {color: #cc7833;}
/*.cm-s-railscasts span.cm-error {background: #da4939; color: #d4cfc9;}*/
.cm-s-railscasts span.cm-bracket {color: #f4f1ed;}
.cm-s-railscasts span.cm-tag {color: #da4939;}
.cm-s-railscasts span.cm-link {color: #b6b3eb;}
.cm-s-railscasts .CodeMirror-matchingbracket { text-decoration: underline; color: white !important;}
.cm-s-railscasts .CodeMirror-activeline-background { background: #303040; }
/* evaluateView*/
.CodeMirror-lines{padding: 0px!important;}
.cm-s-blackboard.CodeMirror {background: #0C1021; color: #F8F8F8; }
.cm-s-blackboard div.CodeMirror-selected { background: #253B76; }
.cm-s-blackboard .CodeMirror-line::selection, .cm-s-blackboard .CodeMirror-line > span::selection, .cm-s-blackboard .CodeMirror-line > span > span::selection { background: rgba(37, 59, 118, .99); }
.cm-s-blackboard .CodeMirror-line::-moz-selection, .cm-s-blackboard .CodeMirror-line > span::-moz-selection, .cm-s-blackboard .CodeMirror-line > span > span::-moz-selection { background: rgba(37, 59, 118, .99); }
.cm-s-blackboard .CodeMirror-gutters { background: #585858; border-right: 0; }
.cm-s-blackboard .CodeMirror-guttermarker { color: #FBDE2D; }
.cm-s-blackboard .CodeMirror-guttermarker-subtle { color: #888; }
.cm-s-blackboard .CodeMirror-linenumber { color: #888;/*background: #585858;*/ }
.cm-s-blackboard .CodeMirror-cursor { border-left: 1px solid #A7A7A7; }
.cm-s-blackboard .cm-keyword { color: #FBDE2D; }
.cm-s-blackboard .cm-atom { color: #D8FA3C; }
.cm-s-blackboard .cm-number { color: #D8FA3C; }
.cm-s-blackboard .cm-def { color: #8DA6CE; }
.cm-s-blackboard .cm-variable { color: #FF6400; }
.cm-s-blackboard .cm-operator { color: #FBDE2D; }
.cm-s-blackboard .cm-comment { color: #AEAEAE; }
.cm-s-blackboard .cm-string { color: #61CE3C; }
.cm-s-blackboard .cm-string-2 { color: #61CE3C; }
.cm-s-blackboard .cm-meta { color: #D8FA3C; }
.cm-s-blackboard .cm-builtin { color: #8DA6CE; }
.cm-s-blackboard .cm-tag { color: #8DA6CE; }
.cm-s-blackboard .cm-attribute { color: #8DA6CE; }
.cm-s-blackboard .cm-header { color: #FF6400; }
.cm-s-blackboard .cm-hr { color: #AEAEAE; }
.cm-s-blackboard .cm-link { color: #8DA6CE; }
.cm-s-blackboard .cm-error { background: #9D1E15; color: #F8F8F8; }
.cm-s-blackboard .CodeMirror-activeline-background { background: #3C3636; }
.cm-s-blackboard .CodeMirror-matchingbracket { outline:1px solid grey;color:white !important; }
.cm-s-railscasts span.cm-error {
color: #bc9458;
}
/* 弹框 */
.popupAll{width: 100%;height: 100%;position: fixed;z-index: 99998;background-color: rgba(5,16,26,0.6);left: 0;top:0;}
.task-popup{ width: 30%;background: #fff; border:1px solid #e8e8e8; border-radius:10px; -webkit-box-shadow:0 0 10px #ccc; -moz-box-shadow:0 0 10px #ccc; box-shadow:0 0 10px #ccc;}
.task-popup-text-center{ text-align: center; color: #333;}
.task-popup-title{ border-bottom: 1px solid #eee; padding:0px 15px;text-align: center;box-sizing: border-box;line-height: 70px;height: 70px; border-radius: 10px 10px 0px 0px;font-size: 16px; }
.task-popup-content{ padding:15px;}
/*注释这个地方是因为会影响到实训哪块合作者删除的样式*/
/*.task-popup-submit{ margin:0px auto 15px; width: 120px;}*/
.task-popup-sure{ margin:0px auto 15px; width: 54px;}
.task-popup-right-sure{margin:0px auto 15px;text-align: center}
.task-popup-OK{ margin:15px auto; text-align: center}
.task-popup-bggrey{ background:#fff; color:#333;}
a.task-btn-orange{background: #4CACFF; color:#fff!important;}
a:hover.task-btn-orange{background: #4CACFF; color:#fff!important;}
/* 代码区域样式 */
#games_repository_contents .readRepoFailed {
color: #fff;
width: 100%;
text-align: center;
margin-top: 120px;
}
#games_repository_contents .readRepoFailed .retry {
color:#4CACFF;
}

@ -170,10 +170,11 @@ class NewHeader extends Component {
submitapplications:false,
isRender:false,
isRenders:false,
user_phone_binded:false,
showTrial:false,
}
console.log("176")
console.log(props);
// console.log("176")
// console.log(props);
}
componentDidMount() {
@ -207,7 +208,20 @@ class NewHeader extends Component {
}
componentDidUpdate = (prevProps) => {
if(prevProps.user!=this.props.user){
// console.log("216")
// console.log(prevProps.user);
// console.log(this.props.user);
if(this.props.user !== undefined){
this.setState({
user_phone_binded :this.props.user.user_phone_binded,
})
}
}
}
componentWillReceiveProps(newProps, oldProps) {
this.setState({
user:newProps.user
@ -330,6 +344,24 @@ class NewHeader extends Component {
})
}
educoderlogin=()=>{
//退出账号
this.setState({
isRender:true
})
// var url = `/accounts/logout.json`;
//
// axios.get((url)).then((result) => {
// if(result!==undefined){
// // this.setState({
// // isRender:true
// // })
// window.location.href = "/";
// }
// }).catch((error) => {
// console.log(error);
// })
}
educoderloginysl=()=>{
//退出账号
// this.setState({
// isRender:true
@ -337,17 +369,16 @@ class NewHeader extends Component {
var url = `/accounts/logout.json`;
axios.get((url)).then((result) => {
if(result!==undefined){
// this.setState({
// isRender:true
// })
window.location.href = "/";
}
if(result!==undefined){
// this.setState({
// isRender:true
// })
window.location.href = "/";
}
}).catch((error) => {
console.log(error);
console.log(error);
})
}
onKeywordSearch = () => {
header_search(this)
}
@ -550,6 +581,7 @@ submittojoinclass=(value)=>{
user,
isRender,
isRenders,
user_phone_binded,
}=this.state;
/*
用户名称 用户头像url
@ -571,11 +603,11 @@ submittojoinclass=(value)=>{
}else {
activeIndex = true;
}
// join_course_url: "https://www.educoder.net/courses/join_course_multi_role"
// join_project_url: "https://www.educoder.net/applied_project/applied_project_info"
// rolearr:["",""],
// console.log()
// console.log("618");
// console.log(user_phone_binded);
return (
<div className="newHeader" id="nHeader">
@ -595,7 +627,7 @@ submittojoinclass=(value)=>{
{/* />*/}
{/* :""*/}
{/*}*/}
<Trialapplication {...this.state} user_phone_binded={user_phone_binded} ></Trialapplication>
<div className="educontent clearfix">
{/*<%= link_to image_tag("/images/educoder/logo.png", alt:"高校智能化教学与实训平台", className:"logoimg"), home_path %>*/}
<a href="/">
@ -729,7 +761,7 @@ submittojoinclass=(value)=>{
<li className="bor-top-greyE">
{/*<a href={this.props.Headertop===undefined?"":this.props.Headertop.logout_url}>退出</a>*/}
{/*<a onClick={()=>this.educoderlogin()}>退出</a>*/}
<a onClick={()=>this.educoderlogin()}>退出</a>
<a onClick={()=>this.educoderloginysl()}>退出</a>
</li>
</ul>

File diff suppressed because it is too large Load Diff

@ -183,10 +183,12 @@ export function TPMIndexHOC(WrappedComponent) {
// return false
return this.state.coursedata&&this.state.coursedata.course_identity === 0
}
// 管理员等
isAdminOrCreator = () => {
// return this.state.coursedata&&this.state.coursedata.course_identity >= 0 &&
return this.state.coursedata&&this.state.coursedata.course_identity < 3
}
// 助教等
isAdminOrTeacher = () => {
// return this.state.coursedata&&this.state.coursedata.course_identity >= 0 &&
return this.state.coursedata&&this.state.coursedata.course_identity < 4
@ -256,7 +258,6 @@ export function TPMIndexHOC(WrappedComponent) {
if (response.data) {
this.initCommonState(response.data)
this.setState({
user_phone_binded:response.data.user_phone_binded,
tpmLoading: false,
coursedata: {
course_identity: response.data.course_identity >= 0 ? response.data.course_identity : undefined,
@ -274,7 +275,7 @@ export function TPMIndexHOC(WrappedComponent) {
})
}
render() {
let{Headertop,Footerdown,user_phone_binded}=this.state;
let{Headertop,Footerdown}=this.state;
const common = {
isSuperAdmin:this.isSuperAdmin,
isAdminOrCreator:this.isAdminOrCreator,
@ -288,13 +289,7 @@ export function TPMIndexHOC(WrappedComponent) {
}
return (
<div>
{/*{*/}
{/* user_phone_binded === undefined?*/}
{/* ""*/}
{/* :*/}
{/* <Trialapplication {...this.state} user_phone_binded={user_phone_binded} setTrialapplication = {this.setTrialapplication} ></Trialapplication>*/}
{/*}*/}
<SiderBar
Headertop={Headertop}

File diff suppressed because it is too large Load Diff

@ -1,96 +1,105 @@
.radioStyle{
display: block;
height: 30px;
}
#settingsMarkdown{
background:transparent;
}
#challenge_begin{
height: 30px;
line-height: 30px;
}
#shixundescription .CodeMirror{
width: 570px !important;
margin-top: 31px !important;
height: 364px !important;
}
#shixundescription .editormd-preview{
width: 567px !important;
top: 40px !important;
height: 364px !important;
}
#shixunmemoMD .CodeMirror{
width: 548px !important;
margin-top: 31px !important;
height: 578px !important;
}
#shixunmemoMD .editormd-preview{
width: 544px !important;
top: 40px !important;
height: 578px !important;
}
.radioStyle {
display: block;
height: 30px;
}
a.white-btn.use_scope-btn:hover {
color: #FFF !important;
}
.shixunScopeInput {
width: 218px;
height: 33px;
display: block;
margin-bottom: 15px;
}
.ant-modal-title {
text-align: center;
}
a.newuse_scope-btn:hover {
border: 1px solid #F06200;
color: #fff !important;
background: #FF7500;
}
a.newuse_scope-btn {
border: 1px solid #FF7500;
color: #FF7500 !important;
}
.tpmprompt {
padding-left: 20px;
margin-top: -4px;
}
.ml36{
margin-left: 26px;
}
#shixunmemoMD{
width:98% !important;
height: 620px !important;
}
.pdr20{
padding-right:20px;
}
.nonemodel{
width: 30%;
height: 624px;
/*background: rgba(0, 0, 0, 0.65);*/
background: #f5f5f5;
position: absolute;
z-index: 100;
opacity: 0.5;
left: 21.5%;
}
.shixunmemoMDdiv{
width: 99%;
height: 615px;
.radioStyle{
display: block;
height: 30px;
}
#settingsMarkdown{
background:transparent;
}
#challenge_begin{
height: 30px;
line-height: 30px;
}
#shixundescription .CodeMirror{
width: 570px !important;
margin-top: 31px !important;
height: 364px !important;
}
#shixundescription .editormd-preview{
width: 567px !important;
top: 40px !important;
height: 364px !important;
}
#shixunmemoMD .CodeMirror{
width: 548px !important;
margin-top: 31px !important;
height: 578px !important;
}
#shixunmemoMD .editormd-preview{
width: 544px !important;
top: 40px !important;
height: 578px !important;
}
.radioStyle {
display: block;
height: 30px;
}
a.white-btn.use_scope-btn:hover {
color: #FFF !important;
}
.shixunScopeInput {
width: 218px;
height: 33px;
display: block;
margin-bottom: 15px;
}
.ant-modal-title {
text-align: center;
}
a.newuse_scope-btn:hover {
border: 1px solid #F06200;
color: #fff !important;
background: #FF7500;
}
a.newuse_scope-btn {
border: 1px solid #FF7500;
color: #FF7500 !important;
}
.tpmprompt {
padding-left: 20px;
margin-top: -4px;
}
.ml36{
margin-left: 26px;
}
#shixunmemoMD{
width:98% !important;
height: 620px !important;
}
#shixunmemoMDs{
width: 98% !important;
height: 420px !important;
}
#shixunmemoMDs .CodeMirror {
/* width: 548px !important; */
margin-top: 31px !important;
height: 402px !important;
}
.pdr20{
padding-right:20px;
}
.nonemodel{
width: 59%;
height: 468px;
/*background: rgba(0, 0, 0, 0.65);*/
background: #f5f5f5;
position: absolute;
z-index: 100;
opacity: 0.5;
left: 21.5%;
}
.shixunmemoMDdiv{
width: 99%;
height: 615px;
}

@ -239,7 +239,7 @@ class Challenges extends Component {
<p className="clearfix mb30">
<span className="font-16 fl">简介</span>
<a style={{ display: this.props.identity < 4 && this.props.status < 3 ? "block" : 'none' }}
<a style={{ display: this.props.identity < 4 && ChallengesDataList&&ChallengesDataList.shixun_status < 3 ? "block" : 'none' }}
href={"/shixuns/" + id + "/settings?edit=1"} className="ring-green fr"
data-tip-down="编辑">
<img src={getImageUrl("images/educoder/icon/edit.svg")} className="fl mt3 ml2" />
@ -249,7 +249,7 @@ class Challenges extends Component {
<div className="justify break_full_word new_li markdown-body"
id="challenge_editorMd_description">
<p id="ReactMarkdown" style={{overflow:'hidden'}}>
{ChallengesDataList === undefined ? "" :ChallengesDataList.description===null?"":
{ChallengesDataList === undefined ? "" :ChallengesDataList&&ChallengesDataList.description===null?"":
<div dangerouslySetInnerHTML={{__html: markdownToHTML(ChallengesDataList.description).replace(/▁/g,"▁▁▁")}}></div>
}
</p>
@ -262,7 +262,7 @@ class Challenges extends Component {
<p className="clearfix mb10">
<span className="font-16 fl">全部任务</span>
{this.props.identity < 4 && this.props.status === 0 ?
{this.props.identity < 4 && ChallengesDataList&&ChallengesDataList.shixun_status=== 0 ?
<Link to={"/shixuns/" + id + "/challenges/new"}
className="white-btn edu-greenline-btn fr"
// data-tip-down="新增代码编辑类型任务"
@ -275,7 +275,7 @@ class Challenges extends Component {
</Link> : ""
}
{this.props.identity < 4 && this.props.status === 0 ?
{this.props.identity < 4 && ChallengesDataList&&ChallengesDataList.shixun_status=== 0 ?
<Link to={"/shixuns/" + id + "/challenges/newquestion"}
className="white-btn edu-greenline-btn fr mr20"
// data-tip-down="新增选择题类型任务"
@ -359,7 +359,7 @@ class Challenges extends Component {
{item.delete_url != undefined &&
<Tooltip placement="bottom" title={"删除"}>
<a onClick={() => this.delOperations(item.challenge_id)}
style={{ display: this.props.identity < 4 && this.props.status === 0 ? "block" : 'none' }}
style={{ display:this.props.user.admin===true?"block":this.props.identity < 4 && ChallengesDataList.shixun_status === 0 ? "block" : 'none' }}
className="fl ring-op-green mr25">
<img src={getImageUrl("images/educoder/icon/close.svg")}
className="fl mt5 ml5" />
@ -371,7 +371,7 @@ class Challenges extends Component {
{item.up_url != undefined &&
<Tooltip placement="bottom" title={"向上移动"}>
<a onClick={operationstrue===true?"":() => this.operations(item.challenge_id, "up")}
style={{ display: this.props.identity < 4 && this.props.status === 0 ? "block" : 'none' }}
style={{ display:this.props.user.admin===true?"block":this.props.identity < 4 && ChallengesDataList.shixun_status === 0 ? "block" : 'none' }}
className="fl ring-op-green mr25">
<img src={getImageUrl("images/educoder/icon/moveup.svg")}
className="fl mt2 ml4" />
@ -381,7 +381,7 @@ class Challenges extends Component {
{item.down_url != undefined &&
<Tooltip placement="bottom" title={"向下移动"}>
<a onClick={operationstrue===true?"":() => this.operations(item.challenge_id, "down")}
style={{ display: this.props.identity < 4 && this.props.status === 0 ? "block" : 'none' }}
style={{ display: this.props.user.admin===true?"block":this.props.identity < 4 && ChallengesDataList.shixun_status=== 0 ? "block" : 'none' }}
className="fl ring-op-green mr25">
<img src={getImageUrl("images/educoder/icon/movedown.svg")} className="fl mt2 ml4" />
</a>
@ -393,7 +393,7 @@ class Challenges extends Component {
item.st === 1 ?
<Tooltip placement="bottom" title={"编辑"}>
<a
style={{ display: this.props.identity < 4 && this.props.status < 3 ? "block" : 'none' }}
style={{ display:this.props.user.admin===true?"block":this.props.identity < 4 && ChallengesDataList.shixun_status< 3 ? "block" : 'none' }}
href={"/shixuns/" + ChallengesDataList.shixun_identifier + "/challenges/" + item.challenge_id + "/editquestion"}
className="fl ring-green">
<img src={getImageUrl("images/educoder/icon/edit.svg")}
@ -403,7 +403,7 @@ class Challenges extends Component {
:
<Tooltip placement="bottom" title={"编辑"}>
<a
style={{ display: this.props.identity < 4 && this.props.status < 3 ? "block" : 'none' }}
style={{ display:this.props.user.admin===true?"block":this.props.identity < 4 && ChallengesDataList.shixun_status < 3 ? "block" : 'none' }}
href={"/shixuns/" + ChallengesDataList.shixun_identifier + "/challenges/" + item.challenge_id + "/editcheckpoint"}
className="fl ring-green">
<img src={getImageUrl("images/educoder/icon/edit.svg")}
@ -529,7 +529,7 @@ class Challenges extends Component {
<p className="task-popup-text-center font-16 pb20">实训已经更新了正在为您重置!</p>
</div>
<div className="task-popup-submit clearfix">
<a className="task-btn task-btn-orange fr mr51" onClick={()=>this.hidestartshixunsreplace(hidestartshixunsreplacevalue)}>知道了</a>
<a className="task-btn task-btn-orange fr mr51" onClick={()=>this.hidestartshixunsreplace(hidestartshixunsreplacevalue)}>知道了</a>
</div>
</Modal>
</div>

@ -9,315 +9,315 @@ import './common.css'
const TabPane = Tabs.TabPane
const loginInputsyl = {
"width": " 100%",
"height": "40px",
"width": " 100%",
"height": "40px",
}
//父组件 EducoderLogin.js
class LoginRegisterComponent extends Component {
constructor(props) {
super(props)
this.state = {
login: "",
password: "",
passwords: "",
seconds: 60,
codes: "",
getverificationcodes: true,
Phonenumberisnotco: undefined,
Phonenumberisnotcobool: false,
s: 'text',
classpass: "text",
readonlyInput: true,
}
}
openNotification = (messge) => {
notification.open({
message: "提示",
description:
messge,
onClick: () => {
console.log('Notification Clicked!');
},
});
};
StudyMakeMoney = () => { // 调用父组件方法
this.props.Setshowbool();
}
// 点击表单后改变type
changeType = () => {
this.setState({classpass: 'password'});
}
changeTypey = () => {
}
//倒计时
getverificationcode = () => {
if (this.state.Phonenumberisnotcobool === false ||this.state.Phonenumberisnotcobool === undefined) {
if (this.state.login&&this.state.login.length === 0) {
this.openNotification("请输入手机号或邮箱");
return
} else {
this.openNotification("请输入正确的手机号或邮箱");
}
return;
}
if (this.state.getverificationcodes === true) {
this.setState({
getverificationcodes: undefined,
})
let timer = setInterval(() => {
this.setState((preState) => ({
seconds: preState.seconds - 1,
}), () => {
if (this.state.seconds == 0) {
clearInterval(timer);
this.setState({
getverificationcodes: false,
seconds: 60,
})
}
});
}, 1000)
this.SMSverification();
} else {
this.setState({
getverificationcodes: undefined,
})
let timer = setInterval(() => {
this.setState((preState) => ({
seconds: preState.seconds - 1,
}), () => {
if (this.state.seconds == 0) {
clearInterval(timer);
this.setState({
getverificationcodes: false,
seconds: 60,
})
}
});
}, 1000)
this.SMSverification();
}
}
//短信验证
SMSverification = () => {
var url = `/accounts/get_verification_code.json`;
axios.get((url), {
params: {
login: this.state.login,
type: 2,
}
}).then((result) => {
//验证有问题{"status":1,"message":"success"}
console.log(result);
}).catch((error) => {
console.log(error);
})
}
cancelReadOnly = () => {
this.setState({
readonlyInput: false,
})
}
//找回密码
Retrievepassword = () => {
if (this.state.Phonenumberisnotcobool === false) {
if (this.state.login.length === 0) {
this.openNotification("请输入手机号或邮箱");
return
}
this.openNotification("请输入正确的手机号或邮箱");
return;
}
if (this.state.login === undefined || this.state.login == "") {
this.openNotification(`请输入登录手机号码或邮箱`);
return
} else if (this.state.password === undefined || this.state.password == "") {
this.openNotification(`请输入密码`);
return
} else if (this.state.passwords === undefined || this.state.passwords == "") {
this.openNotification(`请输入密码`);
return
} else if (this.state.password !== this.state.passwords) {
this.openNotification(`两次密码不相同`);
return
} else if (this.state.codes === undefined || this.state.codes == "") {
this.openNotification(`请输入验证码`);
return
}
var url = "/accounts/reset_password.json";
axios.post(url, {
login: this.state.login,
code: this.state.codes,
new_password: this.state.password,
new_password_confirmation: this.state.passwords,
}).then((result) => {
// console.log(result);
//登录成功会生成session
this.openNotification("找回密码成功,请重新登入。");
window.location.href = "/login"
}).catch((error) => {
})
}
openNotification = (messge) => {
notification.open({
message: "提示",
description:
messge,
onClick: () => {
console.log('Notification Clicked!');
},
});
};
loginInputonChange = (e) => {
// console.log(e.target.value);
this.setState({
login: e.target.value,
})
}
loginInputonChanges = (e) => {
// console.log(e.target.value);
this.setState({
password: e.target.value,
})
}
loginInputonChangess = (e) => {
// console.log(e.target.value);
this.setState({
passwords: e.target.value,
})
}
//获取code
codesonChange = (e) => {
this.setState({
codes: e.target.value
})
}
inputOnBlur = (e) => {
this.isCorrectname(e.target.value);
// this.Emailphonenumberverification(e.target.value, id);
}
isCorrectname = (value) => {
console.log(value.length);
if (value.length === 0) {
this.setState({
Phonenumberisnotco: undefined,
Phonenumberisnotcobool: false,
})
return;
}
// var telephone = $("#telephoneAdd.tianjia_phone").val();
var regph = /^[1][3,4,5,6,7,8][0-9]{9}$/;
// var email = $("#add_email.tianjia_email").val();
var regemail = /^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/;
// [1]手机号开头必须是1 [3,4,5,6,7,8] 第二位是3-8中的一个 [0-9]{9} 后边9位可以是0-9的任意数字。
var stringdata = undefined;
if (!regph.test(value)) {
stringdata = "手机号格式不正确";
this.setState({
Phonenumberisnotco: stringdata,
Phonenumberisnotcobool: false,
})
} else {
this.setState({
Phonenumberisnotco: undefined,
Phonenumberisnotcobool: true,
})
return
}
if (!regemail.test(value)) {
if ((value.indexOf("@") != -1) === true) {
stringdata = "邮箱格式不正确";
} else {
stringdata = "手机号格式不正确";
}
this.setState({
Phonenumberisnotco: stringdata,
Phonenumberisnotcobool: false,
})
this.Emailphonenumberverification(value)
return
} else {
this.setState({
Phonenumberisnotco: undefined,
Phonenumberisnotcobool: true,
})
return
}
}
//邮箱手机号验证
Emailphonenumberverification = (value) => {
var url = `/accounts/valid_email_and_phone.json`;
axios.get((url), {
params: {
login: value,
type: 2,
}
}).then((result) => {
//验证有问题{"status":1,"message":"success"}
// console.log(result);
this.openNotification("验证码已发送,请注意查收!",2);
}).catch((error) => {
console.log(error);
// this.setState({
// login:"",
// logins:"",
// })
})
}
render() {
const {
activeKey,
// 登录
autoLogin,
// 注册
readAgreement, dragOk,
login,
password,
passwords,
classpass,
seconds,
getverificationcodes,
Phonenumberisnotco,
readonlyInput,
codes,
} = this.state
// height: 346px;
return (
<div className="login_register_content" style={{height: "482px"}}>
<Input type="text" name="username" value={"namename"}
style={{height: '0', width: '0', border: 'none', display: "none"}}/>
<Input type="password" name="password" id="password" value={"123123123"}
style={{height: '0', width: '0', border: 'none', display: "none"}}/>
<style>{`
constructor(props) {
super(props)
this.state = {
login: "",
password: "",
passwords: "",
seconds: 60,
codes: "",
getverificationcodes: true,
Phonenumberisnotco: undefined,
Phonenumberisnotcobool: false,
s: 'text',
classpass: "text",
readonlyInput: true,
}
}
openNotification = (messge) => {
notification.open({
message: "提示",
description:
messge,
onClick: () => {
console.log('Notification Clicked!');
},
});
};
StudyMakeMoney = () => { // 调用父组件方法
this.props.Setshowbool();
}
// 点击表单后改变type
changeType = () => {
this.setState({classpass: 'password'});
}
changeTypey = () => {
}
//倒计时
getverificationcode = () => {
if (this.state.Phonenumberisnotcobool === false || this.state.Phonenumberisnotcobool === undefined) {
if (this.state.login && this.state.login.length === 0) {
this.openNotification("请输入手机号或邮箱");
return
} else {
this.openNotification("请输入正确的手机号或邮箱");
}
return;
}
if (this.state.getverificationcodes === true) {
this.setState({
getverificationcodes: undefined,
})
let timer = setInterval(() => {
this.setState((preState) => ({
seconds: preState.seconds - 1,
}), () => {
if (this.state.seconds == 0) {
clearInterval(timer);
this.setState({
getverificationcodes: false,
seconds: 60,
})
}
});
}, 1000)
this.SMSverification();
} else {
this.setState({
getverificationcodes: undefined,
})
let timer = setInterval(() => {
this.setState((preState) => ({
seconds: preState.seconds - 1,
}), () => {
if (this.state.seconds == 0) {
clearInterval(timer);
this.setState({
getverificationcodes: false,
seconds: 60,
})
}
});
}, 1000)
this.SMSverification();
}
}
//短信验证
SMSverification = () => {
var url = `/accounts/get_verification_code.json`;
axios.get((url), {
params: {
login: this.state.login,
type: 2,
}
}).then((result) => {
//验证有问题{"status":1,"message":"success"}
console.log(result);
}).catch((error) => {
console.log(error);
})
}
cancelReadOnly = () => {
this.setState({
readonlyInput: false,
})
}
//找回密码
Retrievepassword = () => {
if (this.state.Phonenumberisnotcobool === false) {
if (this.state.login.length === 0) {
this.openNotification("请输入手机号或邮箱");
return
}
this.openNotification("请输入正确的手机号或邮箱");
return;
}
if (this.state.login === undefined || this.state.login == "") {
this.openNotification(`请输入登录手机号码或邮箱`);
return
} else if (this.state.password === undefined || this.state.password == "") {
this.openNotification(`请输入密码`);
return
} else if (this.state.passwords === undefined || this.state.passwords == "") {
this.openNotification(`请输入密码`);
return
} else if (this.state.password !== this.state.passwords) {
this.openNotification(`两次密码不相同`);
return
} else if (this.state.codes === undefined || this.state.codes == "") {
this.openNotification(`请输入验证码`);
return
}
var url = "/accounts/reset_password.json";
axios.post(url, {
login: this.state.login,
code: this.state.codes,
new_password: this.state.password,
new_password_confirmation: this.state.passwords,
}).then((result) => {
// console.log(result);
//登录成功会生成session
this.openNotification("找回密码成功,请重新登入。");
window.location.href = "/login"
}).catch((error) => {
})
}
openNotification = (messge) => {
notification.open({
message: "提示",
description:
messge,
onClick: () => {
console.log('Notification Clicked!');
},
});
};
loginInputonChange = (e) => {
// console.log(e.target.value);
this.setState({
login: e.target.value,
})
}
loginInputonChanges = (e) => {
// console.log(e.target.value);
this.setState({
password: e.target.value,
})
}
loginInputonChangess = (e) => {
// console.log(e.target.value);
this.setState({
passwords: e.target.value,
})
}
//获取code
codesonChange = (e) => {
this.setState({
codes: e.target.value
})
}
inputOnBlur = (e) => {
this.isCorrectname(e.target.value);
// this.Emailphonenumberverification(e.target.value, id);
}
isCorrectname = (value) => {
console.log(value.length);
if (value.length === 0) {
this.setState({
Phonenumberisnotco: undefined,
Phonenumberisnotcobool: false,
})
return;
}
// var telephone = $("#telephoneAdd.tianjia_phone").val();
var regph = /^[1][3,4,5,6,7,8][0-9]{9}$/;
// var email = $("#add_email.tianjia_email").val();
var regemail = /^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/;
// [1]手机号开头必须是1 [3,4,5,6,7,8] 第二位是3-8中的一个 [0-9]{9} 后边9位可以是0-9的任意数字。
var stringdata = undefined;
if (!regph.test(value)) {
stringdata = "手机号格式不正确";
this.setState({
Phonenumberisnotco: stringdata,
Phonenumberisnotcobool: false,
})
} else {
this.setState({
Phonenumberisnotco: undefined,
Phonenumberisnotcobool: true,
})
return
}
if (!regemail.test(value)) {
if ((value.indexOf("@") != -1) === true) {
stringdata = "邮箱格式不正确";
} else {
stringdata = "手机号格式不正确";
}
this.setState({
Phonenumberisnotco: stringdata,
Phonenumberisnotcobool: false,
})
this.Emailphonenumberverification(value)
return
} else {
this.setState({
Phonenumberisnotco: undefined,
Phonenumberisnotcobool: true,
})
return
}
}
//邮箱手机号验证
Emailphonenumberverification = (value) => {
var url = `/accounts/valid_email_and_phone.json`;
axios.get((url), {
params: {
login: value,
type: 2,
}
}).then((result) => {
//验证有问题{"status":1,"message":"success"}
// console.log(result);
this.openNotification("验证码已发送,请注意查收!", 2);
}).catch((error) => {
console.log(error);
// this.setState({
// login:"",
// logins:"",
// })
})
}
render() {
const {
activeKey,
// 登录
autoLogin,
// 注册
readAgreement, dragOk,
login,
password,
passwords,
classpass,
seconds,
getverificationcodes,
Phonenumberisnotco,
readonlyInput,
codes,
} = this.state
// height: 346px;
return (
<div className="login_register_content" style={{height: "520px"}}>
<Input type="text" name="username" value={"namename"}
style={{height: '0', width: '0', border: 'none', display: "none"}}/>
<Input type="password" name="password" id="password" value={"123123123"}
style={{height: '0', width: '0', border: 'none', display: "none"}}/>
<style>{`
.login_section .section_header {
margin-bottom: 16px;
@ -329,104 +329,116 @@ class LoginRegisterComponent extends Component {
color: #05101A;
line-height: 69px;
}
.loginInputzhuche{
width: 100%;
background-color: #fff!important;
height: 45px !important;
padding: 5px;
}
`}</style>
<div className="login_section">
<div className="section_header">
找回密码
</div>
<div style={{width: '340px'}}>
<style>
{
`
<div className="login_section">
<div className="section_header font-18" style={{color:"#05101A"}}>
找回密码
</div>
<div style={{width: '340px'}}>
<style>
{
`
.ant-input {
font-family: "Monospaced Number", "Chinese Quote", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif;
-webkit-box-sizing: border-box;
box-sizing: border-box;
margin: 0;
padding: 0;
list-style: none;
position: relative;
display: inline-block;
padding: 4px 11px;
width: 100%;
height: 38px;
font-size: 14px;
line-height: 1.5;
color: rgba(0, 0, 0, 0.65);
background-color: #fff;
background-image: none;
border: 1px solid #d9d9d9;
border-radius: 4px;
-webkit-transition: all .3s;
-o-transition: all .3s;
transition: all .3s;
}
`
}
</style>
<Input style={loginInputsyl} type="text" autoComplete="off" onClick={this.changeTypey}
placeholder="输入注册手机号或邮箱" value={this.state.login} onBlur={(e) => this.inputOnBlur(e)}
onChange={this.loginInputonChange} style={{marginTop: '10px',height: "38px"}}></Input>
{
Phonenumberisnotco && Phonenumberisnotco != "" ?
<p className="color-red mt5 mb5" style={{width: " 100%", height: "20px"}}>
<span className="fl" style={{textAlign:"center",width: " 100%"}}>{Phonenumberisnotco}</span>
</p>
: <div style={{height: "25px"}}></div>
}
<DragValidator
height={38} successGreenColor="#45E15F"
style={{height:"38px",width:"100%"}}
dragOkCallback={this.dragOkCallback}
></DragValidator>
<Input type={classpass}
onClick={this.changeType} autoComplete="new-password" onChange={this.loginInputonChanges}
value={this.state.password} style={{width:"100%",height:"38px",marginTop:'25px'}} placeholder="输入8~16位密码区分大小写"></Input>
<Input type={classpass}
onClick={this.changeType} autoComplete="new-password"
onChange={this.loginInputonChangess} value={this.state.passwords}
style={{height:"38px",marginTop:'25px',width:"100%"}}
placeholder="再次输入新密码"></Input>
<div className={"mt25"}>
<Input className="fl mr5" type="text" autoComplete="off" style={{
width: "210px",
height: "38px",
}} placeholder="请输入验证码"
onChange={this.codesonChange}
value={codes}
>
</Input>
{
getverificationcodes === undefined ?
<Button className="fl ml5 " disabled
style={{"width": "120px", "text-align": "center", "height": "38px",}}
size={"large"}>重新发送{seconds}s</Button>
: getverificationcodes === true ?
<Button className="fl ml5 "
style={{"width": "120px", "text-align": "center", "height": "38px"}}
type="primary"
onClick={() => this.getverificationcode()} size={"large"}>获取验证码</Button>
:
<Button className="fl ml5 "
style={{"width": "120px", "text-align": "center", "height": "38px"}}
type="primary"
onClick={() => this.getverificationcode()} size={"large"}>重新发送</Button>
}
</div>
<Button className="login_btn" size={"large"} type="primary"
style={{height:"46px"}}
onClick={this.Retrievepassword}>完成</Button>
</div>
</div>
</div>
);
}
font-family: "Monospaced Number", "Chinese Quote", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif;
-webkit-box-sizing: border-box;
box-sizing: border-box;
margin: 0;
padding: 0;
list-style: none;
position: relative;
display: inline-block;
padding: 4px 11px;
width: 100%;
height: 38px;
font-size: 14px;
line-height: 1.5;
color: rgba(0, 0, 0, 0.65);
background-color: #fff;
background-image: none;
border: 1px solid #d9d9d9;
border-radius: 4px;
-webkit-transition: all .3s;
-o-transition: all .3s;
transition: all .3s;
}
`
}
</style>
<Input style={loginInputsyl} type="text" autoComplete="off" onClick={this.changeTypey}
className={"loginInputzhuche"}
placeholder="输入注册手机号或邮箱" value={this.state.login} onBlur={(e) => this.inputOnBlur(e)}
onChange={this.loginInputonChange} style={{marginTop: '10px', height: "38px"}}></Input>
{
Phonenumberisnotco && Phonenumberisnotco != "" ?
<p className="color-red mt5 mb5" style={{width: " 100%", height: "20px"}}>
<span className="fl" style={{textAlign: "center", width: " 100%"}}>{Phonenumberisnotco}</span>
</p>
: <div style={{height: "25px"}}></div>
}
<DragValidator
height={38} successGreenColor="#45E15F"
style={{height: "38px", width: "100%"}}
dragOkCallback={this.dragOkCallback}
></DragValidator>
<Input type={classpass}
className={"loginInputzhuche"}
onClick={this.changeType} autoComplete="new-password" onChange={this.loginInputonChanges}
value={this.state.password} style={{width: "100%", height: "38px", marginTop: '25px'}}
placeholder="输入8~16位密码区分大小写"></Input>
<Input type={classpass}
className={"loginInputzhuche"}
onClick={this.changeType} autoComplete="new-password"
onChange={this.loginInputonChangess} value={this.state.passwords}
style={{height: "38px", marginTop: '25px', width: "100%"}}
placeholder="再次输入新密码"></Input>
<div className={"mt25"}>
<Input className="fl mr5 loginInputzhuche" type="text" autoComplete="off" style={{
width: "210px",
height: "38px",
}} placeholder="请输入验证码"
onChange={this.codesonChange}
value={codes}
>
</Input>
{
getverificationcodes === undefined ?
<Button className="fl ml5 " disabled
style={{"width": "120px", "text-align": "center", "height": "45px",}}
size={"large"}>重新发送{seconds}s</Button>
: getverificationcodes === true ?
<Button className="fl ml5 "
style={{"width": "120px", "text-align": "center", "height": "45px"}}
type="primary"
onClick={() => this.getverificationcode()} size={"large"}>获取验证码</Button>
:
<Button className="fl ml5 "
style={{"width": "120px", "text-align": "center", "height": "45px"}}
type="primary"
onClick={() => this.getverificationcode()} size={"large"}>重新发送</Button>
}
</div>
<Button className="login_btn" size={"large"} type="primary"
style={{height: "46px"}}
onClick={this.Retrievepassword}>完成</Button>
</div>
</div>
</div>
);
}
}
export default (LoginRegisterComponent);

@ -212,8 +212,8 @@ class LoginRegisterComponent extends Component {
Phonenumberisnotcos: undefined,
Phonenumberisnotcobool: true,
})
this.Emailphonenumberverification(value, id)
}
this.Emailphonenumberverification(value, id)
return
}
@ -222,8 +222,11 @@ class LoginRegisterComponent extends Component {
stringdata = "邮箱格式不正确";
} else {
stringdata = "手机号格式不正确";
}
// if (!regph.test(value)) {
// // 这里先判断是不是手机号然后在判断是不是邮箱然后又判断是不是手机号,如果不是手机号就是账号
// stringdata=undefined;
// }
}
if (id === 1) {
this.setState({
Phonenumberisnotco: stringdata,
@ -234,8 +237,8 @@ class LoginRegisterComponent extends Component {
Phonenumberisnotcos: stringdata,
Phonenumberisnotcobool: false,
})
this.Emailphonenumberverification(value, id)
}
this.Emailphonenumberverification(value, id)
return
} else {
if (id === 1) {
@ -248,8 +251,8 @@ class LoginRegisterComponent extends Component {
Phonenumberisnotcos: undefined,
Phonenumberisnotcobool: true,
})
this.Emailphonenumberverification(value, id)
}
this.Emailphonenumberverification(value, id)
return
}
}
@ -548,13 +551,13 @@ class LoginRegisterComponent extends Component {
// console.log(activeKey);
return (
<div className="login_register_content" style={ parseInt(tab[0])==0?{height: "346px"} :{height: "462px"}}>
<div className="login_register_content" style={ parseInt(tab[0])==0?{height: "346px"} :{height: "490px"}}>
<div>
<Menu mode="horizontal" selectedKeys={tab} onClick={this.changeTab}>
<Menu.Item key="0">登录</Menu.Item>
<Menu.Item key="1">注册</Menu.Item>
<Menu.Item key="0" className="font-18" style={{color:"#05101A"}}> 登录</Menu.Item>
<Menu.Item key="1" className="font-18" style={{color:"#05101A"}}>注册</Menu.Item>
</Menu>
{
@ -563,36 +566,45 @@ class LoginRegisterComponent extends Component {
<style>
{
`
.ant-input {
font-family: "Monospaced Number", "Chinese Quote", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif;
-webkit-box-sizing: border-box;
box-sizing: border-box;
margin: 0;
padding: 0;
list-style: none;
position: relative;
display: inline-block;
padding: 4px 11px;
width: 100%;
height: 38px;
font-size: 14px;
line-height: 1.5;
color: rgba(0, 0, 0, 0.65);
background-color: #fff;
background-image: none;
border: 1px solid #d9d9d9;
border-radius: 4px;
-webkit-transition: all .3s;
-o-transition: all .3s;
transition: all .3s;
}
.ant-input {
font-family: "Monospaced Number", "Chinese Quote", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif;
-webkit-box-sizing: border-box;
box-sizing: border-box;
margin: 0;
padding: 0;
list-style: none;
position: relative;
display: inline-block;
padding: 4px 11px;
width: 100%;
height: 38px;
font-size: 14px;
line-height: 1.5;
color: rgba(0, 0, 0, 0.65);
background-color: #fff;
background-image: none;
border: 1px solid #d9d9d9;
border-radius: 4px;
-webkit-transition: all .3s;
-o-transition: all .3s;
transition: all .3s;
}
.loginInputzhuche{
width: 100%;
background-color: #fff!important;
height: 45px !important;
padding: 5px;
}
`
}
</style>
<Input placeholder="请输入登录手机号码或邮箱" value={this.state.login}
onChange={this.loginInputonChange}
name="username"
className="font-14 color-grey-9"
className="font-14 color-grey-9 loginInputzhuche"
onBlur={(e) => this.inputOnBlur(e, 1)}
style={{marginTop: '30px', height: '38px'}}></Input>
@ -606,7 +618,7 @@ class LoginRegisterComponent extends Component {
<Input type="password" name="password" id="password" value={this.state.password}
onChange={this.passwordonChange}
className="font-14 color-grey-9 loginInput"
className="font-14 color-grey-9 loginInputzhuche"
placeholder="密码"></Input>
@ -621,10 +633,33 @@ class LoginRegisterComponent extends Component {
size={"large"}>登录</Button>
</div>
}
<style>
{
`
.loginInputzhuche{
width: 100%;
background-color: #fff!important;
height: 45px !important;
padding: 5px;
}
.loginInputzhuche .ant-input{
width: 100%;
background-color: #fff!important;
height: 45px !important;
padding: 5px;
position: relative;
right: 5px;
width: 103%;
}
`
}
</style>
{
parseInt(tab[0])==1 &&
<div style={{width: '340px'}}>
<Input className="loginInputsyl color-grey-9" placeholder="请使用手机号/邮箱账号进行注册"
<Input className="loginInputsyl color-grey-9 loginInputzhuche" placeholder="请使用手机号/邮箱账号进行注册"
value={this.state.logins}
type="text" autoComplete="off"
onChange={this.loginInputonChanges}
@ -646,7 +681,7 @@ class LoginRegisterComponent extends Component {
></DragValidator>
<div className="mt25">
<Input className="fl mr5 font-14 color-grey-9" name="codes" type="text" autoComplete="off" readonly
<Input className="fl mr5 font-14 color-grey-9 loginInputzhuche" name="codes" type="text" autoComplete="off" readonly
onfocus="this.removeAttribute('readonly')" style={{
width:'210px',
height:'38px',
@ -657,13 +692,13 @@ class LoginRegisterComponent extends Component {
</Input>
{
getverificationcodes === undefined ?
<Button className="fl ml5 font-14" disabled style={{"width": "120px","text-align":"center", "height": "38px",}}
<Button className="fl ml5 font-14" disabled style={{"width": "120px","text-align":"center", "height": "45px",}}
size={"large"}>重新发送{seconds}s</Button>
: getverificationcodes === true ?
<Button className="fl ml5 font-14" type="primary" style={{"width": "120px","text-align":"center", "height": "38px",}}
<Button className="fl ml5 font-14" type="primary" style={{"width": "120px","text-align":"center", "height": "45px",}}
onClick={() => this.getverificationcode()} size={"large"}>获取验证码</Button>
:
<Button className="fl ml5 font-14 " type="primary" style={{"width": "120px","text-align":"center", "height": "38px",}}
<Button className="fl ml5 font-14 " type="primary" style={{"width": "120px","text-align":"center", "height": "45px",}}
onClick={() => this.getverificationcode()} size={"large"}>重新发送</Button>
}
@ -673,13 +708,13 @@ class LoginRegisterComponent extends Component {
{/* style={{height: '0', width: '0', border: 'none', display: "none"}}/>*/}
{/*<Input type="password" name="password" id="password" autoComplete="new-password"*/}
{/* style={{height: '0', width: '0', border: 'none', display: "none"}}/>*/}
<Input className="loginInput font-14 mt25 color-grey-9" placeholder="输入8~16位密码区分大小写"
<Input className="loginInput font-14 mt25 color-grey-9 loginInputzhuche" placeholder="输入8~16位密码区分大小写"
type={classpass}
autoComplete="new-password"
onClick={this.changeType}
value={this.state.passwords} onChange={this.passwordonChanges} suffix={
<img src={passopens} onClick={(key) => this.Showandhide(key)}>
<img className={"mt5"} src={passopens} onClick={(key) => this.Showandhide(key)}>
</img>
}></Input>
<Checkbox onChange={this.onChange}

@ -1,47 +1,49 @@
.login_register_content, .login_register_content .ant-tabs-tabpane {
display: flex;
justify-content: center;
}
.login_register_content .ant-input {
background:rgb(244,244,244);
}
.login_register_content {
width: 434px;
box-shadow:3px 10px 21px 0px rgba(76,76,76,0.15);
border-radius:6px;
background: #fff;
}
.login_register_content .ant-tabs-ink-bar {
width: 21px !important;
left: 19px;
}
.login_register_content .ant-tabs {
width: 354px;
}
.login_section {
width: 100%;
display:flex;
justify-content: center;
align-items: center;
flex-direction: column;
}
.loginInput {
width: 100%;
margin-bottom: 16px;
height: 38px;
}
.left_right {
width: 100%;
display: flex;
justify-content: space-between;
}
.login_btn {
width: 100%;
margin-top: 26px;
margin-bottom: 26px;
}
.dragValidator {
margin-bottom: 16px;
.login_register_content, .login_register_content .ant-tabs-tabpane {
display: flex;
justify-content: center;
}
.login_register_content .ant-input {
background:rgb(244,244,244);
}
.login_register_content {
width: 434px;
box-shadow:3px 10px 21px 0px rgba(76,76,76,0.15);
border-radius:6px;
background: #fff;
}
.login_register_content .ant-tabs-ink-bar {
width: 21px !important;
left: 19px;
}
.login_register_content .ant-tabs {
width: 354px;
}
.login_section {
width: 100%;
display:flex;
justify-content: center;
align-items: center;
flex-direction: column;
}
.loginInput {
width: 100%;
margin-bottom: 16px;
height: 45px;
}
.left_right {
width: 100%;
display: flex;
justify-content: space-between;
}
.login_btn {
width: 100%;
margin-top: 26px;
margin-bottom: 26px;
}
.dragValidator {
margin-bottom: 16px;
}

@ -1,467 +1,468 @@
@charset "utf-8";
/* CSS Document */
/*html,body{ font-size:14px; line-height:2.0; height:100%;}
.newContainer{ min-height:100%; height: auto !important; height: 100%; *//*IE6不识别min-height*//*position: relative;}
.newMain{ margin: 0 auto; padding-bottom: 155px; }
.newFooter{ position: absolute; bottom: 0; width: 100%; height: 155px;background: #323232; clear:both; min-width: 1200px}
.newHeader{background: #46484c;width:100%; height: 50px; min-width: 1200px}*/
/* 2015-06-26 */
body,h1,h2,h3,h4,h5,h6,hr,p,blockquote,dl,dt,dd,ul,ol,li,pre,form,fieldset,legend,button,input,textarea,th,td{ margin:0; padding:0;}
div,img,tr,td,table{ border:0;}
table,tr,td{border:0;}
ol,ul,li{ list-style-type:none}
blockquote { border:1px solid #d4d4d4; padding-left: 0.6em; padding-top: 0.6em; padding-right: 0.6em; padding-bottom: 0.6em; margin-left: 1.4em; margin-right: 0.4em; border-radius: 4px; font-family: "微软雅黑"; background:#e8e8e8; background-size: 100% 100%; margin-top:5px;}
a:hover {text-decoration: none; }
select,input,textarea{border:1px solid #ddd; background:#fff; color:#000; padding-left:5px}
textarea {resize: none;}
.pInline {margin:0px; padding:0px; display:inline-block;}
div.minHeight48{min-height: 48px;}
/*常用*/
#users_setting{clear:both;width:728px;background: #fff;padding: 10px;/*滑动门的宽度*/}
/*上传图片处理*/
.upload_img img{max-width: 100%;}
.homepagePostIntro img{display: block}
blockquote img{max-width: 100%;}
.none{display: none;}
.rside_back{ width:670px; margin-left:10px; background:#fff; margin-bottom:10px;}
.sub_btn{ cursor:pointer; -moz-border-radius:3px; -webkit-border-radius:3px; border:1px solid #707070; color:#000; border-radius:3px; padding:1px 10px; background:#dbdbdb;}
.sub_btn:hover{ background:#b5e2fa; color:#000; border:1px solid #3c7fb1;}
table{ background:#fff;}
.more{ font-weight:normal; color:#999; font-size:12px;}
.no_line{ border-bottom:none;}
.line{border-bottom:1px dashed #d4d4d4; padding-bottom:10px; margin-bottom:10px;}
.no_border{ border:none;}
.min_search{ width:150px; height:20px; border:1px solid #d0d0d0; color:#666; background:url(/images/public_icon.png) 135px -193px no-repeat; cursor:pointer;}
a.btn_message_free{ background:#ff5722; display:block; text-align:center; color:#fff; padding:3px 0; width:80px; margin-bottom:10px;}
.db {display:block;}
/*pre标签换行*/
.break_word{word-break: break-all;word-wrap: break-word;}
.break_word_firefox{white-space: pre-wrap !important;word-break: break-all;}
/*显隐*/
.undis {display:none;}
.dis {display:inline-block;}
/* font & color */
h2{ font-size:18px;} /*color:#3b94d6;*/
h4{ font-size:14px;}/*color:#3b3b3b;*/
.f8 {font-size:8px;}
.f10 {font-size:10px;}
.f12{font-size:12px;}
.f_12{ font-size:12px;}
.f14{font-size:14px;}
.f_14{ font-size:14px;}
.f16{font-size:16px;}
.f18{font-size:18px;}
.f20{font-size:20px;}
.fb{font-weight:bold;}
.f_b{ font-weight: bold;}
.lh20{line-height:20px;}
.lh22{line-height:22px;}
.lh24{line-height:24px;}
.lh26{line-height:26px;}
.lh27{line-height:27px;}
.fmYh{font-family:"微软雅黑";}
.font999{ color:#999;}
.fontRed{color:#770000;}
.text_c{ text-align:center;}
.text_l{ text-align:left;}
/* Float & Clear */
.clear{ zoom:1;}
.clear:after {clear:both;content:".";display:block;font-size:0;height:0;line-height:0;visibility:hidden}
.cl{ clear:both; overflow:hidden; }
.fl{float:left;}
.fr{float:right;}
.f_l{ float:left;}
.f_r{ float:right;}
.float-none {float:none !important;}
.tac {text-align:center;}
.clearfix:after{clear:both;content:".";display:block;font-size:0;height:0;line-height:0;visibility:hidden}
.clearfix{clear:both;zoom:1}
.hidden{overflow:hidden; white-space: nowrap; text-overflow:ellipsis;}
.hide-text {overflow:hidden; white-space:nowrap;}
.flow_hidden{ width:300px;overflow:hidden; white-space: nowrap; text-overflow:ellipsis;}
.white_space{white-space:nowrap;}
.pr {position:relative;}
.markPopup {width:290px; height:auto; padding:5px 0px 15px 15px; background-color:#ffffff; z-index:1000;}
.markInput { outline:none; border:1px solid #e6e6e6; height:30px; width:50px; color:#3d3c3c; margin-bottom:10px; text-align:center; margin-right:5px; padding-left:0;}
.markPercentage {margin:10px 0; border:1px solid #e6e6e6; width:70px; height:30px; outline:none; font-size:12px; color:#3d3c3c;}
/* Spacing */
.ml2{ margin-left:2px;}.ml3{ margin-left:3px;}.ml4{ margin-left:4px;}.ml5{ margin-left:5px;}.ml7 {margin-left:7px;}.ml8{ margin-left:8px;}.ml9{ margin-left:9px;}
.ml10{ margin-left:10px;}.ml14{ margin-left:14px;}.ml15{ margin-left:15px;}.ml16{ margin-left:16px;}.ml20{ margin-left:20px;}.ml21{ margin-left:21px;}
.ml24{margin-left:24px;}.ml25{margin-left:25px;}.ml30{margin-left:30px !important;}.ml35{margin-left: 35px;}.ml36{ margin-left:36px; }.ml38{ margin-left:38px;}
.ml39{ margin-left:39px;}.ml40{ margin-left:40px;}.ml41{ margin-left:41px;}.ml42{ margin-left:42px;}.ml45{ margin-left:45px;}.ml48{ margin-left:48px;}.ml50{ margin-left: 50px;}
.ml53{margin-left:53px;}.ml55{ margin-left:55px;}.ml56{ margin-left:56px !important;}.ml58{margin-left:58px;}.ml60{ margin-left:60px;}.ml65{ margin-left:65px;}.ml63{ margin-left:63px;}
.ml70{margin-left: 70px;}.ml78{ margin-left:78px;}.ml80{ margin-left:80px;}.ml85{margin-left:85px;}.ml90{ margin-left:90px;}.ml95{margin-left:95px;}.ml100{ margin-left:100px;}
.ml110{ margin-left:110px;}.ml125 { margin-left:125px;}.ml130 { margin-left:130px;}.ml140 { margin-left:140px;}.ml150 { margin-left:150px;}
.ml160 {margin-left:160px;}.ml250 {margin-left:250px;}.ml258{ margin-left:258px;}.ml320{ margin-left:320px;}.ml358{ margin-left:358px;}.mr-5 {margin-right:-5px;}
.mr2{ margin-right:2px;}.mr3{ margin-right:3px;}.mr5{ margin-right:5px;}.mr8{ margin-right:8px;}.mr10{ margin-right:10px;}.mr12{ margin-right:12px;}.mr15 {margin-right:15px;}
.mr16 {margin-right:16px;}.mr18 {margin-right:18px;}.mr20{ margin-right:20px;}.mr25 {margin-right:25px;}.mr27 {margin-right:27px !important;}.mr30{ margin-right:30px !important;}
.mr35{ margin-right:35px;}.mr40{ margin-right:40px !important;}.mr45{margin-right: 45px;}.mr50{margin-right: 50px;}.mr55{margin-right: 55px;}.mr60 {margin-right:60px;}
.mr65 {margin-right:65px;}.mr70{margin-right: 70px;}.mr75{margin-right: 75px;}.mr80{margin-right: 80px;}.mr85{margin-right: 85px;}.mr90 {margin-right:90px !important;}.mr95 {margin-right:95px !important;}
.mr100 {margin-right:100px !important;}.mr118 {margin-right:118px !important;}.mr130 {margin-right:130px;}.mr135 {margin-right:135px;}.mr150 {margin-right:150px;}.mr200{margin-right:200px;}.mr390{margin-right:390px;}.mr400{margin-right:400px;}
.mw15{margin:0 15px;}.mr90 {margin-right:90px;}.mr95{margin-right: 95px;}.mr140 {margin-right: 140px;}.mw20{ margin: 0 20px;}
.mw380 {max-width: 380px !important;}.mw400 {max-width: 400px !important;}.mw450 {max-width: 450px !important;}.mw550 {max-width: 550px !important;}
.mt-20 {margin-top:-20px;}.mt-10 {margin-top:-10px;}.mt-4 {margin-top:-4px;}.mt-5 {margin-top:-5px;}.mt-2 {margin-top:-2px;}.mt0 {margin-top: 0px !important;}
.mt1{margin-top: 1px;}.mt2{ margin-top:2px;}.mt3{ margin-top:3px;}.mt4{ margin-top:4px;}.mt5{ margin-top:5px;}.mt6{ margin-top:6px;}.mt7 {margin-top:7px;}
.mt8{ margin-top:8px !important;}.mt9{ margin-top:9px !important;}.mt10{ margin-top:10px !important;}.mt12 { margin-top:12px !important;}.mt14 {margin-top:14px;}
.mt15 {margin-top:15px;}.mt16{ margin-top:16px !important;}.mt19 {margin-top:19px !important;}.mt20{margin-top: 20px;}.mt28 {margin-top:28px;}.mt30{ margin-top: 30px;}
.mt35 {margin-top:35px;}.mt40{ margin-top: 40px;}.mt45{ margin-top: 45px;}.mt50{ margin-top:50px;}.mt100{ margin-top:100px;}.mb0 {margin-bottom: 0px !important;}.mb4{ margin-bottom:4px;}
.mb5{ margin-bottom:5px;}.mb8 {margin-bottom:8px !important;}.pb5{ padding-bottom: 5px;}.mb10{ margin-bottom:10px !important;}.mb12 {margin-bottom:12px !important;}
.mb15{margin-bottom: 15px;}.mb20{ margin-bottom:20px;}.mb25{ margin-bottom:25px;}.mb30 {margin-bottom:30px;}.mb40 {margin-bottom:40px;}.pl5{ padding-left:5px;}
.pl10 {padding-left:10px;}.pr5 {padding-right:5px;}.pr10{padding-right: 10px;}.pl62 {padding-left: 62px;}.pl15{ padding-left:15px;}.pt5{ padding-top:5px;}
.pt10{ padding-top:10px;}.pb5{ padding-bottom: 5px;}.w20{ width:20px;}.w40{width: 40px;}.w45{ width: 45px;}.w46{ width: 46px;}.w48{width:48px;}.w50 {width:50px;}
.w56 {width:56px;}.w60{ width:60px;}.w61{ width:61px;}.w65{ width:65px;}.w70{ width:70px;}.w80{ width:80px;}.w90{ width:90px;}.w100 {width: 100px;}.w110{width:110px !important;}
.w108 {width:108px;}.w125{width:125px;}.w128{ width:128px;}.w130{ width:130px;}.w140{ width:140px;}.w145{ width:145px;}.w150{ width:150px;}
.w160{width:160px !important;}.w170{width:170px;}.w180{width:180px;}.w186{ width:186px;}.w190{width: 190px;}.w196{ width:196px;}.w200{width: 200px;}.w210{ width:210px;}
.w230{width:230px !important;}.w235{ width:235px !important;}.w265{ width: 265px;}.w270{ width: 270px;}.w280{ width:280px;}.w289{ width:289px !important;}.w290{ width:290px !important;}
.w300{ width:300px !important;}.w305{ width:305px;}.w330 {width:330px;}.w350 {width:350px;}.w360 {width:360px;}.w362 {width:362px;}.h400{height:400px !important;}.w430{ width:430px;}
.W440{ width:440px;}.w450 {width:450px;}.w455{width:455px !important;}.w459{ width:459px;}.w460{ width:460px;}.w465{width:465px !important;}
.w490{width:490px;}.w536{ width:536px;}.w543{ width:543px;}.w547{ width:547px;}.w557{ width:557px;}.w570 {width:570px !important;}.w576{ width:576px;}.w590{ width:590px !important;}
.w607 {width:607px;}.w664{ width:664px;}.w683{ width:683px;}.w610{ width:610px;}.w600{ width:600px !important;}.w603{ width:603px !important;}
.w606{ width:606px; }.w620{ width:620px;}.w680{ width: 680px;}.w701{width: 701px;}.w705{ width:705px;}.w708{width: 708px;}.w709{width: 709px;}
.w712{width:712px; max-width:712px; min-width:712px;}.w713{width: 713px;}.w720{width:721px;}.w730{width:730px;}.w770{ width:770px;}.h15{ height: 15px; }
.h28{height: 28px;}.h20{height: 20px;}.h22{ height:22px;}.h26{ height:26px;}.h50{ height:50px;}.h70{ height:70px;}.h200{ height:200px;}
.h400{height: 400px !important;}.h150{ height:150px;}.H60 {height:60px !important;}.H150{ height:150px;}.p10 {padding-left:10px; padding-right:10px;}
.mw150 {max-width: 150px !important;}.mw220 {max-width: 220px !important;}.mw280 {max-width:280px !important;}.mw360 {max-width: 360px !important;}
.mw380 {max-width: 380px !important;}.mw400 {max-width: 400px !important;}.mh18 {max-height: 18px;}.max_h54 {max-height:54px; }.maxHeight100 {max-height:100px; overflow-x:hidden; overflow-y:auto;}
.maxHeight200 {max-height:200px; overflow-x:hidden; overflow-y:auto;}
.W50{ width:50px;}.W120{ width:110px;}.W130{ width:130px;}.W200{ width:200px;}.W300 {width:300px !important;}.W320{ width:320px;}.W420 {width:420px;}.W440{ width:440px;}
.W700{ width:700px; max-width:700px; min-width:700px;}.W710{ width:708px;}.W800{ width:800px !important;}
.maxwidth400{max-width: 400px;}.m_w460{max-width: 460px;}.m_w500{max-width: 500px;}.m_w505{max-width: 505px;}.m_w530{max-width:860px;}a.edu-txt-850{ display: block; max-width:700px; overflow: hidden; white-space: nowrap; text-overflow: ellipsis;}
a.edu-txt-800{ display: block; max-width:800px; overflow: hidden; white-space: nowrap; text-overflow: ellipsis;}.m_w600{max-width: 600px;}.td_w70{ width:70px;}.td_w60{ width:60px;}.td_w110{ width:110px;}.width165{width: 165px;}.width180{width: 180px !important;}
.width285{width: 285px;}.width255{width: 255px;}.width385{width: 385px;}.width505{width: 505px;}.width525{width: 525px;}.width530{width: 530px;}
.lh23{line-height: 23px;}
/*该高度会写入配置文件*/
.maxh360 {max-height: 810px;}
.maxh300 { max-height: 300px; }
.lh18 { line-height: 18px;}
/* Font & background Color */
a.b_grey{ background: #F5F5F5;}
a.b_dgrey{ background: #CCC;}
a.c_orange{color:#ff5722;}
a:hover.c_orange{color: #d33503;}
a.c_lorange{color:#ff9900;}
a:hover.c_lorange{color:#fff;}
a.c_blue{ color:#3b94d6;}
a.c_eblue{color: #3784D3}
a.c_setting_blue{color: #0781B4}
a.c_dblue{ color:#09658c;}
a:hover.c_dblue{ color:#2788d0;}
a.c_white{ color:#fff;}
input.c_white { color:#fff}
a.c_dorange{ color:#fd6e2a;}
a.c_dark{color: #3e4040;}
a:hover.c_dark{color: #3ca5c6;}
a.b_blue{background: #3b94d6;}
a:hover.b_blue{background: #41a8c8;}
a.b_green{background:#28be6c;}
a:hover.b_green{background:#14ad5a;}
a.c_blue02{color: #3ca5c6;}
a:hover.c_blue02{color: #0781b4;}
a.c_red{ color:#F00;}
a:hover.c_red{ color: #C00;}
a.c_purple{color: #426e9a;}
a:hover.c_purple{color: #d33503;}
a.c_green{ color:#28be6c;}
a.c_lgrey{ color:#CCC;}
a:hover.c_lgrey{ color:#3ca5c6;}
a.c_grey{ color:#999999;}
a:hover.c_grey{ color:#333;}
.b_grey{ background: #F5F5F5;}
.b_dgrey{ background: #CCC;}
.c_orange{color:#e8770d;}
.c_dark{ color:#2d2d2d;}
.c_lorange{ color:#ff9900;}
.c_purple{color: #6883b6;}
.c_blue{ color:#3b94d6;}
.c_red{ color:#F00;}
.c_green{ color:#28be6c;}
.c_grey{color:#999;}
.c_grey02{ color:#666666;}
.c_grey03{ color:#bbbaba;}
.c_dgrey{ color:#696969;}
.c_dblue{ color:#09658c;}
.c_white {color:#fff;}
.b_blue{background:#3b94d6;}
.b_green{background:#28be6c;}
.b_w{ background:#fff !important;}
.b_slow_yellow{background:#adde18;}
.b_yellow{background:#DDDF0D;}
.b_slow_red{background:#df8538;}
.b_green2 {background:#63c360;}
.b_red {background:#d60308;}
.b_lblue{ background:#3b94d6;}
/*font&color add by Tim*/
.fontGrey {color:#cecece;}
.fontGrey2 {color:#888888;}
.fontGrey3 {color:#484848;}
.fontGrey4{color:#999999;}
.fontGrey5 {color:#ddd;}
.fontGrey6 {color:#7a7a7a;}
.fontGrey7 {color:#555;}
.fontBlue {color:#3498db;}
span.newsBlack {color:#4b4b4b; font-size:13px; font-weight:bold}
a.underline {text-decoration:underline;}
a.fontBlue {color:#2788d0;}
.fontBlue2 {color:#3b94d6 !important;}
a.fontGrey {color:#cecece;}
a.fontGrey2 {color:#888888;}
a.fontGrey3 {color:#555;}
a.link-black {color:#000;}
a.link-black:hover {color:#3b94d6;}
a.link-blue {color:#3b94d6;}
a.linkOrange {color:#ff7143;}
/*a.linkBlue {color:#3b94d6;}*/
a.linkBlue:hover {color:#FF7500;}
a.linkBlue2 {color:#3498db;}
a.linkBlue2:hover {color:#2788d0;}
a.buttonBlue {background-color:#3b94d6;}
a.buttonBlue:hover {background-color:#2788d0;}
a.linkGrey {color:#484848;}
a.linkGrey:hover {color:#3b94d6;}
a.linkGrey2 {color:#888888;}
a.linkGrey2:hover {color:#484848;}
a.linkGrey3 {color:#484848;}
a.linkGrey3:hover {color:#000000;}
a.linkGrey4 {color:#484848;}
a.linkGrey4:hover {color:#2788d0;}
a.linkGrey5 {color:#484848;}
a.linkGrey5:hover {color:#3498db !important;}
a.linkGrey6 {color:#484848 !important;}
a.linkGrey6:hover {color:#ffffff !important;}
a.linkGrey7 {color:#888888;}
a.linkGrey7:hover {color:#3b94d6;}
a.bBlue {background-color:#3498db;}
a.bBlue:hover {background-color:#2788d0;}
a.bGreen {background-color:#60b25e;}
a.bGreen:hover {background-color:#51a74f;}
a.submit_btn {border:1px solid #3498db; padding:3px 10px; border-radius:3px; color:#3498db;}
a.submit_btn:hover {background-color:#3498db; color:#ffffff;}
a.link_file_a{ background:url(/images/pic_file.png) 0 0px no-repeat; padding-left:20px; }
a:hover.link_file_a{ background:url(/images/pic_file.png) 0 -25px no-repeat; color:#3ca5c6;}
a.link_file_a2{ background:url(/images/pic_file.png) 0 -15px no-repeat; padding-left: 20px;}
a.submit_btn2 {background-color: #3b94d6; padding: 3px 5px; color: #ffffff;}
a.submit_btn2:hover {background-color: #2788d0;}
/****翻页***/
.wlist{float:right;}
.wlist li{float:left;}
.wlist a{ float:left; border:1px solid #64bdd9; padding:0 5px; margin-right:5px; color:#888;}
.wlist a:hover{border:1px solid #3b94d6; background-color:#3b94d6; color:#fff; text-decoration:none;}
.wlist_select a { background-color:#3b94d6; color:#fff;}
/*add by Tim*/
input.submit_btn {border:1px solid #3498db; padding:3px 10px; border-radius:3px; color:#3498db;}
input.submit_btn:hover {background-color:#3498db; color:#ffffff;}
a.yellowBtn{ display:inline-block;color:#0d90c3; height:22px;}
/* commonBtn */
.grey_btn{background:#d9d9d9; color:#656565; font-weight:normal; text-align:center;padding:2px 10px;}
a.grey_btn{background:#d9d9d9; color:#656565; font-weight:normal; text-align:center;padding:2px 10px; display: inline-block; border-radius: 3px;}
a:hover.grey_btn{background:#717171; color:#fff;}
a.big_grey_btn{background:#e1e1e1; color:#333; font-weight:normal; padding:0px 15px; text-align:center; font-size: 12px; height: 30px; line-height: 30px;}
a:hover.big_grey_btn{background:#c3c3c3;}
.grey_n_btn{background:#d9d9d9; color:#656565; font-weight:normal;padding:2px 10px; text-align:center;}
a.grey_n_btn{background:#d9d9d9; color:#656565;font-weight:normal; padding:2px 10px; text-align:center;}
a:hover.grey_n_btn{ background:#717171; color:#fff;}
.green_btn{background:#28be6c; color:#fff; font-weight:normal;padding:2px 10px; text-align:center;}
a.green_btn{background:#28be6c;color:#fff; font-weight:normal; padding:2px 10px; text-align:center;}
a:hover.green_btn{ background:#14ad5a;}
a.blue_btn{background:#3b94d6; color:#fff; font-weight:normal; padding:2px 10px; text-align:center; display:inline-block;border-radius:3px;}
a:hover.blue_btn{background:#2788d0;}
a.big_blue_btn{background:#3b94d6; color:#fff; font-weight:normal;padding:0px 15px; text-align:center; font-size: 12px; height: 30px; line-height: 30px;}
a:hover.big_blue_btn{background:#2788d0;}
.red_btn{ background:red; color:#fff; font-size:14px; font-weight:normal;padding:2px 8px; text-align:center;}
a.red_btn{background:red; color:#fff;font-size:14px; font-weight:normal; padding:2px 8px; text-align:center;cursor: pointer;}
a.orange_btn_homework{background:#d63502;color:#fff;font-size:14px; font-weight:normal; padding:2px 10px; text-align:center;}
a.orange_btn{ background:#ff5722;color:#fff; font-weight:normal; padding:2px 10px; text-align:center; }
a:hover.orange_btn{ background:#d63502;}
.green_u_btn{border:1px solid #3cb761; padding:2px 10px; color:#3cb761;}
a.green_u_btn{border:1px solid #3cb761; padding:2px 10px; color:#3cb761;}
a:hover.green_u_btn{ background:#3cb761; color:#fff;}
.orange_u_btn{border:1px solid #ff5d31; padding:2px 10px; color:#ff5d31;}
a.orange_u_btn{border:1px solid #ff5d31; padding:2px 10px; color:#ff5d31;}
a:hover.orange_u_btn{background:#ff5d31; color:#fff;}
.bgreen_u_btn{border:1px solid #1abc9c; padding:2px 10px; color:#1abc9c;}
a.bgreen_u_btn{border:1px solid #1abc9c; padding:2px 10px; color:#1abc9c;}
a:hover.bgreen_u_btn{background:#1abc9c; color:#fff;}
.blue_u_btn{border:1px solid #3b94d6; padding:2px 10px; color:#3b94d6;}
a.blue_u_btn{border:1px solid #3b94d6; padding:2px 10px; color:#3b94d6;}
a:hover.blue_u_btn{background:#3b94d6; color:#fff;}
.blue_n_btn{ background:#3b94d6; color:#fff!important; font-weight:normal;padding:2px 10px; text-align:center;}
a.blue_n_btn{background:#3b94d6;color:#fff!important;font-weight:normal; padding:2px 10px; text-align:center;}
a:hover.blue_n_btn{ background:#329cbd;}
.green_n_btn{background:#3cb761; padding:2px 10px; color:#fff;}
a.green_n_btn{background:#3cb761; padding:2px 10px; color:#fff;}
a:hover.green_n_btn{ background:#14ad5a;}
.orange_n_btn{background:#ff5d31; padding:2px 10px; color:#fff;}
a.orange_n_btn{background:#ff5d31; padding:2px 10px; color:#fff;}
a:hover.orange_n_btn{background:#d63502;}
.bgreen_n_btn{background:#1abc9c; padding:2px 10px; color:#fff;}
a.bgreen_n_btn{background:#1abc9c; padding:2px 10px; color:#fff;}
a:hover.bgreen_n_btn{background:#08a384;}
.nolink_btn{ background:#BCBCBC; color: #fff; padding:2px 5px;}
.more_btn{-moz-border-radius:3px; -webkit-border-radius:3px; border:1px solid #9DCEFF; color:#9DCEFF; border-radius:3px; padding:0px 3px;}
.upbtn{ margin:40px 0 0 15px; display:block; padding:2px 5px; border:1px solid #eaeaea;}
.upbtn:hover{color:#3b94d6;cursor: pointer;}
.upload_file{margin-left: -60px;margin-top: 40px;width: 50px;position: absolute;height: 24px;opacity: 0;cursor: pointer}
.red_btn_cir{ background:#e74c3c; padding:1px 10px; -moz-border-radius:2px; -webkit-border-radius:2px; border-radius:2px; color:#fff; font-weight:normal;font-size:12px;white-space:nowrap;}
.green_btn_cir{ background:#28be6c; padding:1px 10px; -moz-border-radius:2px; -webkit-border-radius:2px; border-radius:2px; color:#fff; font-weight:normal;font-size:12px;white-space:nowrap;}
.green_homework_btn_cir{ background:#28be6c; padding:1px 3px; -moz-border-radius:2px; -webkit-border-radius:2px; border-radius:2px; color:#fff; font-weight:normal;font-size:12px;white-space:nowrap;}
.grey_btn_cir{ background:#b2b2b2; padding:1px 10px; -moz-border-radius:2px; -webkit-border-radius:2px; border-radius:2px; color:#fff; font-weight:normal; font-size:12px;white-space:nowrap;}
.red_homework_btn_cir{ background:#e74c3c; padding:1px 3px; -moz-border-radius:2px; -webkit-border-radius:2px; border-radius:2px; color:#fff; font-weight:normal;font-size:12px;white-space:nowrap;}
.grey_homework_btn_cir{ background:#b2b2b2; padding:1px 3px; -moz-border-radius:2px; -webkit-border-radius:2px; border-radius:2px; color:#fff; font-weight:normal; font-size:12px;white-space:nowrap;}
.blue_btn_cir{ background:#3498db; padding:1px 10px; -moz-border-radius:2px; -webkit-border-radius:2px; border-radius:2px; color:#fff; font-weight:normal;font-size:12px;white-space:nowrap;}
.orange_btn_cir{ background:#e67e22; padding:1px 10px; -moz-border-radius:2px; -webkit-border-radius:2px; border-radius:2px; color:#fff; font-weight:normal; font-size:12px;white-space:nowrap;}
.sticky_btn_cir{ background:#3b94d6; padding:1px 10px; -moz-border-radius:2px; -webkit-border-radius:2px; border-radius:2px; color:#fff; font-weight:normal; font-size:12px;white-space:nowrap;}
.locked_btn_cir{background: url(/images/locked.png) 0 0 no-repeat; cursor: default;}
.bgreen_btn_cir{ background:#1abc9c; padding:1px 10px; -moz-border-radius:2px; -webkit-border-radius:2px; border-radius:2px; color:#fff; font-weight:normal; font-size:12px;white-space:nowrap;}
.grey_border{border:1px solid #dddddd !important;}
.red-cir-btn{ background:#e74c3c; padding:1px 5px; -moz-border-radius:2px; -webkit-border-radius:2px; border-radius:2px; color:#fff; font-weight:normal;font-size:12px;}
.green-cir-btn{ background:#28be6c; padding:1px 5px; -moz-border-radius:2px; -webkit-border-radius:2px; border-radius:2px; color:#fff; font-weight:normal;font-size:12px;}
.button-rep { color: #888;display: inline-block;background: #eee;padding: 2px 5px;}
.green_btn_share{ background:#28be6c; padding:2px 5px; -moz-border-radius:2px; -webkit-border-radius:2px; border-radius:2px; color:#fff; font-weight:normal;font-size:12px;}
.borderRadius {border-radius:5px;}
a.Blue-btn{ display:block; margin-right:15px;width:65px; height:22px; background-color:#ffffff; line-height:24px; vertical-align:middle; text-align:center; border:1px solid #3598db; color:#3598db; -moz-border-radius:5px; -webkit-border-radius:5px; border-radius:5px;}
a:hover.Blue-btn{ background:#3598db; color:#fff;}
a.BlueCirBtn{ display:block;width:75px; height:28px; background-color:#fff; line-height:28px; vertical-align:middle; text-align:center; border:1px solid #3598db; color:#3598db; -moz-border-radius:5px; -webkit-border-radius:5px; border-radius:5px;}
a:hover.BlueCirBtn{ background:#3598db; color:#fff;}
a.BlueCirBtnMini{ display:block;width:40px; height:24px; background-color:#ffffff; line-height:24px; vertical-align:middle; text-align:center; border:1px solid #3598db; color:#3598db; -moz-border-radius:5px; -webkit-border-radius:5px; border-radius:5px;}
a:hover.BlueCirBtnMini{ background:#3598db; color:#fff;}
a.BlueCirBtnMiddle{ display:block;width:50px; height:24px; background-color:#ffffff; line-height:24px; vertical-align:middle; text-align:center; border:1px solid #3598db; color:#3598db; -moz-border-radius:5px; -webkit-border-radius:5px; border-radius:5px;}
a:hover.BlueCirBtnMiddle{ background:#3598db; color:#fff;}
/* 按钮*/
a.btn_grey_big{ display: inline-block; border: 1px solid #ccc;color: #747474;text-align: center;font-size: 14px; padding:0 10px; height: 30px; line-height: 30px;border-radius:3px;}
a:hover.btn_grey_big{ background: #c3c3c3; color: #fff;}
a.btn_orange_big{ display:inline-block; border: 1px solid #ee4a1f;color: #ee4a1f; text-align: center; font-size: 14px; padding:0 10px; height: 30px; line-height: 30px; border-radius:3px;}
a:hover.btn_orange_big{ background: #ee4a1f;color: #fff;}
a.btn_green_big{ display:inline-block; border: 1px solid #60b25e; color: #60b25e; text-align: center;font-size: 14px; padding:0 10px; height: 30px; line-height: 30px; border-radius:3px;}
a:hover.btn_green_big{ background: #60b25e; color: #fff;}
a.sy_btn_grey{ display:inline-block; color: #333; background: #e1e1e1; text-align: center; font-size: 12px; padding:0 15px; height: 30px; line-height: 30px; border-radius:3px;}
a:hover.sy_btn_grey{ background: #c3c3c3;}
a.sy_btn_blue{ display:inline-block; color: #fff; background: #3b94d6; text-align: center; font-size: 12px; padding:0 15px; height: 30px; line-height: 30px;border-radius:3px;}
a:hover.sy_btn_blue{ background: #2788d0;}
input.sy_btn_blue{ display: inline-block; color: #fff; background: #3b94d6; text-align: center; font-size: 12px; padding:0 15px; height: 30px; line-height: 30px; border-radius:3px; cursor:pointer;}
a.sy_btn_blue_mini{ display:inline-block;color: #fff; background: #3b94d6; text-align: center; font-size: 12px; padding:0 10px; height: 26px; line-height: 26px;border-radius:3px;}
a:hover.sy_btn_blue_mini{ background: #2788d0;}
a.sy_btn_grey_mini{display:inline-block; color: #333; background: #e1e1e1; text-align: center;font-size: 12px; padding:0 10px; height: 26px; line-height: 26px; -webkit-border-radius:3px; -moz-border-radius:3px; -o-border-radius:3px; border-radius:3px;}
a:hover.sy_btn_grey_mini{ background: #c3c3c3;}
a.btn_grey_mid{ display:inline-block; color: #565656; background: #eaeaea; text-align: center; font-size: 12px; padding:0 10px; height: 26px; line-height: 26px; border-radius:3px;}
a:hover.btn_grey_mid{ background: #c8c8c8;}
a.sy_btn_green{ display:inline-block; color: #fff; background: #60b25e;text-align: center; font-size: 12px; padding:0 15px; height: 30px;line-height: 30px; border-radius:3px;}
a:hover.sy_btn_green{ background: #51a74f;}
a.hw_btn_blue{display: inline-block; color: #3b94d6; border:1px solid #3b94d6; background:#fff; text-align: center; font-size: 12px; padding:0 15px;height: 30px; line-height: 30px;border-radius:3px;}
a:hover.hw_btn_blue,a:active.hw_btn_blue{ background: #3b94d6; color:#fff;}
/* commonpic */
.pic_date{ display:block; background:url(/images/public_icon.png) -31px 0 no-repeat; width:16px; height:15px; }
.pic_add{ display:block; background:url(/images/public_icon.png) -31px -273px no-repeat; width:16px; height:15px; }
.pic_sch{ display:block; background:url(/images/public_icon.png) -31px -195px no-repeat; width:16px; height:15px; }
.pic_mes{ display:block; background:url(/images/public_icon.png) 0px -376px no-repeat; width:20px; height:15px; padding-left:18px;}
.pic_img{ display:block; background:url(/images/public_icon.png) -31px -419px no-repeat; width:20px; height:15px; }
.pic_del{ display:block; background:url(/images/public_icon.png) 0px -235px no-repeat; width:20px; height:15px; }
.pic_del:hover{ background:url(/images/public_icon.png) -32px -235px no-repeat; }
.pic_stats{display:block; background:url(/images/public_icon.png) 0px -548px no-repeat; width:20px; height:15px;}
.pic_files{display:block; background:url(/images/public_icon.png) 0px -578px no-repeat; width:20px; height:15px;}
.pic_text{display:block; background:url(/images/public_icon.png) 0px -609px no-repeat; width:20px; height:18px;}
.pic_text02{display:block; background:url(/images/public_icon.png) 0px -642px no-repeat; width:20px; height:19px;}
.pic_edit{display:block; background:url(/images/public_icon.png) 0px -32px no-repeat; width:20px; height:15px;}
.pic_edit:hover{display:block; background:url(/images/public_icon.png) -32px -32px no-repeat; width:20px; height:15px;}
.pic_edit2{display:inline-block; background:url(/images/public_icon.png) 0px -32px no-repeat; width:20px; height:15px; vertical-align:middle; display:none;}
.pic_edit2:hover{display:inline-block; background:url(/images/public_icon.png) -32px -32px no-repeat; width:20px; height:15px;}
/*文本左对齐*/
.tl{text-align: left;}
.embed img,embed{max-width: 100%;}
.attachments {clear: both;}
.is_public_checkbox{margin-left: 15px;margin-right: 10px;}
.author_name{color: #3ca5c6 !important;}
.ke-container-default{max-width: 100%;}
/*状态提示图标*/
.success-icon {background:url("/images/icons_ziliao.png") 0 -28px no-repeat; padding-left:25px;}
.error-icon {background:url("/images/icons_ziliao.png") 0 -56px no-repeat; padding-left:25px;}
/*禁用*/
.disabled {background-color:#f5f5f5;}
#popupWrap ul{cursor: default;}
.bg_checked{background-color: #3b94d6;}
/* 搜索 */
.hw_search_box{ position:relative; }
.hw_search_box input.hw_search-input{ width:293px; height:28px; border:none; border:1px solid #e7e7e7; background:#fff; padding-left:5px;}
.hw_search_box a.hw_btn_search{display:block; width:20px; height:20px; background:url(/images/hw/icons_hw.png) 0 -57px no-repeat; position:absolute; right:5px; top:5px; cursor:pointer;float:left; -moz-transition :all 0s linear 0s; -webkit-transition :all 0s linear 0s; -o-transition:all 0s linear 0s; transition:all 0s linear 0s;}
.hw_search_box a:hover.hw_btn_search{background:url(/images/hw/icons_hw.png) -40px -57px no-repeat; -moz-transition :all 0s linear 0s; -webkit-transition :all 0s linear 0s; -o-transition:all 0s linear 0s; transition:all 0s linear 0s;}
.hw_files_icon{display:block; width:17px; height:14px; background:url(/images/hw/icons_hw.png) 0 -135px no-repeat;}
/* 编辑删除 */
.sy_icons_edit{ display: inline-block; padding:9px;background:url(../../images/sy/sy_icons02.png) 0 1px no-repeat;}
.sy_icons_del{ padding:9px;background:url(../../images/sy/sy_icons02.png) 0 -21px no-repeat;}
.sy_icons_edit:hover{ background:url(../../images/sy/sy_icons02.png) -20px 1px no-repeat; }
.sy_icons_del:hover{ background:url(../../images/sy/sy_icons02.png) -20px -21px no-repeat;}
/* 翻页 */
.pages a{ display:block; border:1px solid #d1d1d1; color:#888; float:left; width:30px;text-align:center; padding:3px 0; line-height:1.9; margin-right:5px;}
.pages a:hover{ background-color:#3b94d6; border:1px solid #3b94d6; color:#fff;}
a.pages-big{width:50px;}
.pages .active{ background-color:#3b94d6; border:1px solid #3b94d6;color:#fff;}
.pages{ width:330px; margin:20px auto 10px;}
.pages li {display:inline-block;}
.sy_corange{ color: #ee4a1f;}
.sy_new_orange{font-size: 12px;padding: 0 5px;border-radius: 3px;line-height: 14px;color: #ff4a1b;border: 1px solid #ff4a1b;}
.sy_cgrey{ color: #888;}
a.sy_cgrey{ color: #888;}
.sy_corange{ color: #ee4a1f;}
a.sy_corange{ color: #ee4a1f;}
a.sy_cblue{ color: #3b94d6;}
/* 新增粉色关注按钮*/
a.y_btn_pink{ display: inline-block; color: #fff; background: #ff7d7d;text-align: center; font-size: 12px; padding:0 15px; height: 30px; line-height: 30px; border-radius:3px;}
a:hover.sy_btn_pink{ background: #e64c4c;}
.ke-block pre{ font-size:9pt; font-family:Courier New,Arial; border:1px solid #ddd; border-left:5px solid #6ce26c; background:#f6f6f6; padding:5px;}
.ke-block ol li{list-style-type: decimal;margin-left: 40px;}
.ke-block ul li{list-style-type: disc;margin-left: 40px;}
.ke-block{font-size: 14px;}
.ke-block h1{font-size: 2em;}
.ke-block h2{font-size: 1.5em;}
.ke-block h3{font-size: 1.17em;}
a.export_icon{background: url(/images/item.png) -58px -30px no-repeat; width: 45px; float: left; line-height: 41px; font-size: 14px; margin-top: -5px;}
a.export_icon:hover {background: url(/images/item.png) -58px -60px no-repeat;}
.export_icon_li:hover ul {display:block;}
.break_full_word { word-break: normal !important;word-wrap: break-word !important; }
.icons-user-homework{background:url(/images/user/home-user-left.png) 0px -150px no-repeat; }
.homework-user-leftnav-li{ height: 25px; line-height: 40px; padding-left: 25px; color: #666;background:url(/images/user/home-user-left.png) 0px -149px no-repeat; font-size: 14px; position: relative; }
.homework-user-leftnav-li:hover{ height: 25px; line-height: 40px; padding-left: 25px; background:#f4f4f4; background:url(/images/user/home-user-left.png) 0px -186px no-repeat; font-size: 14px; position: relative; }
.separator_short{margin-top: 5px; margin-bottom: 5px; margin-left: 37px; width: 433px; display: block; border-bottom: 1px solid #d9d9d9;}
.separator_long{margin-top: 5px; margin-bottom: 5px; margin-left: 37px; width: 522px; display: block; border-bottom: 1px solid #d9d9d9;}
/* 模板弹框 20161013byLB */
#muban_popup_box{ background:#fff;padding-bottom:15px;-webkit-border-radius:5px;-moz-border-radius:5px;-o-border-radius:5px;border-radius:5px;box-shadow: 0px 2px 8px rgba(146, 153, 169, 0.5);}
.muban_popup_top{background:#3b94d6;height:40px;-webkit-border-radius: 5px 5px 0px 0px;-moz-border-radius: 5px 5px 0px 0px;-o-border-radius: 5px 5px 0px 0px;border-radius: 5px 5px 0px 0px;}
.muban_popup_top h3{ font-size:16px; color:#fff; font-weight:normal; line-height:40px; padding-left:10px; }
a.muban_icons_close{width:20px; height:20px;display:block;background: url(/images/sy/sy_icons_close.png) 0 0px no-repeat; margin:8px 10px 0 0;}
a:hover.muban_icons_close{background: url(/images/sy/sy_icons_close.png) -40px 0px no-repeat;}
#muban_popup_box input,#muban_popup_box select{ border:1px solid #c8c8c8; height: 28px; color: #888;}
#muban_popup_box label.pop_box_label{width: 100px; text-align: right; display: inline-block;}
input.radio-width90{ width: 90px; }
#muban_popup_box label.pop_box_label_l {width: 100px; text-align: left; display: inline-block;}
.sy_popup_con{ margin:30px auto 0;font-size:14px; width:330px;}
.sy_popup_add li{ line-height:40px;}
.sy_popup_add label{ display:block; float:left; width:85px; text-align:right; line-height:40px;}
.email_prompt_mes{ border:1px solid #ccc; border-radius:5px; width:468px; height:60px; background:#fff;padding:5px; margin-bottom: 5px;}
a.btn{display: inline-block;border:none; padding:0 10px;color: #333;background: #e1e1e1; text-align:center;font-size: 12px; height: 30px;line-height: 30px;-webkit-border-radius: 3px;-moz-border-radius: 3px; -o-border-radius: 3px; border-radius: 3px; }
a:hover.btn{background: #c3c3c3; color: #333;}
a.btn-green{background: #60b25e; color: #fff;}
a:hover.btn-green{background: #51a74f; color: #fff;}
a.btn-blue{background: #3b94d6; color: #fff;}
a:hover.btn-blue{background: #2788d0; color: #fff;}
.sy_popup_top{ background:#3b94d6; height:40px; -webkit-border-radius: 5px 5px 0px 0px; -moz-border-radius: 5px 5px 0px 0px; -o-border-radius: 5px 5px 0px 0px; border-radius: 5px 5px 0px 0px;}
.sy_popup_top h3{ font-size:18px; color:#fff; font-weight:normal; line-height:40px; padding-left:10px;}
.sy_popup_top_tishi{ background:#ededed; }
.sy_popup_top_tishi h3{color:#616161; font-size:16px;}
.sy_popup_con02{ margin:30px auto 0; font-size:14px; text-align:center; width:360px;}
.sy_popup_con02 ul li p{ margin-bottom:15px; text-align:center; font-size:14px; color:#616161;}
.sy_popup_con02 a{ margin:0 auto;}
#sy_popup_box{ width:460px; background:#fff; padding-bottom:30px; border-radius:5px; box-shadow: 0px 2px 8px rgba(146, 153, 169, 0.5);}
a.btn_blue_64_width{ width: 64px; display:inline-block; color: #fff; background: #3b94d6; text-align: center; font-size: 12px; height: 30px; line-height: 30px;border-radius:3px; }
a:hover.btn_blue_64_width{ background: #2788d0; color: #fff;}
.btn_grey_64_width{ width: 64px; display:inline-block; color: #656565; background: #d9d9d9; text-align: center; font-size: 12px; height: 30px; line-height: 30px;border-radius:3px; }
a:hover.btn_grey_64_width{ background: #717171; color: #fff;}
a.btn_green_64_width{ width: 64px; display:inline-block; color: #fff; background: #28be6c; text-align: center; font-size: 12px; height: 30px; line-height: 30px;border-radius:3px; }
a:hover.btn_green_64_width{ background: #14ad5a; color: #fff;}
@charset "utf-8";
/* CSS Document */
/*html,body{ font-size:14px; line-height:2.0; height:100%;}
.newContainer{ min-height:100%; height: auto !important; height: 100%; *//*IE6不识别min-height*//*position: relative;}
.newMain{ margin: 0 auto; padding-bottom: 155px; }
.newFooter{ position: absolute; bottom: 0; width: 100%; height: 155px;background: #323232; clear:both; min-width: 1200px}
.newHeader{background: #46484c;width:100%; height: 50px; min-width: 1200px}*/
/* 2015-06-26 */
body,h1,h2,h3,h4,h5,h6,hr,p,blockquote,dl,dt,dd,ul,ol,li,pre,form,fieldset,legend,button,input,textarea,th,td{ margin:0; padding:0;}
div,img,tr,td,table{ border:0;}
table,tr,td{border:0;}
ol,ul,li{ list-style-type:none}
blockquote { border:1px solid #d4d4d4; padding-left: 0.6em; padding-top: 0.6em; padding-right: 0.6em; padding-bottom: 0.6em; margin-left: 1.4em; margin-right: 0.4em; border-radius: 4px; font-family: "微软雅黑"; background:#e8e8e8; background-size: 100% 100%; margin-top:5px;}
a:hover {text-decoration: none; }
select,input,textarea{border:1px solid #ddd; background:#fff; color:#000; padding-left:5px}
textarea {resize: none;}
.pInline {margin:0px; padding:0px; display:inline-block;}
div.minHeight48{min-height: 48px;}
/*常用*/
#users_setting{clear:both;width:728px;background: #fff;padding: 10px;/*滑动门的宽度*/}
/*上传图片处理*/
.upload_img img{max-width: 100%;}
.homepagePostIntro img{display: block}
blockquote img{max-width: 100%;}
.none{display: none;}
.rside_back{ width:670px; margin-left:10px; background:#fff; margin-bottom:10px;}
.sub_btn{ cursor:pointer; -moz-border-radius:3px; -webkit-border-radius:3px; border:1px solid #707070; color:#000; border-radius:3px; padding:1px 10px; background:#dbdbdb;}
.sub_btn:hover{ background:#b5e2fa; color:#000; border:1px solid #3c7fb1;}
table{ background:#fff;}
.more{ font-weight:normal; color:#999; font-size:12px;}
.no_line{ border-bottom:none;}
.line{border-bottom:1px dashed #d4d4d4; padding-bottom:10px; margin-bottom:10px;}
.no_border{ border:none;}
.min_search{ width:150px; height:20px; border:1px solid #d0d0d0; color:#666; background:url(/images/public_icon.png) 135px -193px no-repeat; cursor:pointer;}
a.btn_message_free{ background:#ff5722; display:block; text-align:center; color:#fff; padding:3px 0; width:80px; margin-bottom:10px;}
.db {display:block;}
/*pre标签换行*/
.break_word{word-break: break-all;word-wrap: break-word;}
.break_word_firefox{white-space: pre-wrap !important;word-break: break-all;}
/*显隐*/
.undis {display:none;}
.dis {display:inline-block;}
/* font & color */
h2{ font-size:18px;} /*color:#3b94d6;*/
h4{ font-size:14px;}/*color:#3b3b3b;*/
.f8 {font-size:8px;}
.f10 {font-size:10px;}
.f12{font-size:12px;}
.f_12{ font-size:12px;}
.f14{font-size:14px;}
.f_14{ font-size:14px;}
.f16{font-size:16px;}
.f18{font-size:18px;}
.f20{font-size:20px;}
.fb{font-weight:bold;}
.f_b{ font-weight: bold;}
.lh20{line-height:20px;}
.lh22{line-height:22px;}
.lh24{line-height:24px;}
.lh26{line-height:26px;}
.lh27{line-height:27px;}
.lh38{line-height: 38px !important;}
.fmYh{font-family:"微软雅黑";}
.font999{ color:#999;}
.fontRed{color:#770000;}
.text_c{ text-align:center;}
.text_l{ text-align:left;}
/* Float & Clear */
.clear{ zoom:1;}
.clear:after {clear:both;content:".";display:block;font-size:0;height:0;line-height:0;visibility:hidden}
.cl{ clear:both; overflow:hidden; }
.fl{float:left;}
.fr{float:right;}
.f_l{ float:left;}
.f_r{ float:right;}
.float-none {float:none !important;}
.tac {text-align:center;}
.clearfix:after{clear:both;content:".";display:block;font-size:0;height:0;line-height:0;visibility:hidden}
.clearfix{clear:both;zoom:1}
.hidden{overflow:hidden; white-space: nowrap; text-overflow:ellipsis;}
.hide-text {overflow:hidden; white-space:nowrap;}
.flow_hidden{ width:300px;overflow:hidden; white-space: nowrap; text-overflow:ellipsis;}
.white_space{white-space:nowrap;}
.pr {position:relative;}
.markPopup {width:290px; height:auto; padding:5px 0px 15px 15px; background-color:#ffffff; z-index:1000;}
.markInput { outline:none; border:1px solid #e6e6e6; height:30px; width:50px; color:#3d3c3c; margin-bottom:10px; text-align:center; margin-right:5px; padding-left:0;}
.markPercentage {margin:10px 0; border:1px solid #e6e6e6; width:70px; height:30px; outline:none; font-size:12px; color:#3d3c3c;}
/* Spacing */
.ml2{ margin-left:2px;}.ml3{ margin-left:3px;}.ml4{ margin-left:4px;}.ml5{ margin-left:5px;}.ml7 {margin-left:7px;}.ml8{ margin-left:8px;}.ml9{ margin-left:9px;}
.ml10{ margin-left:10px;}.ml14{ margin-left:14px;}.ml15{ margin-left:15px;}.ml16{ margin-left:16px;}.ml20{ margin-left:20px;}.ml21{ margin-left:21px;}
.ml24{margin-left:24px;}.ml25{margin-left:25px;}.ml30{margin-left:30px !important;}.ml35{margin-left: 35px;}.ml36{ margin-left:36px; }.ml38{ margin-left:38px;}
.ml39{ margin-left:39px;}.ml40{ margin-left:40px;}.ml41{ margin-left:41px;}.ml42{ margin-left:42px;}.ml45{ margin-left:45px;}.ml48{ margin-left:48px;}.ml50{ margin-left: 50px;}
.ml53{margin-left:53px;}.ml55{ margin-left:55px;}.ml56{ margin-left:56px !important;}.ml58{margin-left:58px;}.ml60{ margin-left:60px;}.ml65{ margin-left:65px;}.ml63{ margin-left:63px;}
.ml70{margin-left: 70px;}.ml78{ margin-left:78px;}.ml80{ margin-left:80px;}.ml85{margin-left:85px;}.ml90{ margin-left:90px;}.ml95{margin-left:95px;}.ml100{ margin-left:100px;}
.ml110{ margin-left:110px;}.ml125 { margin-left:125px;}.ml130 { margin-left:130px;}.ml140 { margin-left:140px;}.ml150 { margin-left:150px;}
.ml160 {margin-left:160px;}.ml250 {margin-left:250px;}.ml258{ margin-left:258px;}.ml320{ margin-left:320px;}.ml358{ margin-left:358px;}.mr-5 {margin-right:-5px;}
.mr2{ margin-right:2px;}.mr3{ margin-right:3px;}.mr5{ margin-right:5px;}.mr8{ margin-right:8px;}.mr10{ margin-right:10px;}.mr12{ margin-right:12px;}.mr15 {margin-right:15px;}
.mr16 {margin-right:16px;}.mr18 {margin-right:18px;}.mr20{ margin-right:20px;}.mr25 {margin-right:25px;}.mr27 {margin-right:27px !important;}.mr30{ margin-right:30px !important;}
.mr35{ margin-right:35px;}.mr40{ margin-right:40px !important;}.mr45{margin-right: 45px;}.mr50{margin-right: 50px;}.mr55{margin-right: 55px;}.mr60 {margin-right:60px;}
.mr65 {margin-right:65px;}.mr70{margin-right: 70px;}.mr75{margin-right: 75px;}.mr80{margin-right: 80px;}.mr85{margin-right: 85px;}.mr90 {margin-right:90px !important;}.mr95 {margin-right:95px !important;}
.mr100 {margin-right:100px !important;}.mr118 {margin-right:118px !important;}.mr130 {margin-right:130px;}.mr135 {margin-right:135px;}.mr150 {margin-right:150px;}.mr200{margin-right:200px;}.mr390{margin-right:390px;}.mr400{margin-right:400px;}
.mw15{margin:0 15px;}.mr90 {margin-right:90px;}.mr95{margin-right: 95px;}.mr140 {margin-right: 140px;}.mw20{ margin: 0 20px;}
.mw380 {max-width: 380px !important;}.mw400 {max-width: 400px !important;}.mw450 {max-width: 450px !important;}.mw550 {max-width: 550px !important;}
.mt-20 {margin-top:-20px;}.mt-10 {margin-top:-10px;}.mt-4 {margin-top:-4px;}.mt-5 {margin-top:-5px;}.mt-2 {margin-top:-2px;}.mt0 {margin-top: 0px !important;}
.mt1{margin-top: 1px;}.mt2{ margin-top:2px;}.mt3{ margin-top:3px;}.mt4{ margin-top:4px;}.mt5{ margin-top:5px;}.mt6{ margin-top:6px;}.mt7 {margin-top:7px;}
.mt8{ margin-top:8px !important;}.mt9{ margin-top:9px !important;}.mt10{ margin-top:10px !important;}.mt12 { margin-top:12px !important;}.mt14 {margin-top:14px;}
.mt15 {margin-top:15px;}.mt16{ margin-top:16px !important;}.mt19 {margin-top:19px !important;}.mt20{margin-top: 20px;}.mt28 {margin-top:28px;}.mt30{ margin-top: 30px;}
.mt35 {margin-top:35px;}.mt40{ margin-top: 40px;}.mt45{ margin-top: 45px;}.mt50{ margin-top:50px;}.mt100{ margin-top:100px;}.mb0 {margin-bottom: 0px !important;}.mb4{ margin-bottom:4px;}
.mb5{ margin-bottom:5px;}.mb8 {margin-bottom:8px !important;}.pb5{ padding-bottom: 5px;}.mb10{ margin-bottom:10px !important;}.mb12 {margin-bottom:12px !important;}
.mb15{margin-bottom: 15px;}.mb20{ margin-bottom:20px;}.mb25{ margin-bottom:25px;}.mb30 {margin-bottom:30px;}.mb40 {margin-bottom:40px;}.pl5{ padding-left:5px;}
.pl10 {padding-left:10px;}.pr5 {padding-right:5px;}.pr10{padding-right: 10px;}.pl62 {padding-left: 62px;}.pl15{ padding-left:15px;}.pt5{ padding-top:5px;}
.pt10{ padding-top:10px;}.pb5{ padding-bottom: 5px;}.w20{ width:20px;}.w40{width: 40px;}.w45{ width: 45px;}.w46{ width: 46px;}.w48{width:48px;}.w50 {width:50px;}
.w56 {width:56px;}.w60{ width:60px;}.w61{ width:61px;}.w65{ width:65px;}.w70{ width:70px;}.w80{ width:80px;}.w90{ width:90px;}.w100 {width: 100px;}.w110{width:110px !important;}
.w108 {width:108px;}.w125{width:125px;}.w128{ width:128px;}.w130{ width:130px;}.w140{ width:140px;}.w145{ width:145px;}.w150{ width:150px;}
.w160{width:160px !important;}.w170{width:170px;}.w180{width:180px;}.w186{ width:186px;}.w190{width: 190px;}.w196{ width:196px;}.w200{width: 200px;}.w210{ width:210px;}
.w230{width:230px !important;}.w235{ width:235px !important;}.w265{ width: 265px;}.w270{ width: 270px;}.w280{ width:280px;}.w289{ width:289px !important;}.w290{ width:290px !important;}
.w300{ width:300px !important;}.w305{ width:305px;}.w330 {width:330px;}.w350 {width:350px;}.w360 {width:360px;}.w362 {width:362px;}.h400{height:400px !important;}.w430{ width:430px;}
.W440{ width:440px;}.w450 {width:450px;}.w455{width:455px !important;}.w459{ width:459px;}.w460{ width:460px;}.w465{width:465px !important;}
.w490{width:490px;}.w536{ width:536px;}.w543{ width:543px;}.w547{ width:547px;}.w557{ width:557px;}.w570 {width:570px !important;}.w576{ width:576px;}.w590{ width:590px !important;}
.w607 {width:607px;}.w664{ width:664px;}.w683{ width:683px;}.w610{ width:610px;}.w600{ width:600px !important;}.w603{ width:603px !important;}
.w606{ width:606px; }.w620{ width:620px;}.w680{ width: 680px;}.w701{width: 701px;}.w705{ width:705px;}.w708{width: 708px;}.w709{width: 709px;}
.w712{width:712px; max-width:712px; min-width:712px;}.w713{width: 713px;}.w720{width:721px;}.w730{width:730px;}.w770{ width:770px;}.h15{ height: 15px; }
.h28{height: 28px;}.h20{height: 20px;}.h22{ height:22px;}.h26{ height:26px;}.h50{ height:50px;}.h70{ height:70px;}.h200{ height:200px;}
.h400{height: 400px !important;}.h150{ height:150px;}.H60 {height:60px !important;}.H150{ height:150px;}.p10 {padding-left:10px; padding-right:10px;}
.mw150 {max-width: 150px !important;}.mw220 {max-width: 220px !important;}.mw280 {max-width:280px !important;}.mw360 {max-width: 360px !important;}
.mw380 {max-width: 380px !important;}.mw400 {max-width: 400px !important;}.mh18 {max-height: 18px;}.max_h54 {max-height:54px; }.maxHeight100 {max-height:100px; overflow-x:hidden; overflow-y:auto;}
.maxHeight200 {max-height:200px; overflow-x:hidden; overflow-y:auto;}
.W50{ width:50px;}.W120{ width:110px;}.W130{ width:130px;}.W200{ width:200px;}.W300 {width:300px !important;}.W320{ width:320px;}.W420 {width:420px;}.W440{ width:440px;}
.W700{ width:700px; max-width:700px; min-width:700px;}.W710{ width:708px;}.W800{ width:800px !important;}
.maxwidth400{max-width: 400px;}.m_w460{max-width: 460px;}.m_w500{max-width: 500px;}.m_w505{max-width: 505px;}.m_w530{max-width:860px;}a.edu-txt-850{ display: block; max-width:700px; overflow: hidden; white-space: nowrap; text-overflow: ellipsis;}
a.edu-txt-800{ display: block; max-width:800px; overflow: hidden; white-space: nowrap; text-overflow: ellipsis;}.m_w600{max-width: 600px;}.td_w70{ width:70px;}.td_w60{ width:60px;}.td_w110{ width:110px;}.width165{width: 165px;}.width180{width: 180px !important;}
.width285{width: 285px;}.width255{width: 255px;}.width385{width: 385px;}.width505{width: 505px;}.width525{width: 525px;}.width530{width: 530px;}
.lh23{line-height: 23px;}
/*该高度会写入配置文件*/
.maxh360 {max-height: 810px;}
.maxh300 { max-height: 300px; }
.lh18 { line-height: 18px;}
/* Font & background Color */
a.b_grey{ background: #F5F5F5;}
a.b_dgrey{ background: #CCC;}
a.c_orange{color:#ff5722;}
a:hover.c_orange{color: #d33503;}
a.c_lorange{color:#ff9900;}
a:hover.c_lorange{color:#fff;}
a.c_blue{ color:#3b94d6;}
a.c_eblue{color: #3784D3}
a.c_setting_blue{color: #0781B4}
a.c_dblue{ color:#09658c;}
a:hover.c_dblue{ color:#2788d0;}
a.c_white{ color:#fff;}
input.c_white { color:#fff}
a.c_dorange{ color:#fd6e2a;}
a.c_dark{color: #3e4040;}
a:hover.c_dark{color: #3ca5c6;}
a.b_blue{background: #3b94d6;}
a:hover.b_blue{background: #41a8c8;}
a.b_green{background:#28be6c;}
a:hover.b_green{background:#14ad5a;}
a.c_blue02{color: #3ca5c6;}
a:hover.c_blue02{color: #0781b4;}
a.c_red{ color:#F00;}
a:hover.c_red{ color: #C00;}
a.c_purple{color: #426e9a;}
a:hover.c_purple{color: #d33503;}
a.c_green{ color:#28be6c;}
a.c_lgrey{ color:#CCC;}
a:hover.c_lgrey{ color:#3ca5c6;}
a.c_grey{ color:#999999;}
a:hover.c_grey{ color:#333;}
.b_grey{ background: #F5F5F5;}
.b_dgrey{ background: #CCC;}
.c_orange{color:#e8770d;}
.c_dark{ color:#2d2d2d;}
.c_lorange{ color:#ff9900;}
.c_purple{color: #6883b6;}
.c_blue{ color:#3b94d6;}
.c_red{ color:#F00;}
.c_green{ color:#28be6c;}
.c_grey{color:#999;}
.c_grey02{ color:#666666;}
.c_grey03{ color:#bbbaba;}
.c_dgrey{ color:#696969;}
.c_dblue{ color:#09658c;}
.c_white {color:#fff;}
.b_blue{background:#3b94d6;}
.b_green{background:#28be6c;}
.b_w{ background:#fff !important;}
.b_slow_yellow{background:#adde18;}
.b_yellow{background:#DDDF0D;}
.b_slow_red{background:#df8538;}
.b_green2 {background:#63c360;}
.b_red {background:#d60308;}
.b_lblue{ background:#3b94d6;}
/*font&color add by Tim*/
.fontGrey {color:#cecece;}
.fontGrey2 {color:#888888;}
.fontGrey3 {color:#484848;}
.fontGrey4{color:#999999;}
.fontGrey5 {color:#ddd;}
.fontGrey6 {color:#7a7a7a;}
.fontGrey7 {color:#555;}
.fontBlue {color:#3498db;}
span.newsBlack {color:#4b4b4b; font-size:13px; font-weight:bold}
a.underline {text-decoration:underline;}
a.fontBlue {color:#2788d0;}
.fontBlue2 {color:#3b94d6 !important;}
a.fontGrey {color:#cecece;}
a.fontGrey2 {color:#888888;}
a.fontGrey3 {color:#555;}
a.link-black {color:#000;}
a.link-black:hover {color:#3b94d6;}
a.link-blue {color:#3b94d6;}
a.linkOrange {color:#ff7143;}
/*a.linkBlue {color:#3b94d6;}*/
a.linkBlue:hover {color:#FF7500;}
a.linkBlue2 {color:#3498db;}
a.linkBlue2:hover {color:#2788d0;}
a.buttonBlue {background-color:#3b94d6;}
a.buttonBlue:hover {background-color:#2788d0;}
a.linkGrey {color:#484848;}
a.linkGrey:hover {color:#3b94d6;}
a.linkGrey2 {color:#888888;}
a.linkGrey2:hover {color:#484848;}
a.linkGrey3 {color:#484848;}
a.linkGrey3:hover {color:#000000;}
a.linkGrey4 {color:#484848;}
a.linkGrey4:hover {color:#2788d0;}
a.linkGrey5 {color:#484848;}
a.linkGrey5:hover {color:#3498db !important;}
a.linkGrey6 {color:#484848 !important;}
a.linkGrey6:hover {color:#ffffff !important;}
a.linkGrey7 {color:#888888;}
a.linkGrey7:hover {color:#3b94d6;}
a.bBlue {background-color:#3498db;}
a.bBlue:hover {background-color:#2788d0;}
a.bGreen {background-color:#60b25e;}
a.bGreen:hover {background-color:#51a74f;}
a.submit_btn {border:1px solid #3498db; padding:3px 10px; border-radius:3px; color:#3498db;}
a.submit_btn:hover {background-color:#3498db; color:#ffffff;}
a.link_file_a{ background:url(/images/pic_file.png) 0 0px no-repeat; padding-left:20px; }
a:hover.link_file_a{ background:url(/images/pic_file.png) 0 -25px no-repeat; color:#3ca5c6;}
a.link_file_a2{ background:url(/images/pic_file.png) 0 -15px no-repeat; padding-left: 20px;}
a.submit_btn2 {background-color: #3b94d6; padding: 3px 5px; color: #ffffff;}
a.submit_btn2:hover {background-color: #2788d0;}
/****翻页***/
.wlist{float:right;}
.wlist li{float:left;}
.wlist a{ float:left; border:1px solid #64bdd9; padding:0 5px; margin-right:5px; color:#888;}
.wlist a:hover{border:1px solid #3b94d6; background-color:#3b94d6; color:#fff; text-decoration:none;}
.wlist_select a { background-color:#3b94d6; color:#fff;}
/*add by Tim*/
input.submit_btn {border:1px solid #3498db; padding:3px 10px; border-radius:3px; color:#3498db;}
input.submit_btn:hover {background-color:#3498db; color:#ffffff;}
a.yellowBtn{ display:inline-block;color:#0d90c3; height:22px;}
/* commonBtn */
.grey_btn{background:#d9d9d9; color:#656565; font-weight:normal; text-align:center;padding:2px 10px;}
a.grey_btn{background:#d9d9d9; color:#656565; font-weight:normal; text-align:center;padding:2px 10px; display: inline-block; border-radius: 3px;}
a:hover.grey_btn{background:#717171; color:#fff;}
a.big_grey_btn{background:#e1e1e1; color:#333; font-weight:normal; padding:0px 15px; text-align:center; font-size: 12px; height: 30px; line-height: 30px;}
a:hover.big_grey_btn{background:#c3c3c3;}
.grey_n_btn{background:#d9d9d9; color:#656565; font-weight:normal;padding:2px 10px; text-align:center;}
a.grey_n_btn{background:#d9d9d9; color:#656565;font-weight:normal; padding:2px 10px; text-align:center;}
a:hover.grey_n_btn{ background:#717171; color:#fff;}
.green_btn{background:#28be6c; color:#fff; font-weight:normal;padding:2px 10px; text-align:center;}
a.green_btn{background:#28be6c;color:#fff; font-weight:normal; padding:2px 10px; text-align:center;}
a:hover.green_btn{ background:#14ad5a;}
a.blue_btn{background:#3b94d6; color:#fff; font-weight:normal; padding:2px 10px; text-align:center; display:inline-block;border-radius:3px;}
a:hover.blue_btn{background:#2788d0;}
a.big_blue_btn{background:#3b94d6; color:#fff; font-weight:normal;padding:0px 15px; text-align:center; font-size: 12px; height: 30px; line-height: 30px;}
a:hover.big_blue_btn{background:#2788d0;}
.red_btn{ background:red; color:#fff; font-size:14px; font-weight:normal;padding:2px 8px; text-align:center;}
a.red_btn{background:red; color:#fff;font-size:14px; font-weight:normal; padding:2px 8px; text-align:center;cursor: pointer;}
a.orange_btn_homework{background:#d63502;color:#fff;font-size:14px; font-weight:normal; padding:2px 10px; text-align:center;}
a.orange_btn{ background:#ff5722;color:#fff; font-weight:normal; padding:2px 10px; text-align:center; }
a:hover.orange_btn{ background:#d63502;}
.green_u_btn{border:1px solid #3cb761; padding:2px 10px; color:#3cb761;}
a.green_u_btn{border:1px solid #3cb761; padding:2px 10px; color:#3cb761;}
a:hover.green_u_btn{ background:#3cb761; color:#fff;}
.orange_u_btn{border:1px solid #ff5d31; padding:2px 10px; color:#ff5d31;}
a.orange_u_btn{border:1px solid #ff5d31; padding:2px 10px; color:#ff5d31;}
a:hover.orange_u_btn{background:#ff5d31; color:#fff;}
.bgreen_u_btn{border:1px solid #1abc9c; padding:2px 10px; color:#1abc9c;}
a.bgreen_u_btn{border:1px solid #1abc9c; padding:2px 10px; color:#1abc9c;}
a:hover.bgreen_u_btn{background:#1abc9c; color:#fff;}
.blue_u_btn{border:1px solid #3b94d6; padding:2px 10px; color:#3b94d6;}
a.blue_u_btn{border:1px solid #3b94d6; padding:2px 10px; color:#3b94d6;}
a:hover.blue_u_btn{background:#3b94d6; color:#fff;}
.blue_n_btn{ background:#3b94d6; color:#fff!important; font-weight:normal;padding:2px 10px; text-align:center;}
a.blue_n_btn{background:#3b94d6;color:#fff!important;font-weight:normal; padding:2px 10px; text-align:center;}
a:hover.blue_n_btn{ background:#329cbd;}
.green_n_btn{background:#3cb761; padding:2px 10px; color:#fff;}
a.green_n_btn{background:#3cb761; padding:2px 10px; color:#fff;}
a:hover.green_n_btn{ background:#14ad5a;}
.orange_n_btn{background:#ff5d31; padding:2px 10px; color:#fff;}
a.orange_n_btn{background:#ff5d31; padding:2px 10px; color:#fff;}
a:hover.orange_n_btn{background:#d63502;}
.bgreen_n_btn{background:#1abc9c; padding:2px 10px; color:#fff;}
a.bgreen_n_btn{background:#1abc9c; padding:2px 10px; color:#fff;}
a:hover.bgreen_n_btn{background:#08a384;}
.nolink_btn{ background:#BCBCBC; color: #fff; padding:2px 5px;}
.more_btn{-moz-border-radius:3px; -webkit-border-radius:3px; border:1px solid #9DCEFF; color:#9DCEFF; border-radius:3px; padding:0px 3px;}
.upbtn{ margin:40px 0 0 15px; display:block; padding:2px 5px; border:1px solid #eaeaea;}
.upbtn:hover{color:#3b94d6;cursor: pointer;}
.upload_file{margin-left: -60px;margin-top: 40px;width: 50px;position: absolute;height: 24px;opacity: 0;cursor: pointer}
.red_btn_cir{ background:#e74c3c; padding:1px 10px; -moz-border-radius:2px; -webkit-border-radius:2px; border-radius:2px; color:#fff; font-weight:normal;font-size:12px;white-space:nowrap;}
.green_btn_cir{ background:#28be6c; padding:1px 10px; -moz-border-radius:2px; -webkit-border-radius:2px; border-radius:2px; color:#fff; font-weight:normal;font-size:12px;white-space:nowrap;}
.green_homework_btn_cir{ background:#28be6c; padding:1px 3px; -moz-border-radius:2px; -webkit-border-radius:2px; border-radius:2px; color:#fff; font-weight:normal;font-size:12px;white-space:nowrap;}
.grey_btn_cir{ background:#b2b2b2; padding:1px 10px; -moz-border-radius:2px; -webkit-border-radius:2px; border-radius:2px; color:#fff; font-weight:normal; font-size:12px;white-space:nowrap;}
.red_homework_btn_cir{ background:#e74c3c; padding:1px 3px; -moz-border-radius:2px; -webkit-border-radius:2px; border-radius:2px; color:#fff; font-weight:normal;font-size:12px;white-space:nowrap;}
.grey_homework_btn_cir{ background:#b2b2b2; padding:1px 3px; -moz-border-radius:2px; -webkit-border-radius:2px; border-radius:2px; color:#fff; font-weight:normal; font-size:12px;white-space:nowrap;}
.blue_btn_cir{ background:#3498db; padding:1px 10px; -moz-border-radius:2px; -webkit-border-radius:2px; border-radius:2px; color:#fff; font-weight:normal;font-size:12px;white-space:nowrap;}
.orange_btn_cir{ background:#e67e22; padding:1px 10px; -moz-border-radius:2px; -webkit-border-radius:2px; border-radius:2px; color:#fff; font-weight:normal; font-size:12px;white-space:nowrap;}
.sticky_btn_cir{ background:#3b94d6; padding:1px 10px; -moz-border-radius:2px; -webkit-border-radius:2px; border-radius:2px; color:#fff; font-weight:normal; font-size:12px;white-space:nowrap;}
.locked_btn_cir{background: url(/images/locked.png) 0 0 no-repeat; cursor: default;}
.bgreen_btn_cir{ background:#1abc9c; padding:1px 10px; -moz-border-radius:2px; -webkit-border-radius:2px; border-radius:2px; color:#fff; font-weight:normal; font-size:12px;white-space:nowrap;}
.grey_border{border:1px solid #dddddd !important;}
.red-cir-btn{ background:#e74c3c; padding:1px 5px; -moz-border-radius:2px; -webkit-border-radius:2px; border-radius:2px; color:#fff; font-weight:normal;font-size:12px;}
.green-cir-btn{ background:#28be6c; padding:1px 5px; -moz-border-radius:2px; -webkit-border-radius:2px; border-radius:2px; color:#fff; font-weight:normal;font-size:12px;}
.button-rep { color: #888;display: inline-block;background: #eee;padding: 2px 5px;}
.green_btn_share{ background:#28be6c; padding:2px 5px; -moz-border-radius:2px; -webkit-border-radius:2px; border-radius:2px; color:#fff; font-weight:normal;font-size:12px;}
.borderRadius {border-radius:5px;}
a.Blue-btn{ display:block; margin-right:15px;width:65px; height:22px; background-color:#ffffff; line-height:24px; vertical-align:middle; text-align:center; border:1px solid #3598db; color:#3598db; -moz-border-radius:5px; -webkit-border-radius:5px; border-radius:5px;}
a:hover.Blue-btn{ background:#3598db; color:#fff;}
a.BlueCirBtn{ display:block;width:75px; height:28px; background-color:#fff; line-height:28px; vertical-align:middle; text-align:center; border:1px solid #3598db; color:#3598db; -moz-border-radius:5px; -webkit-border-radius:5px; border-radius:5px;}
a:hover.BlueCirBtn{ background:#3598db; color:#fff;}
a.BlueCirBtnMini{ display:block;width:40px; height:24px; background-color:#ffffff; line-height:24px; vertical-align:middle; text-align:center; border:1px solid #3598db; color:#3598db; -moz-border-radius:5px; -webkit-border-radius:5px; border-radius:5px;}
a:hover.BlueCirBtnMini{ background:#3598db; color:#fff;}
a.BlueCirBtnMiddle{ display:block;width:50px; height:24px; background-color:#ffffff; line-height:24px; vertical-align:middle; text-align:center; border:1px solid #3598db; color:#3598db; -moz-border-radius:5px; -webkit-border-radius:5px; border-radius:5px;}
a:hover.BlueCirBtnMiddle{ background:#3598db; color:#fff;}
/* 按钮*/
a.btn_grey_big{ display: inline-block; border: 1px solid #ccc;color: #747474;text-align: center;font-size: 14px; padding:0 10px; height: 30px; line-height: 30px;border-radius:3px;}
a:hover.btn_grey_big{ background: #c3c3c3; color: #fff;}
a.btn_orange_big{ display:inline-block; border: 1px solid #ee4a1f;color: #ee4a1f; text-align: center; font-size: 14px; padding:0 10px; height: 30px; line-height: 30px; border-radius:3px;}
a:hover.btn_orange_big{ background: #ee4a1f;color: #fff;}
a.btn_green_big{ display:inline-block; border: 1px solid #60b25e; color: #60b25e; text-align: center;font-size: 14px; padding:0 10px; height: 30px; line-height: 30px; border-radius:3px;}
a:hover.btn_green_big{ background: #60b25e; color: #fff;}
a.sy_btn_grey{ display:inline-block; color: #333; background: #e1e1e1; text-align: center; font-size: 12px; padding:0 15px; height: 30px; line-height: 30px; border-radius:3px;}
a:hover.sy_btn_grey{ background: #c3c3c3;}
a.sy_btn_blue{ display:inline-block; color: #fff; background: #3b94d6; text-align: center; font-size: 12px; padding:0 15px; height: 30px; line-height: 30px;border-radius:3px;}
a:hover.sy_btn_blue{ background: #2788d0;}
input.sy_btn_blue{ display: inline-block; color: #fff; background: #3b94d6; text-align: center; font-size: 12px; padding:0 15px; height: 30px; line-height: 30px; border-radius:3px; cursor:pointer;}
a.sy_btn_blue_mini{ display:inline-block;color: #fff; background: #3b94d6; text-align: center; font-size: 12px; padding:0 10px; height: 26px; line-height: 26px;border-radius:3px;}
a:hover.sy_btn_blue_mini{ background: #2788d0;}
a.sy_btn_grey_mini{display:inline-block; color: #333; background: #e1e1e1; text-align: center;font-size: 12px; padding:0 10px; height: 26px; line-height: 26px; -webkit-border-radius:3px; -moz-border-radius:3px; -o-border-radius:3px; border-radius:3px;}
a:hover.sy_btn_grey_mini{ background: #c3c3c3;}
a.btn_grey_mid{ display:inline-block; color: #565656; background: #eaeaea; text-align: center; font-size: 12px; padding:0 10px; height: 26px; line-height: 26px; border-radius:3px;}
a:hover.btn_grey_mid{ background: #c8c8c8;}
a.sy_btn_green{ display:inline-block; color: #fff; background: #60b25e;text-align: center; font-size: 12px; padding:0 15px; height: 30px;line-height: 30px; border-radius:3px;}
a:hover.sy_btn_green{ background: #51a74f;}
a.hw_btn_blue{display: inline-block; color: #3b94d6; border:1px solid #3b94d6; background:#fff; text-align: center; font-size: 12px; padding:0 15px;height: 30px; line-height: 30px;border-radius:3px;}
a:hover.hw_btn_blue,a:active.hw_btn_blue{ background: #3b94d6; color:#fff;}
/* commonpic */
.pic_date{ display:block; background:url(/images/public_icon.png) -31px 0 no-repeat; width:16px; height:15px; }
.pic_add{ display:block; background:url(/images/public_icon.png) -31px -273px no-repeat; width:16px; height:15px; }
.pic_sch{ display:block; background:url(/images/public_icon.png) -31px -195px no-repeat; width:16px; height:15px; }
.pic_mes{ display:block; background:url(/images/public_icon.png) 0px -376px no-repeat; width:20px; height:15px; padding-left:18px;}
.pic_img{ display:block; background:url(/images/public_icon.png) -31px -419px no-repeat; width:20px; height:15px; }
.pic_del{ display:block; background:url(/images/public_icon.png) 0px -235px no-repeat; width:20px; height:15px; }
.pic_del:hover{ background:url(/images/public_icon.png) -32px -235px no-repeat; }
.pic_stats{display:block; background:url(/images/public_icon.png) 0px -548px no-repeat; width:20px; height:15px;}
.pic_files{display:block; background:url(/images/public_icon.png) 0px -578px no-repeat; width:20px; height:15px;}
.pic_text{display:block; background:url(/images/public_icon.png) 0px -609px no-repeat; width:20px; height:18px;}
.pic_text02{display:block; background:url(/images/public_icon.png) 0px -642px no-repeat; width:20px; height:19px;}
.pic_edit{display:block; background:url(/images/public_icon.png) 0px -32px no-repeat; width:20px; height:15px;}
.pic_edit:hover{display:block; background:url(/images/public_icon.png) -32px -32px no-repeat; width:20px; height:15px;}
.pic_edit2{display:inline-block; background:url(/images/public_icon.png) 0px -32px no-repeat; width:20px; height:15px; vertical-align:middle; display:none;}
.pic_edit2:hover{display:inline-block; background:url(/images/public_icon.png) -32px -32px no-repeat; width:20px; height:15px;}
/*文本左对齐*/
.tl{text-align: left;}
.embed img,embed{max-width: 100%;}
.attachments {clear: both;}
.is_public_checkbox{margin-left: 15px;margin-right: 10px;}
.author_name{color: #3ca5c6 !important;}
.ke-container-default{max-width: 100%;}
/*状态提示图标*/
.success-icon {background:url("/images/icons_ziliao.png") 0 -28px no-repeat; padding-left:25px;}
.error-icon {background:url("/images/icons_ziliao.png") 0 -56px no-repeat; padding-left:25px;}
/*禁用*/
.disabled {background-color:#f5f5f5;}
#popupWrap ul{cursor: default;}
.bg_checked{background-color: #3b94d6;}
/* 搜索 */
.hw_search_box{ position:relative; }
.hw_search_box input.hw_search-input{ width:293px; height:28px; border:none; border:1px solid #e7e7e7; background:#fff; padding-left:5px;}
.hw_search_box a.hw_btn_search{display:block; width:20px; height:20px; background:url(/images/hw/icons_hw.png) 0 -57px no-repeat; position:absolute; right:5px; top:5px; cursor:pointer;float:left; -moz-transition :all 0s linear 0s; -webkit-transition :all 0s linear 0s; -o-transition:all 0s linear 0s; transition:all 0s linear 0s;}
.hw_search_box a:hover.hw_btn_search{background:url(/images/hw/icons_hw.png) -40px -57px no-repeat; -moz-transition :all 0s linear 0s; -webkit-transition :all 0s linear 0s; -o-transition:all 0s linear 0s; transition:all 0s linear 0s;}
.hw_files_icon{display:block; width:17px; height:14px; background:url(/images/hw/icons_hw.png) 0 -135px no-repeat;}
/* 编辑删除 */
.sy_icons_edit{ display: inline-block; padding:9px;background:url(../../images/sy/sy_icons02.png) 0 1px no-repeat;}
.sy_icons_del{ padding:9px;background:url(../../images/sy/sy_icons02.png) 0 -21px no-repeat;}
.sy_icons_edit:hover{ background:url(../../images/sy/sy_icons02.png) -20px 1px no-repeat; }
.sy_icons_del:hover{ background:url(../../images/sy/sy_icons02.png) -20px -21px no-repeat;}
/* 翻页 */
.pages a{ display:block; border:1px solid #d1d1d1; color:#888; float:left; width:30px;text-align:center; padding:3px 0; line-height:1.9; margin-right:5px;}
.pages a:hover{ background-color:#3b94d6; border:1px solid #3b94d6; color:#fff;}
a.pages-big{width:50px;}
.pages .active{ background-color:#3b94d6; border:1px solid #3b94d6;color:#fff;}
.pages{ width:330px; margin:20px auto 10px;}
.pages li {display:inline-block;}
.sy_corange{ color: #ee4a1f;}
.sy_new_orange{font-size: 12px;padding: 0 5px;border-radius: 3px;line-height: 14px;color: #ff4a1b;border: 1px solid #ff4a1b;}
.sy_cgrey{ color: #888;}
a.sy_cgrey{ color: #888;}
.sy_corange{ color: #ee4a1f;}
a.sy_corange{ color: #ee4a1f;}
a.sy_cblue{ color: #3b94d6;}
/* 新增粉色关注按钮*/
a.y_btn_pink{ display: inline-block; color: #fff; background: #ff7d7d;text-align: center; font-size: 12px; padding:0 15px; height: 30px; line-height: 30px; border-radius:3px;}
a:hover.sy_btn_pink{ background: #e64c4c;}
.ke-block pre{ font-size:9pt; font-family:Courier New,Arial; border:1px solid #ddd; border-left:5px solid #6ce26c; background:#f6f6f6; padding:5px;}
.ke-block ol li{list-style-type: decimal;margin-left: 40px;}
.ke-block ul li{list-style-type: disc;margin-left: 40px;}
.ke-block{font-size: 14px;}
.ke-block h1{font-size: 2em;}
.ke-block h2{font-size: 1.5em;}
.ke-block h3{font-size: 1.17em;}
a.export_icon{background: url(/images/item.png) -58px -30px no-repeat; width: 45px; float: left; line-height: 41px; font-size: 14px; margin-top: -5px;}
a.export_icon:hover {background: url(/images/item.png) -58px -60px no-repeat;}
.export_icon_li:hover ul {display:block;}
.break_full_word { word-break: normal !important;word-wrap: break-word !important; }
.icons-user-homework{background:url(/images/user/home-user-left.png) 0px -150px no-repeat; }
.homework-user-leftnav-li{ height: 25px; line-height: 40px; padding-left: 25px; color: #666;background:url(/images/user/home-user-left.png) 0px -149px no-repeat; font-size: 14px; position: relative; }
.homework-user-leftnav-li:hover{ height: 25px; line-height: 40px; padding-left: 25px; background:#f4f4f4; background:url(/images/user/home-user-left.png) 0px -186px no-repeat; font-size: 14px; position: relative; }
.separator_short{margin-top: 5px; margin-bottom: 5px; margin-left: 37px; width: 433px; display: block; border-bottom: 1px solid #d9d9d9;}
.separator_long{margin-top: 5px; margin-bottom: 5px; margin-left: 37px; width: 522px; display: block; border-bottom: 1px solid #d9d9d9;}
/* 模板弹框 20161013byLB */
#muban_popup_box{ background:#fff;padding-bottom:15px;-webkit-border-radius:5px;-moz-border-radius:5px;-o-border-radius:5px;border-radius:5px;box-shadow: 0px 2px 8px rgba(146, 153, 169, 0.5);}
.muban_popup_top{background:#3b94d6;height:40px;-webkit-border-radius: 5px 5px 0px 0px;-moz-border-radius: 5px 5px 0px 0px;-o-border-radius: 5px 5px 0px 0px;border-radius: 5px 5px 0px 0px;}
.muban_popup_top h3{ font-size:16px; color:#fff; font-weight:normal; line-height:40px; padding-left:10px; }
a.muban_icons_close{width:20px; height:20px;display:block;background: url(/images/sy/sy_icons_close.png) 0 0px no-repeat; margin:8px 10px 0 0;}
a:hover.muban_icons_close{background: url(/images/sy/sy_icons_close.png) -40px 0px no-repeat;}
#muban_popup_box input,#muban_popup_box select{ border:1px solid #c8c8c8; height: 28px; color: #888;}
#muban_popup_box label.pop_box_label{width: 100px; text-align: right; display: inline-block;}
input.radio-width90{ width: 90px; }
#muban_popup_box label.pop_box_label_l {width: 100px; text-align: left; display: inline-block;}
.sy_popup_con{ margin:30px auto 0;font-size:14px; width:330px;}
.sy_popup_add li{ line-height:40px;}
.sy_popup_add label{ display:block; float:left; width:85px; text-align:right; line-height:40px;}
.email_prompt_mes{ border:1px solid #ccc; border-radius:5px; width:468px; height:60px; background:#fff;padding:5px; margin-bottom: 5px;}
a.btn{display: inline-block;border:none; padding:0 10px;color: #333;background: #e1e1e1; text-align:center;font-size: 12px; height: 30px;line-height: 30px;-webkit-border-radius: 3px;-moz-border-radius: 3px; -o-border-radius: 3px; border-radius: 3px; }
a:hover.btn{background: #c3c3c3; color: #333;}
a.btn-green{background: #60b25e; color: #fff;}
a:hover.btn-green{background: #51a74f; color: #fff;}
a.btn-blue{background: #3b94d6; color: #fff;}
a:hover.btn-blue{background: #2788d0; color: #fff;}
.sy_popup_top{ background:#3b94d6; height:40px; -webkit-border-radius: 5px 5px 0px 0px; -moz-border-radius: 5px 5px 0px 0px; -o-border-radius: 5px 5px 0px 0px; border-radius: 5px 5px 0px 0px;}
.sy_popup_top h3{ font-size:18px; color:#fff; font-weight:normal; line-height:40px; padding-left:10px;}
.sy_popup_top_tishi{ background:#ededed; }
.sy_popup_top_tishi h3{color:#616161; font-size:16px;}
.sy_popup_con02{ margin:30px auto 0; font-size:14px; text-align:center; width:360px;}
.sy_popup_con02 ul li p{ margin-bottom:15px; text-align:center; font-size:14px; color:#616161;}
.sy_popup_con02 a{ margin:0 auto;}
#sy_popup_box{ width:460px; background:#fff; padding-bottom:30px; border-radius:5px; box-shadow: 0px 2px 8px rgba(146, 153, 169, 0.5);}
a.btn_blue_64_width{ width: 64px; display:inline-block; color: #fff; background: #3b94d6; text-align: center; font-size: 12px; height: 30px; line-height: 30px;border-radius:3px; }
a:hover.btn_blue_64_width{ background: #2788d0; color: #fff;}
.btn_grey_64_width{ width: 64px; display:inline-block; color: #656565; background: #d9d9d9; text-align: center; font-size: 12px; height: 30px; line-height: 30px;border-radius:3px; }
a:hover.btn_grey_64_width{ background: #717171; color: #fff;}
a.btn_green_64_width{ width: 64px; display:inline-block; color: #fff; background: #28be6c; text-align: center; font-size: 12px; height: 30px; line-height: 30px;border-radius:3px; }
a:hover.btn_green_64_width{ background: #14ad5a; color: #fff;}

@ -296,7 +296,7 @@ label.infolabel{display: block;float: left;width: 56px;text-align: right;margin-
.subshaicontent a{float: left;margin-right: 20px;color: #999;cursor: pointer}
.search-new{width: 248px;height:32px;position: relative}
.search-new{width: 248px;height:32px;position: relative;margin-right: 35px;}
.search-span{display: block;position: absolute;width: 100%;height: 100%;left:0px;top:0px;background-color: #F4F4F4;border: 1px solid #EAEAEA; border-radius: 4px;z-index: 1}
.search-new-input{height: 32px;padding-left: 5px;width: 225px;border: none;box-sizing: border-box;background: none;outline: none;position: absolute;left:0px;top:1px;z-index: 2}
.search-new img,.search-new a,.search-new .searchicon{cursor: pointer;position: absolute;right:2px;top:2px;z-index: 2}

Loading…
Cancel
Save