【Dv3Admin】FastCRUD富文本编辑器操作

富文本字段放进后台表单后,最常见的问题不是能不能显示,而是编辑区尺寸失控、弹窗布局被撑开、列表页误展示大段内容。表现通常集中在高度不稳定、宽度跟随栅格异常变化、空内容校验失效,排查时很容易把问题混到编辑器本体、表单布局、上传配置几个层面里。

这篇内容围绕 fast-crud + editor-wang5 + dvadmin 这一段富文本字段配置展开,拆开看 content_article 的字段定义、columnform 的职责边界、component.style.height 的生效位置,以及参数表在工程维护里的实际落点,重点放在尺寸控制、校验入口、上传适配和配置链路。

文章目录

需求解析

当前材料对应的是后台表单里的 editor-wang5 富文本字段,运行语境已经限定在 fast-crud + editor-wang5 + FsUploaderFormOptions 体系内。使用场景很明确,核心目标不是讲编辑器原理,而是把字段放进 CRUD 表单后,稳定控制编辑区高度、跟随表单栅格控制宽度,并把校验、上传、生命周期这些高频配置项整理成一套可维护的参数说明。

从字段结构看,尺寸控制分成两个层面。宽度不由编辑器单独决定,而是跟随 form.col.span 这类表单栅格配置生效;高度不放在字段顶层,也不放在 editorConfig,而是放在 component.style.height 内部生效。需要注意的是,这一步不能省略,否则会导致编辑器区域高度表现不稳定,尤其在 tab、dialog、抽屉表单里更明显。
上传与回调
编辑器配置
表单承载
字段定义
富文本字段接入
声明富文本字段
指定组件类型
配置列表列属性
设置表单栅格
控制显示状态
绑定校验规则
写入组件标识
设置可视高度
挂载编辑器配置
接入上传能力
解析返回地址
监听内容变化

界面定位材料已经给出,原图链接如下。

这份参数说明表的价值也已经很明确,不是简单罗列可写字段,而是把列表展示、表单布局、校验、编辑器行为、上传系统、生命周期这些配置维度统一放进一个字段模型里,后续维护时不需要反复试错。

功能实现

定位对象是 content_article 字段定义,目的在于把富文本字段完整挂进 CRUD 表单,并把高度、宽度、禁用态、上传器和校验规则放到正确位置。

css 复制代码
                content_article: {
                    title: '使用教程',
                    column: {
                        width: 300,
                        show: false
                    },
                    type: "editor-wang5", // 富文本图片上传依赖file-uploader,请先配置好file-uploader
                    form: {
                        col: {span: 12},
                        // 动态显隐字段
                        // show: compute(({ form }) => {
                        //   return form.change === "wang";
                        // }),
                        rules: [
                            {required: false, message: "此项必填"},
                            {
                                validator: async (rule, value) => {
                                    if (value.trim() === "<p><br></p>") {
                                        throw new Error("内容不能为空");
                                    }
                                }
                            }
                        ],
                        component: {
                            disabled: compute(({form}) => {
                                return form.disabled;
                            }),
                            id: "1", // 当同一个页面有多个editor时,需要配置不同的id
                            style: {
                                height: '430px'   // ⭐ 关键点:高度放在这里
                            },
                            toolbarConfig: {},
                            editorConfig: {},
                            onOnChange(value: any) {
                                utils.logger.info("value changed", value);
                            },
                            uploader: {
                                type: "form",
                                buildUrl(res: any) {
                                    return res.url;
                                }
                            } as FsUploaderFormOptions
                        }
                    }
                },

关键点在于宽度跟随 form.col.span 与表单容器分配,高度单独写在 component.style.height,否则会导致编辑区尺寸控制失焦。

字段顶层配置承担的是字段元信息、组件类型、值构建和提交转换这几类职责,适合直接整理成统一规范表。

参数路径 参数名 类型 作用说明 典型用途
content_article title string 字段显示名称 表单 label、详情页标题
content_article type string 使用的组件类型 固定为 editor-wang5
content_article valueBuilder function 表单值构建函数 回显时对内容做前置处理
content_article valueResolve function 提交前值转换 提交前做清洗、裁剪、转码

列表列配置只服务于列表页展示,不参与编辑器真正的渲染尺寸控制,column.width 解决的是表格列宽,不是编辑器宽度。

参数路径 参数名 类型 作用说明 典型用途
column show boolean 是否在列表中显示 富文本一般设为 false
column width number 列宽 少量摘要展示
column align string 对齐方式 居中 / 左对齐
column formatter function 列内容格式化 截断富文本、转纯文本
column ellipsis boolean 超出省略 列表简化展示

表单级配置负责的是字段是否出现、占几列、默认值、只读态和提示文案,宽度控制落点实际就在这一层。

参数路径 参数名 类型 作用说明 典型用途
form show `boolean computed` 是否显示该字段
form value string 默认值 新建时插入模板
form readonly `boolean computed` 只读状态
form labelWidth string 单字段标签宽度 富文本字段对齐
form helper.text string 字段说明 编辑规范提示
form.col span number 栅格占比 12 / 24 常用
form.col style object 栅格样式 控制行高、留白

校验规则这一层直接决定空内容能不能拦住,材料里给出的 validator 重点就在过滤 <p><br></p> 这种表面非空、实际空白的内容。

