Showing
5 changed files
with
132 additions
and
85 deletions
| 1 | +<!-- | ||
| 2 | + * @Date: 2023-02-13 14:56:34 | ||
| 3 | + * @LastEditors: hookehuyr hookehuyr@gmail.com | ||
| 4 | + * @LastEditTime: 2024-07-12 16:49:21 | ||
| 5 | + * @FilePath: /data-table/index.html | ||
| 6 | + * @Description: 文件描述 | ||
| 7 | +--> | ||
| 1 | <!DOCTYPE html> | 8 | <!DOCTYPE html> |
| 2 | <html lang='zh'> | 9 | <html lang='zh'> |
| 3 | <head> | 10 | <head> |
| ... | @@ -10,6 +17,7 @@ | ... | @@ -10,6 +17,7 @@ |
| 10 | </head> | 17 | </head> |
| 11 | <body> | 18 | <body> |
| 12 | <div id="app"></div> | 19 | <div id="app"></div> |
| 20 | + <script src="https://cdn.ipadbiz.cn/custom_form/tinymce/tinymce.min.js"></script> | ||
| 13 | <script type="module" src="/src/main.js"></script> | 21 | <script type="module" src="/src/main.js"></script> |
| 14 | </body> | 22 | </body> |
| 15 | </html> | 23 | </html> | ... | ... |
| ... | @@ -36,7 +36,7 @@ | ... | @@ -36,7 +36,7 @@ |
| 36 | }, | 36 | }, |
| 37 | "dependencies": { | 37 | "dependencies": { |
| 38 | "@dedisuryadi/json-form-data": "^0.1.1", | 38 | "@dedisuryadi/json-form-data": "^0.1.1", |
| 39 | - "@tinymce/tinymce-vue": "^5", | 39 | + "@tinymce/tinymce-vue": "4.0.7", |
| 40 | "@vant/area-data": "^1.3.1", | 40 | "@vant/area-data": "^1.3.1", |
| 41 | "@vant/touch-emulator": "^1.4.0", | 41 | "@vant/touch-emulator": "^1.4.0", |
| 42 | "@vitejs/plugin-legacy": "^1.8.2", | 42 | "@vitejs/plugin-legacy": "^1.8.2", |
| ... | @@ -56,7 +56,7 @@ | ... | @@ -56,7 +56,7 @@ |
| 56 | "moment": "^2.29.3", | 56 | "moment": "^2.29.3", |
| 57 | "mui-player": "^1.7.0", | 57 | "mui-player": "^1.7.0", |
| 58 | "sha1": "^1.1.1", | 58 | "sha1": "^1.1.1", |
| 59 | - "tinymce": "^7.2.1", | 59 | + "tinymce": "5.10.9", |
| 60 | "typescript": "^4.7.3", | 60 | "typescript": "^4.7.3", |
| 61 | "uuid": "^8.3.2", | 61 | "uuid": "^8.3.2", |
| 62 | "vant": "^4.9.1", | 62 | "vant": "^4.9.1", | ... | ... |
| 1 | <!-- | 1 | <!-- |
| 2 | * @Date: 2024-07-12 13:28:27 | 2 | * @Date: 2024-07-12 13:28:27 |
| 3 | * @LastEditors: hookehuyr hookehuyr@gmail.com | 3 | * @LastEditors: hookehuyr hookehuyr@gmail.com |
| 4 | - * @LastEditTime: 2024-07-12 14:20:07 | 4 | + * @LastEditTime: 2024-07-12 17:22:36 |
| 5 | * @FilePath: /data-table/src/components/TEditor/index.vue | 5 | * @FilePath: /data-table/src/components/TEditor/index.vue |
| 6 | * @Description: 文件描述 | 6 | * @Description: 文件描述 |
| 7 | --> | 7 | --> |
| 8 | <template> | 8 | <template> |
| 9 | - <div style="height: 100%; overflow: hidden"> | 9 | + <div style="height: 100%; overflow: hidden;"> |
| 10 | <editor | 10 | <editor |
| 11 | api-key="no-api-key" | 11 | api-key="no-api-key" |
| 12 | v-model="myValue" | 12 | v-model="myValue" |
| 13 | - :init="init" | 13 | + :init="tinymceOptions" |
| 14 | - :enabled="enabled" | ||
| 15 | :id="tinymceId" | 14 | :id="tinymceId" |
| 16 | ></editor> | 15 | ></editor> |
| 17 | </div> | 16 | </div> |
| ... | @@ -20,38 +19,38 @@ | ... | @@ -20,38 +19,38 @@ |
| 20 | <script setup> | 19 | <script setup> |
| 21 | import {computed, reactive, watch, ref, nextTick, onMounted} from "vue"; //全屏 | 20 | import {computed, reactive, watch, ref, nextTick, onMounted} from "vue"; //全屏 |
| 22 | 21 | ||
| 23 | -import tinymce from "tinymce/tinymce"; | 22 | +// import tinymce from "tinymce/tinymce"; |
| 24 | // import "tinymce/skins/content/default/content.css"; | 23 | // import "tinymce/skins/content/default/content.css"; |
| 25 | import Editor from "@tinymce/tinymce-vue"; | 24 | import Editor from "@tinymce/tinymce-vue"; |
| 26 | -import "tinymce/icons/default/icons"; | 25 | +// import "tinymce/icons/default/icons"; |
| 27 | -import "tinymce/models/dom"; // 一定要引入 | 26 | +// import "tinymce/models/dom"; // 一定要引入 |
| 28 | -import "tinymce/themes/silver"; // 界面UI主题 | 27 | +// import "tinymce/themes/silver"; // 界面UI主题 |
| 29 | -import "tinymce/plugins/image"; | 28 | +// import "tinymce/plugins/image"; |
| 30 | -import "tinymce/plugins/table"; | 29 | +// import "tinymce/plugins/table"; |
| 31 | -import "tinymce/plugins/lists"; // 列表插件 | 30 | +// import "tinymce/plugins/lists"; // 列表插件 |
| 32 | -import "tinymce/plugins/wordcount"; // 文字计数 | 31 | +// import "tinymce/plugins/wordcount"; // 文字计数 |
| 33 | -import "tinymce/plugins/preview"; // 预览 | 32 | +// import "tinymce/plugins/preview"; // 预览 |
| 34 | -import "tinymce/plugins/emoticons"; // emoji表情 | 33 | +// import "tinymce/plugins/emoticons"; // emoji表情 |
| 35 | -import "tinymce/plugins/emoticons/js/emojis.js"; //必须引入这个文件才有表情图库 | 34 | +// import "tinymce/plugins/emoticons/js/emojis.js"; //必须引入这个文件才有表情图库 |
| 36 | -import "tinymce/plugins/code"; // 编辑源码 | 35 | +// import "tinymce/plugins/code"; // 编辑源码 |
| 37 | -import "tinymce/plugins/link"; // 链接插件 | 36 | +// import "tinymce/plugins/link"; // 链接插件 |
| 38 | -import "tinymce/plugins/advlist"; //高级列表 | 37 | +// import "tinymce/plugins/advlist"; //高级列表 |
| 39 | -import "tinymce/plugins/codesample"; //代码示例 | 38 | +// import "tinymce/plugins/codesample"; //代码示例 |
| 40 | -import "tinymce/plugins/autoresize"; // 自动调整编辑器大小 | 39 | +// import "tinymce/plugins/autoresize"; // 自动调整编辑器大小 |
| 41 | -import "tinymce/plugins/quickbars"; // 光标处快捷提示 | 40 | +// import "tinymce/plugins/quickbars"; // 光标处快捷提示 |
| 42 | -import "tinymce/plugins/nonbreaking"; //插入不间断空格 | 41 | +// import "tinymce/plugins/nonbreaking"; //插入不间断空格 |
| 43 | -import "tinymce/plugins/searchreplace"; //查找替换 | 42 | +// import "tinymce/plugins/searchreplace"; //查找替换 |
| 44 | -import "tinymce/plugins/autolink"; //自动链接 | 43 | +// import "tinymce/plugins/autolink"; //自动链接 |
| 45 | -import "tinymce/plugins/directionality"; //文字方向 | 44 | +// import "tinymce/plugins/directionality"; //文字方向 |
| 46 | -import "tinymce/plugins/visualblocks"; //显示元素范围 | 45 | +// import "tinymce/plugins/visualblocks"; //显示元素范围 |
| 47 | -import "tinymce/plugins/visualchars"; //显示不可见字符 | 46 | +// import "tinymce/plugins/visualchars"; //显示不可见字符 |
| 48 | -import "tinymce/plugins/charmap"; // 特殊符号 | 47 | +// import "tinymce/plugins/charmap"; // 特殊符号 |
| 49 | -import "tinymce/plugins/nonbreaking"; //插入不间断空格 | 48 | +// import "tinymce/plugins/nonbreaking"; //插入不间断空格 |
| 50 | -import "tinymce/plugins/insertdatetime"; //插入日期时间 | 49 | +// import "tinymce/plugins/insertdatetime"; //插入日期时间 |
| 51 | -import "tinymce/plugins/importcss"; //引入自定义样式的css文件 | 50 | +// import "tinymce/plugins/importcss"; //引入自定义样式的css文件 |
| 52 | -import "tinymce/plugins/accordion"; // 可折叠数据手风琴模式 | 51 | +// import "tinymce/plugins/accordion"; // 可折叠数据手风琴模式 |
| 53 | -import "tinymce/plugins/anchor"; //锚点 | 52 | +// import "tinymce/plugins/anchor"; //锚点 |
| 54 | -import "tinymce/plugins/fullscreen"; | 53 | +// import "tinymce/plugins/fullscreen"; |
| 55 | 54 | ||
| 56 | 55 | ||
| 57 | const emits = defineEmits(["update:modelValue", "setHtml"]); | 56 | const emits = defineEmits(["update:modelValue", "setHtml"]); |
| ... | @@ -104,13 +103,13 @@ const tinymceId = ref( | ... | @@ -104,13 +103,13 @@ const tinymceId = ref( |
| 104 | 103 | ||
| 105 | 104 | ||
| 106 | //定义一个对象 init初始化 | 105 | //定义一个对象 init初始化 |
| 107 | -const init = reactive({ | 106 | +const init = { |
| 108 | selector: "#" + tinymceId.value, //富文本编辑器的id, | 107 | selector: "#" + tinymceId.value, //富文本编辑器的id, |
| 109 | // language_url: "/tinymce/langs/zh_CN.js", // 语言包的路径,具体路径看自己的项目 | 108 | // language_url: "/tinymce/langs/zh_CN.js", // 语言包的路径,具体路径看自己的项目 |
| 110 | - language_url: "https://cdn.ipadbiz.cn/custom_form/tinymce/langs/zh_CN.js", // 语言包的路径,具体路径看自己的项目 | 109 | + // language_url: "https://cdn.ipadbiz.cn/custom_form/tinymce/langs/zh_CN.js", // 语言包的路径,具体路径看自己的项目 |
| 111 | language: "zh_CN", | 110 | language: "zh_CN", |
| 112 | - // skin_url: "/tinymce/skins/ui/oxide", // skin路径,具体路径看自己的项目 | 111 | + skin_url: "/tinymce/skins/ui/oxide", // skin路径,具体路径看自己的项目 |
| 113 | - skin_url: "https://cdn.ipadbiz.cn/custom_form/tinymce/skins/ui/oxide", // skin路径,具体路径看自己的项目 | 112 | + // skin_url: "https://cdn.ipadbiz.cn/custom_form/tinymce/skins/ui/oxide", // skin路径,具体路径看自己的项目 |
| 114 | editable_root: props.editable_root, | 113 | editable_root: props.editable_root, |
| 115 | height: 600, | 114 | height: 600, |
| 116 | branding: false, // 是否禁用“Powered by TinyMCE” | 115 | branding: false, // 是否禁用“Powered by TinyMCE” |
| ... | @@ -164,35 +163,75 @@ const init = reactive({ | ... | @@ -164,35 +163,75 @@ const init = reactive({ |
| 164 | // setup: function (editor) { | 163 | // setup: function (editor) { |
| 165 | // }, | 164 | // }, |
| 166 | //图片上传 -实列 具体请根据官网补充- | 165 | //图片上传 -实列 具体请根据官网补充- |
| 167 | - images_upload_handler: function (blobInfo, progress) { | 166 | + // images_upload_handler: function (blobInfo, progress) { |
| 168 | - new Promise((resolve, reject) => { | 167 | + // new Promise((resolve, reject) => { |
| 169 | - let file = blobInfo.blob(); | 168 | + // let file = blobInfo.blob(); |
| 170 | - if (file.size / 1024 / 1024 > 200) { | 169 | + // if (file.size / 1024 / 1024 > 200) { |
| 171 | - reject({ | 170 | + // reject({ |
| 172 | - message: "上传失败,图片大小请控制在 200M 以内", | 171 | + // message: "上传失败,图片大小请控制在 200M 以内", |
| 173 | - remove: true, | 172 | + // remove: true, |
| 174 | - }); | 173 | + // }); |
| 175 | - } | 174 | + // } |
| 176 | - const formData = new FormData(); | 175 | + // const formData = new FormData(); |
| 177 | - formData.append("file", file); | 176 | + // formData.append("file", file); |
| 178 | - console.log( formData) | 177 | + // console.log( formData) |
| 179 | - axios.post("/api/upload/upload", formData, { | 178 | + // axios.post("/api/upload/upload", formData, { |
| 180 | - headers: { | 179 | + // headers: { |
| 181 | - "Content-Type": "multipart/form-data", | 180 | + // "Content-Type": "multipart/form-data", |
| 182 | - }, | 181 | + // }, |
| 183 | - onUploadProgress: (progressEvent) => { | 182 | + // onUploadProgress: (progressEvent) => { |
| 184 | - progress( | 183 | + // progress( |
| 185 | - Math.round((progressEvent.loaded / progressEvent.total) * 100) | 184 | + // Math.round((progressEvent.loaded / progressEvent.total) * 100) |
| 186 | - ); | 185 | + // ); |
| 187 | - }, | 186 | + // }, |
| 188 | - }).then((res) => { | 187 | + // }).then((res) => { |
| 189 | - resolve(res.data.url); | 188 | + // resolve(res.data.url); |
| 190 | - }) | 189 | + // }) |
| 191 | - .catch() | 190 | + // .catch() |
| 192 | 191 | ||
| 193 | - }); | 192 | + // }); |
| 194 | - }, | 193 | + // }, |
| 195 | -}); | 194 | +}; |
| 195 | + | ||
| 196 | +/*const tinymceOptions = { | ||
| 197 | + // selector: selector, | ||
| 198 | + language: 'zh_CN', | ||
| 199 | + // 插件列表:https://www.tiny.cloud/docs/plugins/opensource/ | ||
| 200 | + // image 插件的使用示例:https://www.tiny.cloud/docs/demo/file-picker/ | ||
| 201 | + // plugins: 'searchreplace autoresize link image code', | ||
| 202 | + plugins: 'searchreplace autoresize link image code table', | ||
| 203 | + autoresize_bottom_margin: 100, | ||
| 204 | + image_title: true, | ||
| 205 | + menubar: 'edit view insert format tools', | ||
| 206 | + // fontselect fontsizeselect | ||
| 207 | + toolbar: 'bold italic table', | ||
| 208 | + width: '100vw', | ||
| 209 | + paste_data_images: false, //允许粘贴图像 | ||
| 210 | + min_height: 300, | ||
| 211 | + // file_picker_callback: function (cb, value, meta) { | ||
| 212 | + // var input = document.createElement('input'); | ||
| 213 | + // input.setAttribute('type', 'file'); | ||
| 214 | + // if (meta.filetype == 'image') { // 图片上传控件的点击事件 | ||
| 215 | + // input.setAttribute('accept', 'image/~'); | ||
| 216 | + // } | ||
| 217 | + // input.onchange = function () { | ||
| 218 | + // upload({ | ||
| 219 | + // input, | ||
| 220 | + // onAdd: function (images) { | ||
| 221 | + // cb(images[0].src, { title: images[0].name }); | ||
| 222 | + // }, | ||
| 223 | + // }); | ||
| 224 | + // }; | ||
| 225 | + // input.click(); | ||
| 226 | + // }, | ||
| 227 | + // init_instance_callback: function (editor) { | ||
| 228 | + // editor.on('click', function (e) { | ||
| 229 | + // // tinymce 使用 <iframe> 实现功能,当点击 tinymce 的输入框时应该让表单设计器选中对应的字段, | ||
| 230 | + // // 所以需要把点击事件转发给 iframe 外面的 textarea | ||
| 231 | + // document.getElementById(editor.id).click(); | ||
| 232 | + // }); | ||
| 233 | + // }, | ||
| 234 | +}*/ | ||
| 196 | 235 | ||
| 197 | // 外部传递进来的数据变化 | 236 | // 外部传递进来的数据变化 |
| 198 | const myValue = computed({ | 237 | const myValue = computed({ |
| ... | @@ -234,7 +273,7 @@ watch( | ... | @@ -234,7 +273,7 @@ watch( |
| 234 | 273 | ||
| 235 | //初始化编辑器 | 274 | //初始化编辑器 |
| 236 | onMounted(() => { | 275 | onMounted(() => { |
| 237 | - tinymce.init({}); | 276 | + // tinymce.init({}); |
| 238 | }); | 277 | }); |
| 239 | 278 | ||
| 240 | // 设置值 | 279 | // 设置值 | ... | ... |
| 1 | <template> | 1 | <template> |
| 2 | <div class="tinymce-box"> | 2 | <div class="tinymce-box"> |
| 3 | - <TEditor ref="refEdit" ></TEditor> | 3 | + <TEditor ref="refEdit" readonly ></TEditor> |
| 4 | <div @click="getValue">获取内容</div> | 4 | <div @click="getValue">获取内容</div> |
| 5 | + <div @click="setValue">设置内容</div> | ||
| 5 | </div> | 6 | </div> |
| 6 | </template> | 7 | </template> |
| 7 | 8 | ||
| ... | @@ -14,10 +15,14 @@ | ... | @@ -14,10 +15,14 @@ |
| 14 | const getValue = () => { | 15 | const getValue = () => { |
| 15 | console.warn(refEdit.value.handleGetContent()); | 16 | console.warn(refEdit.value.handleGetContent()); |
| 16 | } | 17 | } |
| 18 | + | ||
| 19 | + const setValue = () => { | ||
| 20 | + refEdit.value.handleSetContent('<p>test</p>') | ||
| 21 | + } | ||
| 17 | </script> | 22 | </script> |
| 18 | 23 | ||
| 19 | <style> | 24 | <style> |
| 20 | .tinymce-box { | 25 | .tinymce-box { |
| 21 | - width: 200px; | 26 | + width: 100%; |
| 22 | } | 27 | } |
| 23 | </style> | 28 | </style> | ... | ... |
| ... | @@ -375,12 +375,12 @@ | ... | @@ -375,12 +375,12 @@ |
| 375 | estree-walker "^2.0.2" | 375 | estree-walker "^2.0.2" |
| 376 | picomatch "^2.3.1" | 376 | picomatch "^2.3.1" |
| 377 | 377 | ||
| 378 | -"@tinymce/tinymce-vue@^5": | 378 | +"@tinymce/tinymce-vue@4.0.7": |
| 379 | - version "5.1.1" | 379 | + version "4.0.7" |
| 380 | - resolved "https://mirrors.cloud.tencent.com/npm/@tinymce/tinymce-vue/-/tinymce-vue-5.1.1.tgz#0879787e07833a4316b2eaf0417c7c6a2abce86b" | 380 | + resolved "https://mirrors.cloud.tencent.com/npm/@tinymce/tinymce-vue/-/tinymce-vue-4.0.7.tgz#811dd87a2a9f70e60c43c2d9d932771c0c8b4677" |
| 381 | - integrity sha512-iO57HOWesFOhsaqjA5Ea6sDvQBmJJH3/dq00Uvg7metlct2kLF+ctRgoDsetLt6gmeZ7COPftr814/XzqnJ/dg== | 381 | + integrity sha512-1esB8wGWrjPCY+rK8vy3QB1cxwXo7HLJWuNrcyPl6LOVR+QJjub0OiV/C+TUEsLN6OpCtRv+QnIqMC5vXz783Q== |
| 382 | dependencies: | 382 | dependencies: |
| 383 | - tinymce "^6.0.0 || ^5.5.1" | 383 | + tinymce "^5.5.0" |
| 384 | 384 | ||
| 385 | "@types/estree@^1.0.0": | 385 | "@types/estree@^1.0.0": |
| 386 | version "1.0.0" | 386 | version "1.0.0" |
| ... | @@ -3370,15 +3370,10 @@ through@^2.3.8: | ... | @@ -3370,15 +3370,10 @@ through@^2.3.8: |
| 3370 | resolved "https://mirrors.cloud.tencent.com/npm/through/-/through-2.3.8.tgz" | 3370 | resolved "https://mirrors.cloud.tencent.com/npm/through/-/through-2.3.8.tgz" |
| 3371 | integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= | 3371 | integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= |
| 3372 | 3372 | ||
| 3373 | -"tinymce@^6.0.0 || ^5.5.1": | 3373 | +tinymce@5.10.9, tinymce@^5.5.0: |
| 3374 | - version "6.8.4" | 3374 | + version "5.10.9" |
| 3375 | - resolved "https://mirrors.cloud.tencent.com/npm/tinymce/-/tinymce-6.8.4.tgz#53e1313ebfe5524b24c0fa45937d51fda058632d" | 3375 | + resolved "https://mirrors.cloud.tencent.com/npm/tinymce/-/tinymce-5.10.9.tgz#1dfacb3231c71a688d90ff44a0b3f2e91b3b9edf" |
| 3376 | - integrity sha512-okoJyxuPv1gzASxQDNgQbnUXOdAIyoOSXcXcZZu7tiW0PSKEdf3SdASxPBupRj+64/E3elHwVRnzSdo82Emqbg== | 3376 | + integrity sha512-5bkrors87X9LhYX2xq8GgPHrIgJYHl87YNs+kBcjQ5I3CiUgzo/vFcGvT3MZQ9QHsEeYMhYO6a5CLGGffR8hMg== |
| 3377 | - | ||
| 3378 | -tinymce@^7.2.1: | ||
| 3379 | - version "7.2.1" | ||
| 3380 | - resolved "https://mirrors.cloud.tencent.com/npm/tinymce/-/tinymce-7.2.1.tgz#9b4f6b5a0fa647e2953c174ac69aa47483683332" | ||
| 3381 | - integrity sha512-ADd1cvdIuq6NWyii0ZOZRuu+9sHIdQfcRNWBcBps2K8vy7OjlRkX6iw7zz1WlL9kY4z4L1DvIP+xOrVX/46aHA== | ||
| 3382 | 3377 | ||
| 3383 | tmp@~0.2.1: | 3378 | tmp@~0.2.1: |
| 3384 | version "0.2.1" | 3379 | version "0.2.1" | ... | ... |
-
Please register or login to post a comment