@ctzy-web-client/plugin-component-vue 1.0.22 → 1.0.24

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 (132) hide show
  1. package/es/advance-select/advance-operation.mjs +51 -37
  2. package/es/advance-select/advance-option.mjs +167 -97
  3. package/es/advance-select/advance-option.vue_vue_type_style_index_0_scoped_bc8f5626_lang.mjs +7 -0
  4. package/es/advance-select/advance-select.mjs +368 -310
  5. package/es/advance-select/index.mjs +5 -5
  6. package/es/application-slot/breadcrumb-item.mjs +20 -17
  7. package/es/application-slot/header-tools-item.mjs +20 -17
  8. package/es/breadcrumb-select/breadcrumb-select.mjs +134 -112
  9. package/es/contextmenu/contextmenu-item.mjs +19 -15
  10. package/es/contextmenu/contextmenu.mjs +72 -56
  11. package/es/data-form/data-form-item.mjs +48 -30
  12. package/es/data-form/data-form.mjs +213 -166
  13. package/es/data-form/form-components/bwa-date-picker.mjs +51 -39
  14. package/es/data-form/form-components/bwa-date-time-picker.mjs +56 -44
  15. package/es/data-form/form-components/bwa-input-float.mjs +48 -37
  16. package/es/data-form/form-components/bwa-input-integer.mjs +68 -50
  17. package/es/data-form/form-components/bwa-input.mjs +43 -32
  18. package/es/data-form/form-components/bwa-multi-select.mjs +40 -29
  19. package/es/data-form/form-components/bwa-rich-text-tinymce.mjs +554 -218
  20. package/es/data-form/form-components/bwa-rich-text.mjs +404 -316
  21. package/es/data-form/form-components/bwa-select.mjs +84 -70
  22. package/es/data-form/form-components/bwa-textarea.mjs +38 -27
  23. package/es/data-form/form-components/bwa-upload.mjs +172 -148
  24. package/es/data-form/form-components/bwa-user-multi-select.mjs +35 -24
  25. package/es/data-form/form-components/bwa-user-select.mjs +86 -61
  26. package/es/data-table/data-column-view.mjs +146 -115
  27. package/es/data-table/data-table-card.mjs +48 -40
  28. package/es/data-table/data-table-column.mjs +58 -45
  29. package/es/data-table/data-table.mjs +402 -316
  30. package/es/datatable-settings/datatable-settings.mjs +329 -254
  31. package/es/date-range/date-picker.mjs +130 -116
  32. package/es/date-range/date-range.mjs +215 -168
  33. package/es/drag-list/drag-item.mjs +56 -42
  34. package/es/drag-list/drag-list.mjs +60 -47
  35. package/es/dragable/dragable-item.mjs +23 -18
  36. package/es/dragable/dragable-operation.mjs +32 -24
  37. package/es/dragable/dragable.mjs +32 -23
  38. package/es/filter-panel/conditions/date-range-condition.mjs +50 -40
  39. package/es/filter-panel/conditions/department-condition/department-condition.mjs +99 -72
  40. package/es/filter-panel/conditions/department-condition/department-node.mjs +73 -59
  41. package/es/filter-panel/conditions/input-condition.mjs +90 -76
  42. package/es/filter-panel/conditions/multi-user-condition.mjs +67 -57
  43. package/es/filter-panel/conditions/multiple-menu-condition.mjs +54 -35
  44. package/es/filter-panel/conditions/single-menu-condition.mjs +65 -60
  45. package/es/filter-panel/conditions/single-user-condition.mjs +67 -57
  46. package/es/filter-panel/filter-panel-item.mjs +54 -39
  47. package/es/filter-panel/filter-panel.mjs +153 -135
  48. package/es/layout/layout.mjs +85 -78
  49. package/es/menu/menu-item.mjs +67 -52
  50. package/es/menu/menu.mjs +70 -53
  51. package/es/node_modules/.pnpm/style-inject@0.3.0/node_modules/style-inject/dist/style-inject.es.mjs +28 -0
  52. package/es/panel/panel.mjs +53 -40
  53. package/es/pct-filter-panel/pct-compents/pct-Input-condition.mjs +74 -63
  54. package/es/pct-filter-panel/pct-compents/pct-date-range-condition.mjs +76 -67
  55. package/es/pct-filter-panel/pct-compents/pct-multiple-menu-condition.mjs +406 -178
  56. package/es/pct-filter-panel/pct-compents/pct-multiple-menu-condition2.mjs +153 -138
  57. package/es/pct-filter-panel/pct-filter-panel-item.mjs +55 -40
  58. package/es/pct-filter-panel/pct-filter-panel.mjs +247 -227
  59. package/es/progress/progress-item.mjs +81 -61
  60. package/es/progress/progress.mjs +78 -64
  61. package/es/where-filter-panel/where-filter-panel.mjs +15 -12
  62. package/lib/advance-select/advance-operation.js +50 -36
  63. package/lib/advance-select/advance-option.js +166 -96
  64. package/lib/advance-select/advance-option.vue_vue_type_style_index_0_scoped_bc8f5626_lang.js +12 -0
  65. package/lib/advance-select/advance-select.js +366 -308
  66. package/lib/application-slot/breadcrumb-item.js +19 -16
  67. package/lib/application-slot/header-tools-item.js +19 -16
  68. package/lib/breadcrumb-select/breadcrumb-select.js +133 -111
  69. package/lib/contextmenu/contextmenu-item.js +18 -14
  70. package/lib/contextmenu/contextmenu.js +71 -55
  71. package/lib/data-form/data-form-item.js +47 -29
  72. package/lib/data-form/data-form.js +212 -165
  73. package/lib/data-form/form-components/bwa-date-picker.js +50 -38
  74. package/lib/data-form/form-components/bwa-date-time-picker.js +55 -43
  75. package/lib/data-form/form-components/bwa-input-float.js +47 -36
  76. package/lib/data-form/form-components/bwa-input-integer.js +67 -49
  77. package/lib/data-form/form-components/bwa-input.js +42 -31
  78. package/lib/data-form/form-components/bwa-multi-select.js +39 -28
  79. package/lib/data-form/form-components/bwa-rich-text-tinymce.js +553 -217
  80. package/lib/data-form/form-components/bwa-rich-text.js +403 -315
  81. package/lib/data-form/form-components/bwa-select.js +83 -69
  82. package/lib/data-form/form-components/bwa-textarea.js +37 -26
  83. package/lib/data-form/form-components/bwa-upload.js +171 -147
  84. package/lib/data-form/form-components/bwa-user-multi-select.js +34 -23
  85. package/lib/data-form/form-components/bwa-user-select.js +85 -60
  86. package/lib/data-table/data-column-view.js +146 -115
  87. package/lib/data-table/data-table-card.js +48 -40
  88. package/lib/data-table/data-table-column.js +57 -44
  89. package/lib/data-table/data-table.js +401 -315
  90. package/lib/datatable-settings/datatable-settings.js +328 -253
  91. package/lib/date-range/date-picker.js +129 -115
  92. package/lib/date-range/date-range.js +213 -170
  93. package/lib/drag-list/drag-item.js +55 -41
  94. package/lib/drag-list/drag-list.js +59 -46
  95. package/lib/dragable/dragable-item.js +22 -17
  96. package/lib/dragable/dragable-operation.js +31 -23
  97. package/lib/dragable/dragable.js +31 -22
  98. package/lib/filter-panel/conditions/date-range-condition.js +49 -39
  99. package/lib/filter-panel/conditions/department-condition/department-condition.js +98 -71
  100. package/lib/filter-panel/conditions/department-condition/department-node.js +72 -58
  101. package/lib/filter-panel/conditions/input-condition.js +89 -75
  102. package/lib/filter-panel/conditions/multi-user-condition.js +66 -56
  103. package/lib/filter-panel/conditions/multiple-menu-condition.js +53 -34
  104. package/lib/filter-panel/conditions/single-menu-condition.js +64 -59
  105. package/lib/filter-panel/conditions/single-user-condition.js +66 -56
  106. package/lib/filter-panel/filter-panel-item.js +53 -38
  107. package/lib/filter-panel/filter-panel.js +152 -134
  108. package/lib/layout/layout.js +84 -77
  109. package/lib/menu/menu-item.js +66 -51
  110. package/lib/menu/menu.js +69 -52
  111. package/lib/node_modules/.pnpm/style-inject@0.3.0/node_modules/style-inject/dist/style-inject.es.js +32 -0
  112. package/lib/panel/panel.js +52 -39
  113. package/lib/pct-filter-panel/pct-compents/pct-Input-condition.js +73 -62
  114. package/lib/pct-filter-panel/pct-compents/pct-date-range-condition.js +75 -66
  115. package/lib/pct-filter-panel/pct-compents/pct-multiple-menu-condition.js +405 -177
  116. package/lib/pct-filter-panel/pct-compents/pct-multiple-menu-condition2.js +152 -137
  117. package/lib/pct-filter-panel/pct-filter-panel-item.js +54 -39
  118. package/lib/pct-filter-panel/pct-filter-panel.js +246 -226
  119. package/lib/progress/progress-item.js +80 -60
  120. package/lib/progress/progress.js +77 -63
  121. package/lib/where-filter-panel/where-filter-panel.js +14 -11
  122. package/package.json +2 -1
  123. package/src/advance-select/advance-option.vue +64 -13
  124. package/src/data-form/form-components/bwa-rich-text-tinymce.vue +1 -1
  125. package/src/datatable-settings/datatable-settings.vue +33 -3
  126. package/src/date-range/date-picker.vue +1 -1
  127. package/src/date-range/date-range.vue +3 -3
  128. package/src/filter-panel/filter-panel.vue +2 -2
  129. package/src/pct-filter-panel/pct-compents/pct-Input-condition.vue +64 -64
  130. package/src/pct-filter-panel/pct-compents/pct-date-range-condition.vue +61 -61
  131. package/src/pct-filter-panel/pct-compents/pct-multiple-menu-condition.vue +302 -178
  132. package/src/pct-filter-panel/pct-filter-panel.vue +4 -4
