From ee2205d4f1cc9bd5c3908fdf43453f1d98f3a231 Mon Sep 17 00:00:00 2001
From: RuoYi <yzz_ivy@163.com>
Date: 星期一, 06 三月 2023 14:19:40 +0800
Subject: [PATCH] 新增富文本组件支持
---
src/main.js | 5 +
package.json | 1
src/views/system/notice/index.vue | 7 --
src/components/Editor/index.vue | 163 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
4 files changed, 168 insertions(+), 8 deletions(-)
diff --git a/package.json b/package.json
index fc1939f..c274f80 100644
--- a/package.json
+++ b/package.json
@@ -16,6 +16,7 @@
},
"dependencies": {
"@element-plus/icons-vue": "2.0.10",
+ "@vueup/vue-quill": "1.1.0",
"@vueuse/core": "9.5.0",
"axios": "0.27.2",
"echarts": "5.4.0",
diff --git a/src/components/Editor/index.vue b/src/components/Editor/index.vue
new file mode 100644
index 0000000..ef3a832
--- /dev/null
+++ b/src/components/Editor/index.vue
@@ -0,0 +1,163 @@
+<template>
+ <div class="editor">
+ <quill-editor
+ v-model:content="content"
+ contentType="html"
+ @textChange="(e) => $emit('update:modelValue', content)"
+ :options="options"
+ :style="styles"
+ />
+ </div>
+</template>
+
+<script setup>
+import { QuillEditor } from '@vueup/vue-quill';
+import '@vueup/vue-quill/dist/vue-quill.snow.css';
+
+const props = defineProps({
+ /* 缂栬緫鍣ㄧ殑鍐呭 */
+ modelValue: {
+ type: String,
+ },
+ /* 楂樺害 */
+ height: {
+ type: Number,
+ default: null,
+ },
+ /* 鏈�灏忛珮搴� */
+ minHeight: {
+ type: Number,
+ default: null,
+ },
+ /* 鍙 */
+ readOnly: {
+ type: Boolean,
+ default: false,
+ },
+});
+
+const options = ref({
+ theme: "snow",
+ bounds: document.body,
+ debug: "warn",
+ modules: {
+ // 宸ュ叿鏍忛厤缃�
+ toolbar: [
+ ["bold", "italic", "underline", "strike"], // 鍔犵矖 鏂滀綋 涓嬪垝绾� 鍒犻櫎绾�
+ ["blockquote", "code-block"], // 寮曠敤 浠g爜鍧�
+ [{ list: "ordered" }, { list: "bullet" }], // 鏈夊簭銆佹棤搴忓垪琛�
+ [{ indent: "-1" }, { indent: "+1" }], // 缂╄繘
+ [{ size: ["small", false, "large", "huge"] }], // 瀛椾綋澶у皬
+ [{ header: [1, 2, 3, 4, 5, 6, false] }], // 鏍囬
+ [{ color: [] }, { background: [] }], // 瀛椾綋棰滆壊銆佸瓧浣撹儗鏅鑹�
+ [{ align: [] }], // 瀵归綈鏂瑰紡
+ ["clean"], // 娓呴櫎鏂囨湰鏍煎紡
+ ["link", "image", "video"] // 閾炬帴銆佸浘鐗囥�佽棰�
+ ],
+ },
+ placeholder: '璇疯緭鍏ュ唴瀹�',
+ readOnly: props.readOnly,
+ theme: 'snow'
+});
+
+const styles = computed(() => {
+ let style = {};
+ if (props.minHeight) {
+ style.minHeight = `${props.minHeight}px`;
+ }
+ if (props.height) {
+ style.height = `${props.height}px`;
+ }
+ return style;
+})
+
+const content = ref("");
+watch(() => props.modelValue, (v) => {
+ if (v !== content) {
+ content.value = v === undefined ? "<p></p>" : v;
+ }
+}, { immediate: true });
+
+
+</script>
+
+<style>
+.editor, .ql-toolbar {
+ white-space: pre-wrap !important;
+ line-height: normal !important;
+}
+.quill-img {
+ display: none;
+}
+.ql-snow .ql-tooltip[data-mode="link"]::before {
+ content: "璇疯緭鍏ラ摼鎺ュ湴鍧�:";
+}
+.ql-snow .ql-tooltip.ql-editing a.ql-action::after {
+ border-right: 0px;
+ content: "淇濆瓨";
+ padding-right: 0px;
+}
+
+.ql-snow .ql-tooltip[data-mode="video"]::before {
+ content: "璇疯緭鍏ヨ棰戝湴鍧�:";
+}
+
+.ql-snow .ql-picker.ql-size .ql-picker-label::before,
+.ql-snow .ql-picker.ql-size .ql-picker-item::before {
+ content: "14px";
+}
+.ql-snow .ql-picker.ql-size .ql-picker-label[data-value="small"]::before,
+.ql-snow .ql-picker.ql-size .ql-picker-item[data-value="small"]::before {
+ content: "10px";
+}
+.ql-snow .ql-picker.ql-size .ql-picker-label[data-value="large"]::before,
+.ql-snow .ql-picker.ql-size .ql-picker-item[data-value="large"]::before {
+ content: "18px";
+}
+.ql-snow .ql-picker.ql-size .ql-picker-label[data-value="huge"]::before,
+.ql-snow .ql-picker.ql-size .ql-picker-item[data-value="huge"]::before {
+ content: "32px";
+}
+
+.ql-snow .ql-picker.ql-header .ql-picker-label::before,
+.ql-snow .ql-picker.ql-header .ql-picker-item::before {
+ content: "鏂囨湰";
+}
+.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="1"]::before,
+.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="1"]::before {
+ content: "鏍囬1";
+}
+.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="2"]::before,
+.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="2"]::before {
+ content: "鏍囬2";
+}
+.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="3"]::before,
+.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="3"]::before {
+ content: "鏍囬3";
+}
+.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="4"]::before,
+.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="4"]::before {
+ content: "鏍囬4";
+}
+.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="5"]::before,
+.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="5"]::before {
+ content: "鏍囬5";
+}
+.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="6"]::before,
+.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="6"]::before {
+ content: "鏍囬6";
+}
+
+.ql-snow .ql-picker.ql-font .ql-picker-label::before,
+.ql-snow .ql-picker.ql-font .ql-picker-item::before {
+ content: "鏍囧噯瀛椾綋";
+}
+.ql-snow .ql-picker.ql-font .ql-picker-label[data-value="serif"]::before,
+.ql-snow .ql-picker.ql-font .ql-picker-item[data-value="serif"]::before {
+ content: "琛嚎瀛椾綋";
+}
+.ql-snow .ql-picker.ql-font .ql-picker-label[data-value="monospace"]::before,
+.ql-snow .ql-picker.ql-font .ql-picker-item[data-value="monospace"]::before {
+ content: "绛夊瀛椾綋";
+}
+</style>
diff --git a/src/main.js b/src/main.js
index 28725e7..b399777 100644
--- a/src/main.js
+++ b/src/main.js
@@ -6,12 +6,10 @@
import locale from 'element-plus/lib/locale/lang/zh-cn' // 涓枃璇█
import '@/assets/styles/index.scss' // global css
-
import App from './App'
import store from './store'
import router from './router'
import directive from './directive' // directive
-
// 娉ㄥ唽鎸囦护
import plugins from './plugins' // plugins
@@ -31,6 +29,8 @@
import Pagination from '@/components/Pagination'
// 鑷畾涔夎〃鏍煎伐鍏风粍浠�
import RightToolbar from '@/components/RightToolbar'
+// 瀵屾枃鏈粍浠�
+import Editor from "@/components/Editor"
// 鏂囦欢涓婁紶缁勪欢
import FileUpload from "@/components/FileUpload"
// 鍥剧墖涓婁紶缁勪欢
@@ -62,6 +62,7 @@
app.component('ImageUpload', ImageUpload)
app.component('ImagePreview', ImagePreview)
app.component('RightToolbar', RightToolbar)
+app.component('Editor', Editor)
app.use(router)
app.use(store)
diff --git a/src/views/system/notice/index.vue b/src/views/system/notice/index.vue
index 35e15c1..55fbc3a 100644
--- a/src/views/system/notice/index.vue
+++ b/src/views/system/notice/index.vue
@@ -143,12 +143,7 @@
</el-col>
<el-col :span="24">
<el-form-item label="鍐呭">
- <el-input
- :rows="6"
- type="textarea"
- placeholder="璇疯緭鍏ュ唴瀹�"
- v-model="form.noticeContent"
- />
+ <editor v-model="form.noticeContent" :min-height="192"/>
</el-form-item>
</el-col>
</el-row>
--
Gitblit v1.9.3