dev_aliyun_beta
杨树林 6 years ago
parent c2f3da3303
commit f3896c2370

@ -21,7 +21,9 @@ class GroupPackage extends Component {
} }
} }
DownloadOpenPdf=(type,url)=>{
type===true?window.open(url):window.location.href=url;
}
componentDidMount() { componentDidMount() {
console.log("Groupjobquesanswer"); console.log("Groupjobquesanswer");
console.log("componentDidMount"); console.log("componentDidMount");
@ -54,9 +56,9 @@ class GroupPackage extends Component {
render() { render() {
let{attachments}=this.props;
return ( return (
<div className="color-grey df yslquesmat26" key={0} style={{ lineHeight: '17px'}}> <div className="color-grey df yslquesmat26" key={attachments&&attachments.id} style={{ lineHeight: '17px'}}>
<a className="color-grey "> <a className="color-grey ">
<i className="font-14 color-green iconfont icon-fujian mr8" aria-hidden="true"></i> <i className="font-14 color-green iconfont icon-fujian mr8" aria-hidden="true"></i>
</a> </a>
@ -73,11 +75,11 @@ class GroupPackage extends Component {
` `
} }
</style> </style>
<a href={"/"} title={''} <a onClick={()=>this.DownloadOpenPdf(attachments.is_pdf,attachments.url)} title={attachments&&attachments.title}
className="mr12 yslahover overflowHidden1" length="58" style={{maxWidth:'480px',fontSize:"16px",}}> className="mr12 yslahover overflowHidden1" length="58" style={{maxWidth:'480px',fontSize:"16px",}}>
<span>清除浏览器缓存或换个浏览器操作指南更新版本.zip</span> <span>{attachments&&attachments.description}</span>
</a> </a>
<span className="color656565 color-grey-6 font-12 mr8">{2}</span> <span className="color656565 color-grey-6 font-12 mr8">{attachments&&attachments.filesize}</span>
</div> </div>
) )

@ -55,18 +55,19 @@ class Generaljobanswer extends Component {
render() { render() {
let{datas}=this.props
return ( return (
<div className=" clearfix edu-back-white" ref='targetElementTrainingjobsetting' style={{margin: "auto", minWidth:"1200px"}}> <div className=" clearfix edu-back-white" ref='targetElementTrainingjobsetting' style={{margin: "auto", minWidth:"1200px"}}>
<div className="yslquestionbank1"> <div className="yslquestionbank1">
<div id="MakedownHTML"className="markdown-body yslquesHeigth yslquesmarkdowntext" dangerouslySetInnerHTML={{__html: markdownToHTML("C++是C语言的面向对象扩展是C语言的一个超集同时也是历史最悠久、最受欢迎的程序设计语言之一。根据C++创始人Stroustrup的自述C++是一个“更好的C语言”。\n" + <div id="MakedownHTML"className="markdown-body yslquesHeigth yslquesmarkdowntext" dangerouslySetInnerHTML={{__html: markdownToHTML(datas&&(datas.reference_answer===null?"无":datas.reference_answer==="null"?"无":datas.reference_answer)).replace(/▁/g, "▁▁▁")}}/>
"\n" + {datas.attachments === undefined ? "" : datas.attachments.map((item, key) => {
"输入输出是计算机程序的基本功能。程序本质上是对数据进行处理的一系列操作,一般程序都可以分解为:“数据输入”、“数据处理”和“数据输出”三个步骤。标准输入输出(键盘输入和显示器输出)是程序的重要组成部分。\n" + return (
"\n" + <GroupPackage key={key} attachments={item}></GroupPackage>
"本实训项目的主要目标是学习和掌握C++程序的基本结构和基本输入输出主要内容包括标准C语言自有的单个字符的输入输出、格式化的输入输出以及C++扩展的使用流对象的输入输出").replace(/▁/g, "▁▁▁")}}/> )
})}
<GroupPackage></GroupPackage>
</div> </div>

@ -86,7 +86,7 @@ class Generaljobbankdetails extends Component {
if(response){ if(response){
if(response.data){ if(response.data){
this.setState({ this.setState({
datas:response.data.informs, datas:response.data,
}) })
}else { }else {
this.setState({ this.setState({
@ -118,7 +118,7 @@ class Generaljobbankdetails extends Component {
///////////////教师截止 ///////////////教师截止
render() { render() {
let {tab} = this.state; let {tab,datas} = this.state;
const isAdmin = this.props.isAdmin(); const isAdmin = this.props.isAdmin();
// console.log(119) // console.log(119)
@ -141,10 +141,10 @@ class Generaljobbankdetails extends Component {
</div> </div>
<div className="educontent mb20"> <div className="educontent mb20">
<p className=" fl color-black summaryname" style={{heigth: "33px"}}> <p className=" fl color-black summaryname" style={{heigth: "33px"}}>
MySQL数据库编程开发实训基础篇 {datas&&datas.name}
</p> </p>
<CoursesListType <CoursesListType
typelist={["公开"]} typelist={datas.is_public===true?["公开"]:["私有"]}
/> />
</div> </div>
@ -160,8 +160,8 @@ class Generaljobbankdetails extends Component {
</div> </div>
</div> </div>
<Spin size="large" spinning={this.state.isSpin} id={"cdiv"}> <Spin size="large" spinning={this.state.isSpin} id={"cdiv"}>
{parseInt(tab) === 0 ? <Generaljobdetails {...this.props} {...this.state}/> :""} {parseInt(tab) === 0 ? <Generaljobdetails {...this.props} {...this.state} datas={datas}/> :""}
{parseInt(tab) === 1 ? <Generaljobanswer{...this.props} {...this.state}/>:""} {parseInt(tab) === 1 ? <Generaljobanswer{...this.props} {...this.state} datas={datas}/>:""}
</Spin> </Spin>
</div> </div>
</div> </div>

@ -13,14 +13,13 @@ import {
import GroupPackage from '../groupjobbank/GroupPackage' import GroupPackage from '../groupjobbank/GroupPackage'
import './questionbank.css'; import './questionbank.css';
//内容详情
class Generaljobdetails extends Component { class Generaljobdetails extends Component {
constructor(props) { constructor(props) {
super(props); super(props);
this.state = { this.state = {
} }
} }
@ -56,18 +55,18 @@ class Generaljobdetails extends Component {
render() { render() {
let{datas}=this.props
return ( return (
<div className=" clearfix edu-back-white" ref='targetElementTrainingjobsetting' style={{margin: "auto", minWidth:"1200px"}}> <div className=" clearfix edu-back-white" ref='targetElementTrainingjobsetting' style={{margin: "auto", minWidth:"1200px"}}>
<div className="yslquestionbank1"> <div className="yslquestionbank1">
<div id="MakedownHTML"className="markdown-body yslquesHeigth yslquesmarkdowntext" dangerouslySetInnerHTML={{__html: markdownToHTML("C++是C语言的面向对象扩展是C语言的一个超集同时也是历史最悠久、最受欢迎的程序设计语言之一。根据C++创始人Stroustrup的自述C++是一个“更好的C语言”。\n" + <div id="MakedownHTML"className="markdown-body yslquesHeigth yslquesmarkdowntext" dangerouslySetInnerHTML={{__html: markdownToHTML(datas&&(datas.description===null?"无":datas.description==="null"?"无":datas.description)).replace(/▁/g, "▁▁▁")}}/>
"\n" + {datas.attachments === undefined ? "" : datas.attachments.map((item, key) => {
"输入输出是计算机程序的基本功能。程序本质上是对数据进行处理的一系列操作,一般程序都可以分解为:“数据输入”、“数据处理”和“数据输出”三个步骤。标准输入输出(键盘输入和显示器输出)是程序的重要组成部分。\n" + return (
"\n" + <GroupPackage key={key} attachments={item}></GroupPackage>
"本实训项目的主要目标是学习和掌握C++程序的基本结构和基本输入输出主要内容包括标准C语言自有的单个字符的输入输出、格式化的输入输出以及C++扩展的使用流对象的输入输出").replace(/▁/g, "▁▁▁")}}/> )
})}
<GroupPackage></GroupPackage>
</div> </div>

@ -1,452 +1,456 @@
import React,{ Component } from "react"; import React,{ Component } from "react";
import './css/moopCases.css' import './css/moopCases.css'
import '../courses/css/Courses.css' import '../courses/css/Courses.css'
import { Form , Input , Upload , Button , Icon , message , Tooltip } from "antd"; import { Form , Input , Upload , Button , Icon , message , Tooltip } from "antd";
import { getImageUrl , setImagesUrl , MarkdownToHtml , ActionBtn , appendFileSizeToUploadFile , appendFileSizeToUploadFileAll , getUrl , getUploadActionUrl } from 'educoder'; import { getImageUrl , setImagesUrl , MarkdownToHtml , ActionBtn , appendFileSizeToUploadFile , appendFileSizeToUploadFileAll , getUrl , getUploadActionUrl } from 'educoder';
import Tags from './CaseTags' import Tags from './CaseTags'
import axios from 'axios'; import axios from 'axios';
import TPMMDEditor from '../tpm/challengesnew/TPMMDEditor'; import TPMMDEditor from '../tpm/challengesnew/TPMMDEditor';
import _ from 'lodash' import _ from 'lodash'
const { Dragger } = Upload; const { Dragger } = Upload;
function beforeUpload(file) { function beforeUpload(file) {
const isJpgOrPng = file.type === 'image/jpeg' || file.type === 'image/png'; const isJpgOrPng = file.type === 'image/jpeg' || file.type === 'image/png';
if (!isJpgOrPng) { if (!isJpgOrPng) {
message.error('You can only upload JPG/PNG file!'); message.error('You can only upload JPG/PNG file!');
} }
const isLt2M = file.size / 1024 / 1024 < 2; const isLt2M = file.size / 1024 / 1024 < 2;
if (!isLt2M) { if (!isLt2M) {
message.error('Image must smaller than 2MB!'); message.error('Image must smaller than 2MB!');
} }
return isJpgOrPng && isLt2M; return isJpgOrPng && isLt2M;
} }
function getBase64(img, callback) { function getBase64(img, callback) {
const reader = new FileReader(); const reader = new FileReader();
reader.addEventListener('load', () => callback(reader.result)); reader.addEventListener('load', () => callback(reader.result));
reader.readAsDataURL(img); reader.readAsDataURL(img);
} }
const $ = window.$; const $ = window.$;
class CaseNew extends Component{ class CaseNew extends Component{
constructor(props){ constructor(props){
super(props); super(props);
this.DescMdRef = React.createRef(); this.DescMdRef = React.createRef();
this.state={ this.state={
casesTags:[], casesTags:[],
contentFileList:[], contentFileList:[],
filesID:[], filesID:[],
imageUrl:undefined, imageUrl:undefined,
loading: false, loading: false,
checkTag:false, checkTag:false,
checkFile:false, checkFile:false,
coverID:undefined coverID:undefined
} }
} }
// 上传附件-删除确认框 // 上传附件-删除确认框
onAttachmentRemove = (file, stateName) => { onAttachmentRemove = (file, stateName) => {
this.props.confirm({ this.props.confirm({
content: '是否确认删除?', content: '是否确认删除?',
onOk: () => { onOk: () => {
this.deleteAttachment(file, stateName) this.deleteAttachment(file, stateName)
}, },
onCancel() { onCancel() {
console.log('Cancel'); console.log('Cancel');
}, },
}); });
return false; return false;
} }
// 上传附件-确认删除 // 上传附件-确认删除
deleteAttachment = (file, stateName) => { deleteAttachment = (file, stateName) => {
// 初次上传不能直接取uid // 初次上传不能直接取uid
const url = `/attachments/${file.response ? file.response.id : file.uid}.json` const url = `/attachments/${file.response ? file.response.id : file.uid}.json`
axios.delete(url, { axios.delete(url, {
}).then((response) => { }).then((response) => {
if (response.data) { if (response.data) {
const { status } = response.data; const { status } = response.data;
if (status == 0) { if (status == 0) {
console.log('--- success') console.log('--- success')
this.setState((state) => { this.setState((state) => {
const index = state[stateName].indexOf(file); const index = state[stateName].indexOf(file);
const newFileList = state[stateName].slice(); const newFileList = state[stateName].slice();
newFileList.splice(index, 1); newFileList.splice(index, 1);
console.log("newFileList"); console.log("newFileList");
console.log(newFileList.map(item =>{ return( item.id )})); console.log(newFileList.map(item =>{ return( item.id )}));
return { return {
[stateName]: newFileList, [stateName]: newFileList,
filesID:newFileList.map(item =>{ return( item.id )}) filesID:newFileList.map(item =>{ return( item.id )})
}; };
}); });
} }
} }
}) })
.catch(function (error) { .catch(function (error) {
console.log(error); console.log(error);
}); });
} }
// 上传附件-change // 上传附件-change
handleContentUploadChange = (info) => { handleContentUploadChange = (info) => {
if (info.file.status === 'done' || info.file.status === 'uploading') { if (info.file.status === 'done' || info.file.status === 'uploading') {
let contentFileList = info.fileList; let contentFileList = info.fileList;
this.setState({ contentFileList: appendFileSizeToUploadFileAll(contentFileList)}); this.setState({ contentFileList: appendFileSizeToUploadFileAll(contentFileList)});
let list = appendFileSizeToUploadFileAll(contentFileList); let list = appendFileSizeToUploadFileAll(contentFileList);
let arr = list.map(item=>{ let arr = list.map(item=>{
return ( item.response && item.response.id ) return ( item.response && item.response.id )
}) })
this.setState({ this.setState({
filesID:arr, filesID:arr,
checkFile:arr.length > 0 ? false : true checkFile:arr.length > 0 ? false : true
}) })
} }
} }
// 上传封面图-change // 上传封面图-change
handleChange = (info) => { handleChange = (info) => {
if (info.file.status === 'uploading') { if (info.file.status === 'uploading') {
this.setState({ loading: true }); this.setState({ loading: true });
return; return;
} }
if (info.file.status === 'done') { if (info.file.status === 'done') {
// Get this url from response in real world. // Get this url from response in real world.
getBase64(info.file.originFileObj, imageUrl => getBase64(info.file.originFileObj, imageUrl =>
this.setState({ this.setState({
imageUrl, imageUrl,
loading: false loading: false
}), }),
); );
console.log(info.file); console.log(info.file);
this.setState({ this.setState({
coverID:info.file.response && info.file.response.id coverID:info.file.response && info.file.response.id
}) })
} }
}; };
// 编辑时加载数据 // 编辑时加载数据
componentDidMount=()=>{ componentDidMount=()=>{
if(this.props.match.params.caseID){ if(this.props.match.params.caseID){
this.InitEditData(); this.InitEditData();
} }
} }
componentDidUpdate=(prevState)=>{ componentDidUpdate=(prevState)=>{
if(this.props.CaseDetail && prevState.CaseDetail != this.props.CaseDetail){ if(this.props.CaseDetail && prevState.CaseDetail != this.props.CaseDetail){
this.props.form.setFieldsValue({ this.props.form.setFieldsValue({
caseTitle:this.props.CaseDetail.title, caseTitle:this.props.CaseDetail.title,
userName:this.props.CaseDetail.author_name, userName:this.props.CaseDetail.author_name,
userUnit:this.props.CaseDetail.author_school_name, userUnit:this.props.CaseDetail.author_school_name,
}) })
this.setState({ this.setState({
contentFileList:this.props.attachments.map(item => { contentFileList:this.props.attachments.map(item => {
return { return {
id: item.id, id: item.id,
uid: item.id, uid: item.id,
name: appendFileSizeToUploadFile(item), name: appendFileSizeToUploadFile(item),
url: item.url, url: item.url,
filesize: item.filesize, filesize: item.filesize,
status: 'done' status: 'done'
} }
}), }),
filesID:this.props.attachments.map(item => { filesID:this.props.attachments.map(item => {
return ( item.id ) return ( item.id )
}), }),
coverID:this.props.cover && this.props.cover.id, coverID:this.props.cover && this.props.cover.id,
imageUrl:this.props.CaseDetail.cover && setImagesUrl(this.props.CaseDetail.cover.url), imageUrl:this.props.CaseDetail.cover && setImagesUrl(this.props.CaseDetail.cover.url),
casesTags:this.props.tags.map(item=>{ casesTags:this.props.tags.map(item=>{
return (item.id); return (item.id);
}) })
}) })
console.log(this.props.attachments.map(item => { console.log(this.props.attachments.map(item => {
return ( item.id ) return ( item.id )
})) }))
} }
} }
InitEditData=()=>{ InitEditData=()=>{
let caseID = this.props.match.params.caseID; let caseID = this.props.match.params.caseID;
this.props.getDetail(caseID); this.props.getDetail(caseID);
} }
// 申请提交和保存 // 申请提交和保存
handleSubmit = (type) => { handleSubmit = (type) => {
let caseID = this.props.match.params.caseID; let caseID = this.props.match.params.caseID;
console.log(type); console.log(type);
this.props.form.validateFieldsAndScroll((err, values) => { this.props.form.validateFieldsAndScroll((err, values) => {
let { casesTags , filesID } = this.state; let { casesTags , filesID } = this.state;
if(casesTags.length == 0){ if(casesTags.length == 0){
$("html").animate({ scrollTop: $("#tagFormItem").offset().top - 100 }); $("html").animate({ scrollTop: $("#tagFormItem").offset().top - 100 });
this.setState({ this.setState({
checkTag:true checkTag:true
}) })
return; return;
} }
if(filesID.length == 0){ if(filesID.length == 0){
$("html").animate({ scrollTop: $("#fileFormItem").offset().top - 100 }); $("html").animate({ scrollTop: $("#fileFormItem").offset().top - 100 });
this.setState({ this.setState({
checkFile:true checkFile:true
}) })
return; return;
} }
const mdContnet = this.DescMdRef.current.getValue().trim(); const mdContnet = this.DescMdRef.current.getValue().trim();
console.log(mdContnet) console.log(mdContnet)
values.description = mdContnet; values.description = mdContnet;
console.log(values); console.log(values);
let url = caseID ? `/libraries/${caseID}.json`: `/libraries.json`; let url = caseID ? `/libraries/${caseID}.json`: `/libraries.json`;
if(caseID){ if(caseID){
axios.put((url),{ axios.put((url),{
title:values.caseTitle, title:values.caseTitle,
author_name:values.userName, author_name:values.userName,
author_school_name:values.userUnit, author_school_name:values.userUnit,
content:values.description, content:values.description,
attachment_ids:this.state.contentFileList.map(item=>{ attachment_ids:this.state.contentFileList.map(item=>{
return (item.response ? item.response.id : item.id ) return (item.response ? item.response.id : item.id )
}), }),
tag_ids:this.state.casesTags, tag_ids:this.state.casesTags,
cover_id:this.state.coverID, cover_id:this.state.coverID,
publish:type == 'save' ? false : true publish:type == 'save' ? false : true
}).then((result)=>{ }).then((result)=>{
if(result){ if(result){
this.props.showNotification(type == 'save' ? `案例保存成功!`: `提交成功!`); this.props.showNotification(type == 'save' ? `案例保存成功!`: `提交成功!`);
this.props.history.push(type == 'save' ? `/moop_cases/${result.data.id}` : `/moop_cases/${result.data.id}/publish_success`); this.props.history.push(type == 'save' ? `/moop_cases/${result.data.id}` : `/moop_cases/${result.data.id}/publish_success`);
} }
}).catch((error)=>{ }).catch((error)=>{
console.log(error); console.log(error);
}) })
}else{ }else{
axios.post((url),{ axios.post((url),{
title:values.caseTitle, title:values.caseTitle,
author_name:values.userName, author_name:values.userName,
author_school_name:values.userUnit, author_school_name:values.userUnit,
content:values.description, content:values.description,
attachment_ids:this.state.filesID, attachment_ids:this.state.filesID,
tag_ids:this.state.casesTags, tag_ids:this.state.casesTags,
cover_id:this.state.coverID, cover_id:this.state.coverID,
publish:type == 'save' ? false : true publish:type == 'save' ? false : true
}).then((result)=>{ }).then((result)=>{
if(result){ if(result){
this.props.showNotification(type == 'save' ? `案例保存成功!`: `提交成功!`); this.props.showNotification(type == 'save' ? `案例保存成功!`: `提交成功!`);
this.props.history.push(type == 'save' ? `/moop_cases/${result.data.id}` : `/moop_cases/${result.data.id}/publish_success`); this.props.history.push(type == 'save' ? `/moop_cases/${result.data.id}` : `/moop_cases/${result.data.id}/publish_success`);
} }
}).catch((error)=>{ }).catch((error)=>{
console.log(error); console.log(error);
}) })
} }
}) })
} }
// 选择标签 // 选择标签
changeType=(type)=>{ changeType=(type)=>{
let tags = []; // console.log(this.state.casesTags);
if(this.state.casesTags.indexOf(type) > -1){ // debugger
tags = this.state.casesTags.filter(item => item != type); let tags = [];
}else{
tags = this.state.casesTags.concat(type); if(this.state.casesTags.indexOf(type) > -1){
} tags = this.state.casesTags.filter(item => item != type);
const tagUniqed = _.uniq(tags); }else{
this.setState({ tags = this.state.casesTags.concat(type);
casesTags: tagUniqed, }
checkTag:tags.length > 0 ? false : true const tagUniqed = _.uniq(tags);
}) this.setState({
} casesTags: tagUniqed,
checkTag:tags.length > 0 ? false : true
render(){ })
let { caseID } = this.props.match.params; }
let { CaseDetail } = this.props;
let { casesTags , contentFileList , imageUrl , checkTag , checkFile } = this.state; render(){
const {getFieldDecorator} = this.props.form; let { caseID } = this.props.match.params;
let { CaseDetail } = this.props;
let { casesTags , contentFileList , imageUrl , checkTag , checkFile } = this.state;
// 上传附件点击事件 const {getFieldDecorator} = this.props.form;
const uploadProps = {
width: 600,
multiple: true, // 上传附件点击事件
fileList:contentFileList, const uploadProps = {
action: `${getUploadActionUrl()}`, width: 600,
onChange: this.handleContentUploadChange, multiple: true,
onRemove: (file) => this.onAttachmentRemove(file, 'contentFileList'), fileList:contentFileList,
beforeUpload: (file) => { action: `${getUploadActionUrl()}`,
const isLt150M = file.size / 1024 / 1024 < 150; onChange: this.handleContentUploadChange,
if (!isLt150M) { onRemove: (file) => this.onAttachmentRemove(file, 'contentFileList'),
//message.error('文件大小必须小于150MB!'); beforeUpload: (file) => {
this.props.define({ const isLt150M = file.size / 1024 / 1024 < 150;
title:'提示', if (!isLt150M) {
content:"该文件无法上传。超过文件大小限制(150MB),建议上传到百度云等其它共享工具里然后再txt文档里给出链接以及共享密码并上传" //message.error('文件大小必须小于150MB!');
}) this.props.define({
return isLt150M; title:'提示',
} content:"该文件无法上传。超过文件大小限制(150MB),建议上传到百度云等其它共享工具里然后再txt文档里给出链接以及共享密码并上传"
} })
}; return isLt150M;
// 上传封面图-html }
const uploadButton = ( }
<div> };
<Icon className='font-36 color-grey-c' type={this.state.loading ? 'loading' : 'plus'} /> // 上传封面图-html
</div> const uploadButton = (
); <div>
// 上传封面图点击事件 <Icon className='font-36 color-grey-c' type={this.state.loading ? 'loading' : 'plus'} />
const uploadCover = { </div>
listType:"picture-card", );
className:"avatar-uploader", // 上传封面图点击事件
showUploadList:false, const uploadCover = {
action:`${getUploadActionUrl()}`, listType:"picture-card",
onChange:this.handleChange, className:"avatar-uploader",
} showUploadList:false,
console.log('111'); action:`${getUploadActionUrl()}`,
console.log(!caseID || (CaseDetail && CaseDetail.status == "pending")); onChange:this.handleChange,
return( }
<div className="educontent mt10 mb50"> console.log('111');
<style> console.log(!caseID || (CaseDetail && CaseDetail.status == "pending"));
{ return(
` <div className="educontent mt10 mb50">
.newCases .ant-col.ant-form-item-label{ <style>
float:left; {
margin-right:20px; `
height:35px; .newCases .ant-col.ant-form-item-label{
line-height:35px; float:left;
} margin-right:20px;
height:35px;
.newCaseUpload{ line-height:35px;
width: 100%; }
background: #F2F9FF;
justify-content: center; .newCaseUpload{
align-items: center; width: 100%;
display: -webkit-flex; background: #F2F9FF;
text-align: center; justify-content: center;
height: 120px; align-items: center;
border-radius: 4px; display: -webkit-flex;
border: 1px dashed #4cacff; text-align: center;
} height: 120px;
.newCases .ant-form-item{ border-radius: 4px;
margin-bottom:20px!important ; border: 1px dashed #4cacff;
} }
.newCases .ant-col.ant-form-item-control-wrapper{ .newCases .ant-form-item{
position:relative; margin-bottom:20px!important ;
} }
.newCases .ant-form-explain{ .newCases .ant-col.ant-form-item-control-wrapper{
position:absolute; position:relative;
bottom:-18px; }
left:76px; .newCases .ant-form-explain{
padding-left: 7px; position:absolute;
} bottom:-18px;
.newCases .resetLeft .ant-form-explain{ left:76px;
left:0px; padding-left: 7px;
} }
.newCases .resetBottom .ant-form-explain{ .newCases .resetLeft .ant-form-explain{
bottom:2px; left:0px;
} }
` .newCases .resetBottom .ant-form-explain{
} bottom:2px;
</style> }
<p className="mt10 mb20 clearfix lineh-20"> `
<a href="/moop_cases" className="color-grey-9">教学案例</a> &gt; <span className="color-grey-3">{ caseID ? "" : "" }</span> }
</p> </style>
<p class="lineh-25 font-22 mb20">上传教学案例</p> <p className="mt10 mb20 clearfix lineh-20">
<Form onSubmit={this.handleSubmit} className={"newCases"}> <a href="/moop_cases" className="color-grey-9">教学案例</a> &gt; <span className="color-grey-3">{ caseID ? "" : "" }</span>
<div className="padding30 edu-back-white"> </p>
<Form.Item label="标题"> <p class="lineh-25 font-22 mb20">上传教学案例</p>
{getFieldDecorator('caseTitle', { <Form onSubmit={this.handleSubmit} className={"newCases"}>
rules: [{required: true, message: "案例标题不能为空"}], <div className="padding30 edu-back-white">
})( <Form.Item label="标题">
<Input placeholder="例如:软件工程教学案例" className="greyInput winput-300-35 mr20 fl"/> {getFieldDecorator('caseTitle', {
)} rules: [{required: true, message: "案例标题不能为空"}],
<span className="color-grey-c font-12 fl">简明扼要介绍文档/视频所包含的主要的内容</span> })(
</Form.Item> <Input placeholder="例如:软件工程教学案例" className="greyInput winput-300-35 mr20 fl"/>
<div className="clearfix"> )}
<Form.Item label="作者" className="fl with22"> <span className="color-grey-c font-12 fl">简明扼要介绍文档/视频所包含的主要的内容</span>
{getFieldDecorator('userName', { </Form.Item>
rules: [{required: true, message: "请输入作者姓名"}], <div className="clearfix">
})( <Form.Item label="作者" className="fl with22">
<Input placeholder="请输入姓名" className="greyInput winput-120-35 mr20 fl winput150"/> {getFieldDecorator('userName', {
)} rules: [{required: true, message: "请输入作者姓名"}],
</Form.Item> })(
<Form.Item className="fl resetLeft"> <Input placeholder="请输入姓名" className="greyInput winput-120-35 mr20 fl winput150"/>
{getFieldDecorator('userUnit', { )}
rules: [{required: true, message: "请输入作者单位名称"}], </Form.Item>
})( <Form.Item className="fl resetLeft">
<Input placeholder="请输入作者单位名称" className="greyInput winput-300-35 mr20 fl"/> {getFieldDecorator('userUnit', {
)} rules: [{required: true, message: "请输入作者单位名称"}],
</Form.Item> })(
</div> <Input placeholder="请输入作者单位名称" className="greyInput winput-300-35 mr20 fl"/>
<div className={checkTag==true ? "clearfix mb20 pr has-error" : "clearfix mb20"} id="tagFormItem"> )}
<span className="upload_Title must">标签</span> </Form.Item>
<ul className="fl libraries_tab"> </div>
<li className={ casesTags.indexOf(1) > -1 ? "active" :"" } onClick={()=>this.changeType(1)}>获奖案例</li> <div className={checkTag==true ? "clearfix mb20 pr has-error" : "clearfix mb20"} id="tagFormItem">
<li className={ casesTags.indexOf(2) > -1 ? "active" :"" } onClick={()=>this.changeType(2)}>入库案例</li> <span className="upload_Title must">标签</span>
</ul> <ul className="fl libraries_tab">
{ <li className={ casesTags.indexOf(1) > -1 ? "active" :"" } onClick={()=>this.changeType(1)}>获奖案例</li>
checkTag && <div class="ant-form-explain">请选择标签</div> <li className={ casesTags.indexOf(2) > -1 ? "active" :"" } onClick={()=>this.changeType(2)}>入库案例</li>
} {/*<li className={casesTags.indexOf(3) > -1 ? "active" : ""} onclick={() => this.changeType(3)}>企业案例</li>*/}
</div> </ul>
<Form.Item label="描述" className="resetBottom" style={{marginBottom:"0px"}}> {
{getFieldDecorator('description', { checkTag && <div class="ant-form-explain">请选择标签</div>
rules: [{ }
required: true, message: '请输入描述内容' </div>
}], <Form.Item label="描述" className="resetBottom" style={{marginBottom:"0px"}}>
})( {getFieldDecorator('description', {
<TPMMDEditor ref={this.DescMdRef} placeholder="请添加描述" mdID={'caseContentMD'} refreshTimeout={1500} rules: [{
watch={true} className="caseMessageMD" initValue={CaseDetail && CaseDetail.content}></TPMMDEditor> required: true, message: '请输入描述内容'
)} }],
</Form.Item> })(
<div className={checkFile == true ? "clearfix mb20 pr has-error" : "clearfix mb20"} id="fileFormItem" style={{marginLeft:"76px"}}> <TPMMDEditor ref={this.DescMdRef} placeholder="请添加描述" mdID={'caseContentMD'} refreshTimeout={1500}
<Dragger {...uploadProps} className="librariesField upload_1"> watch={true} className="caseMessageMD" initValue={CaseDetail && CaseDetail.content}></TPMMDEditor>
<p className="ant-upload-text color-blue font-18 mb20">上传附件</p> )}
<p className="ant-upload-text color-grey-c">从我的电脑选择要上传的文档按住CTRL可以上传多份文档单个文件最大限制150MB</p> </Form.Item>
</Dragger> <div className={checkFile == true ? "clearfix mb20 pr has-error" : "clearfix mb20"} id="fileFormItem" style={{marginLeft:"76px"}}>
{ <Dragger {...uploadProps} className="librariesField upload_1">
checkFile == true && <div style={{left:"0px",bottom:"-21px"}} class="ant-form-explain">请先上传附件</div> <p className="ant-upload-text color-blue font-18 mb20">上传附件</p>
} <p className="ant-upload-text color-grey-c">从我的电脑选择要上传的文档按住CTRL可以上传多份文档单个文件最大限制150MB</p>
</div> </Dragger>
<p className="lineh-25 mt20 mb10 clearfix"> {
<span className="upload_Title" style={{marginRight:"12px"}}>封面图</span><span class="color-grey-c fl lineh-35">120*90 px</span> checkFile == true && <div style={{left:"0px",bottom:"-21px"}} class="ant-form-explain">请先上传附件</div>
</p> }
<div style={{marginLeft:"76px"}} className="uploadImage"> </div>
<Upload {...uploadCover}> <p className="lineh-25 mt20 mb10 clearfix">
{ imageUrl ? <span className="upload_Title" style={{marginRight:"12px"}}>封面图</span><span class="color-grey-c fl lineh-35">120*90 px</span>
<Tooltip title="重新上传"> </p>
<img src={imageUrl} alt="avatar" style={{ width: '100%' }} /> <div style={{marginLeft:"76px"}} className="uploadImage">
</Tooltip> <Upload {...uploadCover}>
: { imageUrl ?
<Tooltip title="上传图片"> <Tooltip title="重新上传">
{uploadButton} <img src={imageUrl} alt="avatar" style={{ width: '100%' }} />
</Tooltip> </Tooltip>
} :
</Upload> <Tooltip title="上传图片">
</div> {uploadButton}
</div> </Tooltip>
<div className="padding30 bor-top-greyE edu-back-white"> }
<li className="lineh-25 color-grey-6 font-18 mb20">审核说明</li> </Upload>
<ul className="font-16"> </div>
<li>平台管理员将对每天新上传的文档进行审核审核通过的文档将公开显示否则将私有化或移除</li> </div>
</ul> <div className="padding30 bor-top-greyE edu-back-white">
</div> <li className="lineh-25 color-grey-6 font-18 mb20">审核说明</li>
<div className="padding30 bor-top-greyE edu-back-white"> <ul className="font-16">
<li className="lineh-25 color-grey-6 font-18 mb20">温馨提示</li> <li>平台管理员将对每天新上传的文档进行审核审核通过的文档将公开显示否则将私有化或移除</li>
<ul className="font-16 lineh-30"> </ul>
<li>1.请勿上传已设置加密口令的文档资源</li> </div>
<li>2.可以上传符合教学案例标准的文档资料 <div className="padding30 bor-top-greyE edu-back-white">
<a className="color-blue" target="_blank" href="https://www.educoder.net/courses/1309/boards/5909/messages/34799">案例入库标准</a> <li className="lineh-25 color-grey-6 font-18 mb20">温馨提示</li>
<a target="_blank" className="color-blue" href="https://www.educoder.net/courses/1309/boards/5909/messages/34798">案例使用说明书</a>100MB</li> <ul className="font-16 lineh-30">
<li>3.请确保上传内容无侵权或违反国家关于互联网政策的不良行为</li> <li>1.请勿上传已设置加密口令的文档资源</li>
<li>4.请使用ChromeFirefoxSafariIE11及以上版本浏览器</li> <li>2.可以上传符合教学案例标准的文档资料
</ul> <a className="color-blue" target="_blank" href="https://www.educoder.net/courses/1309/boards/5909/messages/34799">案例入库标准</a>
</div> <a target="_blank" className="color-blue" href="https://www.educoder.net/courses/1309/boards/5909/messages/34798">案例使用说明书</a>100MB</li>
<Form.Item> <li>3.请确保上传内容无侵权或违反国家关于互联网政策的不良行为</li>
<div className="clearfix mt30 mb30"> <li>4.请使用ChromeFirefoxSafariIE11及以上版本浏览器</li>
{ </ul>
(!caseID || (CaseDetail && CaseDetail.status == "pending" || CaseDetail && CaseDetail.status == "refused")) ? <Button type="primary" onClick={()=>this.handleSubmit("submit")} className="defalutSubmitbtn fl mr20">申请发布</Button> : "" </div>
} <Form.Item>
<a className="defalutCancelbtn fl" onClick={()=>this.handleSubmit("save")}>保存</ a> <div className="clearfix mt30 mb30">
</div> {
</Form.Item> (!caseID || (CaseDetail && CaseDetail.status == "pending" || CaseDetail && CaseDetail.status == "refused")) ? <Button type="primary" onClick={()=>this.handleSubmit("submit")} className="defalutSubmitbtn fl mr20">申请发布</Button> : ""
</Form> }
</div> <a className="defalutCancelbtn fl" onClick={()=>this.handleSubmit("save")}>保存</ a>
) </div>
} </Form.Item>
} </Form>
const WrappedCoursesNewApp = Form.create({name: 'CaseNew'})(CaseNew); </div>
)
}
}
const WrappedCoursesNewApp = Form.create({name: 'CaseNew'})(CaseNew);
export default WrappedCoursesNewApp; export default WrappedCoursesNewApp;
Loading…
Cancel
Save