封装富文本编辑器为form表单项

 QuillFormItem

import type { ProFormFieldItemProps } from "@ant-design/pro-form/es/typing";
import type { InputProps, InputRef } from "antd";
import { Col } from "antd";
import { omit } from "lodash";
import ProForm from "@ant-design/pro-form";
import React from "react";
import ReactQuill from ".";

interface LAVAFormFieldItem {
    fieldData: BASE.BaseItem,
    disabled?: boolean
}

interface ItemtypeFormItemProps extends LAVAFormFieldItem {
    value?: string,
    onChange?: (value: string) => void,
}

type IFormSelectDataProps = ProFormFieldItemProps<InputProps, InputRef> & LAVAFormFieldItem;

const QuillItem: React.FC<ItemtypeFormItemProps> = React.memo(({ value, onChange, disabled }) => {
    return <>
        <div style={{ border: '1px solid rgb(204,204,204)' }}>
            <ReactQuill 
                placeholder="请输入..." 
                readOnly={disabled} 
                value={value} 
                onChange={onChange} 
            />
        </div>
    </>
})

const QuillFormItem: React.FC<IFormSelectDataProps> = (props) => {
    return <>
        <Col {...props.colProps}>
            <ProForm.Item {...omit(props, ['fieldProps', 'colProps', 'fieldData'])}>
                <QuillItem disabled={props.disabled} fieldData={props.fieldData} />
            </ProForm.Item>
        </Col>
    </>
}

export default QuillFormItem;

QuillCom

import type { ReactQuillProps } from 'react-quill';
import { omit } from 'lodash';

import ReactQuill from 'react-quill';
import 'react-quill/dist/quill.snow.css';

interface IProps extends ReactQuillProps {
    toolbarOptions?: any
}
const QuillCom: React.FC<IProps> = (props) => {
    const toolbarOptions = {
        container: [
            ["bold", "italic", "underline", "strike"], // 加粗,斜体,下划线,删除线
            ["blockquote", "code-block"], // 引用,代码块
            [{ header: 1 }, { header: 2 }], // 标题,键值对的形式;1、2表示字体大小
            [{ list: "ordered" }, { list: "bullet" }], // 列表
            [{ script: "sub" }, { script: "super" }], // 上下标
            [{ indent: "-1" }, { indent: "+1" }], // 缩进
            [{ direction: "rtl" }], // 文本方向
            [{ size: ["small", false, "large", "huge"] }], // 字体大小
            [{ header: [1, 2, 3, 4, 5, 6, false] }], // 几级标题
            [{ color: [] }, { background: [] }], // 字体颜色,字体背景颜色
            [{ font: [] }], // 字体
            [{ align: [] }], // 对齐方式
            ["clean"], // 清除字体样式
            ["image", "video"], // 上传图片、上传视频
        ]
    };

    return (
        <ReactQuill
            {...omit(props, ['theme'])}
            modules={{
                toolbar: props.toolbarOptions ? props.toolbarOptions : toolbarOptions
            } || props.modules}
            theme="snow"
            value={props.value}
            onChange={props.onChange}
            style={{ backgroundColor: '#fff', minHeight: 250 }}
        />

    );
};
export default QuillCom;

使用:

return (
    <QuillFormItem
        disabled={data.is_readonly || infoMode}
        key={data.name}
        rules={[required]}
        name={data.name}
        label={data.title}
        fieldData={data}
        fieldProps={fieldProps}
     />
)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值