@@ -13,321 +13,409 @@ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'defau
13
13
 
14
14
  var Quill__default = /*#__PURE__*/_interopDefaultLegacy(Quill);
15
15
 
16
- const __default__ = vue.defineComponent({
17
- name: "BwaRichText"
18
- });
19
- const _sfc_main = /* @__PURE__ */ Object.assign(__default__, {
20
- props: {
21
- placeholder: {
22
- type: String,
23
- default: ""
24
- },
25
- modelValue: {
26
- type: null
27
- },
28
- disabled: {
29
- type: Boolean,
30
- default: false
31
- },
32
- showAt: {
33
- type: Boolean,
34
- default: false
35
- },
36
- userIds: {
37
- typee: Array,
38
- default: () => []
39
- }
40
- },
41
- emits: ["update:modelValue", "update:userIds"],
16
+ const _sfc_main = {
17
+ __name: 'bwa-rich-text',
18
+ props: {
19
+ placeholder: {
20
+ type: String,
21
+ default: '',
22
+ },
23
+ modelValue: {
24
+ type: null,
25
+ },
26
+ disabled: {
27
+ type: Boolean,
28
+ default: false,
29
+ },
30
+ showAt: {
31
+ type: Boolean,
32
+ default: false,
33
+ },
34
+ userIds: {
35
+ typee: Array,
36
+ default: () => [],
37
+ },
38
+ },
39
+ emits: ['update:modelValue', 'update:userIds'],
42
40
  setup(__props, { expose, emit }) {
43
- const props = __props;
44
- let editor = null;
45
- const userService = webBaseClientVue.useService("UserService");
46
- const loading = vue.ref(false);
47
- const userList = vue.ref([
48
- { value: "1", label: "\u7528\u62371" },
49
- { value: "2", label: "\u7528\u62372" },
50
- { value: "3", label: "\u7528\u62373" }
51
- ]);
52
- const handleChange = ([userId]) => {
53
- if (!editor || !userId) {
54
- return;
55
- }
56
- const userInfo = vue.unref(userList).find((item) => item.value === userId);
57
- if (!userInfo) {
58
- return;
59
- }
60
- editor.focus();
61
- let length = editor.getSelection() ? editor.getSelection().index || 0 : editor.getLength();
62
- editor.insertEmbed(
63
- length,
64
- "at",
65
- { id: userInfo.value, desc: userInfo.label },
66
- "user"
67
- );
68
- editor.insertText(length + 1, " ");
69
- editor.setSelection(length + 2);
70
- };
71
- const loadUserList = async (search = "") => {
72
- try {
73
- if (vue.unref(loading)) {
74
- return;
75
- }
76
- loading.value = true;
77
- if (!vue.unref(userService)) {
78
- ElementPlus.ElMessage.error("\u65E0\u6CD5\u83B7\u53D6\u7528\u6237");
79
- return;
80
- }
81
- const userListResult = await vue.unref(userService).getUserList({
82
- name: search
83
- });
84
- if (userListResult.code != 0) {
85
- ElementPlus.ElMessage.error(userListResult.msg);
86
- return;
87
- }
88
- userList.value = userListResult.data;
89
- } finally {
90
- loading.value = false;
91
- }
92
- };
93
- const handleVisibleChange = (visible) => {
94
- if (!visible) {
95
- return;
96
- }
97
- loadUserList();
98
- };
99
- const virtualRef = vue.ref(null);
100
- ;
101
- const ns = webBaseClientVue.useNamespace("rich-text");
102
- const fileService = webBaseClientVue.useService("FileService");
103
- const quillEditorContainer = vue.ref(null);
104
- const quillEditorRef = vue.ref(null);
105
- const currentScope = vue.getCurrentScope();
106
- const editorInstance = vue.ref(null);
107
- const toolbarOptions = [
108
- [{ header: [1, 2, 3, 4, 5, 6, false] }],
109
- [{ font: [] }],
110
- ["bold", "italic", "underline", "strike"],
111
- [{ align: [] }],
112
- ["blockquote", "code-block"],
113
- [{ header: 1 }, { header: 2 }],
114
- [{ list: "ordered" }, { list: "bullet" }],
115
- [{ script: "sub" }, { script: "super" }],
116
- [{ indent: "-1" }, { indent: "+1" }],
117
- [{ color: [] }, { background: [] }],
118
- ["clean"].concat(props.showAt ? ["at"] : [])
119
- ];
120
- const value = vue.computed({
121
- get: () => props.modelValue || "",
122
- set: (v) => {
123
- let str = "";
124
- if (!v && editor && editor.root.innerHTML && editor.root.innerHTML.indexOf("<img") != -1) {
125
- str = editor.root.innerHTML;
126
- }
127
- emit("update:modelValue", v || str);
128
- }
129
- });
130
- const userIds = vue.computed({
131
- get: () => props.userIds,
132
- set: (v) => {
133
- emit("update:userIds", v);
134
- }
135
- });
136
- const updateImage = async (file) => {
137
- if (!vue.unref(fileService)) {
138
- return;
139
- }
140
- const uploadFileResult = await vue.unref(fileService).uploadFile(file);
141
- if (uploadFileResult.code != 0) {
142
- return uploadFileResult;
143
- }
144
- const fileID = uploadFileResult.data.id;
145
- const filePathResult = await vue.unref(fileService).getFilePath(fileID);
146
- if (filePathResult.code != 0) {
147
- return filePathResult;
148
- }
149
- return {
150
- ...filePathResult,
151
- data: { id: fileID, path: filePathResult.data }
152
- };
153
- };
154
- const quillEditorRefClick = () => {
155
- if (!editor) {
156
- return;
157
- }
158
- editor.focus();
159
- };
160
- vue.onMounted(() => {
161
- editor = new Quill__default["default"](vue.unref(quillEditorRef), {
162
- theme: "snow",
163
- placeholder: props.placeholder,
164
- modules: {
165
- toolbar: {
166
- container: toolbarOptions,
167
- handlers: {
168
- at: function(value2) {
169
- }
170
- }
171
- }
172
- }
173
- });
174
- virtualRef.value = quillEditorContainer.value.querySelector("button.ql-at");
175
- editorInstance.value = vue.markRaw(editor);
176
- const el = document.createElement("div");
177
- const getUserIds = (html) => {
178
- el.innerHTML = html;
179
- const items = Array.from(el.querySelectorAll("span.ptp-at-item"));
180
- userIds.value = [
181
- ...new Set(items.map((item) => item.getAttribute("d-id")))
182
- ];
183
- };
184
- getUserIds(vue.unref(value));
185
- const handleTextChange = (delta, oldDelta, source) => {
186
- const _value = editor.getText() === "\n" ? "" : editor.root.innerHTML;
187
- value.value = _value;
188
- getUserIds(_value);
189
- };
190
- const handlePaste = (evt) => {
191
- if (evt.clipboardData && evt.clipboardData.files && evt.clipboardData.files.length) {
192
- evt.preventDefault();
193
- [].forEach.call(evt.clipboardData.files, async (file) => {
194
- console.log(file);
195
- if (file.type.match(/^image\/(gif|jpe?g|a?png|bmp)/i)) {
196
- const filePathResult = await updateImage(file);
197
- if (filePathResult.code != 0) {
198
- return;
199
- }
200
- const fileData = filePathResult.data;
201
- var range = editor.getSelection();
202
- if (range && fileData) {
203
- editor.insertEmbed(range.index, "image", fileData.path);
204
- editor.formatText(range.index, 1, {
205
- alt: fileData.id
206
- });
207
- setTimeout(() => {
208
- editor.setSelection(range.index + 1);
209
- }, 300);
210
- }
211
- }
212
- });
213
- }
214
- };
215
- currentScope.run(() => {
216
- vue.watch(
217
- vue.computed(() => props.disabled),
218
- (disabled) => {
219
- editor.enable(!disabled);
220
- },
221
- { immediate: true }
222
- );
223
- const getFilePaths = async (alt) => {
224
- const filePathResult = await vue.unref(fileService).getFilePath(alt);
225
- return filePathResult;
226
- };
227
- let artArr2 = [];
228
- vue.watch(
229
- value,
230
- async () => {
231
- if (vue.unref(value).indexOf("data:image/png") != -1 || vue.unref(value).indexOf("base64") != -1) {
232
- editor.root.innerHTML = vue.unref(value);
233
- return;
234
- }
235
- if (!vue.unref(value)) {
236
- artArr2 = [];
237
- }
238
- let afterHtml = "";
239
- let artArr = [];
240
- let artArrOption = [];
241
- if (vue.unref(value).indexOf("<img") != -1) {
242
- vue.unref(value).replace(/<img [^>]*alt=['"]([^'"]+)[^>]*>/gi, (img, alt) => {
243
- if (!artArr2.includes(alt)) {
244
- artArr.push(alt);
245
- }
246
- });
247
- for (const alt of artArr) {
248
- artArrOption.push({
249
- alt,
250
- src: await getFilePaths(alt)
251
- });
252
- }
253
- afterHtml = vue.unref(value).replace(/<img [^>]*alt=['"]([^'"]+)[^>]*>/gi, (img, alt) => {
254
- var _a;
255
- if (artArr.includes(alt)) {
256
- return `<img src="${(_a = artArrOption.find((a) => a.alt === alt)) == null ? void 0 : _a.src.data}" alt="${alt}">`;
257
- } else {
258
- return img;
259
- }
260
- });
261
- }
262
- console.log("afterHtml =>", afterHtml);
263
- artArr2 = [...artArr2, ...artArr];
264
- artArr = [];
265
- artArrOption = [];
266
- if (editor.root.innerHTML === (afterHtml || vue.unref(value))) {
267
- return;
268
- }
269
- const range = editor.getSelection();
270
- editor.root.innerHTML = afterHtml || vue.unref(value);
271
- setTimeout(() => {
272
- if (range) {
273
- editor.setSelection(range.index + 1);
274
- editor.focus();
275
- }
276
- }, 100);
277
- },
278
- { immediate: true }
279
- );
280
- editor.on("text-change", handleTextChange);
281
- editor.root.addEventListener("paste", handlePaste);
282
- vue.onScopeDispose(() => {
283
- editor.off("text-change", handleTextChange);
284
- editor.root.removeEventListener("paste", handlePaste);
285
- });
286
- });
287
- });
288
- expose({
289
- getEditorInstance() {
290
- return vue.unref(editorInstance);
291
- }
292
- });
293
- return (_ctx, _cache) => {
294
- const _component_BwaAdvanceOption = vue.resolveComponent("BwaAdvanceOption");
295
- const _component_BwaAdvanceSelect = vue.resolveComponent("BwaAdvanceSelect");
296
- return vue.openBlock(), vue.createElementBlock("div", {
297
- class: vue.normalizeClass(vue.unref(ns).b()),
298
- ref_key: "quillEditorContainer",
299
- ref: quillEditorContainer
300
- }, [
301
- vue.createElementVNode("div", {
302
- class: vue.normalizeClass(vue.unref(ns).e("editor")),
303
- ref_key: "quillEditorRef",
304
- ref: quillEditorRef,
305
- onClick: quillEditorRefClick
306
- }, null, 2),
307
- vue.createVNode(_component_BwaAdvanceSelect, {
308
- showSelection: false,
309
- "virtual-triggering": true,
310
- "virtual-ref": virtualRef.value,
311
- loading: loading.value,
312
- onSearch: loadUserList,
313
- "onUpdate:modelValue": handleChange,
314
- onVisibleChange: handleVisibleChange
315
- }, {
316
- default: vue.withCtx(() => [
317
- (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(userList.value, (item) => {
318
- return vue.openBlock(), vue.createBlock(_component_BwaAdvanceOption, {
319
- key: item.value,
320
- value: item.value,
321
- label: item.label
322
- }, null, 8, ["value", "label"]);
323
- }), 128))
324
- ]),
325
- _: 1
326
- }, 8, ["virtual-ref", "loading"])
327
- ], 2);
328
- };
329
- }
330
- });
331
- var RichText = /* @__PURE__ */ _pluginVue_exportHelper["default"](_sfc_main, [["__file", "bwa-rich-text.vue"]]);
41
+
42
+ const props = __props;
43
+
44
+ let editor = null;
45
+
46
+ const userService = webBaseClientVue.useService('UserService');
47
+
48
+ const loading = vue.ref(false);
49
+ const userList = vue.ref([
50
+ { value: '1', label: '用户1' },
51
+ { value: '2', label: '用户2' },
52
+ { value: '3', label: '用户3' },
53
+ ]);
54
+
55
+ const handleChange = ([userId]) => {
56
+ if (!editor || !userId) {
57
+ return;
58
+ }
59
+
60
+ const userInfo = vue.unref(userList).find((item) => item.value === userId);
61
+
62
+ if (!userInfo) {
63
+ return;
64
+ }
65
+
66
+ editor.focus();
67
+
68
+ //获取当前光标位置
69
+ let length = editor.getSelection()
70
+ ? editor.getSelection().index || 0
71
+ : editor.getLength();
72
+
73
+ // 设置@
74
+ editor.insertEmbed(
75
+ length,
76
+ 'at',
77
+ { id: userInfo.value, desc: userInfo.label },
78
+ 'user'
79
+ );
80
+
81
+ editor.insertText(length + 1, ' ');
82
+
83
+ //设置光标
84
+ editor.setSelection(length + 2);
85
+ };
86
+
87
+ const loadUserList = async (search = '') => {
88
+ try {
89
+ if (vue.unref(loading)) {
90
+ return;
91
+ }
92
+
93
+ loading.value = true;
94
+ if (!vue.unref(userService)) {
95
+ ElementPlus.ElMessage.error('无法获取用户');
96
+ return;
97
+ }
98
+
99
+ const userListResult = await vue.unref(userService).getUserList({
100
+ name: search,
101
+ });
102
+
103
+ if (userListResult.code != 0) {
104
+ ElementPlus.ElMessage.error(userListResult.msg);
105
+ return;
106
+ }
107
+
108
+ userList.value = userListResult.data;
109
+ } finally {
110
+ loading.value = false;
111
+ }
112
+ };
113
+
114
+ const handleVisibleChange = (visible) => {
115
+ if (!visible) {
116
+ return;
117
+ }
118
+
119
+ loadUserList();
120
+ };
121
+
122
+
123
+
124
+ const virtualRef = vue.ref(null);
125
+
126
+
127
+
128
+ defineOptions({
129
+ name: 'BwaRichText',
130
+ });
131
+
132
+ const ns = webBaseClientVue.useNamespace('rich-text');
133
+
134
+ const fileService = webBaseClientVue.useService('FileService');
135
+
136
+ const quillEditorContainer = vue.ref(null);
137
+ const quillEditorRef = vue.ref(null);
138
+
139
+ const currentScope = vue.getCurrentScope();
140
+
141
+ const editorInstance = vue.ref(null);
142
+
143
+ const toolbarOptions = [
144
+ [{ header: [1, 2, 3, 4, 5, 6, false] }],
145
+ [{ font: [] }],
146
+ ['bold', 'italic', 'underline', 'strike'],
147
+ [{ align: [] }],
148
+ ['blockquote', 'code-block'],
149
+ [{ header: 1 }, { header: 2 }],
150
+ [{ list: 'ordered' }, { list: 'bullet' }],
151
+ [{ script: 'sub' }, { script: 'super' }],
152
+ [{ indent: '-1' }, { indent: '+1' }],
153
+ [{ color: [] }, { background: [] }],
154
+ ['clean'].concat(props.showAt ? ['at'] : []),
155
+ ];
156
+
157
+ const value = vue.computed({
158
+ get: () => props.modelValue || '',
159
+ set: (v) => {
160
+ // 解决当只有一张图片的时候 回显html报文异常
161
+ let str = '';
162
+ if (!v && editor && editor.root.innerHTML && editor.root.innerHTML.indexOf('<img') != -1) {
163
+ str = editor.root.innerHTML;
164
+ }
165
+ emit('update:modelValue', v || str);
166
+ },
167
+ });
168
+
169
+ const userIds = vue.computed({
170
+ get: () => props.userIds,
171
+ set: (v) => {
172
+ emit('update:userIds', v);
173
+ },
174
+ });
175
+
176
+ const updateImage = async (file) => {
177
+ if (!vue.unref(fileService)) {
178
+ return;
179
+ }
180
+
181
+ const uploadFileResult = await vue.unref(fileService).uploadFile(file);
182
+
183
+ if (uploadFileResult.code != 0) {
184
+ return uploadFileResult;
185
+ }
186
+
187
+ const fileID = uploadFileResult.data.id;
188
+
189
+ const filePathResult = await vue.unref(fileService).getFilePath(fileID);
190
+
191
+ if (filePathResult.code != 0) {
192
+ return filePathResult;
193
+ }
194
+
195
+ return {
196
+ ...filePathResult,
197
+ data: { id: fileID, path: filePathResult.data },
198
+ };
199
+ };
200
+ const quillEditorRefClick = () => {
201
+ if (!editor) {
202
+ return;
203
+ }
204
+ editor.focus();
205
+ };
206
+ vue.onMounted(() => {
207
+ editor = new Quill__default["default"](vue.unref(quillEditorRef), {
208
+ theme: 'snow',
209
+ placeholder: props.placeholder,
210
+ modules: {
211
+ toolbar: {
212
+ container: toolbarOptions,
213
+ handlers: {
214
+ at: function (value) {},
215
+ },
216
+ },
217
+ },
218
+ });
219
+
220
+ virtualRef.value = quillEditorContainer.value.querySelector('button.ql-at');
221
+
222
+ editorInstance.value = vue.markRaw(editor);
223
+
224
+ const el = document.createElement('div');
225
+
226
+ const getUserIds = (html) => {
227
+ el.innerHTML = html;
228
+
229
+ const items = Array.from(el.querySelectorAll('span.ptp-at-item'));
230
+
231
+ userIds.value = [
232
+ ...new Set(items.map((item) => item.getAttribute('d-id'))),
233
+ ];
234
+ };
235
+
236
+ getUserIds(vue.unref(value));
237
+
238
+ const handleTextChange = (delta, oldDelta, source) => {
239
+ const _value = editor.getText() === '\n' ? '' : editor.root.innerHTML;
240
+
241
+ value.value = _value;
242
+
243
+ getUserIds(_value);
244
+ // if (source === 'user') {
245
+ // var range = editor.getLength();
246
+ // console.log(range)
247
+ // // if (range != null) {
248
+ // // setTimeout(() => {
249
+ // // editor.setSelection(range.index, range.length); // 重新设置选区
250
+ // // }, 300)
251
+ // // }
252
+ // }
253
+ };
254
+
255
+ const handlePaste = (evt) => {
256
+ if (
257
+ evt.clipboardData &&
258
+ evt.clipboardData.files &&
259
+ evt.clipboardData.files.length
260
+ ) {
261
+ evt.preventDefault();
262
+ [].forEach.call(evt.clipboardData.files, async (file) => {
263
+ console.log(file);
264
+ if (file.type.match(/^image\/(gif|jpe?g|a?png|bmp)/i)) {
265
+ const filePathResult = await updateImage(file);
266
+
267
+ if (filePathResult.code != 0) {
268
+ return;
269
+ }
270
+
271
+ const fileData = filePathResult.data;
272
+ // const fileData = { id: 1, path: 'https://img1.baidu.com/it/u=2335299816,3552592887&fm=253&fmt=auto&app=138&f=JPEG?w=126&h=189' }
273
+ var range = editor.getSelection();
274
+ if (range && fileData) {
275
+ // 在当前光标位置插入图片
276
+ editor.insertEmbed(range.index, 'image', fileData.path);
277
+ editor.formatText(range.index, 1, {
278
+ alt: fileData.id,
279
+ });
280
+ // 将光标移动到图片后面
281
+ setTimeout(() => {
282
+ editor.setSelection(range.index + 1);
283
+ // console.log(editor.getSelection(), editor.getLength())
284
+ // editor.setSelection(editor.getSelection().index, editor.getSelection().length);
285
+ }, 300);
286
+ }
287
+ }
288
+ });
289
+ }
290
+ };
291
+
292
+ currentScope.run(() => {
293
+ vue.watch(
294
+ vue.computed(() => props.disabled),
295
+ (disabled) => {
296
+ editor.enable(!disabled);
297
+ },
298
+ { immediate: true }
299
+ );
300
+ const getFilePaths = async (alt) => {
301
+ const filePathResult = await vue.unref(fileService).getFilePath(alt);
302
+ return filePathResult
303
+ };
304
+ let artArr2 = []; // 防止重复加载图片
305
+ vue.watch(
306
+ value,
307
+ async () => {
308
+ if ((vue.unref(value).indexOf('data:image/png') != -1 || vue.unref(value).indexOf('base64') != -1)) {
309
+ editor.root.innerHTML = vue.unref(value);
310
+ return
311
+ }
312
+ // console.log(unref(value))
313
+ if (!vue.unref(value)) {
314
+ artArr2 = [];
315
+ }
316
+ let afterHtml = '';
317
+ let artArr = [];
318
+ let artArrOption = [];
319
+ if (vue.unref(value).indexOf('<img') != -1) {
320
+ vue.unref(value).replace(/<img [^>]*alt=['"]([^'"]+)[^>]*>/gi, (img, alt) => {
321
+ if (!artArr2.includes(alt)) {
322
+ artArr.push(alt);
323
+ }
324
+ });
325
+ for (const alt of artArr) {
326
+ artArrOption.push({
327
+ alt,
328
+ src: await getFilePaths(alt)
329
+ // src: 'https://img1.baidu.com/it/u=2335299816,3552592887&fm=253&fmt=auto&app=138&f=JPEG?w=126&h=189'
330
+ });
331
+ }
332
+ // console.log(artArrOption)
333
+ afterHtml = vue.unref(value).replace(/<img [^>]*alt=['"]([^'"]+)[^>]*>/gi, (img, alt) => {
334
+ if (artArr.includes(alt)) {
335
+ return `<img src="${artArrOption.find(a => a.alt === alt)?.src.data}" alt="${alt}">`
336
+ } else {
337
+ return img
338
+ }
339
+
340
+ });
341
+ }
342
+ console.log('afterHtml =>', afterHtml);
343
+ artArr2 = [...artArr2, ...artArr];
344
+ artArr = [];
345
+ artArrOption = [];
346
+ if (editor.root.innerHTML === (afterHtml || vue.unref(value))) {
347
+ return;
348
+ }
349
+ const range = editor.getSelection();
350
+ editor.root.innerHTML = afterHtml || vue.unref(value);
351
+ setTimeout(() => {
352
+ if (range) {
353
+ editor.setSelection(range.index + 1);
354
+ editor.focus();
355
+ }
356
+ }, 100);
357
+ },
358
+ { immediate: true }
359
+ );
360
+
361
+ editor.on('text-change', handleTextChange);
362
+
363
+ editor.root.addEventListener('paste', handlePaste);
364
+
365
+ vue.onScopeDispose(() => {
366
+ editor.off('text-change', handleTextChange);
367
+
368
+ editor.root.removeEventListener('paste', handlePaste);
369
+ });
370
+ });
371
+ });
372
+
373
+ expose({
374
+ getEditorInstance() {
375
+ return vue.unref(editorInstance);
376
+ },
377
+ });
378
+
379
+ return (_ctx, _cache) => {
380
+ const _component_BwaAdvanceOption = vue.resolveComponent("BwaAdvanceOption");
381
+ const _component_BwaAdvanceSelect = vue.resolveComponent("BwaAdvanceSelect");
382
+
383
+ return (vue.openBlock(), vue.createElementBlock("div", {
384
+ class: vue.normalizeClass(vue.unref(ns).b()),
385
+ ref_key: "quillEditorContainer",
386
+ ref: quillEditorContainer
387
+ }, [
388
+ vue.createElementVNode("div", {
389
+ class: vue.normalizeClass(vue.unref(ns).e('editor')),
390
+ ref_key: "quillEditorRef",
391
+ ref: quillEditorRef,
392
+ onClick: quillEditorRefClick
393
+ }, null, 2 /* CLASS */),
394
+ vue.createVNode(_component_BwaAdvanceSelect, {
395
+ showSelection: false,
396
+ "virtual-triggering": true,
397
+ "virtual-ref": virtualRef.value,
398
+ loading: loading.value,
399
+ onSearch: loadUserList,
400
+ "onUpdate:modelValue": handleChange,
401
+ onVisibleChange: handleVisibleChange
402
+ }, {
403
+ default: vue.withCtx(() => [
404
+ (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(userList.value, (item) => {
405
+ return (vue.openBlock(), vue.createBlock(_component_BwaAdvanceOption, {
406
+ key: item.value,
407
+ value: item.value,
408
+ label: item.label
409
+ }, null, 8 /* PROPS */, ["value", "label"]))
410
+ }), 128 /* KEYED_FRAGMENT */))
411
+ ]),
412
+ _: 1 /* STABLE */
413
+ }, 8 /* PROPS */, ["virtual-ref", "loading"])
414
+ ], 2 /* CLASS */))
415
+ }
416
+ }
417
+
418
+ };
419
+ var RichText = /*#__PURE__*/_pluginVue_exportHelper["default"](_sfc_main, [['__file',"bwa-rich-text.vue"]]);
332
420
 
333
421
  exports["default"] = RichText;