vue-quill-editor+plupload富文本编辑器实例详解
程序员文章站
2022-06-14 13:43:18
1,先给vue项目中下载vue-quill-editor依赖npm install vue-quill-editor --save
2,下载plupload依赖npm i...
1,先给vue项目中下载vue-quill-editor
依赖npm install vue-quill-editor --save
2,下载plupload依赖npm install plupload --save
3,在组件中分别引入对应的js
import { quilleditor }from 'vue-quill-editor' import '@/assets/js/crypto1/crypto/crypto.js' import '@/assets/js/crypto1/hmac/hmac.js' import '@/assets/js/crypto1/sha1/sha1.js' import base64from '@/assets/js/base64.js' import pluploadfrom 'plupload'
4,编写plupload上传图片需要的事件以及参数
let accessid = '阿里oss申请的accessid' let accesskey = '阿里oss申请的accesskey' let host = '阿里oss的存储文件地址' let bucket = 'image' let g_dirname = '' let g_object_name = '' let g_object_name_type = '' var timestamp let now = timestamp = date.parse(new date())/ 1000 let pos = '' let suffix = '' var policytext = { 'expiration': '2020-01-01t12:00:00.000z',// 设置该policy的失效时间,超过这个失效时间之后,就没有办法通过这个policy上传文件了 'conditions': [ ['content-length-range',0,1048576000]// 设置上传文件的大小限制 ] } var policybase64 = base64.encode(json.stringify(policytext)) let message = policybase64 var bytes = crypto.hmac(crypto.sha1,message,accesskey, {asbytes: true}) var signature = crypto.util.bytestobase64(bytes) // 选择上传名字是本地文件名字还是随机文件名字 function check_object_radio () { g_object_name_type = 'random_name' } // 默认是上传到根目录 function get_dirname () { g_dirname = 'image/' } // 获得随机的字符串 function random_string (len) { len = len || 32 var chars = 'abcdefghjkmnpqrstwxyzabcdefhijkmnprstwxyz2345678' var maxpos = chars.length var pwd = '' for (var i = 0;i < len;i++) { pwd += chars.charat(math.floor(math.random()* maxpos)) } return pwd } // 获取文件后缀 function get_suffix (filename) { pos = filename.lastindexof('.') suffix = '' if (pos !== -1) { suffix = filename.substring(pos) } return suffix } // 获取文件名字 function calculate_object_name (filename) { if (g_object_name_type === 'local_name') { g_object_name += filename }else if (g_object_name_type === 'random_name') { suffix = get_suffix(filename) g_object_name = random_string(10)+ new date().gettime()+ suffix // g_object_name = filename } return '' } function get_uploaded_object_name (filename) { if (g_object_name_type === 'local_name') { var tmp_name = g_object_name tmp_name = tmp_name.replace(filename,filename) return tmp_name }else if (g_object_name_type === 'random_name') { return g_object_name } } // 设置上传参数 function set_upload_param (up,filename,ret) { // g_object_name = g_dirname if (filename !== '') { suffix = get_suffix(filename) calculate_object_name(filename) } let new_multipart_params = { 'filename': g_dirname + g_object_name, 'key': g_dirname + g_object_name, 'policy': policybase64, 'ossaccesskeyid': accessid, 'success_action_status': '200',// 让服务端返回200,不然,默认会返回204 'signature': signature } console.log(g_object_name) up.setoption({ 'url': host, 'multipart_params': new_multipart_params }) up.start() } const toolbaroptions = [ ['bold','italic','underline','strike'],// toggled buttons ['blockquote','code-block'], [{'header': 1}, {'header': 2}],// custom button values [{'list': 'ordered'}, {'list': 'bullet'}], [{'script': 'sub'}, {'script': 'super'}],// superscript/subscript [{'indent': '-1'}, {'indent': '+1'}],// outdent/indent [{'direction': 'rtl'}],// text direction [{'size': ['small',false,'large','huge']}],// custom dropdown [{'header': [1,2,3,4,5,6,false]}], [{'color': []}, {'background': []}],// dropdown with defaults from theme [{'font': []}], [{'align': []}], ['link','image'], ['clean']// remove formatting button ] export default { name: 'addnotice', components: { quilleditor }, data () { return { loading: false, textarea_name: '', textarea_nei: '', content: null, editoroption:{ placeholder: '', theme: 'snow',// or 'bubble' modules: { toolbar: { container: toolbaroptions,// 工具栏 handlers: { 'image': function (value) { if (value) { // alert(1) document.queryselector('#selectfiles').click() }else { this.quill.format('image',false); } } } } } } } }, props: { notice_id: number, addnotice_id: number }, watch: {}, methods: { data_qing () { this.textarea_name = '' this.content = '' }, addnoticeoff () { this.$emit('addnoticeoff') }, gonggao_push () { this.loading = true let data = { token: this.token(), id: this.addnotice_id, match_id: this.notice_id, title: this.textarea_name, content: this.content } this.$axios.post('/match/notice/noticesave',this.$qs.stringify(data)) .then((res)=> { this.loading = false console.log(res) if (res.data.code === '200') { this.$emit('addnoticeoff') this.$emit('notice_ajax',0) } }).catch((err)=> { this.loading = false console.log(err) }) }, escape2html (str) { var arrentities = {'lt': '<','gt': '>','nbsp': ' ','amp': '&','quot': '"'} return str.replace(/&(lt|gt|nbsp|amp|quot);/ig,function (all,t) { return arrentities[t] }) }, data_zhan () { let data = { token: this.token(), id: this.addnotice_id } this.$axios.post('/match/notice/noticeinfo',this.$qs.stringify(data)) .then((res)=> { let new_data = res.data.data if (res.data.code === '200') { this.textarea_name = new_data.title this.content = this.escape2html(new_data.content) console.log(this.escape2html(new_data.content)) } }).catch((err)=> { console.log(err) }) } }, computed: { }, created () { }, mounted () { var that = this var uploader = new plupload.uploader({ runtimes: 'html5,flash,silverlight,html4', browse_button: 'selectfiles', multi_selection: true, // container: document.getelementbyid('container'), flash_swf_url: './../assets/plupload-2.1.2/js/moxie.swf', silverlight_xap_url: './../assets/plupload-2.1.2/js/moxie.xap', url: host, init: { postinit: function () { console.log(7777) }, queuechanged: function (up) {// 数组变化是发生 console.log(up) }, filefiltered: function (up,files) { var filesize = (math.round(files.size * 100 / (1024 * 1024))/ 100).tostring()// mb if (filesize > 10) { uploader.removefile(files) } }, // 图片成功添加到上传队列中后的事件 filesadded: function (up,files) { console.log(111) plupload.each(files,function (v,i) { }) console.log(files) set_upload_param(uploader,'',false) }, beforeupload: function (up,file) { console.log(3333) check_object_radio() get_dirname() set_upload_param(up,file.name,true) }, uploadprogress: function (up,file) { console.log(file.percent)// 进度条设置 }, fileuploaded: function (up,file,info) { console.log(555) // 获取富文本组件实例 console.log(that.$refs) let quill = that.$refs.myquilleditor.quill if (info.status === 200) { console.log(get_uploaded_object_name(file.name)) let url = host+'/'+g_dirname+get_uploaded_object_name(file.name) // 获取光标所在位置 let length = quill.getselection().index; // 插入图片 res.info为服务器返回的图片地址 quill.insertembed(length,'image',url) // 调整光标到最后 quill.setselection(length + 1) }else { this.$message.error('图片插入失败') } }, error: function (up,err) { // document.getelementbyid('console').appendchild(document.createtextnode("\nerror xml:" + err.response)) } } }) uploader.init() }, destroyed () { } }
总结
以上所述是小编给大家介绍的vue-quill-editor+plupload富文本编辑器实例详解,希望对大家有所帮助