fa-editor.vue 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491
  1. <template>
  2. <view class="container">
  3. <view class="toolbar" @touchend.stop="toolBarClick">
  4. <view class="iconfont icon-charutupian" @touchend.stop="insertImage"></view>
  5. <view :class="'iconfont icon-format-header-1 ' + (formats.header === 1 ? 'ql-active' : '')" data-name="header" :data-value="1"></view>
  6. <view :class="'iconfont icon-format-header-2 ' + (formats.header === 2 ? 'ql-active' : '')" data-name="header" :data-value="2"></view>
  7. <view :class="'iconfont icon-format-header-3 ' + (formats.header === 3 ? 'ql-active' : '')" data-name="header" :data-value="3"></view>
  8. <view :class="'iconfont icon-format-header-4 ' + (formats.header === 4 ? 'ql-active' : '')" data-name="header" :data-value="4"></view>
  9. <view :class="'iconfont icon-format-header-5 ' + (formats.header === 5 ? 'ql-active' : '')" data-name="header" :data-value="5"></view>
  10. <view :class="'iconfont icon-format-header-6 ' + (formats.header === 6 ? 'ql-active' : '')" data-name="header" :data-value="6"></view>
  11. <view :class="'iconfont icon-zitijiacu ' + (formats.bold ? 'ql-active' : '')" data-name="bold"></view>
  12. <view :class="'iconfont icon-zitishanchuxian ' + (formats.strike ? 'ql-active' : '')" data-name="strike"></view>
  13. <view :class="'iconfont icon-zitixieti ' + (formats.italic ? 'ql-active' : '')" data-name="italic"></view>
  14. <view :class="'iconfont icon-zuoduiqi ' + (formats.align === 'left' ? 'ql-active' : '')" data-name="align" data-value="left"></view>
  15. <view :class="'iconfont icon-juzhongduiqi ' + (formats.align === 'center' ? 'ql-active' : '')" data-name="align" data-value="center"></view>
  16. <view :class="'iconfont icon-youduiqi ' + (formats.align === 'right' ? 'ql-active' : '')" data-name="align" data-value="right"></view>
  17. <view :class="'iconfont icon-zuoyouduiqi ' + (formats.align === 'justify' ? 'ql-active' : '')" data-name="align" data-value="justify"></view>
  18. <view :class="'iconfont icon-line-height ' + (formats.lineHeight ? 'ql-active' : '')" data-name="lineHeight" data-value="2"></view>
  19. <view :class="'iconfont icon-Character-Spacing ' + (formats.letterSpacing ? 'ql-active' : '')" data-name="letterSpacing" data-value="2em"></view>
  20. <view :class="'iconfont icon-722bianjiqi_duanqianju ' + (formats.marginTop ? 'ql-active' : '')" data-name="marginTop" data-value="20px"></view>
  21. <view class="iconfont icon-clearedformat" @tap="removeFormat"></view>
  22. <view :class="'iconfont icon-font ' + (formats.fontFamily ? 'ql-active' : '')" data-name="fontFamily" data-value="Pacifico"></view>
  23. <view :class="'iconfont icon-fontsize ' + (formats.fontSize === '24px' ? 'ql-active' : '')" data-name="fontSize" data-value="24px"></view>
  24. <view class="iconfont icon-date" @tap="insertDate"></view>
  25. <view class="iconfont icon-undo" @tap="undo"></view>
  26. <view class="iconfont icon-redo" @tap="redo"></view>
  27. <view :class="'iconfont icon-zitixiahuaxian ' + (formats.underline ? 'ql-active' : '')" data-name="underline"></view>
  28. <view class="iconfont icon--checklist" data-name="list" data-value="check"></view>
  29. <view :class="'iconfont icon-youxupailie ' + (formats.list === 'ordered' ? 'ql-active' : '')" data-name="list" data-value="ordered"></view>
  30. <view :class="'iconfont icon-wuxupailie ' + (formats.list === 'bullet' ? 'ql-active' : '')" data-name="list" data-value="bullet"></view>
  31. <view class="iconfont icon-outdent" data-name="indent" data-value="-1"></view>
  32. <view class="iconfont icon-indent" data-name="indent" data-value="+1"></view>
  33. <view class="iconfont icon-fengexian" @tap="insertviewider"></view>
  34. <view :class="'iconfont icon-zitixiabiao ' + (formats.script === 'sub' ? 'ql-active' : '')" data-name="script" data-value="sub"></view>
  35. <view :class="'iconfont icon-zitishangbiao ' + (formats.script === 'super' ? 'ql-active' : '')" data-name="script" data-value="super"></view>
  36. <!-- <view class="iconfont icon-quanping"></view> -->
  37. <view class="iconfont icon-shanchu" @tap="clear"></view>
  38. <!-- <view :class="'iconfont icon-direction-rtl ' + (formats.direction === 'rtl' ? 'ql-active' : '')" data-name="direction" data-value="rtl"></view> -->
  39. </view>
  40. <editor
  41. :id="editorId"
  42. show-img-size
  43. :read-only="isEdit"
  44. show-img-resize
  45. show-img-toolbar
  46. class="ql-container"
  47. :placeholder="placeholder"
  48. @statuschange="onStatusChange"
  49. @ready="onEditorReady"
  50. @input="eventhandle"
  51. ></editor>
  52. </view>
  53. </template>
  54. <script>
  55. import Emitter from '@/uview-ui/libs/util/emitter.js';
  56. export default {
  57. name: 'fa-editor',
  58. mixins: [Emitter],
  59. props: {
  60. value: {
  61. type: String,
  62. default: ''
  63. },
  64. type: {
  65. type: String,
  66. default: 'html'
  67. },
  68. html: {
  69. type: String,
  70. default: ''
  71. }
  72. },
  73. data() {
  74. return {
  75. isEdit: false,
  76. placeholder: '开始输入...',
  77. editorId: this.$u.guid(10),
  78. formats: {}
  79. };
  80. },
  81. methods: {
  82. onStatusChange(e) {
  83. this.formats = e.detail;
  84. },
  85. onEditorReady() {
  86. let that = this;
  87. uni.createSelectorQuery()
  88. .in(this)
  89. .select(`#${that.editorId}`)
  90. .context(function(res) {
  91. that.editorCtx = res.context;
  92. //初始化数据
  93. if (that.html) {
  94. res.context.setContents({
  95. html: that.html,
  96. complete: function(e) {
  97. console.log(e);
  98. }
  99. });
  100. }
  101. })
  102. .exec();
  103. },
  104. toolBarClick(e) {
  105. let { name, value } = e.target.dataset;
  106. if (!name) return;
  107. this.editorCtx.format(name, value);
  108. },
  109. undo() {
  110. this.editorCtx.undo();
  111. },
  112. redo() {
  113. this.editorCtx.redo();
  114. },
  115. blur() {
  116. this.editorCtx.blur();
  117. },
  118. removeFormat() {
  119. this.editorCtx.removeFormat();
  120. },
  121. //插入横线
  122. insertDivider() {
  123. this.editorCtx.insertviewider({
  124. success: function() {
  125. console.log('insert divider success');
  126. }
  127. });
  128. },
  129. //插入时间
  130. insertDate() {
  131. const date = new Date();
  132. const formatDate = `${date.getFullYear()}/${date.getMonth() + 1}/${date.getDate()}`;
  133. this.editorCtx.insertText({
  134. text: formatDate
  135. });
  136. },
  137. clear() {
  138. this.editorCtx.clear({
  139. success: function(res) {
  140. console.log('clear success');
  141. }
  142. });
  143. },
  144. insertImage() {
  145. uni.chooseImage({
  146. count: 9,
  147. success: chooseImageRes => {
  148. const tempFilePaths = chooseImageRes.tempFilePaths;
  149. tempFilePaths.map(async item => {
  150. try {
  151. let res = await this.$api.goUpload({ filePath: item });
  152. this.editorCtx.insertImage({
  153. src: res.data.fullurl,
  154. data: {
  155. id: 'abcd',
  156. role: 'god'
  157. },
  158. width: '80%',
  159. success: function() {
  160. console.log('insert image success');
  161. }
  162. });
  163. } catch (e) {
  164. this.$u.toast('上传失败!');
  165. }
  166. });
  167. }
  168. });
  169. },
  170. getData() {
  171. return new Promise((resolve, reject) => {
  172. this.editorCtx.getContents({
  173. success: function(res) {
  174. resolve(res);
  175. },
  176. fail: function(err) {
  177. reject(err);
  178. }
  179. });
  180. });
  181. },
  182. eventhandle(e) {
  183. console.log(e);
  184. let value = this.type == 'html' ? e.detail.html : e.detail.text;
  185. this.$emit('input', value);
  186. setTimeout(() => {
  187. this.dispatch('u-form-item', 'on-form-blur', value);
  188. }, 50);
  189. }
  190. }
  191. };
  192. </script>
  193. <style lang="scss" scoped>
  194. @font-face {
  195. font-family: 'iconfont';
  196. src: url('//at.alicdn.com/t/font_945958_zfsfjju1dim.eot?t=1547618146468'); /* IE9 */
  197. src: url('//at.alicdn.com/t/font_945958_zfsfjju1dim.eot?t=1547618146468#iefix') format('embedded-opentype'),
  198. /* IE6-IE8 */
  199. url('data:application/x-font-woff2;charset=utf-8;base64,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')
  200. format('woff2'),
  201. url('//at.alicdn.com/t/font_945958_zfsfjju1dim.woff?t=1547618146468') format('woff'),
  202. url('//at.alicdn.com/t/font_945958_zfsfjju1dim.ttf?t=1547618146468') format('truetype'),
  203. /* chrome, firefox, opera, Safari, Android, iOS 4.2+ */ url('//at.alicdn.com/t/font_945958_zfsfjju1dim.svg?t=1547618146468#iconfont') format('svg'); /* iOS 4.1- */
  204. }
  205. .iconfont {
  206. font-family: 'iconfont' !important;
  207. font-size: 16px;
  208. font-style: normal;
  209. -webkit-font-smoothing: antialiased;
  210. -moz-osx-font-smoothing: grayscale;
  211. }
  212. .icon-redo:before {
  213. content: '\e627';
  214. }
  215. .icon-undo:before {
  216. content: '\e633';
  217. }
  218. .icon-indent:before {
  219. content: '\eb28';
  220. }
  221. .icon-outdent:before {
  222. content: '\e6e8';
  223. }
  224. .icon-fontsize:before {
  225. content: '\e6fd';
  226. }
  227. .icon-format-header-1:before {
  228. content: '\e860';
  229. }
  230. .icon-format-header-4:before {
  231. content: '\e863';
  232. }
  233. .icon-format-header-5:before {
  234. content: '\e864';
  235. }
  236. .icon-format-header-6:before {
  237. content: '\e865';
  238. }
  239. .icon-clearup:before {
  240. content: '\e64d';
  241. }
  242. .icon-preview:before {
  243. content: '\e631';
  244. }
  245. .icon-date:before {
  246. content: '\e63e';
  247. }
  248. .icon-fontbgcolor:before {
  249. content: '\e678';
  250. }
  251. .icon-clearedformat:before {
  252. content: '\e67e';
  253. }
  254. .icon-font:before {
  255. content: '\e684';
  256. }
  257. .icon-723bianjiqi_duanhouju:before {
  258. content: '\e65f';
  259. }
  260. .icon-722bianjiqi_duanqianju:before {
  261. content: '\e660';
  262. }
  263. .icon-text_color:before {
  264. content: '\e72c';
  265. }
  266. .icon-format-header-2:before {
  267. content: '\e75c';
  268. }
  269. .icon-format-header-3:before {
  270. content: '\e75d';
  271. }
  272. .icon--checklist:before {
  273. content: '\e664';
  274. }
  275. .icon-baocun:before {
  276. content: '\ec09';
  277. }
  278. .icon-line-height:before {
  279. content: '\e7f8';
  280. }
  281. .icon-quanping:before {
  282. content: '\ec13';
  283. }
  284. .icon-direction-rtl:before {
  285. content: '\e66e';
  286. }
  287. .icon-direction-ltr:before {
  288. content: '\e66d';
  289. }
  290. .icon-selectall:before {
  291. content: '\e62b';
  292. }
  293. .icon-fuzhi:before {
  294. content: '\ec7a';
  295. }
  296. .icon-shanchu:before {
  297. content: '\ec7b';
  298. }
  299. .icon-bianjisekuai:before {
  300. content: '\ec7c';
  301. }
  302. .icon-fengexian:before {
  303. content: '\ec7f';
  304. }
  305. .icon-dianzan:before {
  306. content: '\ec80';
  307. }
  308. .icon-charulianjie:before {
  309. content: '\ec81';
  310. }
  311. .icon-charutupian:before {
  312. content: '\ec82';
  313. }
  314. .icon-wuxupailie:before {
  315. content: '\ec83';
  316. }
  317. .icon-juzhongduiqi:before {
  318. content: '\ec84';
  319. }
  320. .icon-yinyong:before {
  321. content: '\ec85';
  322. }
  323. .icon-youxupailie:before {
  324. content: '\ec86';
  325. }
  326. .icon-youduiqi:before {
  327. content: '\ec87';
  328. }
  329. .icon-zitidaima:before {
  330. content: '\ec88';
  331. }
  332. .icon-xiaolian:before {
  333. content: '\ec89';
  334. }
  335. .icon-zitijiacu:before {
  336. content: '\ec8a';
  337. }
  338. .icon-zitishanchuxian:before {
  339. content: '\ec8b';
  340. }
  341. .icon-zitishangbiao:before {
  342. content: '\ec8c';
  343. }
  344. .icon-zitibiaoti:before {
  345. content: '\ec8d';
  346. }
  347. .icon-zitixiahuaxian:before {
  348. content: '\ec8e';
  349. }
  350. .icon-zitixieti:before {
  351. content: '\ec8f';
  352. }
  353. .icon-zitiyanse:before {
  354. content: '\ec90';
  355. }
  356. .icon-zuoduiqi:before {
  357. content: '\ec91';
  358. }
  359. .icon-zitiyulan:before {
  360. content: '\ec92';
  361. }
  362. .icon-zitixiabiao:before {
  363. content: '\ec93';
  364. }
  365. .icon-zuoyouduiqi:before {
  366. content: '\ec94';
  367. }
  368. .icon-duigoux:before {
  369. content: '\ec9e';
  370. }
  371. .icon-guanbi:before {
  372. content: '\eca0';
  373. }
  374. .icon-shengyin_shiti:before {
  375. content: '\eca5';
  376. }
  377. .icon-Character-Spacing:before {
  378. content: '\e964';
  379. }
  380. .input-content {
  381. width: 100%;
  382. }
  383. .input-content textarea {
  384. padding: 5%;
  385. font-size: 30rpx;
  386. line-height: 1.5;
  387. width: 90%;
  388. border: 1px solid #eee;
  389. }
  390. .container {
  391. min-height: 600rpx;
  392. width: 100%;
  393. border: 1px solid #e0e0e0;
  394. .ql-container {
  395. box-sizing: border-box;
  396. width: 100%;
  397. height: 100%;
  398. font-size: 16px;
  399. line-height: 1.5;
  400. overflow: auto;
  401. padding: 5rpx 20rpx;
  402. word-break: break-word;
  403. }
  404. .toolbar {
  405. width: 100%;
  406. border: none;
  407. .iconfont {
  408. display: inline-block;
  409. cursor: pointer;
  410. height: 60rpx;
  411. width: 60rpx;
  412. margin: 13rpx 0;
  413. font-size: 33rpx;
  414. color: #000;
  415. text-align: center;
  416. background: none;
  417. border: none;
  418. outline: none;
  419. line-height: 2.2;
  420. vertical-align: middle;
  421. }
  422. .ql-active {
  423. background-color: #ecf5ff;
  424. border: 1px solid #eee;
  425. }
  426. }
  427. }
  428. </style>