uniapp+vue3+ts H5端使用Quill富文本插件以及解决上传图片反显的问题
1.在项目中安装Quill
npm i quill@1.3.7
2.需要显示富文本的页面完整代码
<template>
<view>
<div ref="quillEditor" style="height: 65vh"></div>
</view>
</template>
<script setup lang="ts">
import { ref, onMounted, reactive } from 'vue'
import Quill from 'quill'
import 'quill/dist/quill.snow.css'
const quillEditor = ref(null)
let quill: any = null
const toolbarOptions = ref([
[{ header: [1, 2, 3, 4, 5, 6, false] }],
['bold', 'italic', 'underline'], // toggled buttons
['image'],
[{ align: [] }]
])
onMounted(() => {
getQuill()
})
// 初始化编辑器
const getQuill = () => {
quill = new Quill(quillEditor.value, {
theme: 'snow',
modules: {
toolbar: toolbarOptions.value
}
})
// 监听工具栏的图片按钮点击事件
quill.getModule('toolbar').addHandler('image', handleImageUpload)
}
// 图片上传
const uploadImage = async (filePath: string): Promise<string> => {
try {
const [uploadResult] = await uni.uploadFile({
url: 'xxxxxxxxxxx', // 替换为实际的上传接口地址
filePath,
name: 'file',
formData: {},
})
const response = JSON.parse(uploadResult.data)
if (response.code === 200) {
return response.data.url // 假设返回的数据中包含图片的完整 URL
} else {
throw new Error(response.message || '图片上传失败')
}
} catch (error) {
console.error('上传图片出错:', error)
throw error
}
}
// 替换 Quill 默认的图片处理逻辑
const handleImageUpload = () => {
uni.chooseImage({
count: 1,
sizeType: ['original', 'compressed'], // 原图或压缩图
sourceType: ['album', 'camera'], // 相册或相机
success: async (res) => {
const filePath = res.tempFilePaths[0]
try {
const data: any = await uploadImage(filePath)
const range = quill.getSelection()
if (range) {
quill.insertEmbed(range.index, 'image', data.absolute_path)
}
} catch (error) {
uni.showToast({
title: '图片上传失败',
icon: 'none'
})
}
},
fail: (err) => {
console.error('选择图片失败:', err)
}
})
}
// 获取编辑器内容
const getContent = () => {
if (quill) {
const content = quill.root.innerHTML
form.answer_detail = content
console.log(content) // 这里可以获取到Quill编辑器的HTML内容
}
}
</script>