askbot-dragon 1.7.65-beta → 1.7.67-beta

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (95) hide show
  1. package/README.md +27 -27
  2. package/babel.config.js +6 -6
  3. package/dragon.iml +7 -7
  4. package/package.json +57 -57
  5. package/public/index.html +73 -73
  6. package/src/App.vue +31 -31
  7. package/src/api/index.js +1 -1
  8. package/src/api/mock.http +2 -2
  9. package/src/api/requestUrl.js +185 -185
  10. package/src/assets/js/AliyunlssUtil.js +141 -141
  11. package/src/assets/js/Base64Util.js +22 -22
  12. package/src/assets/js/common.js +252 -252
  13. package/src/assets/js/hammer.js +100 -100
  14. package/src/assets/js/script.js +36 -36
  15. package/src/assets/less/common.css +6773 -6773
  16. package/src/assets/less/converSationContainer/common.less +199 -199
  17. package/src/assets/less/converSationContainer/converSatonContainer.less +493 -493
  18. package/src/assets/less/iconfont.css +37 -37
  19. package/src/assets/less/ticketMessage.less +294 -294
  20. package/src/components/ActionAlertIframe.vue +178 -178
  21. package/src/components/AiGuide.vue +434 -434
  22. package/src/components/AnswerDocknowledge.vue +1203 -1203
  23. package/src/components/AnswerVoice.vue +285 -285
  24. package/src/components/AskIFrame.vue +15 -15
  25. package/src/components/ConversationContainer.vue +10764 -10764
  26. package/src/components/FileType.vue +86 -86
  27. package/src/components/Message.vue +27 -27
  28. package/src/components/MyEditor.vue +342 -342
  29. package/src/components/QwFeedback.vue +302 -302
  30. package/src/components/actionSatisfaction.vue +107 -107
  31. package/src/components/actionSendToBot.vue +62 -62
  32. package/src/components/answerDissatisfaction.vue +62 -62
  33. package/src/components/answerRadio.vue +259 -259
  34. package/src/components/ask-components/DissatisfactionOptions.vue +57 -57
  35. package/src/components/ask-components/Msgloading.vue +37 -37
  36. package/src/components/ask-components/SatisfactionV2.vue +15 -15
  37. package/src/components/askVideo.vue +162 -162
  38. package/src/components/assetDetails.vue +378 -378
  39. package/src/components/assetMessage.vue +229 -229
  40. package/src/components/associationIntention.vue +378 -378
  41. package/src/components/attachmentPreview.vue +90 -90
  42. package/src/components/botActionSatisfactor.vue +68 -68
  43. package/src/components/chatContent.vue +513 -513
  44. package/src/components/feedBack.vue +136 -136
  45. package/src/components/fielListView.vue +351 -351
  46. package/src/components/file/AliyunOssComponents.vue +108 -108
  47. package/src/components/formTemplate.vue +3512 -3512
  48. package/src/components/imgView.vue +31 -31
  49. package/src/components/intelligentSummary.vue +234 -234
  50. package/src/components/kkview.vue +1138 -1138
  51. package/src/components/loadingProcess.vue +164 -164
  52. package/src/components/markDownText.vue +357 -357
  53. package/src/components/message/ActionAlertIframe.vue +112 -112
  54. package/src/components/message/ShopMessage.vue +164 -164
  55. package/src/components/message/TextMessage.vue +928 -928
  56. package/src/components/message/TicketMessage.vue +201 -201
  57. package/src/components/message/swiper/index.js +4 -4
  58. package/src/components/message/swiper/ticketSwiper.vue +503 -503
  59. package/src/components/message/swiper/ticketSwiperItem.vue +61 -61
  60. package/src/components/msgLoading.vue +231 -231
  61. package/src/components/myPopup.vue +73 -73
  62. package/src/components/newPdfPosition.vue +877 -877
  63. package/src/components/pagination.vue +128 -128
  64. package/src/components/pdfPosition.vue +1523 -1523
  65. package/src/components/popup.vue +228 -228
  66. package/src/components/preview/docView.vue +113 -113
  67. package/src/components/preview/excelView.vue +190 -190
  68. package/src/components/preview/newPositionPreview.vue +384 -369
  69. package/src/components/preview/pdfView.vue +824 -824
  70. package/src/components/previewDoc.vue +252 -252
  71. package/src/components/previewPdf.vue +1087 -1087
  72. package/src/components/receiverMessagePlatform.vue +69 -69
  73. package/src/components/recommend.vue +80 -80
  74. package/src/components/selector/hOption.vue +20 -20
  75. package/src/components/selector/hSelector.vue +199 -199
  76. package/src/components/selector/hWrapper.vue +216 -216
  77. package/src/components/senderMessagePlatform.vue +58 -58
  78. package/src/components/source/BotMessage.vue +24 -24
  79. package/src/components/source/CustomMessage.vue +24 -24
  80. package/src/components/test.vue +260 -260
  81. package/src/components/tree.vue +307 -307
  82. package/src/components/utils/AliyunIssUtil.js +103 -103
  83. package/src/components/utils/ckeditor.js +185 -185
  84. package/src/components/utils/format_date.js +25 -25
  85. package/src/components/utils/index.js +6 -6
  86. package/src/components/utils/math_utils.js +29 -29
  87. package/src/components/voiceComponent.vue +119 -119
  88. package/src/components/welcomeKnowledgeFile.vue +347 -347
  89. package/src/components/welcomeLlmCard.vue +144 -144
  90. package/src/components/welcomeSuggest.vue +97 -97
  91. package/src/locales/cn.json +95 -95
  92. package/src/locales/en.json +95 -95
  93. package/src/locales/jp.json +72 -72
  94. package/src/main.js +76 -76
  95. package/vue.config.js +54 -54
