imatrix-ui 0.2.6-up → 0.2.7-up
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.
- package/README.md +7 -7
- package/index.html +13 -13
- package/lib/super-ui.css +1 -1
- package/lib/super-ui.js +2724 -1932
- package/lib/super-ui.umd.cjs +24 -24
- package/package.json +1 -1
- package/packages/IntervalSelection/index.js +6 -6
- package/packages/IntervalSelection/src/quarterScope.vue +405 -405
- package/packages/IntervalSelection/src/sectionDate.vue +475 -475
- package/packages/breadcrumb/index.js +6 -6
- package/packages/breadcrumb/src/breadcrumb.vue +81 -81
- package/packages/department-tree/index.js +6 -6
- package/packages/department-tree/src/department-tree.vue +113 -113
- package/packages/department-tree-inline/index.js +6 -6
- package/packages/department-tree-inline/src/department-multi-tree-inline.vue +472 -472
- package/packages/department-tree-inline/src/department-single-tree-inline.vue +340 -340
- package/packages/department-tree-inline/src/department-tree-inline.vue +86 -86
- package/packages/department-tree-inline/src/department-tree-service.js +344 -344
- package/packages/department-tree-inline/src/search-result.vue +235 -235
- package/packages/department-user-tree/index.js +6 -6
- package/packages/department-user-tree/src/department-user-multiple-tree.vue +129 -129
- package/packages/department-user-tree/src/department-user-single-tree.vue +94 -94
- package/packages/department-user-tree/src/department-user-tree.vue +114 -114
- package/packages/department-user-tree-inline/index.js +9 -9
- package/packages/department-user-tree-inline/src/department-user-multiple-tree-inline.vue +731 -731
- package/packages/department-user-tree-inline/src/department-user-single-tree-inline.vue +334 -334
- package/packages/department-user-tree-inline/src/department-user-tree-inline.vue +87 -87
- package/packages/department-user-tree-inline/src/department-user-tree-multi-service.js +309 -309
- package/packages/department-user-tree-inline/src/department-user-tree-single-service.js +179 -179
- package/packages/department-user-tree-inline/src/search-result.vue +273 -273
- package/packages/directives/prevent-reclick.js +22 -22
- package/packages/dynamic-source-select/index.js +6 -6
- package/packages/dynamic-source-select/src/dynamic-source-select-service.js +106 -106
- package/packages/dynamic-source-select/src/dynamic-source-select.vue +675 -675
- package/packages/dynamic-source-select/src/events.js +78 -78
- package/packages/fs-preview/index.js +6 -6
- package/packages/fs-preview/src/fs-preview.vue +287 -287
- package/packages/fs-upload/index.js +6 -6
- package/packages/fs-upload/src/fs-upload-multi.vue +443 -443
- package/packages/fs-upload/src/fs-upload-single.vue +353 -353
- package/packages/fs-upload/src/fs-upload.vue +191 -191
- package/packages/fs-upload/src/see-big-picture.vue +67 -67
- package/packages/fs-upload-list/index.js +6 -6
- package/packages/fs-upload-list/src/fs-upload-list.vue +372 -372
- package/packages/hamburger/index.js +6 -6
- package/packages/hamburger/src/hamburger.vue +40 -40
- package/packages/index.js +123 -123
- package/packages/multipart-upload/index.js +6 -6
- package/packages/multipart-upload/src/index.vue +66 -66
- package/packages/multipart-upload/src/multipart-upload-form.vue +377 -377
- package/packages/multipart-upload/src/multipart-upload-list.vue +517 -517
- package/packages/organization-input/index.js +6 -6
- package/packages/organization-input/src/organization-input.vue +583 -583
- package/packages/plugins/export-data-new.js +623 -623
- package/packages/plugins/export-data.js +431 -431
- package/packages/plugins/index.js +15 -15
- package/packages/plugins/public-method.js +47 -47
- package/packages/remove-department/index.js +6 -6
- package/packages/remove-department/src/remove-department.vue +200 -200
- package/packages/remove-department/src/remove-dept-service.js +31 -31
- package/packages/remove-user/index.js +6 -6
- package/packages/remove-user/src/remove-user-service.js +31 -31
- package/packages/remove-user/src/remove-user.vue +226 -226
- package/packages/remove-workgroup/index.js +6 -6
- package/packages/remove-workgroup/src/remove-workgroup-service.js +31 -31
- package/packages/remove-workgroup/src/remove-workgroup.vue +183 -183
- package/packages/rich-editor/index.js +7 -7
- package/packages/rich-editor/index.vue +297 -297
- package/packages/rich-editor/langs/zh-Hans.js +438 -438
- package/packages/rich-editor/viewer.vue +105 -105
- package/packages/scan-code-input/index.js +6 -6
- package/packages/scan-code-input/src/events.js +34 -34
- package/packages/scan-code-input/src/scan-code-input-colse.vue +140 -140
- package/packages/scan-code-input/src/scan-code-input.vue +132 -132
- package/packages/secret-info/index.js +7 -7
- package/packages/secret-info/index.vue +100 -100
- package/packages/super-grid/index.js +7 -7
- package/packages/super-grid/src/apis.js +1092 -1092
- package/packages/super-grid/src/columns-config.vue +427 -427
- package/packages/super-grid/src/custom-formatter.js +394 -394
- package/packages/super-grid/src/eventBus.js +2 -2
- package/packages/super-grid/src/events.js +56 -56
- package/packages/super-grid/src/formValidatorUtil.js +300 -300
- package/packages/super-grid/src/formatter.js +196 -196
- package/packages/super-grid/src/group-column.vue +99 -99
- package/packages/super-grid/src/header-context-menu.vue +82 -82
- package/packages/super-grid/src/index-column.vue +69 -69
- package/packages/super-grid/src/public-methods.js +30 -30
- package/packages/super-grid/src/row-operation.vue +193 -193
- package/packages/super-grid/src/search-button.vue +74 -74
- package/packages/super-grid/src/search-condition-input.vue +73 -73
- package/packages/super-grid/src/search-condition-list.vue +68 -68
- package/packages/super-grid/src/search-form-advancedQuery.vue +819 -819
- package/packages/super-grid/src/search-form-dialog.vue +77 -77
- package/packages/super-grid/src/search-form-item.vue +495 -495
- package/packages/super-grid/src/search-form-number.vue +111 -111
- package/packages/super-grid/src/search-form-ordinarySearch.vue +239 -239
- package/packages/super-grid/src/search-form.vue +762 -762
- package/packages/super-grid/src/search-methods.js +592 -592
- package/packages/super-grid/src/selection-column.vue +46 -46
- package/packages/super-grid/src/store.js +3 -3
- package/packages/super-grid/src/super-grid-service.js +728 -728
- package/packages/super-grid/src/super-grid.vue +3011 -3011
- package/packages/super-grid/src/utils.js +880 -880
- package/packages/super-grid/src/view-image-dialog.vue +176 -176
- package/packages/super-nine-grid/index.js +7 -7
- package/packages/super-nine-grid/src/apis.js +108 -108
- package/packages/super-nine-grid/src/custom-formatter.js +73 -73
- package/packages/super-nine-grid/src/formatter.js +134 -134
- package/packages/super-nine-grid/src/search-form-number.vue +35 -35
- package/packages/super-nine-grid/src/search-form.vue +700 -700
- package/packages/super-nine-grid/src/search-methods.js +151 -151
- package/packages/super-nine-grid/src/store.js +3 -3
- package/packages/super-nine-grid/src/super-grid-service.js +107 -107
- package/packages/svg-icon/index.js +6 -6
- package/packages/svg-icon/src/svg-icon.vue +43 -43
- package/packages/utils/date-util.js +292 -292
- package/packages/utils/dom.js +227 -227
- package/packages/utils/gogocodeTransfer.js +59 -59
- package/packages/utils/memory-cache-utils.js +117 -117
- package/packages/utils/utils.js +180 -180
- package/packages/utils/value-set.js +97 -97
- package/packages/valid-code/index.js +7 -7
- package/packages/valid-code/src/valid-code.vue +104 -104
- package/packages/workflow-button/index.js +6 -6
- package/packages/workflow-button/src/workflow-button.vue +550 -550
- package/packages/workflow-history-list/index.js +6 -6
- package/packages/workflow-history-list/src/api.js +7 -7
- package/packages/workflow-history-list/src/workflow-history-list.vue +291 -291
- package/packages/workgroup-tree/index.js +6 -6
- package/packages/workgroup-tree/src/workgroup-tree.vue +86 -86
- package/packages/workgroup-tree-inline/index.js +6 -6
- package/packages/workgroup-tree-inline/src/search-result.vue +222 -222
- package/packages/workgroup-tree-inline/src/workgroup-tree-inline.vue +516 -516
- package/packages/workgroup-tree-inline/src/workgroup-tree-service.js +93 -93
- package/packages/workgroup-user-tree/index.js +6 -6
- package/packages/workgroup-user-tree/src/workgroup-user-tree.vue +103 -103
- package/packages/workgroup-user-tree-inline/index.js +9 -9
- package/packages/workgroup-user-tree-inline/src/search-result.vue +266 -266
- package/packages/workgroup-user-tree-inline/src/workgroup-tree-inline-service.js +239 -239
- package/packages/workgroup-user-tree-inline/src/workgroup-user-tree-inline.vue +657 -657
- package/packages/year-range-picker/index.js +6 -6
- package/packages/year-range-picker/src/year-range-picker.vue +53 -53
- package/src/api/sso-service.js +172 -172
- package/src/api/tab.js +36 -36
- package/src/api/user-service.js +11 -11
- package/src/directives/permission/index.js +13 -13
- package/src/directives/permission/permission.js +20 -20
- package/src/i18n/langs/cn.js +259 -259
- package/src/i18n/langs/en.js +269 -269
- package/src/index.js +93 -93
- package/src/plugins.js +18 -18
- package/src/router/index.js +8 -26
- package/src/store/getters.js +15 -15
- package/src/store/index.js +19 -19
- package/src/store/modules/app.js +54 -54
- package/src/store/modules/tab-content.js +36 -36
- package/src/store/modules/user.js +285 -285
- package/src/utils/auth.js +61 -61
- package/src/utils/calculator/calculator-factory-wf.js +558 -558
- package/src/utils/calculator/calculator-factory.js +145 -145
- package/src/utils/calculator/calculator-util.js +166 -166
- package/src/utils/eventBus.js +2 -2
- package/src/utils/iconUtils.js +28 -28
- package/src/utils/index.js +102 -102
- package/src/utils/jump-page-utils.js +824 -824
- package/src/utils/menu.js +19 -19
- package/src/utils/permission.js +31 -31
- package/src/utils/permissionAuth.js +96 -96
- package/src/utils/range-selector.js +188 -188
- package/src/utils/request.js +269 -269
- package/src/utils/restful-interface-utils.js +57 -57
- package/src/utils/util.js +703 -703
- package/src/utils/validate.js +34 -34
- package/src/utils/watermark.js +108 -108
- package/src/utils/workflow-util.js +93 -93
- package/src/views/404.vue +248 -248
- package/src/views/dsc-component/Sidebar/Item.vue +84 -84
- package/src/views/dsc-component/Sidebar/Link.vue +38 -38
- package/src/views/dsc-component/Sidebar/SidebarItem.vue +198 -198
- package/src/views/dsc-component/Sidebar/index.vue +229 -229
- package/src/views/dsc-component/tabs/tab-content.vue +203 -203
- package/src/views/error-page/401.vue +106 -106
- package/src/views/error-page/404.vue +248 -248
- package/src/views/layout/EmptyLayout.vue +3 -3
- package/src/views/layout/Layout.vue +81 -81
- package/src/views/layout/NewLayout.vue +18 -18
- package/src/views/layout/components/AppMain.vue +39 -39
- package/src/views/layout/components/Breadcrumb/index.vue +158 -158
- package/src/views/layout/components/Menubar/Item.vue +79 -79
- package/src/views/layout/components/Menubar/Link.vue +38 -38
- package/src/views/layout/components/Menubar/index.vue +210 -210
- package/src/views/layout/components/Sidebar/Item.vue +53 -53
- package/src/views/layout/components/Sidebar/Link.vue +38 -38
- package/src/views/layout/components/Sidebar/index.vue +141 -141
- package/src/views/layout/components/iframe-page.vue +38 -38
- package/src/views/layout/components/index.js +4 -4
- package/src/views/layout/components/tabs/tab-content.vue +207 -207
- package/src/views/layout/mixin/ResizeHandler.js +41 -41
- package/src/views/layout/tab-content-iframe-index.vue +38 -38
- package/src/views/layout/tab-content-index.vue +93 -93
- package/src/views/login/authredirect.vue +10 -10
- package/src/views/login/index.vue +296 -296
- package/src/views/login/update-password.vue +243 -243
- package/src/views/redirect/index.vue +14 -14
- package/src/views/wf-history/tache-subprocess-history.vue +45 -45
|
@@ -1,297 +1,297 @@
|
|
|
1
|
-
<template>
|
|
2
|
-
<div :style="{ maxHeight: maxHeight + 'px' }">
|
|
3
|
-
<Editor
|
|
4
|
-
v-if="!disabled"
|
|
5
|
-
v-model:value="contentValue"
|
|
6
|
-
:disabled="disabled"
|
|
7
|
-
:init="init"
|
|
8
|
-
/>
|
|
9
|
-
<div v-else>
|
|
10
|
-
<div
|
|
11
|
-
:id="viewerId"
|
|
12
|
-
:style="{ maxHeight: maxHeight + 'px' }"
|
|
13
|
-
style="overflow: auto; border: 1px solid #dcdfe6; padding: 2px"
|
|
14
|
-
/>
|
|
15
|
-
<el-tooltip
|
|
16
|
-
:content="$t('imatrixUIPublicModel.fullScreen')"
|
|
17
|
-
class="item"
|
|
18
|
-
effect="dark"
|
|
19
|
-
placement="top"
|
|
20
|
-
>
|
|
21
|
-
<em
|
|
22
|
-
class="el-icon-full-screen"
|
|
23
|
-
style="z-index: 1; right: 20px; position: absolute; top: 2px"
|
|
24
|
-
@click="fullScreenContent"
|
|
25
|
-
/>
|
|
26
|
-
</el-tooltip>
|
|
27
|
-
<el-image
|
|
28
|
-
ref="previewImg"
|
|
29
|
-
:preview-src-list="srcList"
|
|
30
|
-
:src="srcList[0]"
|
|
31
|
-
style="display: none; width: 100px; height: 100px"
|
|
32
|
-
/>
|
|
33
|
-
</div>
|
|
34
|
-
<el-dialog
|
|
35
|
-
v-model="dialogVisible"
|
|
36
|
-
:title="title"
|
|
37
|
-
append-to-body
|
|
38
|
-
destroy-on-close
|
|
39
|
-
fullscreen
|
|
40
|
-
>
|
|
41
|
-
<div :id="fullscreenViewerId"/>
|
|
42
|
-
</el-dialog>
|
|
43
|
-
</div>
|
|
44
|
-
</template>
|
|
45
|
-
|
|
46
|
-
<script>
|
|
47
|
-
import {$emit} from '../utils/gogocodeTransfer'
|
|
48
|
-
|
|
49
|
-
import {getLanguageWithLocale} from '../../src/utils/util'
|
|
50
|
-
// 引入tinymce编辑器
|
|
51
|
-
// import Editor from '@tinymce/tinymce-vue'
|
|
52
|
-
// // 引入node_modules里的tinymce相关文件文件
|
|
53
|
-
// import tinymce from 'tinymce/tinymce.min.js' // tinymce默认hidden,不引入则不显示编辑器
|
|
54
|
-
// import 'tinymce/themes/silver' // 编辑器主题,不引入则报错
|
|
55
|
-
// import 'tinymce/icons/default' // 引入编辑器图标icon,不引入则不显示对应图标
|
|
56
|
-
//
|
|
57
|
-
// // 引入编辑器插件
|
|
58
|
-
// import 'tinymce/plugins/advlist' // 高级列表
|
|
59
|
-
// import 'tinymce/plugins/directionality' // 文字方向
|
|
60
|
-
// import 'tinymce/plugins/fullscreen' // 全屏
|
|
61
|
-
// import 'tinymce/plugins/hr' // 水平分割线
|
|
62
|
-
// import 'tinymce/plugins/image' // 插入编辑图片
|
|
63
|
-
// import 'tinymce/plugins/link' // 超链接
|
|
64
|
-
// import 'tinymce/plugins/lists' // 列表插件
|
|
65
|
-
// import 'tinymce/plugins/paste' // 粘贴插件
|
|
66
|
-
// import 'tinymce/plugins/preview' // 预览
|
|
67
|
-
// import 'tinymce/plugins/print' // 打印
|
|
68
|
-
// import 'tinymce/plugins/quickbars' // 快速工具栏
|
|
69
|
-
// import 'tinymce/plugins/save' // 保存
|
|
70
|
-
// import 'tinymce/plugins/searchreplace' // 查找替换
|
|
71
|
-
// // import 'tinymce/plugins/spellchecker' //拼写检查,暂未加入汉化,不建议使用
|
|
72
|
-
// // import 'tinymce/plugins/tabfocus' // 切入切出,按tab键切出编辑器,切入页面其他输入框中
|
|
73
|
-
// import 'tinymce/plugins/table' // 表格
|
|
74
|
-
// // import 'tinymce/plugins/template' // 内容模板
|
|
75
|
-
// import 'tinymce/plugins/textcolor' // 文字颜色
|
|
76
|
-
// // import 'tinymce/plugins/textpattern' // 快速排版
|
|
77
|
-
// // import 'tinymce/plugins/toc' // 目录生成器
|
|
78
|
-
// // import 'tinymce/plugins/visualblocks' // 显示元素范围
|
|
79
|
-
// // import 'tinymce/plugins/visualchars' // 显示不可见字符
|
|
80
|
-
// import 'tinymce/plugins/wordcount' // 字数统计
|
|
81
|
-
// // 样式
|
|
82
|
-
// // import 'tinymce/skins/content/default/content.min.css'
|
|
83
|
-
// import 'tinymce/skins/ui/oxide/skin.min.css'
|
|
84
|
-
// import 'tinymce/skins/ui/oxide/content.min.css'
|
|
85
|
-
// // 主题
|
|
86
|
-
// import 'tinymce/themes/silver'
|
|
87
|
-
|
|
88
|
-
export default {
|
|
89
|
-
name: 'RichEditor',
|
|
90
|
-
components: {
|
|
91
|
-
// Editor,
|
|
92
|
-
},
|
|
93
|
-
props: {
|
|
94
|
-
entity: {
|
|
95
|
-
type: Object,
|
|
96
|
-
default: null,
|
|
97
|
-
},
|
|
98
|
-
prop: {
|
|
99
|
-
type: String,
|
|
100
|
-
default: null,
|
|
101
|
-
},
|
|
102
|
-
value: {
|
|
103
|
-
type: String,
|
|
104
|
-
default: '',
|
|
105
|
-
},
|
|
106
|
-
disabled: {
|
|
107
|
-
type: Boolean,
|
|
108
|
-
default: false,
|
|
109
|
-
},
|
|
110
|
-
options: {
|
|
111
|
-
type: Object,
|
|
112
|
-
default: null,
|
|
113
|
-
},
|
|
114
|
-
title: {
|
|
115
|
-
type: String,
|
|
116
|
-
default: '',
|
|
117
|
-
},
|
|
118
|
-
plugins: {
|
|
119
|
-
type: [String, Array],
|
|
120
|
-
default:
|
|
121
|
-
'paste print preview searchreplace directionality fullscreen image link table hr advlist lists wordcount ',
|
|
122
|
-
},
|
|
123
|
-
toolbar: {
|
|
124
|
-
type: [String, Array],
|
|
125
|
-
default:
|
|
126
|
-
' undo redo | formatselect fontsizeselect bold italic strikethrough underline hr forecolor backcolor | image | ' +
|
|
127
|
-
' lineheight bullist numlist table | print fullscreen preview ',
|
|
128
|
-
},
|
|
129
|
-
},
|
|
130
|
-
data() {
|
|
131
|
-
const _that = this
|
|
132
|
-
if (getLanguageWithLocale() === 'zh_CN') {
|
|
133
|
-
// require('./langs/zh-Hans.js')
|
|
134
|
-
}
|
|
135
|
-
let maxHeight = '400'
|
|
136
|
-
if (this.options && this.options.maxHeight) {
|
|
137
|
-
maxHeight = this.options.maxHeight
|
|
138
|
-
}
|
|
139
|
-
return {
|
|
140
|
-
maxHeight,
|
|
141
|
-
init: {
|
|
142
|
-
height: maxHeight,
|
|
143
|
-
language: 'zh-Hans', // 语言类型
|
|
144
|
-
plugins: this.plugins, // 插件配置
|
|
145
|
-
toolbar: this.toolbar, // 工具栏配置,设为false则隐藏
|
|
146
|
-
menubar: false, // 菜单栏配置,设为false则隐藏,不配置则默认显示全部菜单,也可自定义配置--查看 http://tinymce.ax-z.cn/configure/editor-appearance.php --搜索“自定义菜单”
|
|
147
|
-
fontsize_formats:
|
|
148
|
-
'12px 14px 16px 18px 20px 22px 24px 28px 32px 36px 48px 56px 72px', // 字体大小
|
|
149
|
-
font_formats:
|
|
150
|
-
'微软雅黑=Microsoft YaHei,Helvetica Neue,PingFang SC,sans-serif;苹果苹方=PingFang SC,Microsoft YaHei,sans-serif;宋体=simsun,serif;仿宋体=FangSong,serif;黑体=SimHei,sans-serif;Arial=arial,helvetica,sans-serif;Arial Black=arial black,avant garde;Book Antiqua=book antiqua,palatino;', // 字体样式
|
|
151
|
-
// 自带默认字体:'Andale Mono=andale mono,times;Arial=arial,helvetica,sans-serif;Arial Black=arial black,avant garde;Book Antiqua=book antiqua,palatino;Comic Sans MS=comic sans ms,sans-serif;Courier New=courier new,courier;Georgia=georgia,palatino;Helvetica=helvetica;Impact=impact,chicago;Symbol=symbol;Tahoma=tahoma,arial,helvetica,sans-serif;Terminal=terminal,monaco;Times New Roman=times new roman,times;Trebuchet MS=trebuchet ms,geneva;Verdana=verdana,geneva;Webdings=webdings;Wingdings=wingdings,zapf dingbats'
|
|
152
|
-
lineheight_formats: '0.5 0.8 1 1.2 1.5 1.75 2 2.5 3 4 5', // 行高配置,也可配置成"12px 14px 16px 20px"这种形式
|
|
153
|
-
placeholder: '在这里输入文字',
|
|
154
|
-
branding: false, // tiny技术支持信息是否显示
|
|
155
|
-
resize: false, // 编辑器宽高是否可变,false-否,true-高可变,'both'-宽高均可,注意引号
|
|
156
|
-
// statusbar: false, //最下方的元素路径和字数统计那一栏是否显示
|
|
157
|
-
elementpath: false, // 元素路径是否显示
|
|
158
|
-
// image_caption: true,
|
|
159
|
-
// relative_urls: false, //false: tinymce将不再自动将文件路径由绝对转为相对
|
|
160
|
-
// convert_urls: false, //false: tinymce将不再自动处理文件路径
|
|
161
|
-
// file_picker_callback: () => {
|
|
162
|
-
// alert(11)
|
|
163
|
-
// },
|
|
164
|
-
image_description: false,
|
|
165
|
-
content_style: 'img {width:400px;height:300px}', // 直接自定义可编辑区域的css样式
|
|
166
|
-
// content_css: '/tinycontent.css', //以css文件方式自定义可编辑区域的css样式,css文件需自己创建并引入
|
|
167
|
-
// images_upload_url: '/apib/api-upload/uploadimg', //后端处理程序的url,建议直接自定义上传函数image_upload_handler,这个就可以不用了
|
|
168
|
-
// images_upload_base_path: '/demo', //相对基本路径--关于图片上传建议查看--http://tinymce.ax-z.cn/general/upload-images.php
|
|
169
|
-
paste_data_images: true, // 图片是否可粘贴'
|
|
170
|
-
urlconverter_callback: (url, node, onSave, name) => {
|
|
171
|
-
if (node === 'img' && url.startsWith('blob:')) {
|
|
172
|
-
console.log('urlconverter_callback ....')
|
|
173
|
-
tinymce.activeEditor && tinymce.activeEditor.uploadImages()
|
|
174
|
-
return url
|
|
175
|
-
}
|
|
176
|
-
return url
|
|
177
|
-
},
|
|
178
|
-
images_upload_handler: (blobInfo, success, failure, progress) => {
|
|
179
|
-
let file
|
|
180
|
-
if (blobInfo.blob() instanceof File) {
|
|
181
|
-
console.log('images_upload_handler .File')
|
|
182
|
-
file = blobInfo.blob()
|
|
183
|
-
} else {
|
|
184
|
-
console.log('images_upload_handler .base64')
|
|
185
|
-
file = _that.base64ToFile(blobInfo.base64(), 'a.png')
|
|
186
|
-
}
|
|
187
|
-
const params = new FormData()
|
|
188
|
-
params.append('file', file)
|
|
189
|
-
const config = {
|
|
190
|
-
headers: {
|
|
191
|
-
'Content-Type': 'multipart/form-data',
|
|
192
|
-
},
|
|
193
|
-
}
|
|
194
|
-
_that.$http
|
|
195
|
-
.post('/common/fs-upload/rich-editor-image', params, config)
|
|
196
|
-
.then((res) => {
|
|
197
|
-
console.log(res)
|
|
198
|
-
success(res.url)
|
|
199
|
-
})
|
|
200
|
-
.catch(() => {
|
|
201
|
-
failure('上传出错,服务器开小差了呢')
|
|
202
|
-
})
|
|
203
|
-
},
|
|
204
|
-
},
|
|
205
|
-
contentValue: this.value,
|
|
206
|
-
markValue: '',
|
|
207
|
-
srcList: [],
|
|
208
|
-
psrcList: [],
|
|
209
|
-
viewerId: 'aglie_rich_editor_' + new Date().getTime(),
|
|
210
|
-
dialogVisible: false,
|
|
211
|
-
fullscreenViewerId: 'editor_viewer_' + new Date().getTime(),
|
|
212
|
-
ImageComponent: null,
|
|
213
|
-
}
|
|
214
|
-
},
|
|
215
|
-
watch: {
|
|
216
|
-
value: {
|
|
217
|
-
deep: true,
|
|
218
|
-
handler(newValue, oldValue) {
|
|
219
|
-
this.contentValue = newValue
|
|
220
|
-
this.entity[this.prop] = newValue
|
|
221
|
-
},
|
|
222
|
-
},
|
|
223
|
-
contentValue: {
|
|
224
|
-
deep: true,
|
|
225
|
-
handler(newValue, oldValue) {
|
|
226
|
-
$emit(this, 'update:value', newValue)
|
|
227
|
-
this.entity[this.prop] = newValue
|
|
228
|
-
},
|
|
229
|
-
},
|
|
230
|
-
disabled: {
|
|
231
|
-
deep: true,
|
|
232
|
-
handler(newValue, oldValue) {
|
|
233
|
-
if (newValue) {
|
|
234
|
-
this.initViewer()
|
|
235
|
-
}
|
|
236
|
-
},
|
|
237
|
-
},
|
|
238
|
-
},
|
|
239
|
-
created() {
|
|
240
|
-
},
|
|
241
|
-
mounted() {
|
|
242
|
-
if (this.disabled) {
|
|
243
|
-
this.initViewer()
|
|
244
|
-
} else {
|
|
245
|
-
tinymce.init(this.init)
|
|
246
|
-
}
|
|
247
|
-
},
|
|
248
|
-
methods: {
|
|
249
|
-
showImage($event) {
|
|
250
|
-
console.log(this.$refs.previewImg)
|
|
251
|
-
this.srcList = [$event.target.currentSrc]
|
|
252
|
-
this.$refs.previewImg.showViewer = true
|
|
253
|
-
},
|
|
254
|
-
fullScreenContent() {
|
|
255
|
-
this.dialogVisible = true
|
|
256
|
-
this.$nextTick(() => {
|
|
257
|
-
// 必须得再new一个, 不然会导致表单里显示。弹框不显示,弹框显示,表单不显示内容
|
|
258
|
-
const viewContent = new this.ImageComponent().$mount()
|
|
259
|
-
document
|
|
260
|
-
.getElementById(this.fullscreenViewerId)
|
|
261
|
-
.appendChild(viewContent.$el)
|
|
262
|
-
})
|
|
263
|
-
},
|
|
264
|
-
initViewer() {
|
|
265
|
-
const that = this
|
|
266
|
-
let m = this.value.replaceAll('<img', '<img @click="showImage" ')
|
|
267
|
-
m = '<div> ' + m + ' </div> '
|
|
268
|
-
this.ImageComponent = {
|
|
269
|
-
methods: {
|
|
270
|
-
showImage($event) {
|
|
271
|
-
console.log($event)
|
|
272
|
-
that.showImage($event)
|
|
273
|
-
},
|
|
274
|
-
},
|
|
275
|
-
template: m,
|
|
276
|
-
emits: ['update:value'],
|
|
277
|
-
}
|
|
278
|
-
const viewContent = new this.ImageComponent().$mount()
|
|
279
|
-
this.$nextTick(() => {
|
|
280
|
-
document.getElementById(this.viewerId).appendChild(viewContent.$el)
|
|
281
|
-
})
|
|
282
|
-
},
|
|
283
|
-
base64ToFile(data, filename) {
|
|
284
|
-
var bstr = atob(data)
|
|
285
|
-
var n = bstr.length
|
|
286
|
-
var u8arr = new Uint8Array(n)
|
|
287
|
-
filename =
|
|
288
|
-
new Date().getTime() + '-' + Math.floor(Math.random() * 10000) + '.png'
|
|
289
|
-
while (n--) {
|
|
290
|
-
u8arr[n] = bstr.charCodeAt(n)
|
|
291
|
-
}
|
|
292
|
-
return new File([u8arr], filename, {type: 'image/png'})
|
|
293
|
-
},
|
|
294
|
-
},
|
|
295
|
-
emits: ['update:value'],
|
|
296
|
-
}
|
|
297
|
-
</script>
|
|
1
|
+
<template>
|
|
2
|
+
<div :style="{ maxHeight: maxHeight + 'px' }">
|
|
3
|
+
<Editor
|
|
4
|
+
v-if="!disabled"
|
|
5
|
+
v-model:value="contentValue"
|
|
6
|
+
:disabled="disabled"
|
|
7
|
+
:init="init"
|
|
8
|
+
/>
|
|
9
|
+
<div v-else>
|
|
10
|
+
<div
|
|
11
|
+
:id="viewerId"
|
|
12
|
+
:style="{ maxHeight: maxHeight + 'px' }"
|
|
13
|
+
style="overflow: auto; border: 1px solid #dcdfe6; padding: 2px"
|
|
14
|
+
/>
|
|
15
|
+
<el-tooltip
|
|
16
|
+
:content="$t('imatrixUIPublicModel.fullScreen')"
|
|
17
|
+
class="item"
|
|
18
|
+
effect="dark"
|
|
19
|
+
placement="top"
|
|
20
|
+
>
|
|
21
|
+
<em
|
|
22
|
+
class="el-icon-full-screen"
|
|
23
|
+
style="z-index: 1; right: 20px; position: absolute; top: 2px"
|
|
24
|
+
@click="fullScreenContent"
|
|
25
|
+
/>
|
|
26
|
+
</el-tooltip>
|
|
27
|
+
<el-image
|
|
28
|
+
ref="previewImg"
|
|
29
|
+
:preview-src-list="srcList"
|
|
30
|
+
:src="srcList[0]"
|
|
31
|
+
style="display: none; width: 100px; height: 100px"
|
|
32
|
+
/>
|
|
33
|
+
</div>
|
|
34
|
+
<el-dialog
|
|
35
|
+
v-model="dialogVisible"
|
|
36
|
+
:title="title"
|
|
37
|
+
append-to-body
|
|
38
|
+
destroy-on-close
|
|
39
|
+
fullscreen
|
|
40
|
+
>
|
|
41
|
+
<div :id="fullscreenViewerId"/>
|
|
42
|
+
</el-dialog>
|
|
43
|
+
</div>
|
|
44
|
+
</template>
|
|
45
|
+
|
|
46
|
+
<script>
|
|
47
|
+
import {$emit} from '../utils/gogocodeTransfer'
|
|
48
|
+
|
|
49
|
+
import {getLanguageWithLocale} from '../../src/utils/util'
|
|
50
|
+
// 引入tinymce编辑器
|
|
51
|
+
// import Editor from '@tinymce/tinymce-vue'
|
|
52
|
+
// // 引入node_modules里的tinymce相关文件文件
|
|
53
|
+
// import tinymce from 'tinymce/tinymce.min.js' // tinymce默认hidden,不引入则不显示编辑器
|
|
54
|
+
// import 'tinymce/themes/silver' // 编辑器主题,不引入则报错
|
|
55
|
+
// import 'tinymce/icons/default' // 引入编辑器图标icon,不引入则不显示对应图标
|
|
56
|
+
//
|
|
57
|
+
// // 引入编辑器插件
|
|
58
|
+
// import 'tinymce/plugins/advlist' // 高级列表
|
|
59
|
+
// import 'tinymce/plugins/directionality' // 文字方向
|
|
60
|
+
// import 'tinymce/plugins/fullscreen' // 全屏
|
|
61
|
+
// import 'tinymce/plugins/hr' // 水平分割线
|
|
62
|
+
// import 'tinymce/plugins/image' // 插入编辑图片
|
|
63
|
+
// import 'tinymce/plugins/link' // 超链接
|
|
64
|
+
// import 'tinymce/plugins/lists' // 列表插件
|
|
65
|
+
// import 'tinymce/plugins/paste' // 粘贴插件
|
|
66
|
+
// import 'tinymce/plugins/preview' // 预览
|
|
67
|
+
// import 'tinymce/plugins/print' // 打印
|
|
68
|
+
// import 'tinymce/plugins/quickbars' // 快速工具栏
|
|
69
|
+
// import 'tinymce/plugins/save' // 保存
|
|
70
|
+
// import 'tinymce/plugins/searchreplace' // 查找替换
|
|
71
|
+
// // import 'tinymce/plugins/spellchecker' //拼写检查,暂未加入汉化,不建议使用
|
|
72
|
+
// // import 'tinymce/plugins/tabfocus' // 切入切出,按tab键切出编辑器,切入页面其他输入框中
|
|
73
|
+
// import 'tinymce/plugins/table' // 表格
|
|
74
|
+
// // import 'tinymce/plugins/template' // 内容模板
|
|
75
|
+
// import 'tinymce/plugins/textcolor' // 文字颜色
|
|
76
|
+
// // import 'tinymce/plugins/textpattern' // 快速排版
|
|
77
|
+
// // import 'tinymce/plugins/toc' // 目录生成器
|
|
78
|
+
// // import 'tinymce/plugins/visualblocks' // 显示元素范围
|
|
79
|
+
// // import 'tinymce/plugins/visualchars' // 显示不可见字符
|
|
80
|
+
// import 'tinymce/plugins/wordcount' // 字数统计
|
|
81
|
+
// // 样式
|
|
82
|
+
// // import 'tinymce/skins/content/default/content.min.css'
|
|
83
|
+
// import 'tinymce/skins/ui/oxide/skin.min.css'
|
|
84
|
+
// import 'tinymce/skins/ui/oxide/content.min.css'
|
|
85
|
+
// // 主题
|
|
86
|
+
// import 'tinymce/themes/silver'
|
|
87
|
+
|
|
88
|
+
export default {
|
|
89
|
+
name: 'RichEditor',
|
|
90
|
+
components: {
|
|
91
|
+
// Editor,
|
|
92
|
+
},
|
|
93
|
+
props: {
|
|
94
|
+
entity: {
|
|
95
|
+
type: Object,
|
|
96
|
+
default: null,
|
|
97
|
+
},
|
|
98
|
+
prop: {
|
|
99
|
+
type: String,
|
|
100
|
+
default: null,
|
|
101
|
+
},
|
|
102
|
+
value: {
|
|
103
|
+
type: String,
|
|
104
|
+
default: '',
|
|
105
|
+
},
|
|
106
|
+
disabled: {
|
|
107
|
+
type: Boolean,
|
|
108
|
+
default: false,
|
|
109
|
+
},
|
|
110
|
+
options: {
|
|
111
|
+
type: Object,
|
|
112
|
+
default: null,
|
|
113
|
+
},
|
|
114
|
+
title: {
|
|
115
|
+
type: String,
|
|
116
|
+
default: '',
|
|
117
|
+
},
|
|
118
|
+
plugins: {
|
|
119
|
+
type: [String, Array],
|
|
120
|
+
default:
|
|
121
|
+
'paste print preview searchreplace directionality fullscreen image link table hr advlist lists wordcount ',
|
|
122
|
+
},
|
|
123
|
+
toolbar: {
|
|
124
|
+
type: [String, Array],
|
|
125
|
+
default:
|
|
126
|
+
' undo redo | formatselect fontsizeselect bold italic strikethrough underline hr forecolor backcolor | image | ' +
|
|
127
|
+
' lineheight bullist numlist table | print fullscreen preview ',
|
|
128
|
+
},
|
|
129
|
+
},
|
|
130
|
+
data() {
|
|
131
|
+
const _that = this
|
|
132
|
+
if (getLanguageWithLocale() === 'zh_CN') {
|
|
133
|
+
// require('./langs/zh-Hans.js')
|
|
134
|
+
}
|
|
135
|
+
let maxHeight = '400'
|
|
136
|
+
if (this.options && this.options.maxHeight) {
|
|
137
|
+
maxHeight = this.options.maxHeight
|
|
138
|
+
}
|
|
139
|
+
return {
|
|
140
|
+
maxHeight,
|
|
141
|
+
init: {
|
|
142
|
+
height: maxHeight,
|
|
143
|
+
language: 'zh-Hans', // 语言类型
|
|
144
|
+
plugins: this.plugins, // 插件配置
|
|
145
|
+
toolbar: this.toolbar, // 工具栏配置,设为false则隐藏
|
|
146
|
+
menubar: false, // 菜单栏配置,设为false则隐藏,不配置则默认显示全部菜单,也可自定义配置--查看 http://tinymce.ax-z.cn/configure/editor-appearance.php --搜索“自定义菜单”
|
|
147
|
+
fontsize_formats:
|
|
148
|
+
'12px 14px 16px 18px 20px 22px 24px 28px 32px 36px 48px 56px 72px', // 字体大小
|
|
149
|
+
font_formats:
|
|
150
|
+
'微软雅黑=Microsoft YaHei,Helvetica Neue,PingFang SC,sans-serif;苹果苹方=PingFang SC,Microsoft YaHei,sans-serif;宋体=simsun,serif;仿宋体=FangSong,serif;黑体=SimHei,sans-serif;Arial=arial,helvetica,sans-serif;Arial Black=arial black,avant garde;Book Antiqua=book antiqua,palatino;', // 字体样式
|
|
151
|
+
// 自带默认字体:'Andale Mono=andale mono,times;Arial=arial,helvetica,sans-serif;Arial Black=arial black,avant garde;Book Antiqua=book antiqua,palatino;Comic Sans MS=comic sans ms,sans-serif;Courier New=courier new,courier;Georgia=georgia,palatino;Helvetica=helvetica;Impact=impact,chicago;Symbol=symbol;Tahoma=tahoma,arial,helvetica,sans-serif;Terminal=terminal,monaco;Times New Roman=times new roman,times;Trebuchet MS=trebuchet ms,geneva;Verdana=verdana,geneva;Webdings=webdings;Wingdings=wingdings,zapf dingbats'
|
|
152
|
+
lineheight_formats: '0.5 0.8 1 1.2 1.5 1.75 2 2.5 3 4 5', // 行高配置,也可配置成"12px 14px 16px 20px"这种形式
|
|
153
|
+
placeholder: '在这里输入文字',
|
|
154
|
+
branding: false, // tiny技术支持信息是否显示
|
|
155
|
+
resize: false, // 编辑器宽高是否可变,false-否,true-高可变,'both'-宽高均可,注意引号
|
|
156
|
+
// statusbar: false, //最下方的元素路径和字数统计那一栏是否显示
|
|
157
|
+
elementpath: false, // 元素路径是否显示
|
|
158
|
+
// image_caption: true,
|
|
159
|
+
// relative_urls: false, //false: tinymce将不再自动将文件路径由绝对转为相对
|
|
160
|
+
// convert_urls: false, //false: tinymce将不再自动处理文件路径
|
|
161
|
+
// file_picker_callback: () => {
|
|
162
|
+
// alert(11)
|
|
163
|
+
// },
|
|
164
|
+
image_description: false,
|
|
165
|
+
content_style: 'img {width:400px;height:300px}', // 直接自定义可编辑区域的css样式
|
|
166
|
+
// content_css: '/tinycontent.css', //以css文件方式自定义可编辑区域的css样式,css文件需自己创建并引入
|
|
167
|
+
// images_upload_url: '/apib/api-upload/uploadimg', //后端处理程序的url,建议直接自定义上传函数image_upload_handler,这个就可以不用了
|
|
168
|
+
// images_upload_base_path: '/demo', //相对基本路径--关于图片上传建议查看--http://tinymce.ax-z.cn/general/upload-images.php
|
|
169
|
+
paste_data_images: true, // 图片是否可粘贴'
|
|
170
|
+
urlconverter_callback: (url, node, onSave, name) => {
|
|
171
|
+
if (node === 'img' && url.startsWith('blob:')) {
|
|
172
|
+
console.log('urlconverter_callback ....')
|
|
173
|
+
tinymce.activeEditor && tinymce.activeEditor.uploadImages()
|
|
174
|
+
return url
|
|
175
|
+
}
|
|
176
|
+
return url
|
|
177
|
+
},
|
|
178
|
+
images_upload_handler: (blobInfo, success, failure, progress) => {
|
|
179
|
+
let file
|
|
180
|
+
if (blobInfo.blob() instanceof File) {
|
|
181
|
+
console.log('images_upload_handler .File')
|
|
182
|
+
file = blobInfo.blob()
|
|
183
|
+
} else {
|
|
184
|
+
console.log('images_upload_handler .base64')
|
|
185
|
+
file = _that.base64ToFile(blobInfo.base64(), 'a.png')
|
|
186
|
+
}
|
|
187
|
+
const params = new FormData()
|
|
188
|
+
params.append('file', file)
|
|
189
|
+
const config = {
|
|
190
|
+
headers: {
|
|
191
|
+
'Content-Type': 'multipart/form-data',
|
|
192
|
+
},
|
|
193
|
+
}
|
|
194
|
+
_that.$http
|
|
195
|
+
.post('/common/fs-upload/rich-editor-image', params, config)
|
|
196
|
+
.then((res) => {
|
|
197
|
+
console.log(res)
|
|
198
|
+
success(res.url)
|
|
199
|
+
})
|
|
200
|
+
.catch(() => {
|
|
201
|
+
failure('上传出错,服务器开小差了呢')
|
|
202
|
+
})
|
|
203
|
+
},
|
|
204
|
+
},
|
|
205
|
+
contentValue: this.value,
|
|
206
|
+
markValue: '',
|
|
207
|
+
srcList: [],
|
|
208
|
+
psrcList: [],
|
|
209
|
+
viewerId: 'aglie_rich_editor_' + new Date().getTime(),
|
|
210
|
+
dialogVisible: false,
|
|
211
|
+
fullscreenViewerId: 'editor_viewer_' + new Date().getTime(),
|
|
212
|
+
ImageComponent: null,
|
|
213
|
+
}
|
|
214
|
+
},
|
|
215
|
+
watch: {
|
|
216
|
+
value: {
|
|
217
|
+
deep: true,
|
|
218
|
+
handler(newValue, oldValue) {
|
|
219
|
+
this.contentValue = newValue
|
|
220
|
+
this.entity[this.prop] = newValue
|
|
221
|
+
},
|
|
222
|
+
},
|
|
223
|
+
contentValue: {
|
|
224
|
+
deep: true,
|
|
225
|
+
handler(newValue, oldValue) {
|
|
226
|
+
$emit(this, 'update:value', newValue)
|
|
227
|
+
this.entity[this.prop] = newValue
|
|
228
|
+
},
|
|
229
|
+
},
|
|
230
|
+
disabled: {
|
|
231
|
+
deep: true,
|
|
232
|
+
handler(newValue, oldValue) {
|
|
233
|
+
if (newValue) {
|
|
234
|
+
this.initViewer()
|
|
235
|
+
}
|
|
236
|
+
},
|
|
237
|
+
},
|
|
238
|
+
},
|
|
239
|
+
created() {
|
|
240
|
+
},
|
|
241
|
+
mounted() {
|
|
242
|
+
if (this.disabled) {
|
|
243
|
+
this.initViewer()
|
|
244
|
+
} else {
|
|
245
|
+
tinymce.init(this.init)
|
|
246
|
+
}
|
|
247
|
+
},
|
|
248
|
+
methods: {
|
|
249
|
+
showImage($event) {
|
|
250
|
+
console.log(this.$refs.previewImg)
|
|
251
|
+
this.srcList = [$event.target.currentSrc]
|
|
252
|
+
this.$refs.previewImg.showViewer = true
|
|
253
|
+
},
|
|
254
|
+
fullScreenContent() {
|
|
255
|
+
this.dialogVisible = true
|
|
256
|
+
this.$nextTick(() => {
|
|
257
|
+
// 必须得再new一个, 不然会导致表单里显示。弹框不显示,弹框显示,表单不显示内容
|
|
258
|
+
const viewContent = new this.ImageComponent().$mount()
|
|
259
|
+
document
|
|
260
|
+
.getElementById(this.fullscreenViewerId)
|
|
261
|
+
.appendChild(viewContent.$el)
|
|
262
|
+
})
|
|
263
|
+
},
|
|
264
|
+
initViewer() {
|
|
265
|
+
const that = this
|
|
266
|
+
let m = this.value.replaceAll('<img', '<img @click="showImage" ')
|
|
267
|
+
m = '<div> ' + m + ' </div> '
|
|
268
|
+
this.ImageComponent = {
|
|
269
|
+
methods: {
|
|
270
|
+
showImage($event) {
|
|
271
|
+
console.log($event)
|
|
272
|
+
that.showImage($event)
|
|
273
|
+
},
|
|
274
|
+
},
|
|
275
|
+
template: m,
|
|
276
|
+
emits: ['update:value'],
|
|
277
|
+
}
|
|
278
|
+
const viewContent = new this.ImageComponent().$mount()
|
|
279
|
+
this.$nextTick(() => {
|
|
280
|
+
document.getElementById(this.viewerId).appendChild(viewContent.$el)
|
|
281
|
+
})
|
|
282
|
+
},
|
|
283
|
+
base64ToFile(data, filename) {
|
|
284
|
+
var bstr = atob(data)
|
|
285
|
+
var n = bstr.length
|
|
286
|
+
var u8arr = new Uint8Array(n)
|
|
287
|
+
filename =
|
|
288
|
+
new Date().getTime() + '-' + Math.floor(Math.random() * 10000) + '.png'
|
|
289
|
+
while (n--) {
|
|
290
|
+
u8arr[n] = bstr.charCodeAt(n)
|
|
291
|
+
}
|
|
292
|
+
return new File([u8arr], filename, {type: 'image/png'})
|
|
293
|
+
},
|
|
294
|
+
},
|
|
295
|
+
emits: ['update:value'],
|
|
296
|
+
}
|
|
297
|
+
</script>
|