Commit 07d1210409cda2697897aca6ff14a89012118106
1 parent
cee04c99
update text-component with quil editor
Showing
2 changed files
with
43 additions
and
186 deletions
front-end/h5/src/components/plugins/lbp-text.js
| 1 | -import LbpTextAlign from '@luban-h5/lbs-text-align' | |
| 2 | -import MediumEditor from 'vue2-medium-editor' | |
| 3 | -import 'medium-editor/dist/css/medium-editor.css' | |
| 4 | -import 'medium-editor/dist/css/themes/default.css' | |
| 1 | +import { quillEditor } from 'vue-quill-editor' | |
| 2 | +// require styles | |
| 3 | +import 'quill/dist/quill.core.css' | |
| 4 | +import 'quill/dist/quill.snow.css' | |
| 5 | +import './styles/text-overwrite-quil-snow-theme.scss' | |
| 5 | 6 | |
| 6 | 7 | export default { |
| 7 | 8 | render (h) { |
| ... | ... | @@ -41,78 +42,34 @@ export default { |
| 41 | 42 | > |
| 42 | 43 | { |
| 43 | 44 | this.canEdit |
| 44 | - ? <MediumEditor | |
| 45 | - text={this.text} | |
| 45 | + ? <quillEditor | |
| 46 | + content={this.text} | |
| 46 | 47 | options={{ |
| 47 | - toolbar: { | |
| 48 | - /* These are the default options for the toolbar, | |
| 49 | - if nothing is passed this is what is used */ | |
| 50 | - allowMultiParagraphSelection: true, | |
| 51 | - buttons: ['bold', 'italic', 'underline', 'anchor', 'h2', 'h3', 'quote', 'justifyCenter'], | |
| 52 | - diffLeft: 0, | |
| 53 | - diffTop: -10, | |
| 54 | - firstButtonClass: 'medium-editor-button-first', | |
| 55 | - lastButtonClass: 'medium-editor-button-last', | |
| 56 | - relativeContainer: null, | |
| 57 | - standardizeSelectionStart: false, | |
| 58 | - static: true, | |
| 59 | - | |
| 60 | - /* options which only apply when static is true */ | |
| 61 | - align: 'center', | |
| 62 | - sticky: true, | |
| 63 | - updateOnEmptySelection: false | |
| 64 | - } | |
| 65 | - }} | |
| 66 | - onEdit={(ev) => { | |
| 67 | - if (this.canEdit) { | |
| 68 | - // ev.preventDefault() | |
| 69 | - // ev.stopPropagation() | |
| 70 | - } | |
| 71 | - if (ev.event.target) { | |
| 72 | - this.text = ev.event.target.innerHTML | |
| 73 | - } | |
| 74 | - // this.$emit('input', { | |
| 75 | - // value: ev.event.target.innerHTML, | |
| 76 | - // pluginName: 'lbp-text' | |
| 77 | - // }) | |
| 48 | + modules: { | |
| 49 | + // toolbar: '#toolbar-wrapper' | |
| 50 | + toolbar: [ | |
| 51 | + ['bold', 'italic', 'underline', 'strike'], // 切换按钮 | |
| 52 | + [{ 'list': 'ordered' }, { 'list': 'bullet' }], | |
| 53 | + [{ 'color': [] }, { 'background': [] }], // 主题默认下拉,使用主题提供的值 | |
| 54 | + [{ 'align': [] }], | |
| 55 | + ['clean'], // 清除格式 | |
| 56 | + [{ 'header': [1, 2, 3, 4, 5, 6, false] }] | |
| 57 | + // https://github.com/quilljs/quill/issues/1208 | |
| 58 | + ] | |
| 59 | + }, | |
| 60 | + theme: 'snow' | |
| 78 | 61 | }} |
| 79 | - custom-tag='div'> | |
| 80 | - </MediumEditor> | |
| 62 | + onChange={({ quill, html, text }) => { | |
| 63 | + this.$emit('input', { | |
| 64 | + value: html, | |
| 65 | + pluginName: 'lbp-text' | |
| 66 | + }) | |
| 67 | + }}> | |
| 68 | + </quillEditor> | |
| 81 | 69 | : pureText |
| 82 | 70 | } |
| 83 | 71 | </div> |
| 84 | 72 | ) |
| 85 | - // return h('div', { | |
| 86 | - // style, | |
| 87 | - // on: { | |
| 88 | - // dblclick () { | |
| 89 | - // self.canEdit = true | |
| 90 | - // } | |
| 91 | - // } | |
| 92 | - // }, [ | |
| 93 | - // h('div', { | |
| 94 | - // ref: 'editableText', | |
| 95 | - // style: { | |
| 96 | - // height: '100%' | |
| 97 | - // }, | |
| 98 | - // domProps: { | |
| 99 | - // innerHTML: self.innerText, | |
| 100 | - // contentEditable: self.canEdit | |
| 101 | - // }, | |
| 102 | - // on: { | |
| 103 | - // blur () { | |
| 104 | - // self.canEdit = false | |
| 105 | - // }, | |
| 106 | - // input () { | |
| 107 | - // self.$emit('input', { | |
| 108 | - // value: self.$refs.editableText.innerHTML, | |
| 109 | - // pluginName: 'lbp-text' | |
| 110 | - // }) | |
| 111 | - // } | |
| 112 | - // } | |
| 113 | - // }) | |
| 114 | - | |
| 115 | - // ]) | |
| 116 | 73 | }, |
| 117 | 74 | name: 'lbp-text', |
| 118 | 75 | data () { |
| ... | ... | @@ -126,18 +83,6 @@ export default { |
| 126 | 83 | type: String, |
| 127 | 84 | default: '双击修改文字' |
| 128 | 85 | }, |
| 129 | - type: { | |
| 130 | - type: String, | |
| 131 | - default: 'text' | |
| 132 | - }, | |
| 133 | - placeholder: { | |
| 134 | - type: String, | |
| 135 | - default: '请填写提示文字' | |
| 136 | - }, | |
| 137 | - required: { | |
| 138 | - type: Boolean, | |
| 139 | - default: false | |
| 140 | - }, | |
| 141 | 86 | disabled: { |
| 142 | 87 | type: Boolean, |
| 143 | 88 | default: false |
| ... | ... | @@ -146,14 +91,6 @@ export default { |
| 146 | 91 | type: String, |
| 147 | 92 | default: 'transparent' |
| 148 | 93 | }, |
| 149 | - color: { | |
| 150 | - type: String, | |
| 151 | - default: 'black' | |
| 152 | - }, | |
| 153 | - fontSize: { | |
| 154 | - type: Number, | |
| 155 | - default: 14 | |
| 156 | - }, | |
| 157 | 94 | lineHeight: { |
| 158 | 95 | type: Number, |
| 159 | 96 | default: 1 |
| ... | ... | @@ -173,50 +110,10 @@ export default { |
| 173 | 110 | borderStyle: { |
| 174 | 111 | type: String, |
| 175 | 112 | default: 'solid' |
| 176 | - }, | |
| 177 | - textAlign: { | |
| 178 | - type: String, | |
| 179 | - default: 'center' | |
| 180 | 113 | } |
| 181 | 114 | }, |
| 182 | 115 | editorConfig: { |
| 183 | 116 | propsConfig: { |
| 184 | - // text: { | |
| 185 | - // type: 'a-input', | |
| 186 | - // label: '按钮文字', | |
| 187 | - // require: true, | |
| 188 | - // defaultPropValue: '双击修改文字' | |
| 189 | - // }, | |
| 190 | - fontSize: { | |
| 191 | - type: 'a-input-number', | |
| 192 | - label: '字号(px)', | |
| 193 | - require: true, | |
| 194 | - prop: { | |
| 195 | - step: 1, | |
| 196 | - min: 12, | |
| 197 | - max: 144 | |
| 198 | - }, | |
| 199 | - defaultPropValue: 14 | |
| 200 | - }, | |
| 201 | - color: { | |
| 202 | - type: 'a-input', | |
| 203 | - label: '文字颜色', | |
| 204 | - // !#zh 为编辑组件指定 prop | |
| 205 | - prop: { | |
| 206 | - type: 'color' | |
| 207 | - }, | |
| 208 | - require: true, | |
| 209 | - defaultPropValue: 'black' | |
| 210 | - }, | |
| 211 | - backgroundColor: { | |
| 212 | - type: 'a-input', // lbs-color-picker | |
| 213 | - label: '背景颜色', | |
| 214 | - prop: { | |
| 215 | - type: 'color' | |
| 216 | - }, | |
| 217 | - require: true, | |
| 218 | - defaultPropValue: '#ffffff' // TODO why logogram for color does't work? | |
| 219 | - }, | |
| 220 | 117 | borderColor: { |
| 221 | 118 | type: 'a-input', // lbs-color-picker |
| 222 | 119 | label: '边框颜色', |
| ... | ... | @@ -264,62 +161,6 @@ export default { |
| 264 | 161 | max: 10 |
| 265 | 162 | }, |
| 266 | 163 | defaultPropValue: 1 |
| 267 | - }, | |
| 268 | - textAlign: { | |
| 269 | - type: 'lbs-text-align', | |
| 270 | - label: '文字对齐', | |
| 271 | - require: true, | |
| 272 | - defaultPropValue: 'center' | |
| 273 | - } | |
| 274 | - }, | |
| 275 | - components: { | |
| 276 | - 'lbs-text-align': LbpTextAlign, | |
| 277 | - 'lbs-select-input-type': { | |
| 278 | - props: ['value'], | |
| 279 | - computed: { | |
| 280 | - value_: { | |
| 281 | - get () { | |
| 282 | - return this.value | |
| 283 | - }, | |
| 284 | - set (val) { | |
| 285 | - this.$emit('input', val) | |
| 286 | - } | |
| 287 | - } | |
| 288 | - }, | |
| 289 | - template: ` | |
| 290 | - <a-select v-model="value_" placeholder="类型"> | |
| 291 | - <a-option | |
| 292 | - v-for="item in options" | |
| 293 | - :key="item.value" | |
| 294 | - :label="item.label" | |
| 295 | - :value="item.value"> | |
| 296 | - </a-option> | |
| 297 | - </a-select> | |
| 298 | - `, | |
| 299 | - data: () => ({ | |
| 300 | - options: [ | |
| 301 | - { | |
| 302 | - label: '文字', | |
| 303 | - value: 'text' | |
| 304 | - }, | |
| 305 | - { | |
| 306 | - label: '密码', | |
| 307 | - value: 'password' | |
| 308 | - }, | |
| 309 | - { | |
| 310 | - label: '日期', | |
| 311 | - value: 'date' | |
| 312 | - }, | |
| 313 | - { | |
| 314 | - label: '邮箱', | |
| 315 | - value: 'email' | |
| 316 | - }, | |
| 317 | - { | |
| 318 | - label: '手机号', | |
| 319 | - value: 'tel' | |
| 320 | - } | |
| 321 | - ] | |
| 322 | - }) | |
| 323 | 164 | } |
| 324 | 165 | } |
| 325 | 166 | } | ... | ... |
front-end/h5/src/components/plugins/styles/text-overwrite-quil-snow-theme.scss
0 → 100644