@srcker/editor-vue-next 1.2.0 → 1.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +110 -40
- package/dist/images/editor-screenshot.png +0 -0
- package/dist/rich-editor.es.js +5544 -7763
- package/dist/style/toolbar.css +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,71 +1,141 @@
|
|
|
1
1
|
# Rich Editor
|
|
2
2
|
|
|
3
|
-
一个基于 Tiptap
|
|
3
|
+
一个基于 Tiptap 的富文本编辑器,具有丰富的文本编辑功能,支持多种格式化选项和图片上传。
|
|
4
|
+
|
|
5
|
+

|
|
4
6
|
|
|
5
7
|
## 功能特性
|
|
6
8
|
|
|
7
|
-
-
|
|
8
|
-
-
|
|
9
|
-
-
|
|
10
|
-
-
|
|
11
|
-
-
|
|
12
|
-
-
|
|
13
|
-
-
|
|
14
|
-
-
|
|
15
|
-
-
|
|
16
|
-
-
|
|
17
|
-
-
|
|
18
|
-
-
|
|
19
|
-
-
|
|
9
|
+
- **基础文本格式化**:加粗、斜体、下划线、删除线
|
|
10
|
+
- **标题设置**:支持 H1-H5 标题
|
|
11
|
+
- **字体大小调整**:多种字体大小选项
|
|
12
|
+
- **颜色设置**:文字颜色和背景高亮
|
|
13
|
+
- **行高和缩进控制**:灵活的段落格式调整
|
|
14
|
+
- **对齐方式**:左对齐、居中对齐、右对齐
|
|
15
|
+
- **列表**:有序列表、无序列表、任务列表
|
|
16
|
+
- **引用块**:支持文本引用
|
|
17
|
+
- **链接**:插入和管理超链接
|
|
18
|
+
- **代码**:行内代码和代码块
|
|
19
|
+
- **图片上传**:支持本地图片上传
|
|
20
|
+
- **主题切换**:支持浅色和深色主题
|
|
21
|
+
- **撤销/重做**:编辑历史操作
|
|
22
|
+
- **清除格式**:快速清除文本格式
|
|
20
23
|
|
|
21
24
|
## 快速开始
|
|
22
25
|
|
|
23
|
-
|
|
26
|
+
### 安装依赖
|
|
24
27
|
|
|
25
28
|
```bash
|
|
26
29
|
npm i @srcker/editor-vue-next
|
|
27
30
|
```
|
|
28
31
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
```
|
|
32
|
-
|
|
33
|
-
|
|
32
|
+
### 使用方法
|
|
33
|
+
|
|
34
|
+
```vue
|
|
35
|
+
<template>
|
|
36
|
+
<div>
|
|
37
|
+
<RichEditor
|
|
38
|
+
v-model="content"
|
|
39
|
+
theme="light"
|
|
40
|
+
format="html"
|
|
41
|
+
:uploadImage="uploadImage"
|
|
42
|
+
/>
|
|
43
|
+
</div>
|
|
44
|
+
</template>
|
|
45
|
+
|
|
46
|
+
<script setup>
|
|
47
|
+
import { ref } from 'vue'
|
|
34
48
|
import { RichEditor } from '@srcker/editor-vue-next'
|
|
35
|
-
# 引入样式
|
|
36
49
|
import '@srcker/editor-vue-next/style/toolbar'
|
|
37
50
|
import '@srcker/editor-vue-next/style/content'
|
|
38
51
|
|
|
39
|
-
|
|
40
|
-
<RichEditor v-model="form.content" theme="dark" format="html" />
|
|
52
|
+
const content = ref('<p>Hello Rich Editor!</p>')
|
|
41
53
|
|
|
54
|
+
// 自定义图片上传函数
|
|
55
|
+
const uploadImage = async (file) => {
|
|
56
|
+
// 这里实现你的图片上传逻辑
|
|
57
|
+
// 示例:返回图片的URL和名称
|
|
58
|
+
return {
|
|
59
|
+
url: 'https://example.com/image.jpg',
|
|
60
|
+
name: file.name
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
</script>
|
|
42
64
|
```
|
|
43
65
|
|
|
44
|
-
参数说明
|
|
45
66
|
## 配置项
|
|
67
|
+
|
|
46
68
|
| 参数 | 说明 | 类型 | 默认值 |
|
|
47
69
|
| --- | --- | --- | --- |
|
|
70
|
+
| v-model | 编辑器内容 | string | - |
|
|
48
71
|
| theme | 主题,可选值:`light`、`dark` | string | `light` |
|
|
49
|
-
| format | 输出格式,可选值:`html`、`json` | string | `html` |
|
|
50
|
-
|
|
|
51
|
-
|
|
52
|
-
|
|
72
|
+
| format | 输出格式,可选值:`html`、`json`、`text` | string | `html` |
|
|
73
|
+
| height | 编辑器高度(像素) | number | 500 |
|
|
74
|
+
| toolbar | 自定义工具栏配置 | ToolbarConfig | 完整工具栏 |
|
|
75
|
+
| uploadImage | 图片上传函数 | (file: File) => Promise<{url: string, name: string}> | 内置Base64转换 |
|
|
76
|
+
|
|
77
|
+
## 工具栏配置
|
|
78
|
+
|
|
79
|
+
可以通过 `toolbar` 属性自定义工具栏按钮和布局:
|
|
80
|
+
|
|
81
|
+
```javascript
|
|
82
|
+
// 示例:自定义工具栏
|
|
83
|
+
const customToolbar = [
|
|
84
|
+
['undo', 'redo', 'format'],
|
|
85
|
+
['heading', 'fontSize'],
|
|
86
|
+
['bold', 'italic', 'underline', 'strike'],
|
|
87
|
+
['alignLeft', 'alignCenter', 'alignRight'],
|
|
88
|
+
['bulletList', 'orderedList', 'taskList'],
|
|
89
|
+
['link', 'image']
|
|
90
|
+
]
|
|
53
91
|
```
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
92
|
+
|
|
93
|
+
## 图片上传
|
|
94
|
+
|
|
95
|
+
编辑器支持通过工具栏按钮上传图片,默认使用 Base64 编码处理图片。你可以通过 `uploadImage` 属性自定义上传逻辑,例如上传到服务器:
|
|
96
|
+
|
|
97
|
+
```javascript
|
|
98
|
+
const uploadImage = async (file) => {
|
|
99
|
+
// 实现你的上传逻辑
|
|
100
|
+
const formData = new FormData()
|
|
101
|
+
formData.append('image', file)
|
|
102
|
+
|
|
103
|
+
const response = await fetch('/api/upload', {
|
|
104
|
+
method: 'POST',
|
|
105
|
+
body: formData
|
|
106
|
+
})
|
|
107
|
+
|
|
108
|
+
const data = await response.json()
|
|
109
|
+
return {
|
|
110
|
+
url: data.url,
|
|
111
|
+
name: file.name
|
|
112
|
+
}
|
|
60
113
|
}
|
|
61
114
|
```
|
|
62
115
|
|
|
63
|
-
|
|
64
116
|
## 技术栈
|
|
65
117
|
|
|
66
|
-
- Vue 3
|
|
67
|
-
- Tiptap
|
|
68
|
-
- SCSS
|
|
118
|
+
- Vue 3 + Composition API
|
|
119
|
+
- Tiptap(富文本编辑器核心)
|
|
120
|
+
- SCSS(样式管理)
|
|
121
|
+
- Vite(构建工具)
|
|
69
122
|
|
|
70
|
-
##
|
|
71
|
-
|
|
123
|
+
## 浏览器兼容性
|
|
124
|
+
|
|
125
|
+
- Chrome/Edge 90+
|
|
126
|
+
- Firefox 88+
|
|
127
|
+
- Safari 14+
|
|
128
|
+
|
|
129
|
+
## 许可证
|
|
130
|
+
|
|
131
|
+
### 个人使用
|
|
132
|
+
- **免费**:个人学习、个人项目开发等完全免费 企业需要购买授权后使用
|
|
133
|
+
|
|
134
|
+
### 商业使用
|
|
135
|
+
- **需要购买授权**:任何商业用途(包括但不限于企业内部使用、产品集成、SaaS服务等)都需要购买商业授权
|
|
136
|
+
- **授权方式**:联系作者 sinda@srcker.com 获取商业授权详情
|
|
137
|
+
|
|
138
|
+
### 其他条款
|
|
139
|
+
- 不得修改源码后重新分发
|
|
140
|
+
- 不得将本项目作为竞品直接销售
|
|
141
|
+
- 保留版权声明和许可证信息
|
|
Binary file
|