https://braft.margox.cn/demos/basic     官方文档

import React from 'react'
import Uploading from '../Upload/index'
// import FuWenBen from '../fuwenben/index'
import { Form, Input, Button, AutoComplete, Radio, Card, Dropdown, Menu, Icon, message } from 'antd';
import Axios from 'axios'
import './index.scss'
import { Link } from 'react-router-dom'
import { rule } from 'postcss';
import { inject, observer } from 'mobx-react'
// 引入编辑器以及EditorState子模块
import BraftEditor from 'braft-editor'
// 引入编辑器样式
import 'braft-editor/dist/index.css'
import { getArticleContentById } from '@/api/content'
import { router } from 'sw-toolbox';
const { TextArea } = Input;
const FormItem = Form.Item;
const RadioGroup = Radio.Group;
let timer;
@inject('editStore') @observer
class EditForm extends React.Component {
constructor(props) {
super(props)
this.state = {
searchParams: {},
editorState: '', // 设置编辑器初始内容
outputHTML: '<p></p>',
imageUrl: '',
biaoqian: '',
isShow: false,
id:''
}
}
changeImg = (url) => {
this.setState({
imageUrl: url,
isShow: false
})
}
handleSubmit = (e) => {
e.preventDefault();
const { editorState } = this.state;
let submitData = {}
this.props.form.validateFields((err, values) => {
if (!this.state.imageUrl.length) {
this.setState({
isShow: true
})
return
}
if (!err) {
submitData = {
title: values.title,
zhaiyao: values.zhaiyao,
image: this.state.imageUrl,
biaoqian: values.biaoqian,
content: values.content.toHTML()// or values.content.toHTML()
}
}
})
if (this.props.type == 'contentAdd') {
this.props.newAddArticleContent(submitData)
} else if (this.props.type == 'contentEdit') {
this.props.updateArticleContent(submitData)
}
clearInterval(timer)
}
getContentById = () => {
let { searchParams } = this.state
searchParams = {
id: this.props.id
}
getArticleContentById(searchParams).then(
res => {
if (res.data.code == 200) {
this.props.form.setFieldsValue({
title: res.data.data.title,
zhaiyao: res.data.data.brief,
content: BraftEditor.createEditorState(res.data.data.content)
})
this.setState({
imageUrl: res.data.data.imagePath,
biaoqian: String(res.data.data.articleTag),
isShow: false
})
this.props.editStore.editTitle(res.data.data.title)
}
}
).catch(
err => { }
)
}
// look=()=>{
// this.props.editStore.previewArr(this.props.publishCode)
// }
componentDidMount() {
if(this.props.id){
this.getContentById()
}
// timer=setInterval(() => {
// let submitData = {}
// this.props.form.validateFields((err, values) => {
// if (!this.state.imageUrl.length) {
// this.setState({
// isShow: true
// })
// return
// }
// if (!err) {
// submitData = {
// title: values.title,
// zhaiyao: values.zhaiyao,
// image: this.state.imageUrl,
// biaoqian: values.biaoqian,
// content: values.content.toHTML()// or values.content.toHTML()
// }
// }
// })
// console.log(submitData)
// if (this.props.type == 'contentAdd') {
// this.props.newAddArticleContent(submitData)
// } else if (this.props.type == 'contentEdit') {
// this.props.updateArticleContent(submitData)
// }
// }, 5000)
}
componentWillReceiveProps(nextProps){
this.setState({
id:nextProps.id
})
}
render() {
const { setPreviewType } = this.props
const { getFieldDecorator } = this.props.form;
const { editorState, outputHTML } = this.state
const formItemLayout = {
labelCol: {
xs: { span: 24 },
sm: { span: 6 },
},
wrapperCol: {
xs: { span: 24 },
sm: { span: 16 },
},
};
return (
<div>
<Form onSubmit={this.handleSubmit} className='container333'>
<FormItem
label="请输入主标题:"
{...formItemLayout}
>
{getFieldDecorator('title', {
rules: [{
required: true, message: '请输入主标题名称',
}]
})(
<Input placeholder="请输入主题" />
)}
</FormItem>
<FormItem
label="摘要:"
{...formItemLayout}
>
{getFieldDecorator('zhaiyao', {
rules: [{
required: true, message: '限制200个字',
}],
})(
<TextArea placeholder="限制200个字" autosize={{ minRows: 5, maxRows: 5 }} />
)}
</FormItem>
<FormItem
label="封面图片:"
{...formItemLayout}
>
{/* {getFieldDecorator('image', {
rules: [{
required: true, message: '请上传封面图片',
}]
})( */}
<div>
{this.state.imageUrl ? <Uploading changeImg={this.changeImg} imageUrl={this.state.imageUrl} /> : null}
{this.state.imageUrl ? null : <Uploading changeImg={this.changeImg} />}
</div>
{/* )} */}
</FormItem>
{this.state.isShow ? <p style={{marginLeft:'25%',marginTop:'-2%',color:'red'}}>请上传封面图片</p> : null}
<FormItem
label="文章标签:"
{...formItemLayout}
>
{getFieldDecorator('biaoqian', {
initialValue: this.state.biaoqian
})(
<RadioGroup name="radiogroup" >
<Radio name='feel' value={'1'} >new</Radio>
<Radio name='feel' value={'2'} >hot</Radio>
</RadioGroup>
)}
</FormItem>
<FormItem
label="内容编辑器:"
{...formItemLayout}
>
{getFieldDecorator('content', {
validateTrigger: 'onBlur',
rules: [
{ required: true },
{
validator: (rule, value, callback) => {
if (value.isEmpty()) {
callback('请输入正文内容')
} else {
callback()
}
}
}
]
})(
// <FuWenBen/>
<BraftEditor
height={0}
controls={
[
'undo', 'redo', 'split', 'font-size', 'font-family', 'line-height', 'letter-spacing',
'indent', 'text-color', 'bold', 'italic', 'underline', 'strike-through',
'superscript', 'subscript', 'remove-styles', 'emoji', 'text-align', 'split', 'headings', 'list_ul',
'list_ol', 'blockquote', 'code', 'split', 'link', 'split', 'hr', 'split', 'media', 'clear'
]
}
fontFamilies={
[
{
name: '宋体',
family: '"宋体",sans-serif'
}, {
name: '黑体',
family: '"黑体",serif'
}, {
name: '隶书',
family: '隶书'
},
{
name: '微软雅黑',
family: '微软雅黑'
},
{
name: '楷体',
family: '楷体'
},
{
name: 'Impact',
family: 'Impact,Charcoal'
}, {
name: 'Monospace',
family: '"Courier New", Courier, monospace'
}, {
name: 'Tahoma',
family: "tahoma, 'Hiragino Sans GB', sans-serif"
}]
}
media={{
uploadFn: (info) => {
let formData = new window.FormData()
formData.append('file', info.file, info.file.name)
Axios({
headers: {
'Content-Type': 'multipart/form-data'
},
method: 'post',
data: formData,
url: 'http://192.168.5.14:8081/node/file_upload'
}).then(res => {
if (res.data.code === 200) {
let imgurl = res.data.result[0].photoBig
let imgObj = {
data: {
link: 'http://192.168.5.14:8081/' + imgurl
}
}
info.success({
url: imgObj.data.link
// meta: {
// id: 'xxx',
// title: 'xxx',
// alt: 'xxx',
// loop: true, // 指定音视频是否循环播放
// autoPlay: true, // 指定音视频是否自动播放
// controls: true, // 指定音视频是否显示控制栏
// poster: 'http://xxx/xx.png', // 指定视频播放器的封面
// }
})
} else {
}
}, err => {
})
}
}}
/>
)}
</FormItem>
<div className='footer11'>
<div className='footer-right'>
每5分钟保存一次
</div>
</div>
<div className='footerbox'>
<Button type='primary' size='large' htmlType="submit" style={{ marginRight: 10, marginLeft: 10 }} className='save'>保存</Button>
<Button type='primary' size='large' onClick={this.look}><Link to={{pathname: '/home/preview',state:{id:this.state.id,type:'article',publishCode:this.props.publishCode}}}>预览</Link></Button>
</div>
</Form>
</div>
)
}
}
const WrappedEditForm = Form.create()(EditForm);
export default WrappedEditForm

