¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <div> |
| | | <!-- å¾çä¸ä¼ ç»ä»¶è¾
å© --> |
| | | <el-upload |
| | | class="avatar-uploader quill-img" |
| | | :action="uploadImgUrl" |
| | | name="file" |
| | | :headers="headers" |
| | | :show-file-list="false" |
| | | :on-success="quillImgSuccess" |
| | | :on-error="uploadError" |
| | | :before-upload="quillImgBefore" |
| | | accept='.jpg,.jpeg,.png,.gif' |
| | | ></el-upload> |
| | | |
| | | <!-- 坿æ¬ç»ä»¶ --> |
| | | <quill-editor |
| | | class="editor" |
| | | v-model="content" |
| | | ref="quillEditor" |
| | | :options="editorOption" |
| | | @blur="onEditorBlur($event)" |
| | | @focus="onEditorFocus($event)" |
| | | @change="onEditorChange($event)" |
| | | ></quill-editor> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import { getToken } from '@/utils/auth' |
| | | |
| | | // å·¥å
·æ é
ç½® |
| | | const toolbarOptions = [ |
| | | ["bold", "italic", "underline", "strike"], // å ç² æä½ ä¸å线 å é¤çº¿ |
| | | ["blockquote", "code-block"], // å¼ç¨ 代ç å |
| | | [{ 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"] // 龿¥ãå¾çãè§é¢ |
| | | ]; |
| | | |
| | | import { quillEditor } from "vue-quill-editor"; |
| | | import "quill/dist/quill.core.css"; |
| | | import "quill/dist/quill.snow.css"; |
| | | import "quill/dist/quill.bubble.css"; |
| | | |
| | | export default { |
| | | props: { |
| | | /* ç¼è¾å¨çå
容 */ |
| | | value: { |
| | | type: String |
| | | }, |
| | | /* å¾çå¤§å° */ |
| | | maxSize: { |
| | | type: Number, |
| | | default: 4000 //kb |
| | | } |
| | | }, |
| | | components: { quillEditor }, |
| | | data() { |
| | | return { |
| | | content: this.value, |
| | | uploadImgUrl: "", |
| | | editorOption: { |
| | | placeholder: "", |
| | | theme: "snow", // or 'bubble' |
| | | placeholder: "请è¾å
¥å
容", |
| | | modules: { |
| | | toolbar: { |
| | | container: toolbarOptions, |
| | | handlers: { |
| | | image: function(value) { |
| | | if (value) { |
| | | // 触åinputæ¡éæ©å¾çæä»¶ |
| | | document.querySelector(".quill-img input").click(); |
| | | } else { |
| | | this.quill.format("image", false); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | }, |
| | | uploadImgUrl: process.env.VUE_APP_BASE_API + "/common/upload", // ä¸ä¼ çå¾çæå¡å¨å°å |
| | | headers: { |
| | | Authorization: 'Bearer ' + getToken() |
| | | } |
| | | }; |
| | | }, |
| | | watch: { |
| | | value: function() { |
| | | this.content = this.value; |
| | | } |
| | | }, |
| | | methods: { |
| | | onEditorBlur() { |
| | | //失å»ç¦ç¹äºä»¶ |
| | | }, |
| | | onEditorFocus() { |
| | | //è·å¾ç¦ç¹äºä»¶ |
| | | }, |
| | | onEditorChange() { |
| | | //å
容æ¹åäºä»¶ |
| | | this.$emit("input", this.content); |
| | | }, |
| | | |
| | | // 坿æ¬å¾çä¸ä¼ å |
| | | quillImgBefore(file) { |
| | | let fileType = file.type; |
| | | if(fileType === 'image/jpeg' || fileType === 'image/png'){ |
| | | return true; |
| | | }else { |
| | | this.$message.error('请æå
¥å¾çç±»åæä»¶(jpg/jpeg/png)'); |
| | | return false; |
| | | } |
| | | }, |
| | | |
| | | quillImgSuccess(res, file) { |
| | | // res为å¾çæå¡å¨è¿åçæ°æ® |
| | | // è·å坿æ¬ç»ä»¶å®ä¾ |
| | | let quill = this.$refs.quillEditor.quill; |
| | | // 妿ä¸ä¼ æå |
| | | if (res.code == 200) { |
| | | // è·åå
æ æå¨ä½ç½® |
| | | let length = quill.getSelection().index; |
| | | // æå
¥å¾ç res.url为æå¡å¨è¿åçå¾çå°å |
| | | quill.insertEmbed(length, "image", res.url); |
| | | // è°æ´å
æ å°æå |
| | | quill.setSelection(length + 1); |
| | | } else { |
| | | this.$message.error("å¾çæå
¥å¤±è´¥"); |
| | | } |
| | | }, |
| | | // 坿æ¬å¾çä¸ä¼ 失败 |
| | | uploadError() { |
| | | // loadingå¨ç»æ¶å¤± |
| | | this.$message.error("å¾çæå
¥å¤±è´¥"); |
| | | } |
| | | } |
| | | }; |
| | | </script> |
| | | |
| | | <style> |
| | | .editor { |
| | | line-height: normal !important; |
| | | height: 192px; |
| | | } |
| | | .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> |