IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> react 富文本组件wangeditor -> 正文阅读

[JavaScript知识库]react 富文本组件wangeditor

  • yarn add?wangeditor
  • 代码

editor.js

export const colorData = [
  '#FFFFFF', // 白色
  '#FF0000', // 红色
  '#00FF00', // 绿色
  '#0000FF', // 蓝色
  // '#FF00FF', // 牡丹红
  '#00FFFF', // 青色
  '#FFFF00', // 黄色
  '#000000', // 黑色
  '#70DB93', // 海蓝
  // '#5C3317', // 巧克力色
  '#9F5F9F', // 蓝紫色
  // '#B5A642', // 黄铜色
  // '#D9D919', // 亮金色
  '#A67D3D', // 棕色
  // '#8C7853', // 青铜色
  // '#A67D3D', // 号青铜色
  '#5F9F9F', // 士官服蓝色
  // '#D98719', // 冷铜色
  // '#B87333', // 铜色
  // '#FF7F00', // 珊瑚红
  // '#42426F', // 紫蓝色
  // '#5C4033', // 深棕
  // '#2F4F2F', // 深绿
  // '#4A766E', // 深铜绿色
  // '#4F4F2F', // 深橄榄绿
  // '#9932CD', // 深兰花色
  // '#871F78', // 深紫色
  // '#6B238E', // 深石板蓝
  // '#2F4F4F', // 深铅灰色
  // '#97694F', // 深棕褐色
  // '#7093DB', // 深绿松石色
  // '#855E42', // 暗木色
  // '#545454', // 淡灰色
  // '#856363', // 土灰玫瑰红色
  '#D19275', // 长石色
  '#8E2323', // 火砖色
  '#238E23', // 森林绿
  '#CD7F32', // 金色
  '#DBDB70', // 鲜黄色
  '#C0C0C0', // 灰色
  '#527F76', // 铜绿色
  // '#93DB70', // 青黄色
  // '#215E21', // 猎人绿
  // '#4E2F2F', // 印度红
  // '#9F9F5F', // 土黄色
  // '#C0D9D9', // 浅蓝色
  // '#A8A8A8', // 浅灰色
  // '#8F8FBD', // 浅钢蓝色
  // '#E9C2A6', // 浅木色
  // '#32CD32', // 石灰绿色
  // '#E47833', // 桔黄色
  // '#8E236B', // 褐红色
  // '#32CD99', // 中海蓝色
  // '#3232CD', // 中蓝色
  // '#6B8E23', // 中森林绿
  // '#EAEAAE', // 中鲜黄色
  // '#9370DB', // 中兰花色
  // '#426F42', // 中海绿色
  // '#7F00FF', // 中石板蓝色
  // '#7FFF00', // 中春绿色
  // '#70DBDB', // 中绿松石色
  // '#DB7093', // 中紫红色
  // '#A68064', // 中木色
  // '#2F2F4F', // 深藏青色
  // '#23238E', // 海军蓝
  // '#4D4DFF', // 霓虹篮
  // '#FF6EC7', // 霓虹粉红
  // '#00009C', // 新深藏青色
  // '#EBC79E', // 新棕褐色
  // '#CFB53B', // 暗金黄色
  // '#FF7F00', // 橙色
  // '#FF2400', // 橙红色
  // '#DB70DB', // 淡紫色
  // '#8FBC8F', // 浅绿色
  // '#BC8F8F', // 粉红色
  // '#EAADEA', // 李子色
  // '#D9D9F3', // 石英色
  // '#5959AB', // 艳蓝色
  // '#6F4242', // 鲑鱼色
  // '#BC1717', // 猩红色
  // '#238E68', // 海绿色
  // '#6B4226', // 半甜巧克力色
  // '#8E6B23', // 赭色
  // '#E6E8FA', // 银色
  // '#3299CC', // 天蓝
  // '#007FFF', // 石板蓝
  // '#FF1CAE', // 艳粉红色
  // '#00FF7F', // 春绿色
  // '#236B8E', // 钢蓝色
  // '#38B0DE', // 亮天蓝色
  '#DB9370', // 棕褐色
  '#D8BFD8', // 紫红色
  '#ADEAEA', // 石板蓝色
  '#5C4033', // 浓深棕色
  '#CDCDCD', // 淡浅灰色
  '#4F2F4F', // 紫罗兰色
  '#CC3299', // 紫罗兰红色
  '#D8D8BF', // 麦黄色
  '#99CC32' // 黄绿色
]
export const menuData = [
  'head', // 标题
  'bold', // 粗体
  'fontSize', // 字号
  'fontName', // 字体
  'italic', // 斜体
  'underline', // 下划线
  'strikeThrough', // 删除线
  'foreColor', // 文字颜色
  'backColor', // 背景颜色
  'link', // 插入链接
  'list', // 列表
  'justify', // 对齐方式
  'quote', // 引用
  'emoticon', // 表情
  'image', // 插入图片
  'upload', // 插入图片
  'table', // 表格
  'htmlTable', // 粘贴表格
  // 'video', // 插入视频
  'code', // 插入代码
  'undo', // 撤销
  'redo' // 重复
]

