add tinymce upload demo
							parent
							
								
									c8e632f0c3
								
							
						
					
					
						commit
						a10cfcc837
					
				|  | @ -0,0 +1,102 @@ | |||
| <template> | ||||
|     <div class="upload-container"> | ||||
|         <el-button icon='upload' :style="{background:color,borderColor:color}" @click=" dialogVisible=true" type="primary">上传图片 | ||||
|         </el-button> | ||||
|         <el-dialog v-model="dialogVisible"> | ||||
|             <el-upload | ||||
|                     class="editor-slide-upload" | ||||
|                     action="https://httpbin.org/post" | ||||
|                     :multiple="true" | ||||
|                     :file-list="fileList" | ||||
|                     :show-file-list="true" | ||||
|                     list-type="picture-card" | ||||
|                     :on-remove="handleRemove" | ||||
|                     :on-success="handleSuccess" | ||||
|                     :before-upload="beforeUpload"> | ||||
|                 <el-button size="small" type="primary">点击上传</el-button> | ||||
|             </el-upload> | ||||
|             <el-button @click="dialogVisible = false">取 消</el-button> | ||||
|             <el-button type="primary" @click="handleSubmit">确 定</el-button> | ||||
|         </el-dialog> | ||||
|     </div> | ||||
| </template> | ||||
| <script> | ||||
| // import { getToken } from 'api/qiniu' | ||||
| 
 | ||||
| export default { | ||||
|   name: 'editorSlideUpload', | ||||
|   props: { | ||||
|     color: { | ||||
|       type: String, | ||||
|       default: '#20a0ff' | ||||
|     } | ||||
|   }, | ||||
|   data() { | ||||
|     return { | ||||
|       dialogVisible: false, | ||||
|       listObj: {}, | ||||
|       fileList: [] | ||||
|     } | ||||
|   }, | ||||
|   methods: { | ||||
|     checkAllSuccess() { | ||||
|       return Object.keys(this.listObj).every(item => this.listObj[item].hasSuccess) | ||||
|     }, | ||||
|     handleSubmit() { | ||||
|       const arr = Object.keys(this.listObj).map(v => this.listObj[v]) | ||||
|       if (!this.checkAllSuccess()) { | ||||
|         this.$message('请等待所有图片上传成功 或 出现了网络问题,请刷新页面重新上传!') | ||||
|         return | ||||
|       } | ||||
|       console.log(arr) | ||||
|       this.$emit('successCBK', arr) | ||||
|       this.listObj = {} | ||||
|       this.fileList = [] | ||||
|       this.dialogVisible = false | ||||
|     }, | ||||
|     handleSuccess(response, file) { | ||||
|       const uid = file.uid | ||||
|       const objKeyArr = Object.keys(this.listObj) | ||||
|       for (let i = 0, len = objKeyArr.length; i < len; i++) { | ||||
|         if (this.listObj[objKeyArr[i]].uid === uid) { | ||||
|           this.listObj[objKeyArr[i]].url = response.files.file | ||||
|           this.listObj[objKeyArr[i]].hasSuccess = true | ||||
|           return | ||||
|         } | ||||
|       } | ||||
|     }, | ||||
|     handleRemove(file) { | ||||
|       const uid = file.uid | ||||
|       const objKeyArr = Object.keys(this.listObj) | ||||
|       for (let i = 0, len = objKeyArr.length; i < len; i++) { | ||||
|         if (this.listObj[objKeyArr[i]].uid === uid) { | ||||
|           delete this.listObj[objKeyArr[i]] | ||||
|           return | ||||
|         } | ||||
|       } | ||||
|     }, | ||||
|     beforeUpload(file) { | ||||
|       const _self = this | ||||
|       const _URL = window.URL || window.webkitURL | ||||
|       const fileName = file.uid | ||||
|       this.listObj[fileName] = {} | ||||
|       return new Promise((resolve, reject) => { | ||||
|         const img = new Image() | ||||
|         img.src = _URL.createObjectURL(file) | ||||
|         img.onload = function() { | ||||
|           _self.listObj[fileName] = { hasSuccess: false, uid: file.uid, width: this.width, height: this.height } | ||||
|         } | ||||
|         resolve(true) | ||||
|       }) | ||||
|     } | ||||
|   } | ||||
| } | ||||
| </script> | ||||
| 
 | ||||
| <style rel="stylesheet/scss" lang="scss" scoped> | ||||
|     .upload-container { | ||||
|         .editor-slide-upload { | ||||
|             margin-bottom: 20px; | ||||
|         } | ||||
|     } | ||||
| </style> | ||||
|  | @ -1,12 +1,18 @@ | |||
| <template> | ||||
|   <div class='tinymce-container editor-container'> | ||||
|     <textarea class='tinymce-textarea' :id="id"></textarea> | ||||
|     <div class="editor-custom-btn-container"> | ||||
|      <editorImage  color="#20a0ff" class="editor-upload-btn" @successCBK="imageSuccessCBK"></editorImage> | ||||
|       </div> | ||||
|   </div> | ||||
| </template> | ||||
| 
 | ||||
| <script> | ||||
| import editorImage from './components/editorImage' | ||||
| 
 | ||||
| export default { | ||||
|   name: 'tinymce', | ||||
|   components: { editorImage }, | ||||
|   props: { | ||||
|     id: { | ||||
|       type: String, | ||||
|  | @ -143,6 +149,14 @@ export default { | |||
|       } | ||||
|     }) | ||||
|   }, | ||||
|   methods: { | ||||
|     imageSuccessCBK(arr) { | ||||
|       const _this = this | ||||
|       arr.forEach(v => { | ||||
|         window.tinymce.get(_this.id).insertContent(`<img class="wscnph" src="${v.url}" >`) | ||||
|       }) | ||||
|     } | ||||
|   }, | ||||
|   destroyed() { | ||||
|     window.tinymce.get(this.id).destroy() | ||||
|   } | ||||
|  | @ -153,9 +167,17 @@ export default { | |||
| .tinymce-container { | ||||
|   position: relative | ||||
| } | ||||
| 
 | ||||
| .tinymce-textarea { | ||||
|   visibility: hidden; | ||||
|   z-index: -1; | ||||
| } | ||||
| .editor-custom-btn-container { | ||||
|   position: absolute; | ||||
|   right: 15px; | ||||
|   /*z-index: 2005;*/ | ||||
|   top: 18px; | ||||
| } | ||||
| .editor-upload-btn { | ||||
|   display: inline-block; | ||||
| } | ||||
| </style> | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	 Pan
						Pan