dev_admin
cxt 6 years ago
commit da125301c4

@ -1,449 +1,449 @@
import React,{ Component } from "react"; import React,{ Component } from "react";
import { import {
Form, Input, InputNumber, Switch, Radio, Form, Input, InputNumber, Switch, Radio,
Slider, Button, Upload, Icon, Rate, Checkbox, message, Slider, Button, Upload, Icon, Rate, Checkbox, message,
Row, Col, Select, Modal, Divider Row, Col, Select, Modal, Divider
} from 'antd'; } from 'antd';
import TPMMDEditor from '../../tpm/challengesnew/TPMMDEditor'; import TPMMDEditor from '../../tpm/challengesnew/TPMMDEditor';
import axios from 'axios' import axios from 'axios'
import './board.css' import './board.css'
import "../common/formCommon.css" import "../common/formCommon.css"
import AddDirModal from './AddDirModal' import AddDirModal from './AddDirModal'
import { RouteHOC } from './common.js' import { RouteHOC } from './common.js'
import CBreadcrumb from '../common/CBreadcrumb' import CBreadcrumb from '../common/CBreadcrumb'
import {getUploadActionUrl, bytesToSize, uploadNameSizeSeperator, appendFileSizeToUploadFile, appendFileSizeToUploadFileAll} from 'educoder'; import {getUploadActionUrl, bytesToSize, uploadNameSizeSeperator, appendFileSizeToUploadFile, appendFileSizeToUploadFileAll} from 'educoder';
const confirm = Modal.confirm; const confirm = Modal.confirm;
const $ = window.$ const $ = window.$
const { Option } = Select; const { Option } = Select;
// https://lanhuapp.com/web/#/item/project/board/detail?pid=a3bcd4b1-99ce-4e43-8ead-5b8b0a410807&project_id=a3bcd4b1-99ce-4e43-8ead-5b8b0a410807&image_id=71072679-b925-4824-aceb-4649535e3652 // https://lanhuapp.com/web/#/item/project/board/detail?pid=a3bcd4b1-99ce-4e43-8ead-5b8b0a410807&project_id=a3bcd4b1-99ce-4e43-8ead-5b8b0a410807&image_id=71072679-b925-4824-aceb-4649535e3652
class BoardsNew extends Component{ class BoardsNew extends Component{
constructor(props){ constructor(props){
super(props); super(props);
this.mdRef = React.createRef(); this.mdRef = React.createRef();
this.state = { this.state = {
fileList: [], fileList: [],
boards: [], boards: [],
title_num: 60 title_num: 60
} }
} }
addSuccess = () => { addSuccess = () => {
this.fetchBoards() this.fetchBoards()
} }
fetchBoards = () => { fetchBoards = () => {
const isEdit = this.isEdit const isEdit = this.isEdit
const boardId = this.props.match.params.boardId const boardId = this.props.match.params.boardId
const boardsUrl = `/courses/board_list.json?board_id=${boardId}` const boardsUrl = `/courses/board_list.json?board_id=${boardId}`
axios.get(boardsUrl, { }) axios.get(boardsUrl, { })
.then((response) => { .then((response) => {
if (response.data.status == 0) { if (response.data.status == 0) {
this.setState({ this.setState({
boards: response.data.data.boards || [], boards: response.data.data.boards || [],
course_id: response.data.data.course_id course_id: response.data.data.course_id
}) })
if (!isEdit) { if (!isEdit) {
response.data.data.boards.forEach( board => { response.data.data.boards.forEach( board => {
if (board.id == boardId) { if (board.id == boardId) {
this.setState({ board_name: board.name }) this.setState({ board_name: board.name })
} }
}) })
// board_name // board_name
} }
} }
}) })
.catch(function (error) { .catch(function (error) {
console.log(error); console.log(error);
}); });
} }
componentDidMount = () => { componentDidMount = () => {
const topicId = this.props.match.params.topicId const topicId = this.props.match.params.topicId
const isEdit = !!topicId const isEdit = !!topicId
this.isEdit = isEdit this.isEdit = isEdit
const boardId = this.props.match.params.boardId const boardId = this.props.match.params.boardId
this.fetchBoards() this.fetchBoards()
if (isEdit) { if (isEdit) {
const url = `/messages/${topicId}.json` const url = `/messages/${topicId}.json`
axios.get(url, { axios.get(url, {
}) })
.then((response) => { .then((response) => {
if (response.data.status == 0) { if (response.data.status == 0) {
const { id, data } = response.data; const { id, data } = response.data;
if (data) { if (data) {
this.editTopic = data; this.editTopic = data;
this.props.form.setFieldsValue({ this.props.form.setFieldsValue({
sticky: !!data.sticky, sticky: !!data.sticky,
content: data.content, content: data.content,
subject: data.subject, subject: data.subject,
select_board_id: data.board_id // TODO 没返回给前端 select_board_id: data.board_id // TODO 没返回给前端
}); });
this.mdRef.current.setValue(data.content) this.mdRef.current.setValue(data.content)
const _fileList = data.attachments.map(item => { const _fileList = data.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,
status: 'done' status: 'done'
} }
}) })
this.setState({ fileList: _fileList, board_name: data.board_name, title_num: 60 - parseInt(data.subject.length) }) this.setState({ fileList: _fileList, board_name: data.board_name, title_num: 60 - parseInt(data.subject.length) })
} }
} }
}) })
.catch(function (error) { .catch(function (error) {
console.log(error); console.log(error);
}); });
} else { } else {
const boardId = this.props.match.params.boardId const boardId = this.props.match.params.boardId
this.props.form.setFieldsValue({ this.props.form.setFieldsValue({
select_board_id: parseInt(boardId) select_board_id: parseInt(boardId)
}); });
} }
} }
handleSubmit = (e) => { handleSubmit = (e) => {
e.preventDefault(); e.preventDefault();
const cid = this.state.course_id const cid = this.state.course_id
const boardId = this.props.match.params.boardId const boardId = this.props.match.params.boardId
this.props.form.validateFieldsAndScroll((err, values) => { this.props.form.validateFieldsAndScroll((err, values) => {
if (!err) { if (!err) {
console.log('Received values of form: ', values); console.log('Received values of form: ', values);
if (this.isEdit == true) { if (this.isEdit == true) {
const editTopic = this.editTopic const editTopic = this.editTopic
const editUrl = `/messages/${editTopic.id}.json` const editUrl = `/messages/${editTopic.id}.json`
let attachment_ids = undefined let attachment_ids = undefined
if (this.state.fileList) { if (this.state.fileList) {
attachment_ids = this.state.fileList.map(item => { attachment_ids = this.state.fileList.map(item => {
return item.response ? item.response.id : item.id return item.response ? item.response.id : item.id
}) })
} }
axios.put(editUrl, { axios.put(editUrl, {
subject: values.subject, subject: values.subject,
select_board_id: values.select_board_id, select_board_id: values.select_board_id,
content: values.content, content: values.content,
sticky: values.sticky, sticky: values.sticky,
attachment_ids, attachment_ids,
}) })
.then((response) => { .then((response) => {
if (response.data.status == 0) { if (response.data.status == 0) {
const { id } = response.data; const { id } = response.data;
console.log('--- success') console.log('--- success')
this.props.toDetailPage(cid, values.select_board_id, editTopic.id) this.props.toDetailPage(cid, values.select_board_id, editTopic.id)
} }
}) })
.catch(function (error) { .catch(function (error) {
console.log(error); console.log(error);
}); });
} else { } else {
const url = `/boards/${boardId}/messages.json` const url = `/boards/${boardId}/messages.json`
let attachment_ids = undefined let attachment_ids = undefined
if (this.state.fileList) { if (this.state.fileList) {
attachment_ids = this.state.fileList.map(item => { attachment_ids = this.state.fileList.map(item => {
return item.response.id return item.response.id
}) })
} }
axios.post(url, { axios.post(url, {
...values, ...values,
course_id: cid, course_id: cid,
attachment_ids, attachment_ids,
}) })
.then((response) => { .then((response) => {
if (response.data.data && response.data.status == 0) { if (response.data.data && response.data.status == 0) {
const { id } = response.data.data; const { id } = response.data.data;
if (id) { if (id) {
console.log('--- success') console.log('--- success')
this.props.toDetailPage(cid, values.select_board_id, id) this.props.toDetailPage(cid, values.select_board_id, id)
} }
} }
}) })
.catch(function (error) { .catch(function (error) {
console.log(error); console.log(error);
}); });
} }
} else { } else {
$("html").animate({ scrollTop: $('html').scrollTop() - 100 }) $("html").animate({ scrollTop: $('html').scrollTop() - 100 })
} }
}); });
} }
// 附件相关 START // 附件相关 START
handleChange = (info) => { handleChange = (info) => {
let fileList = info.fileList; let fileList = info.fileList;
this.setState({ fileList: appendFileSizeToUploadFileAll(fileList) this.setState({ fileList: appendFileSizeToUploadFileAll(fileList)
}); });
} }
onAttachmentRemove = (file) => { onAttachmentRemove = (file) => {
confirm({ confirm({
// title: '确定要删除这个附件吗?', // title: '确定要删除这个附件吗?',
title: '是否确认删除?', title: '是否确认删除?',
okText: '确定', okText: '确定',
cancelText: '取消', cancelText: '取消',
// content: 'Some descriptions', // content: 'Some descriptions',
onOk: () => { onOk: () => {
this.deleteAttachment(file) this.deleteAttachment(file)
}, },
onCancel() { onCancel() {
console.log('Cancel'); console.log('Cancel');
}, },
}); });
return false; return false;
} }
deleteAttachment = (file) => { deleteAttachment = (file) => {
// 初次上传不能直接取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.fileList.indexOf(file); const index = state.fileList.indexOf(file);
const newFileList = state.fileList.slice(); const newFileList = state.fileList.slice();
newFileList.splice(index, 1); newFileList.splice(index, 1);
return { return {
fileList: newFileList, fileList: newFileList,
}; };
}); });
} }
} }
}) })
.catch(function (error) { .catch(function (error) {
console.log(error); console.log(error);
}); });
} }
// 附件相关 ------------ END // 附件相关 ------------ END
changeTitle=(e)=>{ changeTitle=(e)=>{
console.log(e.target.value.length); console.log(e.target.value.length);
this.setState({ this.setState({
title_num: 60 - parseInt(e.target.value.length) title_num: 60 - parseInt(e.target.value.length)
}) })
} }
render() { render() {
let { addGroup, fileList, course_id, title_num } = this.state; let { addGroup, fileList, course_id, title_num } = this.state;
const { getFieldDecorator } = this.props.form; const { getFieldDecorator } = this.props.form;
const { current_user } = this.props const { current_user } = this.props
const formItemLayout = { const formItemLayout = {
labelCol: { labelCol: {
xs: { span: 24 }, xs: { span: 24 },
// sm: { span: 8 }, // sm: { span: 8 },
sm: { span: 24 }, sm: { span: 24 },
}, },
wrapperCol: { wrapperCol: {
xs: { span: 24 }, xs: { span: 24 },
// sm: { span: 16 }, // sm: { span: 16 },
sm: { span: 24 }, sm: { span: 24 },
}, },
}; };
const uploadProps = { const uploadProps = {
width: 600, width: 600,
fileList, fileList,
multiple: true, multiple: true,
// https://github.com/ant-design/ant-design/issues/15505 // https://github.com/ant-design/ant-design/issues/15505
// showUploadList={false},然后外部拿到 fileList 数组自行渲染列表。 // showUploadList={false},然后外部拿到 fileList 数组自行渲染列表。
// showUploadList: false, // showUploadList: false,
action: `${getUploadActionUrl()}`, action: `${getUploadActionUrl()}`,
onChange: this.handleChange, onChange: this.handleChange,
onRemove: this.onAttachmentRemove, onRemove: this.onAttachmentRemove,
beforeUpload: (file) => { beforeUpload: (file) => {
console.log('beforeUpload', file.name); console.log('beforeUpload', file.name);
const isLt150M = file.size / 1024 / 1024 < 150; const isLt150M = file.size / 1024 / 1024 < 150;
if (!isLt150M) { if (!isLt150M) {
message.error('文件大小必须小于150MB!'); message.error('文件大小必须小于150MB!');
} }
return isLt150M; return isLt150M;
}, },
}; };
const isAdmin = this.props.isAdmin() const isAdmin = this.props.isAdmin()
const courseId=this.props.match.params.coursesId; const courseId=this.props.match.params.coursesId;
const boardId = this.props.match.params.boardId const boardId = this.props.match.params.boardId
return( return(
<div className="newMain "> <div className="newMain ">
<AddDirModal {...this.props} <AddDirModal {...this.props}
title="添加目录" title="添加目录"
label="目录名称" label="目录名称"
ref="addDirModal" ref="addDirModal"
addSuccess={this.addSuccess} addSuccess={this.addSuccess}
></AddDirModal> ></AddDirModal>
<style>{` <style>{`
.courseForm .ant-form { .courseForm .ant-form {
} }
.courseForm .formBlock { .courseForm .formBlock {
padding: 20px 30px 30px 30px; padding: 20px 30px 30px 30px;
border-bottom: 1px solid #EDEDED; border-bottom: 1px solid #EDEDED;
margin-bottom: 0px; margin-bottom: 0px;
background: #fff; background: #fff;
} }
.courseForm .noBorder { .courseForm .noBorder {
border-bottom: none; border-bottom: none;
} }
`}</style> `}</style>
<div className="edu-class-container edu-position courseForm"> <div className="edu-class-container edu-position courseForm">
<CBreadcrumb items={[ <CBreadcrumb items={[
{ to: current_user.first_category_url, name: this.props.coursedata ? this.props.coursedata.name : ''}, { to: current_user&&current_user.first_category_url, name: this.props.coursedata ? this.props.coursedata.name : ''},
{ to: `/courses/${courseId}/boards/${boardId}`, name: this.state.board_name }, { to: `/courses/${courseId}/boards/${boardId}`, name: this.state.board_name },
{ name: this.isEdit ? '帖子编辑' : '帖子新建'} { name: this.isEdit ? '帖子编辑' : '帖子新建'}
]}></CBreadcrumb> ]}></CBreadcrumb>
<p className="clearfix mt20 mb20"> <p className="clearfix mt20 mb20">
<span className="fl font-24 color-grey-3">{this.isEdit ? "编辑" : "新建"}帖子</span> <span className="fl font-24 color-grey-3">{this.isEdit ? "编辑" : "新建"}帖子</span>
<a href="javascript:void(0)" className="color-grey-6 fr font-16 mr2" <a href="javascript:void(0)" className="color-grey-6 fr font-16 mr2"
onClick={() => this.props.history.goBack()}> onClick={() => this.props.history.goBack()}>
返回 返回
</a> </a>
</p> </p>
{/* notRequired */} {/* notRequired */}
<Form {...formItemLayout} onSubmit={this.handleSubmit}> <Form {...formItemLayout} onSubmit={this.handleSubmit}>
<div className="formBlock" style={{paddingBottom: '0px', position: 'relative'}}> <div className="formBlock" style={{paddingBottom: '0px', position: 'relative'}}>
{ isAdmin && { isAdmin &&
<React.Fragment> <React.Fragment>
{getFieldDecorator('sticky', { {getFieldDecorator('sticky', {
valuePropName: 'checked', valuePropName: 'checked',
})( })(
isAdmin && <Checkbox style={{ right: '22px', isAdmin && <Checkbox style={{ right: '22px',
top: '28px', top: '28px',
position: 'absolute' position: 'absolute'
}}>置顶</Checkbox> }}>置顶</Checkbox>
)} )}
{/* checkbox 有个边距样式 .ant-checkbox-wrapper + span, */} {/* checkbox 有个边距样式 .ant-checkbox-wrapper + span, */}
<span style={{ "padding-left": 0, "padding-right": 0 }}></span> <span style={{ "padding-left": 0, "padding-right": 0 }}></span>
</React.Fragment> </React.Fragment>
} }
<Form.Item <Form.Item
label="标题" label="标题"
className="topicTitle " className="topicTitle "
> >
{getFieldDecorator('subject', { {getFieldDecorator('subject', {
rules: [{ rules: [{
required: true, message: '请输入标题', required: true, message: '请输入标题',
}, { }, {
max: 60, message: '最大限制为60个字符', max: 60, message: '最大限制为60个字符',
}], }],
})( })(
<Input placeholder="请输入帖子标题最大限制60个字符" className="searchViewAfter" maxLength="60" <Input placeholder="请输入帖子标题最大限制60个字符" className="searchViewAfter" maxLength="60"
onInput={this.changeTitle} addonAfter={String(title_num)} /> onInput={this.changeTitle} addonAfter={String(title_num)} />
)} )}
</Form.Item> </Form.Item>
<Form.Item <Form.Item
label="" label=""
style={{ display: 'inline-block' }} style={{ display: 'inline-block' }}
> >
{getFieldDecorator('select_board_id', { {getFieldDecorator('select_board_id', {
// initialValue: '3779', // initialValue: '3779',
})( })(
<Select style={{ width: 230 }} <Select style={{ width: 230 }}
dropdownRender={menu => ( dropdownRender={menu => (
<div> <div>
{menu} {menu}
<Divider style={{ margin: '4px 0' }} /> <Divider style={{ margin: '4px 0' }} />
<div style={{ padding: '8px', cursor: 'pointer' }} onMouseDown={() => this.refs['addDirModal'].open()}> <div style={{ padding: '8px', cursor: 'pointer' }} onMouseDown={() => this.refs['addDirModal'].open()}>
<Icon type="plus" /> 添加目录 <Icon type="plus" /> 添加目录
</div> </div>
</div> </div>
)} )}
> >
{this.state.boards.map(item => { {this.state.boards.map(item => {
return ( return (
<Option value={item.id}>{item.name}</Option> <Option value={item.id}>{item.name}</Option>
) )
})} })}
</Select> </Select>
)} )}
</Form.Item> </Form.Item>
{/* { isAdmin && <Form.Item {/* { isAdmin && <Form.Item
label="" label=""
style={{ display: 'inline-block', marginLeft: "14px" }} style={{ display: 'inline-block', marginLeft: "14px" }}
> >
{getFieldDecorator('sticky', { {getFieldDecorator('sticky', {
})( })(
<Checkbox>置顶</Checkbox> <Checkbox>置顶</Checkbox>
)} )}
</Form.Item> } */} </Form.Item> } */}
</div> </div>
<style>{` <style>{`
.courseMessageMD { .courseMessageMD {
width: 1140px; width: 1140px;
} }
.uploadBtn.ant-btn { .uploadBtn.ant-btn {
border: none; border: none;
color: #4CACFF; color: #4CACFF;
box-shadow: none; box-shadow: none;
background: transparent; background: transparent;
padding: 0 6px; padding: 0 6px;
} }
.upload_1 .ant-upload-list { .upload_1 .ant-upload-list {
width: 350px; width: 350px;
} }
`}</style> `}</style>
<div className="formBlock noBorder"> <div className="formBlock noBorder">
<Form.Item <Form.Item
label="内容" label="内容"
className="mdInForm" className="mdInForm"
> >
{getFieldDecorator('content', { {getFieldDecorator('content', {
rules: [{ rules: [{
required: true, message: '请输入帖子内容', required: true, message: '请输入帖子内容',
}, { }, {
max: 10000, message: '最大限制为10000个字符', max: 10000, message: '最大限制为10000个字符',
}], }],
})( })(
<TPMMDEditor ref={this.mdRef} placeholder={'请在此输入帖子详情最大限制为10000个字符'} <TPMMDEditor ref={this.mdRef} placeholder={'请在此输入帖子详情最大限制为10000个字符'}
mdID={'courseMessageMD'} initValue={this.editTopic ? this.editTopic.content : ''} className="courseMessageMD"></TPMMDEditor> mdID={'courseMessageMD'} initValue={this.editTopic ? this.editTopic.content : ''} className="courseMessageMD"></TPMMDEditor>
)} )}
</Form.Item> </Form.Item>
<Upload {...uploadProps} className="upload_1"> <Upload {...uploadProps} className="upload_1">
<Button className="uploadBtn"> <Button className="uploadBtn">
<Icon type="upload" /> 上传附件 <Icon type="upload" /> 上传附件
</Button> </Button>
(单个文件150M以内) (单个文件150M以内)
</Upload> </Upload>
</div> </div>
<Form.Item> <Form.Item>
<div className="clearfix mt30 mb30"> <div className="clearfix mt30 mb30">
<Button type="primary" htmlType="submit" className="defalutSubmitbtn fl mr20">提交</Button> <Button type="primary" htmlType="submit" className="defalutSubmitbtn fl mr20">提交</Button>
<a className="defalutCancelbtn fl" <a className="defalutCancelbtn fl"
onClick={() => this.isEdit ? onClick={() => this.isEdit ?
this.props.toDetailPage(Object.assign({}, this.props.match.params, {'coursesId': course_id})) : this.props.toDetailPage(Object.assign({}, this.props.match.params, {'coursesId': course_id})) :
this.props.toListPage(Object.assign({}, this.props.match.params, {'coursesId': course_id})) }>取消</ a> this.props.toListPage(Object.assign({}, this.props.match.params, {'coursesId': course_id})) }>取消</ a>
</div> </div>
</Form.Item> </Form.Item>
</Form> </Form>
</div> </div>
</div> </div>
) )
} }
} }
const WrappedBoardsNew = Form.create({ name: 'boardsNew' })(BoardsNew); const WrappedBoardsNew = Form.create({ name: 'boardsNew' })(BoardsNew);
export default RouteHOC()(WrappedBoardsNew); export default RouteHOC()(WrappedBoardsNew);