?index.js

import { Form, Drawer, message } from 'antd';
import React, { useState, useEffect, useRef, useImperativeHandle, forwardRef } from 'react';
import styles from './detail.less'
import Editor from 'wangeditor'
import { colorData, menuData } from './editor'
import { useLocation } from 'umi';

import { uploadImg } from '../../advert/save/upImg'

const Detail = forwardRef((props, ref) => {
  const [form] = Form.useForm();
  // 预览
  const [previewVisible, changePreviewVisible] = useState(false);
  // 预览内容
  const [previewValue, changePreviewValue] = useState(false);

  // 参数 params.query.
  const params = useLocation();

  const source = params?.query.source || ''

  // 编辑...
  useEffect(() => {
    if (params?.state?.id) {
      const { pushFlag = '', allUserFlag = '' } = params.state || {}
      form.setFieldsValue({
        ...params.state,
        pushFlag: pushFlag + '',
        allUserFlag: allUserFlag + ''
      })
      console.log(params.state);
    }

  }, [params?.state?.id]);


  useEffect(() => {
    initEditor();
    return () => {
      editor.destroy && editor.destroy()
    }
  }, []);

  useImperativeHandle(ref, () => ({
    previewOpen: () => {
      const { msgDetail } = form.getFieldsValue()
      let data = {
        msgDetail
      }
      changePreviewValue(data)
      console.log(data);
      changePreviewVisible(true)
    },
    submit: async (type) => {
      await form.validateFields()
      await form.validateFields()
      if (type == 'add') { // 发布
      } else if (type == 'draftAdd') { // 新增草稿
        submitSave(type)
      } else if (type == 'edit') {
      } else {
        submitSave(type)
      }

    }
  }));

  const submitSave = async (type, value = {}, callback) => {
    const formData = await form.validateFields()
    let data = {
      ...formData,
      ...value,
    }
    let msgSource = ''

    data.msgSource = msgSource
    console.log(data);

    let msgSuccess = ''
    let res = {}
    if (type == 'add') {
      msgSuccess = '发布成功'
    } else if (type == 'draftAdd') { // 新增草稿
      data.msgStatus = '01'
      msgSuccess = '设置成功'
    } else if (type == 'edit' || type == 'editSave') {
      data.id = params.query.id
    }
    const allUserFlag = formData.allUserFlag
    let userSelectDto = {}
    if (allUserFlag == '0') {
      userSelectDto.mhtTagList = formData.mhtTagList
      userSelectDto.mhtSelectCondition = {
        orgCodeList: formData.orgCodeList, // 机构
      }
      userSelectDto.clientType = formData.clientType
      delete data.mhtTagList
      delete data.orgCodeList
      delete data.mccCodeDtoList
      delete data.regionCodeDtoList
    }

    data.userSelectDto = userSelectDto


    if (type == 'edit' || type == 'editSave') {// 编辑的发布  编辑的保存
    } else { // 新增
    }
    if (res && res.code === '000000') {
    //   ...
      callback && callback()
      message.success(msgSuccess)
    } else {
      message.error(res.msg)
    }
  }

  let editor = null
  const editorRef = useRef();//创建对象
  const initEditor = () => {
    editor = new Editor(editorRef.current);
    editor.config.onchange = (newHtml) => {
      form.setFieldsValue({ msgDetail: newHtml })
    };
    editor.config.onchangeTimeout = 500;
    editor.config.menus = menuData
    editor.config.colors = colorData

    editor.config.customUploadImg = async function (files, insert) {
      let file;
      if (files && files.length) {
        file = files[0];
        const res = await uploadImg(file)
        res ? insert(res) : ''
      } else {
        return
      }
    }

    editor.create()

    if (source == 'look') {
      editor.disable();
    } else {
      editor.enable();
    }

  };

  return (
    <div className={styles.noticeNewDetails}>
      <Form
        form={form}
        labelCol={{ span: 6 }}
        wrapperCol={{ span: 18 }}
        initialValues={props.values}
      >
        <Form.Item
          label="消息详情"
          name="msgDetail"
          className={styles.formItem}
          rules={[{ required: true, message: '请输入消息详情!' }]}
        >
          <div className='editorInput' ref={editorRef}></div>
        </Form.Item>

      </Form>

      <Drawer title="手机消息预览" placement="right" onClose={() => { changePreviewVisible(false) }} visible={previewVisible}>
        <div dangerouslySetInnerHTML={{ __html: previewValue.msgDetail }}></div>,
      </Drawer>

    </div>
  );
})

export default Detail;
  • ?
  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2022-05-10 11:48:02  更:2022-05-10 11:49:42 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 -2025/1/11 5:51:21-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码