Tinydemo.vue 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  1. <!-- -->
  2. <template>
  3. <div class="Big-Book-Record" v-if="curQue">
  4. <!-- <img
  5. src="../../../assets/adult/maikefeng-red.png"
  6. class="Big-Book-Record-icon"
  7. /> -->
  8. <div class="adult-book-input-item">
  9. <span class="adult-book-lable">标题:</span>
  10. <el-input
  11. class="adult-book-input"
  12. type="textarea"
  13. autosize
  14. placeholder="请输入标题"
  15. v-model="curQue.title"
  16. @blur="curQue.title = curQue.title.trim()"
  17. ></el-input>
  18. </div>
  19. <div class="adult-book-input-item">
  20. <span class="adult-book-lable">图片:</span>
  21. <Upload :changeFillId="changeImage" :uploadType="'image'" />
  22. </div>
  23. <ul v-if="curQue.img_list.length > 0" class="uploadArt_list">
  24. <li
  25. v-for="(artItem, artIndex) in curQue.img_list"
  26. :key="'articleImgList' + artIndex"
  27. >
  28. <span class="art_name">{{ artItem.name }}</span>
  29. <span v-if="artItem.url" :id="'file' + artIndex" class="art_url"
  30. >{{ artItem.url }}
  31. <i class="el-icon-document-copy" @click="copyHttp('file' + artIndex)"
  32. /></span>
  33. </li>
  34. </ul>
  35. <div class="main">
  36. <Editor id="tinydemo" v-model="curQue.con" :init="init" />
  37. </div>
  38. </div>
  39. </template>
  40. <script>
  41. import Upload from "../common/Upload.vue";
  42. import tinymce from "tinymce/tinymce";
  43. import Editor from "@tinymce/tinymce-vue";
  44. import "tinymce/icons/default/icons";
  45. import "tinymce/themes/silver";
  46. // 引入富文本编辑器主题的js和css
  47. import "tinymce/themes/silver/theme.min";
  48. import "tinymce/skins/ui/oxide/skin.min.css";
  49. // 扩展插件
  50. // import "tinymce/plugins/"
  51. import "tinymce/plugins/image";
  52. import "tinymce/plugins/link";
  53. import "tinymce/plugins/code";
  54. import "tinymce/plugins/table";
  55. import "tinymce/plugins/lists";
  56. import "tinymce/plugins/wordcount"; // 字数统计插件
  57. import "tinymce/plugins/media"; // 插入视频插件
  58. import "tinymce/plugins/template"; // 模板插件
  59. import "tinymce/plugins/fullscreen";
  60. import "tinymce/plugins/paste";
  61. import "tinymce/plugins/preview";
  62. import "tinymce/plugins/contextmenu";
  63. import "tinymce/plugins/textcolor";
  64. import "tinymce/plugins/colorpicker";
  65. import { CopyToClipboard } from "@/utils/auth";
  66. export default {
  67. components: { Editor, Upload },
  68. props: ["curQue", "fn_data", "changeCurQue"],
  69. data() {
  70. return {
  71. init: {
  72. language_url: `/tinymce/langs/zh_CN.js`,
  73. language: "zh_CN",
  74. skin_url: "/tinymce/skins/ui/oxide",
  75. height: 500,
  76. plugins: "link lists image code table wordcount preview",
  77. toolbar:
  78. "preview bold italic underline strikethrough | fontsizeselect | forecolor backcolor | alignleft aligncenter alignright alignjustify | bullist numlist | outdent indent blockquote | undo redo | link unlink image code | removeformat",
  79. branding: false,
  80. }, //富文本初始化
  81. data_structure: {
  82. type: "tinydemo",
  83. name: "富文本",
  84. title: "",
  85. con: "",
  86. img_list: [],
  87. },
  88. };
  89. },
  90. computed: {},
  91. watch: {},
  92. //方法集合
  93. methods: {
  94. copyHttp(id) {
  95. CopyToClipboard(id, this);
  96. },
  97. changeImage(fileList, item, index) {
  98. console.log(fileList);
  99. const articleImgList = JSON.parse(JSON.stringify(fileList));
  100. const articleImgRes = [];
  101. articleImgList.forEach((item) => {
  102. if (item.response) {
  103. const obj = {
  104. name: item.name,
  105. url: item.response.file_info_list[0].file_url,
  106. id: "[FID##" + item.response.file_info_list[0].file_id + "##FID]",
  107. };
  108. articleImgRes.push(obj);
  109. }
  110. });
  111. this.curQue.img_list = JSON.parse(JSON.stringify(articleImgRes));
  112. },
  113. },
  114. //生命周期 - 创建完成(可以访问当前this实例)
  115. created() {
  116. if (!this.curQue) {
  117. this.changeCurQue(this.data_structure);
  118. }
  119. },
  120. //生命周期 - 挂载完成(可以访问DOM元素)
  121. mounted() {
  122. tinymce.init({});
  123. },
  124. beforeCreate() {}, //生命周期 - 创建之前
  125. beforeMount() {}, //生命周期 - 挂载之前
  126. beforeUpdate() {}, //生命周期 - 更新之前
  127. updated() {}, //生命周期 - 更新之后
  128. beforeDestroy() {}, //生命周期 - 销毁之前
  129. destroyed() {}, //生命周期 - 销毁完成
  130. activated() {}, //如果页面有keep-alive缓存功能,这个函数会触发
  131. };
  132. </script>
  133. <style lang='scss' scoped>
  134. //@import url(); 引入公共css类
  135. .Big-Book-Record {
  136. &-icon {
  137. width: 48px;
  138. height: 48px;
  139. }
  140. .Big-Book-hanzi-option {
  141. margin-top: 20px;
  142. }
  143. .main {
  144. margin-top: 10px;
  145. }
  146. .addoption {
  147. width: 148px;
  148. height: 40px;
  149. background: #f3f3f3;
  150. border: 1px dashed rgba(0, 0, 0, 0.15);
  151. box-sizing: border-box;
  152. border-radius: 4px;
  153. text-align: center;
  154. line-height: 40px;
  155. cursor: pointer;
  156. font-size: 14px;
  157. color: #000000;
  158. }
  159. .Big-Book-con {
  160. margin-bottom: 10px;
  161. display: flex;
  162. align-items: center;
  163. }
  164. .uploadArt_list {
  165. > li {
  166. min-height: 28px;
  167. .art_name {
  168. margin-right: 10px;
  169. }
  170. }
  171. }
  172. }
  173. </style>