Skip to content

Commit e08a60e

Browse files
authored
fix:修复设置字体大小失效 (#3859)
1 parent 2da9527 commit e08a60e

File tree

2 files changed

+61
-1
lines changed

2 files changed

+61
-1
lines changed

packages/renderless/src/rich-text/index.ts

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,34 @@ import { getToolbarTips, defaultOptions } from './options'
55
import registerTableModule from './table-module'
66
import registerCustomClipboard from './clipboard'
77

8+
// 注册自定义 Size 格式以支持像素值
9+
const registerCustomSize = (Quill, sizeConfig) => {
10+
if (!sizeConfig || !Array.isArray(sizeConfig)) {
11+
return
12+
}
13+
14+
// 检查是否包含像素值(如 '12px', '14px' 等)
15+
const hasPixelValues = sizeConfig.some((item) => {
16+
return item && typeof item === 'string' && item.includes('px')
17+
})
18+
19+
if (!hasPixelValues) {
20+
return
21+
}
22+
23+
// 使用 StyleAttributor 来支持像素值
24+
const SizeStyle = Quill.import('attributors/style/size')
25+
26+
// 过滤掉 false 值,设置白名单
27+
const whitelist = sizeConfig.filter((item) => item !== false)
28+
29+
// 设置白名单,允许的 size 值
30+
SizeStyle.whitelist = whitelist
31+
32+
// 使用 true 参数强制覆盖已注册的格式
33+
Quill.register('formats/size', SizeStyle, true)
34+
}
35+
836
export const initContent =
937
({ state, props, nextTick }) =>
1038
() => {
@@ -34,6 +62,38 @@ export const initQuill =
3462
() => {
3563
state.innerOptions = extend(true, {}, defaultOptions, props.globalOptions, props.options)
3664

65+
// 检查并注册自定义 Size 格式(支持像素值)
66+
const toolbarConfig = state.innerOptions.modules?.toolbar?.container || []
67+
68+
// 递归查找 size 配置
69+
const findSizeConfig = (config) => {
70+
if (!config) return null
71+
72+
if (Array.isArray(config)) {
73+
for (let i = 0; i < config.length; i++) {
74+
const result = findSizeConfig(config[i])
75+
if (result) return result
76+
}
77+
} else if (typeof config === 'object' && config !== null) {
78+
// 检查是否有 size 属性
79+
if (config.size && Array.isArray(config.size)) {
80+
return config.size
81+
}
82+
// 递归检查对象的值
83+
for (const key in config) {
84+
const result = findSizeConfig(config[key])
85+
if (result) return result
86+
}
87+
}
88+
89+
return null
90+
}
91+
92+
const sizeConfig = findSizeConfig(toolbarConfig)
93+
if (sizeConfig) {
94+
registerCustomSize(Quill, sizeConfig)
95+
}
96+
3797
if (document.caretRangeFromPoint) {
3898
if (props.imageDrop) {
3999
Quill.register('modules/imageDrop', ImageDrop, true)

packages/vue/src/rich-text/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import RichText from './src/pc.vue'
2-
import '@opentiny/vue-theme/rich-text/index.css'
2+
import '@opentiny/vue-theme/rich-text/index.less'
33

44
RichText.model = {
55
prop: 'modelValue',

0 commit comments

Comments
 (0)