BRAFT EDITOR富文本编辑器的更多相关文章

  1. 关于百度Editor富文本编辑器 自定义上传位置

    因为要在网站上编辑富文本数据,所以直接采用百度的富文本编辑器,但是这个编辑器有个缺点,默认情况下,文件只能上传到网站的根目录,不能自定义路径. 而且json配置文件只能和controller.jsp在 ...

  2. uniapp - 富文本编辑器editor(仅支持App和微信小程序)

    uniapp - editor富文本编辑器用法示例 丢几个图,用心看下去(-.-) 这里使用了https://ext.dcloud.net.cn/plugin?id=412 插件,用于选择字体颜色.其 ...

  3. 如何对富文本编辑器(FCK Html Editor)的工具栏进行扩展?

    我们在项目开发过程中,会经常使用到富文本编辑器.GeneXus内置的富文本编辑器FCK Html Editor使用起来非常方便,只要将页面变量的控件类型(Control Type)选择为FCK Htm ...

  4. 富文本编辑器Simditor的简易使用

    最近打算自己做一个博客系统,并不打算使用帝国cms或者wordpress之类的做后台管理!自己处于学习阶段也就想把从前台到后台一起谢了.好了,废话不多说了,先来看看富文本编辑器SimDitor,这里是 ...

  5. JavaScript 富文本编辑器

    WEB项目中使用UEditor(富文本编辑器) UEditor - 完整示例 http://ueditor.baidu.com/website/onlinedemo.html UEditor注意事项: ...

  6. 富文本编辑器kindeditor配置

    <!--富文本编辑器kindeditor配置↓ --> <link type="text/css" rel="stylesheet" href ...

  7. web开发实战--弹出式富文本编辑器的实现思路和踩过的坑

    前言: 和弟弟合作, 一起整了个智慧屋的小web站点, 里面包含了很多经典的智力和推理题. 其实该站点从技术层面来分析的话, 也算一个信息发布站点. 因此在该网站的后台运营中, 富文本的编辑器显得尤为 ...

  8. 对于MVC中应用百度富文本编辑器问题的解决办法

    1.对于应用富文本编辑器post提交表单内容提示有危险的解决办法: [ValidateInput(false)] //文本编辑器的表单提交不用提示危险 [HttpPost] public Action ...

  9. 轻量级富文本编辑器wangEditor源码结构介绍

    1. 引言 wangEditor——一款轻量级html富文本编辑器(开源软件) 网站:http://www.wangeditor.com/ demo演示:http://www.wangeditor.c ...