@@ -1,343 +1,343 @@
1
- <template>
2
- <div class="my_editor">
3
- <div class="editor_head" v-if="havToolbar">
4
- <button class="button" @click="handleUpdate">
5
- <svg
6
- t="1703581982515"
7
- class="icon"
8
- viewBox="0 0 1024 1024"
9
- version="1.1"
10
- xmlns="http://www.w3.org/2000/svg"
11
- p-id="74840"
12
- width="200"
13
- height="200"
14
- >
15
- <path
16
- d="M566.839921 866.857572V983.050833c0 22.522042-7.677969 33.271198-29.688146 37.877979-18.427125 4.094917-37.366115 3.583052-55.281375-2.047458-17.403396-5.63051-24.057636-15.867802-24.057636-33.271198v-410.003534c0-7.166104-1.535594-9.213563-9.213562-9.213562-80.36274 0.511865-330.152658 0-410.515399 0-19.450854 0-29.688146-7.166104-34.294927-26.105094-5.118646-19.450854-5.118646-39.925438 0.511865-58.864427 5.118646-16.891531 15.355938-23.545771 32.759333-23.545771h412.562857c7.166104 0 8.189833-1.535594 8.189833-8.189834V41.219994c0-25.081365 7.166104-34.806792 32.247469-38.901708 18.93899-3.583052 38.389844-3.583052 56.305105 4.094917 13.820344 5.63051 20.474583 15.867802 20.474583 30.711875v412.562856c0 6.65424 1.535594 8.189833 8.189833 8.189834h406.932346c23.545771 0 33.783063 7.677969 38.901709 30.711875 4.094917 18.427125 4.094917 37.366115-2.047458 55.281375-5.118646 16.379667-15.355938 23.033906-32.247469 23.033907h-410.515398c-7.166104 0-10.237292 1.023729-9.725428 9.725427 0.511865 40.437302 0.511865 249.789918 0.511865 290.22722z"
17
- p-id="74841"
18
- />
19
- </svg>
20
- {{$t('dragonCommon.uploadImgFile')}}
21
- </button>
22
- </div>
23
- <div
24
- class="editor_content"
25
- id="my_editor_content"
26
- v-html="text"
27
- contenteditable
28
- ref="editorContent"
29
- @focus="ischecked = true"
30
- @blur="blurFn"
31
- @input="changeInput"
32
- :data-placeholder="placeholder"
33
- ></div>
34
- </div>
35
- </template>
36
-
37
- <script>
38
- import { v4 as uuidv4 } from "uuid";
39
- import { multipartUpload, ossFileUrl } from "../assets/js/AliyunlssUtil";
40
-
41
- export default {
42
- props: ["value", "placeholder", "havToolbar"],
43
- data () {
44
- return {
45
- ischecked: false,
46
- text: ''
47
- }
48
- },
49
- watch: {
50
- value: {
51
- handler () {
52
- // 解决光标跳动BUG
53
- if (!this.ischecked) {
54
- this.text = this.value
55
- }
56
- },
57
- deep: true,
58
- immediate: true
59
- }
60
- },
61
- methods: {
62
- blurFn (e) {
63
- this.ischecked = false
64
- this.text = this.value
65
- e.view.blur()
66
- },
67
- changeInput (e) {
68
- this.$emit("input", e.target.innerHTML)
69
- },
70
- handleUpdate () {
71
- let inputObj = document.createElement('input')
72
- inputObj.setAttribute('id', '_ef');
73
- inputObj.setAttribute('type', 'file');
74
- inputObj.setAttribute('accept', '*')
75
- inputObj.setAttribute('capture', 'camcorder')
76
- inputObj.setAttribute('multiple', true)
77
- inputObj.setAttribute("style", 'visibility:hidden');
78
- document.body.appendChild(inputObj);
79
- inputObj.click();
80
- inputObj.onchange = () => {
81
- // 循环上传文件
82
- let files = inputObj.files;
83
- for (let index = 0; index < files.length; index++) {
84
- const file = files[index];
85
- let uid = uuidv4()
86
- // let command = this.editor.commands.get("insertAskComponent");
87
- // const listeners = this.editor.config.get('askPluginListener');
88
- // let beforeButtonInsert = findListener(listeners, "UPLOAD");
89
- if (file.type.includes('image')) {
90
- // if (this.editor.uploadImg) {
91
- // this.editor.uploadImg.push(uid)
92
- // } else {
93
- // this.editor.uploadImg = []
94
- // this.editor.uploadImg.push(uid)
95
- // }
96
- this.imgUploadCallback(file, uid, index)
97
- } else {
98
- this.fileUploadCallback(file, uid)
99
- }
100
- }
101
- }
102
- },
103
- appenNode (type, uid, value) {
104
- let node = document.createElement(type)
105
- node.setAttribute("uid", uid)
106
- if (type == 'img') {
107
- node.setAttribute("src", value)
108
- node.setAttribute("class", 'image')
109
- setTimeout(() => {
110
- this.appenNode('div', '', '')
111
- })
112
- }
113
- if (type == 'div' && uid) {
114
- node.innerText = value
115
- node.setAttribute("class", 'loading')
116
- setTimeout(() => {
117
- this.appenNode('div', '', '')
118
- })
119
- }
120
- if (type == 'div' && !uid) {
121
- node.setAttribute("class", 'wrap')
122
- }
123
- this.$refs.editorContent.appendChild(node)
124
- },
125
- deleteNode (uid) {
126
- console.log(uid);
127
- try {
128
- let node = document.querySelector("[uid=" + uid + ']')
129
- if (node) {
130
- this.$refs.editorContent.removeChild(node)
131
- }
132
- } catch {
133
- console.error("未找到该节点");
134
- }
135
- },
136
- imgUploadCallback (file, uid, index) {
137
- console.log(file, uid, index);
138
- this.appenNode("div", "div" + index + uid, file.name + "正在上传,请稍后...")
139
- this.upload(file).then(res => {
140
- this.appenNode('img', "img" + index + uid, res.default)
141
- this.deleteNode("div" + index + uid)
142
- this.$emit("input", this.$refs.editorContent.innerHTML)
143
- })
144
- },
145
- upload (file) {
146
- return new Promise((resolve) => {
147
- this.uploadFile(file, resolve)
148
- })
149
- },
150
- uploadFile (file, resolve) {
151
- let imgInfo = {
152
- url: '',
153
- }
154
- let res = multipartUpload(
155
- file,
156
- null,
157
- imgInfo
158
- );
159
- res.then(resp => {
160
- imgInfo.url = ossFileUrl(resp.name)
161
- resolve({
162
- name: resp.name,
163
- default: imgInfo.url
164
- })
165
- })
166
- },
167
- fileUploadCallback (file, uid) {
168
- this.$emit("fileUploadCallback", {
169
- param: {
170
- uid: uid,
171
- type: 'pending',
172
- name: file.name
173
- }
174
- })
175
- this.upload(file).then(res => {
176
- this.$emit("fileUploadCallback", {
177
- param: {
178
- uid: uid,
179
- name: file.name,
180
- type: 'success',
181
- url: res.default
182
- }
183
- })
184
- this.$emit("input", this.$refs.editorContent.innerHTML)
185
- })
186
- },
187
-
188
- },
189
- mounted () {
190
- this.$nextTick(() => {
191
- let myEditorContent = this.$refs.editorContent
192
- console.log(myEditorContent, 'myEditorContent');
193
- myEditorContent.addEventListener("paste", (e) => {
194
- let { files } = e.clipboardData
195
- console.log(files, e.clipboardData, 'filesfilesfilesfiles');
196
- if (files.length > 0) {
197
- for (let index = 0; index < files.length; index++) {
198
- let uid = uuidv4()
199
- if (files[index].type.indexOf('image') != -1) {
200
- this.imgUploadCallback(files[index], uid, index)
201
- e.preventDefault();
202
- } else {
203
- this.fileUploadCallback(files[index], uid)
204
- e.preventDefault();
205
- }
206
- }
207
- }
208
- })
209
- myEditorContent.addEventListener("dragenter", function () {
210
- });
211
- myEditorContent.addEventListener("dragover", function (e) {
212
- e.preventDefault();
213
- });
214
- myEditorContent.addEventListener("drop", (e) => {
215
- e.preventDefault();
216
- let files = e.dataTransfer.files; // 这个就相当于文件上传组件
217
- if (files.length > 0) {
218
- for (let index = 0; index < files.length; index++) {
219
- let uid = uuidv4()
220
- if (files[index].type.indexOf('image') != -1) {
221
- this.imgUploadCallback(files[index], uid, index)
222
- e.preventDefault();
223
- } else {
224
- this.fileUploadCallback(files[index], uid)
225
- e.preventDefault();
226
- }
227
- }
228
- }
229
- }, false);
230
- })
231
-
232
- }
233
- }
234
- </script>
235
-
236
- <style lang="less" scoped>
237
- .my_editor {
238
- width: 100%;
239
- border: 1px solid #e0e6f7;
240
- border-radius: 9px !important;
241
- background: #ffffff;
242
- /deep/.editor_content {
243
- border-bottom-left-radius: 9px !important;
244
- border-bottom-right-radius: 9px !important;
245
- padding: 10px;
246
- box-sizing: border-box;
247
- min-height: 150px !important;
248
- font-size: 14px !important;
249
- outline: none;
250
- div {
251
- margin-bottom: 8px;
252
- white-space: pre-wrap;
253
- }
254
- .image {
255
- height: 140px;
256
- object-fit: contain;
257
- }
258
- // .image{
259
- // outline: 3px solid #366aff;
260
- // }
261
- .loading {
262
- background: rgba(0, 89, 255, 0.2);
263
- display: inline-block;
264
- padding: 2px 5px;
265
- border-radius: 3px;
266
- padding-left: 20px;
267
- position: relative;
268
- font-size: 12px;
269
- -webkit-user-modify: read-only;
270
- -moz-user-modify: read-only;
271
- }
272
- .loading::after {
273
- content: '';
274
- background-image: url(../assets/image/building.png);
275
- background-size: 100%;
276
- width: 15px;
277
- height: 15px;
278
- position: absolute;
279
- top: 3px;
280
- left: 2px;
281
- color: #366aff;
282
- -webkit-animation: rotate 1.5s linear infinite;
283
- animation: rotate 1.5s linear infinite;
284
- }
285
- // .wrap {
286
- // height: 1px;
287
- // width: 100%;
288
- // }
289
- }
290
- .editor_content:focus {
291
- box-shadow: 2px 2px 3px rgba(0, 0, 0, 0.1) inset, 0, 0;
292
- }
293
- .editor_content:empty::before {
294
- content: attr(data-placeholder);
295
- color: #b3b3b3;
296
- font-size: 14px;
297
- }
298
- .editor_head {
299
- display: flex;
300
- align-items: center;
301
- width: 100%;
302
- height: 38px;
303
- padding: 0 10px;
304
- padding-left: 3px;
305
- box-sizing: border-box;
306
- color: #366aff;
307
- font-size: 14px;
308
- border-bottom: 1px solid #e0e6f7;
309
-
310
- .button {
311
- padding: 5px 8px;
312
- background: #ffffff;
313
- border: none;
314
- border-radius: 2px;
315
- svg {
316
- fill: #366aff;
317
- width: 12px !important;
318
- height: 12px !important;
319
- }
320
- }
321
- .button:focus {
322
- // box-shadow: var(--ck-focus-outer-shadow),0 0;
323
- outline: none;
324
- background: #f0f0f0;
325
- transition: box-shadow 0.2s ease-in-out, border 0.2s ease-in-ou;
326
- }
327
- .button:active {
328
- border: 1px solid #366aff;
329
- }
330
- }
331
- }
332
- @keyframes rotate {
333
- 0% {
334
- -webkit-transform: rotate(0deg);
335
- transform: rotate(0deg);
336
- }
337
-
338
- 100% {
339
- -webkit-transform: rotate(360deg);
340
- transform: rotate(360deg);
341
- }
342
- }
1
+ <template>
2
+ <div class="my_editor">
3
+ <div class="editor_head" v-if="havToolbar">
4
+ <button class="button" @click="handleUpdate">
5
+ <svg
6
+ t="1703581982515"
7
+ class="icon"
8
+ viewBox="0 0 1024 1024"
9
+ version="1.1"
10
+ xmlns="http://www.w3.org/2000/svg"
11
+ p-id="74840"
12
+ width="200"
13
+ height="200"
14
+ >
15
+ <path
16
+ d="M566.839921 866.857572V983.050833c0 22.522042-7.677969 33.271198-29.688146 37.877979-18.427125 4.094917-37.366115 3.583052-55.281375-2.047458-17.403396-5.63051-24.057636-15.867802-24.057636-33.271198v-410.003534c0-7.166104-1.535594-9.213563-9.213562-9.213562-80.36274 0.511865-330.152658 0-410.515399 0-19.450854 0-29.688146-7.166104-34.294927-26.105094-5.118646-19.450854-5.118646-39.925438 0.511865-58.864427 5.118646-16.891531 15.355938-23.545771 32.759333-23.545771h412.562857c7.166104 0 8.189833-1.535594 8.189833-8.189834V41.219994c0-25.081365 7.166104-34.806792 32.247469-38.901708 18.93899-3.583052 38.389844-3.583052 56.305105 4.094917 13.820344 5.63051 20.474583 15.867802 20.474583 30.711875v412.562856c0 6.65424 1.535594 8.189833 8.189833 8.189834h406.932346c23.545771 0 33.783063 7.677969 38.901709 30.711875 4.094917 18.427125 4.094917 37.366115-2.047458 55.281375-5.118646 16.379667-15.355938 23.033906-32.247469 23.033907h-410.515398c-7.166104 0-10.237292 1.023729-9.725428 9.725427 0.511865 40.437302 0.511865 249.789918 0.511865 290.22722z"
17
+ p-id="74841"
18
+ />
19
+ </svg>
20
+ {{$t('dragonCommon.uploadImgFile')}}
21
+ </button>
22
+ </div>
23
+ <div
24
+ class="editor_content"
25
+ id="my_editor_content"
26
+ v-html="text"
27
+ contenteditable
28
+ ref="editorContent"
29
+ @focus="ischecked = true"
30
+ @blur="blurFn"
31
+ @input="changeInput"
32
+ :data-placeholder="placeholder"
33
+ ></div>
34
+ </div>
35
+ </template>
36
+
37
+ <script>
38
+ import { v4 as uuidv4 } from "uuid";
39
+ import { multipartUpload, ossFileUrl } from "../assets/js/AliyunlssUtil";
40
+
41
+ export default {
42
+ props: ["value", "placeholder", "havToolbar"],
43
+ data () {
44
+ return {
45
+ ischecked: false,
46
+ text: ''
47
+ }
48
+ },
49
+ watch: {
50
+ value: {
51
+ handler () {
52
+ // 解决光标跳动BUG
53
+ if (!this.ischecked) {
54
+ this.text = this.value
55
+ }
56
+ },
57
+ deep: true,
58
+ immediate: true
59
+ }
60
+ },
61
+ methods: {
62
+ blurFn (e) {
63
+ this.ischecked = false
64
+ this.text = this.value
65
+ e.view.blur()
66
+ },
67
+ changeInput (e) {
68
+ this.$emit("input", e.target.innerHTML)
69
+ },
70
+ handleUpdate () {
71
+ let inputObj = document.createElement('input')
72
+ inputObj.setAttribute('id', '_ef');
73
+ inputObj.setAttribute('type', 'file');
74
+ inputObj.setAttribute('accept', '*')
75
+ inputObj.setAttribute('capture', 'camcorder')
76
+ inputObj.setAttribute('multiple', true)
77
+ inputObj.setAttribute("style", 'visibility:hidden');
78
+ document.body.appendChild(inputObj);
79
+ inputObj.click();
80
+ inputObj.onchange = () => {
81
+ // 循环上传文件
82
+ let files = inputObj.files;
83
+ for (let index = 0; index < files.length; index++) {
84
+ const file = files[index];
85
+ let uid = uuidv4()
86
+ // let command = this.editor.commands.get("insertAskComponent");
87
+ // const listeners = this.editor.config.get('askPluginListener');
88
+ // let beforeButtonInsert = findListener(listeners, "UPLOAD");
89
+ if (file.type.includes('image')) {
90
+ // if (this.editor.uploadImg) {
91
+ // this.editor.uploadImg.push(uid)
92
+ // } else {
93
+ // this.editor.uploadImg = []
94
+ // this.editor.uploadImg.push(uid)
95
+ // }
96
+ this.imgUploadCallback(file, uid, index)
97
+ } else {
98
+ this.fileUploadCallback(file, uid)
99
+ }
100
+ }
101
+ }
102
+ },
103
+ appenNode (type, uid, value) {
104
+ let node = document.createElement(type)
105
+ node.setAttribute("uid", uid)
106
+ if (type == 'img') {
107
+ node.setAttribute("src", value)
108
+ node.setAttribute("class", 'image')
109
+ setTimeout(() => {
110
+ this.appenNode('div', '', '')
111
+ })
112
+ }
113
+ if (type == 'div' && uid) {
114
+ node.innerText = value
115
+ node.setAttribute("class", 'loading')
116
+ setTimeout(() => {
117
+ this.appenNode('div', '', '')
118
+ })
119
+ }
120
+ if (type == 'div' && !uid) {
121
+ node.setAttribute("class", 'wrap')
122
+ }
123
+ this.$refs.editorContent.appendChild(node)
124
+ },
125
+ deleteNode (uid) {
126
+ console.log(uid);
127
+ try {
128
+ let node = document.querySelector("[uid=" + uid + ']')
129
+ if (node) {
130
+ this.$refs.editorContent.removeChild(node)
131
+ }
132
+ } catch {
133
+ console.error("未找到该节点");
134
+ }
135
+ },
136
+ imgUploadCallback (file, uid, index) {
137
+ console.log(file, uid, index);
138
+ this.appenNode("div", "div" + index + uid, file.name + "正在上传,请稍后...")
139
+ this.upload(file).then(res => {
140
+ this.appenNode('img', "img" + index + uid, res.default)
141
+ this.deleteNode("div" + index + uid)
142
+ this.$emit("input", this.$refs.editorContent.innerHTML)
143
+ })
144
+ },
145
+ upload (file) {
146
+ return new Promise((resolve) => {
147
+ this.uploadFile(file, resolve)
148
+ })
149
+ },
150
+ uploadFile (file, resolve) {
151
+ let imgInfo = {
152
+ url: '',
153
+ }
154
+ let res = multipartUpload(
155
+ file,
156
+ null,
157
+ imgInfo
158
+ );
159
+ res.then(resp => {
160
+ imgInfo.url = ossFileUrl(resp.name)
161
+ resolve({
162
+ name: resp.name,
163
+ default: imgInfo.url
164
+ })
165
+ })
166
+ },
167
+ fileUploadCallback (file, uid) {
168
+ this.$emit("fileUploadCallback", {
169
+ param: {
170
+ uid: uid,
171
+ type: 'pending',
172
+ name: file.name
173
+ }
174
+ })
175
+ this.upload(file).then(res => {
176
+ this.$emit("fileUploadCallback", {
177
+ param: {
178
+ uid: uid,
179
+ name: file.name,
180
+ type: 'success',
181
+ url: res.default
182
+ }
183
+ })
184
+ this.$emit("input", this.$refs.editorContent.innerHTML)
185
+ })
186
+ },
187
+
188
+ },
189
+ mounted () {
190
+ this.$nextTick(() => {
191
+ let myEditorContent = this.$refs.editorContent
192
+ console.log(myEditorContent, 'myEditorContent');
193
+ myEditorContent.addEventListener("paste", (e) => {
194
+ let { files } = e.clipboardData
195
+ console.log(files, e.clipboardData, 'filesfilesfilesfiles');
196
+ if (files.length > 0) {
197
+ for (let index = 0; index < files.length; index++) {
198
+ let uid = uuidv4()
199
+ if (files[index].type.indexOf('image') != -1) {
200
+ this.imgUploadCallback(files[index], uid, index)
201
+ e.preventDefault();
202
+ } else {
203
+ this.fileUploadCallback(files[index], uid)
204
+ e.preventDefault();
205
+ }
206
+ }
207
+ }
208
+ })
209
+ myEditorContent.addEventListener("dragenter", function () {
210
+ });
211
+ myEditorContent.addEventListener("dragover", function (e) {
212
+ e.preventDefault();
213
+ });
214
+ myEditorContent.addEventListener("drop", (e) => {
215
+ e.preventDefault();
216
+ let files = e.dataTransfer.files; // 这个就相当于文件上传组件
217
+ if (files.length > 0) {
218
+ for (let index = 0; index < files.length; index++) {
219
+ let uid = uuidv4()
220
+ if (files[index].type.indexOf('image') != -1) {
221
+ this.imgUploadCallback(files[index], uid, index)
222
+ e.preventDefault();
223
+ } else {
224
+ this.fileUploadCallback(files[index], uid)
225
+ e.preventDefault();
226
+ }
227
+ }
228
+ }
229
+ }, false);
230
+ })
231
+
232
+ }
233
+ }
234
+ </script>
235
+
236
+ <style lang="less" scoped>
237
+ .my_editor {
238
+ width: 100%;
239
+ border: 1px solid #e0e6f7;
240
+ border-radius: 9px !important;
241
+ background: #ffffff;
242
+ /deep/.editor_content {
243
+ border-bottom-left-radius: 9px !important;
244
+ border-bottom-right-radius: 9px !important;
245
+ padding: 10px;
246
+ box-sizing: border-box;
247
+ min-height: 150px !important;
248
+ font-size: 14px !important;
249
+ outline: none;
250
+ div {
251
+ margin-bottom: 8px;
252
+ white-space: pre-wrap;
253
+ }
254
+ .image {
255
+ height: 140px;
256
+ object-fit: contain;
257
+ }
258
+ // .image{
259
+ // outline: 3px solid #366aff;
260
+ // }
261
+ .loading {
262
+ background: rgba(0, 89, 255, 0.2);
263
+ display: inline-block;
264
+ padding: 2px 5px;
265
+ border-radius: 3px;
266
+ padding-left: 20px;
267
+ position: relative;
268
+ font-size: 12px;
269
+ -webkit-user-modify: read-only;
270
+ -moz-user-modify: read-only;
271
+ }
272
+ .loading::after {
273
+ content: '';
274
+ background-image: url(../assets/image/building.png);
275
+ background-size: 100%;
276
+ width: 15px;
277
+ height: 15px;
278
+ position: absolute;
279
+ top: 3px;
280
+ left: 2px;
281
+ color: #366aff;
282
+ -webkit-animation: rotate 1.5s linear infinite;
283
+ animation: rotate 1.5s linear infinite;
284
+ }
285
+ // .wrap {
286
+ // height: 1px;
287
+ // width: 100%;
288
+ // }
289
+ }
290
+ .editor_content:focus {
291
+ box-shadow: 2px 2px 3px rgba(0, 0, 0, 0.1) inset, 0, 0;
292
+ }
293
+ .editor_content:empty::before {
294
+ content: attr(data-placeholder);
295
+ color: #b3b3b3;
296
+ font-size: 14px;
297
+ }
298
+ .editor_head {
299
+ display: flex;
300
+ align-items: center;
301
+ width: 100%;
302
+ height: 38px;
303
+ padding: 0 10px;
304
+ padding-left: 3px;
305
+ box-sizing: border-box;
306
+ color: #366aff;
307
+ font-size: 14px;
308
+ border-bottom: 1px solid #e0e6f7;
309
+
310
+ .button {
311
+ padding: 5px 8px;
312
+ background: #ffffff;
313
+ border: none;
314
+ border-radius: 2px;
315
+ svg {
316
+ fill: #366aff;
317
+ width: 12px !important;
318
+ height: 12px !important;
319
+ }
320
+ }
321
+ .button:focus {
322
+ // box-shadow: var(--ck-focus-outer-shadow),0 0;
323
+ outline: none;
324
+ background: #f0f0f0;
325
+ transition: box-shadow 0.2s ease-in-out, border 0.2s ease-in-ou;
326
+ }
327
+ .button:active {
328
+ border: 1px solid #366aff;
329
+ }
330
+ }
331
+ }
332
+ @keyframes rotate {
333
+ 0% {
334
+ -webkit-transform: rotate(0deg);
335
+ transform: rotate(0deg);
336
+ }
337
+
338
+ 100% {
339
+ -webkit-transform: rotate(360deg);
340
+ transform: rotate(360deg);
341
+ }
342
+ }
343
343
  </style>