File diff suppressed because it is too large Load Diff

@ -223,7 +223,7 @@ class CommonWorkDetailIndex extends Component{
} }
`}</style> `}</style>
{current_user && <CBreadcrumb items={[ {current_user && <CBreadcrumb items={[
{ to: current_user.first_category_url , name: course_name}, { to: current_user&&current_user.first_category_url , name: course_name},
{ to: `/courses/${courseId}/${moduleEngName}/${category_id}`, name: category_name }, { to: `/courses/${courseId}/${moduleEngName}/${category_id}`, name: category_name },
window.location.pathname.indexOf('appraise') == -1 ? { } : { to: `/courses/${courseId}/${moduleEngName}/${workId}/list`, name: '作业详情' }, window.location.pathname.indexOf('appraise') == -1 ? { } : { to: `/courses/${courseId}/${moduleEngName}/${workId}/list`, name: '作业详情' },
// 1. 与上一条联动当匿评他人作品时TA人作品的作者真实姓名切换为“匿名” // 1. 与上一条联动当匿评他人作品时TA人作品的作者真实姓名切换为“匿名”

@ -90,7 +90,7 @@ class WorkDetailPageHeader extends Component{
} }
`}</style> `}</style>
<CBreadcrumb items={[ <CBreadcrumb items={[
{ to: current_user.first_category_url, name: course_name}, { to: current_user&&current_user.first_category_url, name: course_name},
{ to: `/courses/${courseId}/${moduleEngName}/${category_id}`, name: category_name }, { to: `/courses/${courseId}/${moduleEngName}/${category_id}`, name: category_name },
window.location.pathname.indexOf('appraise') == -1 ? { } : { to: `/courses/${courseId}/${moduleEngName}/${workId}/list`, name: '作业详情' }, window.location.pathname.indexOf('appraise') == -1 ? { } : { to: `/courses/${courseId}/${moduleEngName}/${workId}/list`, name: '作业详情' },
// 1. 与上一条联动当匿评他人作品时TA人作品的作者真实姓名切换为“匿名” // 1. 与上一条联动当匿评他人作品时TA人作品的作者真实姓名切换为“匿名”

File diff suppressed because it is too large Load Diff

@ -105,7 +105,7 @@ class GraduateTopicDetail extends Component{
<div className="newMain"> <div className="newMain">
<div className="educontent mt10 mb50"> <div className="educontent mt10 mb50">
<p className="clearfix mb15 lineh-20"> <p className="clearfix mb15 lineh-20">
<WordsBtn style="grey" className="fl" to={current_user.first_category_url}>{tableData && tableData.course_name}</WordsBtn> <WordsBtn style="grey" className="fl" to={current_user&&current_user.first_category_url}>{tableData && tableData.course_name}</WordsBtn>
<span className="color-grey-9 fl ml3 mr3">&gt;</span> <span className="color-grey-9 fl ml3 mr3">&gt;</span>
<WordsBtn style="grey" className="fl" to={`/courses/${tableData.course_id}/graduation_topics/${tableData.graduation_id}`}>{tableData.graduation_name}</WordsBtn> <WordsBtn style="grey" className="fl" to={`/courses/${tableData.course_id}/graduation_topics/${tableData.graduation_id}`}>{tableData.graduation_name}</WordsBtn>
<span className="color-grey-9 fl ml3 mr3">&gt;</span> <span className="color-grey-9 fl ml3 mr3">&gt;</span>

@ -323,7 +323,7 @@ class GraduateTopicNew extends Component{
`}</style> `}</style>
<div className="edu-class-container edu-position courseForm"> <div className="edu-class-container edu-position courseForm">
<p className="clearfix mb20 mt10"> <p className="clearfix mb20 mt10">
<WordsBtn style="grey" className="fl" to={current_user.first_category_url}>{course_name}</WordsBtn> <WordsBtn style="grey" className="fl" to={current_user&&current_user.first_category_url}>{course_name}</WordsBtn>
<span className="color-grey-9 fl ml3 mr3">&gt;</span> <span className="color-grey-9 fl ml3 mr3">&gt;</span>
<WordsBtn style="grey" className="fl" to={`/courses/${coursesId}/graduation_topics/${left_banner_id}`}>{left_banner_name}</WordsBtn> <WordsBtn style="grey" className="fl" to={`/courses/${coursesId}/graduation_topics/${left_banner_id}`}>{left_banner_name}</WordsBtn>
<span className="color-grey-9 fl ml3 mr3">&gt;</span> <span className="color-grey-9 fl ml3 mr3">&gt;</span>

Loading…
Cancel
Save