随机推荐

  1. [BZOJ 3796]Mushroom追妹纸

    [BZOJ 3796]Mushroom追妹纸 题目 Mushroom最近看上了一个漂亮妹纸.他选择一种非常经典的手段来表达自己的心意——写情书.考虑到自己的表达能力,Mushroom决定不手写情书.他 ...

  2. fzu 2125

    #include<stdio.h> #include<math.h> int total(int x,int m) { int sum=0; while(x>0) {   ...

  3. pyenv-virtualenv环境搭建

    搞了个新服务器,搭个python环境 安装pyenv 直接上懒人脚本,不怕麻烦想手动装的就麻烦您自己查吧~ curl -L https://raw.githubusercontent.com/yyuu ...

  4. VC ON_CONTROL_RANGE多个控件响应一个方法

    步骤/方法 分三个步骤 在头文件里声明函数比如 afx_msg void onNum(UINT uID) 在.cpp文件里加入函数体 void CCalculatorDlg::OnNum(UINT u ...

  5. python 004 执行环境对比

    对比:os.system os.popen subprocess.Popen subprocess.call 为什么要搞这么多? # --*--encoding: utf-8--*-- import ...

  6. IE訪问Oracle EBS打不开Form的问题

     IE訪问Oracle EBS打不开Form的问题 例如以下图. 最后我才知道真正的原因.原来是兼容性视图的问题. watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5 ...

  7. bzoj 4481 [ Jsoi 2015 ] 非诚勿扰 —— 期望

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4481 太弱了这种题都要看半天TJ...:https://blog.csdn.net/chai ...

  8. succ

  9. Java插入中文到数据库中文变成问号解决

    转自:https://blog.csdn.net/hellosweet1/article/details/81673152 之所以会出现乱码,就是编码方式不一致导致的 我们应该首先确定         ...

  10. springMVC返回数据的四种方式

    转自:https://blog.csdn.net/itcats_cn/article/details/82119673 springMVC返回数据的四种方式:第一种,通过request.setAttr ...