参数路径 参数名 类型 作用说明 典型用途
rules[] required boolean 是否必填 强制内容输入
rules[] message string 校验提示文案 校验失败反馈
rules[] validator function 自定义校验 排除 <p><br></p> 空内容
rules[] trigger string 触发方式 blur / change

组件层是真正控制编辑器实例行为的位置,多实例页面依赖 id 做区分,高度控制依赖 style.height,禁用态支持 computed 联动。

参数路径 参数名 类型 作用说明 典型用途
component id string 编辑器唯一标识 多 editor 防冲突
component disabled `boolean computed` 是否禁用
component style.height string 编辑器可视高度 稳定 tab / dialog 高度
component class string 自定义类名 定向样式控制

wangEditor 自身配置收口在 editorConfig,这里承接的是占位文案、只读、自动聚焦、字数限制和菜单级行为。

参数路径 参数名 类型 作用说明 典型用途
editorConfig placeholder string 占位提示 引导编辑内容
editorConfig readOnly boolean 只读模式 详情页
editorConfig autoFocus boolean 自动聚焦 提升输入体验
editorConfig maxLength number 最大字符数 内容长度限制
editorConfig scroll boolean 内部滚动 一般关闭
editorConfig MENU_CONF object 菜单级配置 控制图片、视频行为

工具栏配置与编辑区配置分离处理,这样更适合后期做能力裁剪和菜单精简。

参数路径 参数名 类型 作用说明 典型用途
toolbarConfig excludeKeys string[] 排除工具 禁用代码块、视频
toolbarConfig insertKeys object 插入工具 自定义菜单顺序
toolbarConfig toolbarKeys string[] 显示工具 精简编辑能力

生命周期和事件回调适合承接日志、联动、创建后二次配置与销毁释放,材料里的 onOnChange 已经给出一个最直接的落点。

参数路径 参数名 类型 作用说明 典型用途
component onOnChange function 内容变化回调 日志、联动
component onCreated function 编辑器创建完成 二次配置
component onDestroyed function 销毁回调 释放资源

上传系统通过 FsUploaderFormOptions 接入,重点在上传类型、文件接收范围、是否多选、请求头、附加参数以及 buildUrl 的返回值适配。

参数路径 参数名 类型 作用说明 典型用途
uploader type string 上传方式 form
uploader accept string 接收文件类型 图片 / 视频
uploader multiple boolean 是否多选 图集上传
uploader buildUrl function 解析返回 URL 适配后端格式
uploader headers object 请求头 token / auth
uploader data object 附加参数 业务字段

工程维护里还有一组不常放在第一眼位置、但实际非常重要的参数,这类参数更接近长期维护层面的补充认知。

参数 作用
valueChange 表单值变更监听
clearable 切换表单时清空内容
keepAlive tab 切换保持编辑器状态
beforeUpload 上传前校验
afterUpload 上传后内容修正

把这些配置层级串起来看,尺寸控制、校验控制、上传适配和实例生命周期其实并不是散的,而是一条完整的字段装配链路。
生命周期相关
处理相关
编辑相关
展示相关
富文本字段配置
列表列配置
表单栅格配置
组件基础属性
编辑区高度设置
工具栏行为配置
编辑区行为配置
内容校验规则
上传方式定义
地址解析处理
内容变化回调
创建销毁处理

结合现有材料,控制宽度时应优先检查 form.col.span、表单容器宽度、对话框或抽屉布局;控制高度时直接落到 component.style.height;空内容拦截依赖自定义 validator;上传回显依赖 buildUrl 返回正确地址格式。需要注意的是,这几个点分别属于不同层,混写到同一处通常不会生效。

总结

这组 editor-wang5 字段配置的关键设计点,在于把字段元信息、列表列展示、表单栅格、编辑器实例、上传器、事件回调分层放置。结构清晰之后,高度控制看 component.style.height,宽度控制看 form.col.span,职责边界不会混乱。

现有配置已经具备长期维护的基础,但问题也集中在几个固定位置。富文本空内容容易漏判,多实例页面容易发生冲突,弹窗与 tab 场景里的高度波动也很常见。重写思路并不复杂,核心就是把尺寸、校验、上传、生命周期分别归位,不把字段问题堆到单一配置块里。

落到后台系统实践,这类字段规范最有价值的地方,不在于参数多,而在于遇到高度异常、上传不一致、空内容提交、只读态切换这些问题时,可以直接定位到对应层。这样处理后,稳定性更容易收住,维护成本更可控,权限与展示状态也更容易保持一致。

相关推荐
倾颜2 小时前
零成本本地大模型!用 Next.js + Ollama + Qwen3 打造流式聊天应用
前端·后端·ai编程
英俊潇洒美少年2 小时前
react useDeferredValue和useTransition有啥区别
javascript·react.js·ecmascript
梦想的旅途22 小时前
企业微信自动化操作的高效实现方案
开发语言·javascript·ecmascript
五点六六六7 小时前
基于 AST 与 Proxy沙箱 的局部代码热验证
前端·设计模式·架构
发现一只大呆瓜9 小时前
SSO单点登录:从同域到跨域实战
前端·javascript·面试
发现一只大呆瓜9 小时前
告别登录中断:前端双 Token无感刷新
前端·javascript·面试
Cg1362691597410 小时前
JS-对象-Dom案例
开发语言·前端·javascript
无限大611 小时前
《AI观,观AI》:善用AI赋能|让AI成为你深耕核心、推进重心的“最强助手”
前端·后端