Richtext.vue 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. <template>
  2. <div class="richtext-box">
  3. <quill-editor class="editor"
  4. ref="myTextEditor"
  5. v-model="content"
  6. :options="editorOption"
  7. @blur="onEditorBlur($event)"
  8. @focus="onEditorFocus($event)"
  9. @ready="onEditorReady($event)"
  10. @change="onEditorChange($event)">
  11. <button id="custom-button">defineAsyncComponent</button>
  12. </quill-editor>
  13. </div>
  14. </template>
  15. <script>
  16. export default {
  17. data () {
  18. return {
  19. content: null,
  20. editorOption: {
  21. modules: {
  22. toolbar: [
  23. ["bold", "italic", "underline", "strike"], // 加粗 斜体 下划线 删除线
  24. ["blockquote", "code-block"], // 引用 代码块
  25. [{ header: 1 }, { header: 2 }], // 1、2 级标题
  26. [{ list: "ordered" }, { list: "bullet" }], // 有序、无序列表
  27. [{ script: "sub" }, { script: "super" }], // 上标/下标
  28. [{ indent: "-1" }, { indent: "+1" }], // 缩进
  29. // [{'direction': 'rtl'}], // 文本方向
  30. [{ size: ["small", false, "large", "huge"] }], // 字体大小
  31. [{ header: [1, 2, 3, 4, 5, 6, false] }], // 标题
  32. [{ color: [] }, { background: [] }], // 字体颜色、字体背景颜色
  33. [{ font: [] }], // 字体种类
  34. [{ align: [] }], // 对齐方式
  35. ["clean"], // 清除文本格式
  36. ["link", "image", "video"], // 链接、图片、视频
  37. ["sourceEditor"]
  38. ], //工具菜单栏配置
  39. },
  40. placeholder: '请在这里添加产品描述', //提示
  41. readyOnly: false, //是否只读
  42. theme: 'snow', //主题 snow/bubble
  43. syntax: true, //语法检测
  44. }
  45. }
  46. },
  47. methods: {
  48. // 失去焦点
  49. onEditorBlur(editor) {},
  50. // 获得焦点
  51. onEditorFocus(editor) {},
  52. // 开始
  53. onEditorReady(editor) {},
  54. // 值发生变化
  55. onEditorChange(editor) {
  56. this.content = editor.html;
  57. console.log(editor);
  58. },
  59. },
  60. computed: {
  61. editor() {
  62. return this.$refs.myTextEditor.quillEditor;
  63. }
  64. },
  65. mounted() {
  66. // console.log('this is my editor',this.editor);
  67. }
  68. }
  69. </script>
  70. <style>
  71. .richtext-box{
  72. background-color: #fff;
  73. padding: 10px;
  74. box-shadow: 0 0 5px #0005;
  75. border-radius: 10px;
  76. height: 100%;
  77. }
  78. .richtext-box .editor {
  79. line-height: normal !important;
  80. height: 800px;
  81. }
  82. .richtext-box .ql-snow .ql-tooltip[data-mode=link]::before {
  83. content: "请输入链接地址:";
  84. }
  85. .richtext-box .ql-snow .ql-tooltip.ql-editing a.ql-action::after {
  86. border-right: 0px;
  87. content: '保存';
  88. padding-right: 0px;
  89. }
  90. .richtext-box .ql-snow .ql-tooltip[data-mode=video]::before {
  91. content: "请输入视频地址:";
  92. }
  93. .richtext-box .ql-snow .ql-picker.ql-size .ql-picker-label::before,
  94. .richtext-box .ql-snow .ql-picker.ql-size .ql-picker-item::before {
  95. content: '14px';
  96. }
  97. .richtext-box .ql-snow .ql-picker.ql-size .ql-picker-label[data-value=small]::before,
  98. .richtext-box .ql-snow .ql-picker.ql-size .ql-picker-item[data-value=small]::before {
  99. content: '10px';
  100. }
  101. .richtext-box .ql-snow .ql-picker.ql-size .ql-picker-label[data-value=large]::before,
  102. .richtext-box .ql-snow .ql-picker.ql-size .ql-picker-item[data-value=large]::before {
  103. content: '18px';
  104. }
  105. .richtext-box .ql-snow .ql-picker.ql-size .ql-picker-label[data-value=huge]::before,
  106. .richtext-box .ql-snow .ql-picker.ql-size .ql-picker-item[data-value=huge]::before {
  107. content: '32px';
  108. }
  109. .richtext-box .ql-snow .ql-picker.ql-header .ql-picker-label::before,
  110. .richtext-box .ql-snow .ql-picker.ql-header .ql-picker-item::before {
  111. content: '文本';
  112. }
  113. .richtext-box .ql-snow .ql-picker.ql-header .ql-picker-label[data-value="1"]::before,
  114. .richtext-box .ql-snow .ql-picker.ql-header .ql-picker-item[data-value="1"]::before {
  115. content: '标题1';
  116. }
  117. .richtext-box .ql-snow .ql-picker.ql-header .ql-picker-label[data-value="2"]::before,
  118. .richtext-box .ql-snow .ql-picker.ql-header .ql-picker-item[data-value="2"]::before {
  119. content: '标题2';
  120. }
  121. .richtext-box .ql-snow .ql-picker.ql-header .ql-picker-label[data-value="3"]::before,
  122. .richtext-box .ql-snow .ql-picker.ql-header .ql-picker-item[data-value="3"]::before {
  123. content: '标题3';
  124. }
  125. .richtext-box .ql-snow .ql-picker.ql-header .ql-picker-label[data-value="4"]::before,
  126. .richtext-box .ql-snow .ql-picker.ql-header .ql-picker-item[data-value="4"]::before {
  127. content: '标题4';
  128. }
  129. .richtext-box .ql-snow .ql-picker.ql-header .ql-picker-label[data-value="5"]::before,
  130. .richtext-box .ql-snow .ql-picker.ql-header .ql-picker-item[data-value="5"]::before {
  131. content: '标题5';
  132. }
  133. .richtext-box .ql-snow .ql-picker.ql-header .ql-picker-label[data-value="6"]::before,
  134. .richtext-box .ql-snow .ql-picker.ql-header .ql-picker-item[data-value="6"]::before {
  135. content: '标题6';
  136. }
  137. .richtext-box .ql-snow .ql-picker.ql-font .ql-picker-label::before,
  138. .richtext-box .ql-snow .ql-picker.ql-font .ql-picker-item::before {
  139. content: '标准字体';
  140. }
  141. .richtext-box .ql-snow .ql-picker.ql-font .ql-picker-label[data-value=serif]::before,
  142. .richtext-box .ql-snow .ql-picker.ql-font .ql-picker-item[data-value=serif]::before {
  143. content: '衬线字体';
  144. }
  145. .richtext-box .ql-snow .ql-picker.ql-font .ql-picker-label[data-value=monospace]::before,
  146. .richtext-box .ql-snow .ql-picker.ql-font .ql-picker-item[data-value=monospace]::before {
  147. content: '等宽字体';
  148. }
  149. </style>