| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150 | 
							- const styles = (v ='') =>  v.split(';').filter(v => v && !/^[\n\s]+$/.test(v)).map(v => {
 
- 						const key = v.slice(0, v.indexOf(':'))
 
- 						const value = v.slice(v.indexOf(':')+1)
 
- 						return {
 
- 							[key
 
- 								.replace(/-([a-z])/g, function() { return arguments[1].toUpperCase()})
 
- 								.replace(/\s+/g, '')
 
- 							]: value.replace(/^\s+/, '').replace(/\s+$/, '') || ''
 
- 						}
 
- 					})
 
- export function parent(parent) {
 
- 	return {
 
- 		provide() {
 
- 			return {
 
- 				[parent]: this
 
- 			}
 
- 		},
 
- 		data() {
 
- 			return {
 
- 				el: {
 
- 					id: null,
 
- 					css: {},
 
- 					views: []
 
- 				},
 
- 			}
 
- 		},
 
- 		watch: {
 
- 			css: { 
 
- 				handler(v) {
 
- 					if(this.canvasId) {
 
- 						this.el.css = (typeof v == 'object' ? v : v && Object.assign(...styles(v))) || {}
 
- 						this.canvasWidth = this.el.css && this.el.css.width || this.canvasWidth
 
- 						this.canvasHeight = this.el.css && this.el.css.height || this.canvasHeight
 
- 					}
 
- 				},
 
- 				immediate: true
 
- 			}
 
- 		}
 
- 	}
 
- }
 
- export function children(parent, options = {}) {
 
- 	const indexKey = options.indexKey || 'index'
 
- 	return {
 
- 		inject: {
 
- 			[parent]: {
 
- 				default: null
 
- 			}
 
- 		},
 
- 		watch: {
 
- 			el: {
 
- 				handler(v, o) {
 
- 					if(JSON.stringify(v) != JSON.stringify(o))
 
- 						this.bindRelation()
 
- 				},
 
- 				deep: true,
 
- 				immediate: true
 
- 			},
 
- 			src: {
 
- 				handler(v, o) {
 
- 					if(v != o)
 
- 						this.bindRelation()
 
- 				},
 
- 				immediate: true
 
- 			},
 
- 			text: {
 
- 				handler(v, o) {
 
- 					if(v != o) this.bindRelation()
 
- 				},
 
- 				immediate: true
 
- 			},
 
- 			css: {
 
- 				handler(v, o) {
 
- 					if(v != o)
 
- 						this.el.css = (typeof v == 'object' ? v : v && Object.assign(...styles(v))) || {}
 
- 				},
 
- 				immediate: true
 
- 			},
 
- 			replace: {
 
- 				handler(v, o) {
 
- 					if(JSON.stringify(v) != JSON.stringify(o))
 
- 						this.bindRelation()
 
- 				},
 
- 				deep: true,
 
- 				immediate: true
 
- 			}
 
- 		},
 
- 		created() {
 
- 			if(!this._uid) {
 
- 				this._uid = this._.uid
 
- 			}
 
- 			Object.defineProperty(this, 'parent', {
 
- 				get: () => this[parent] || [],
 
- 			})
 
- 			Object.defineProperty(this, 'index', {
 
- 				get: () =>  {
 
- 					this.bindRelation();
 
- 					const {parent: {el: {views=[]}={}}={}} = this
 
- 					return views.indexOf(this.el)
 
- 				},
 
- 			});
 
- 			this.el.type = this.type
 
- 			if(this.uid) {
 
- 				this.el.uid = this.uid
 
- 			}
 
- 			this.bindRelation()
 
- 		},
 
- 		// #ifdef VUE3
 
- 		beforeUnmount() {
 
- 			this.removeEl()
 
- 		},
 
- 		// #endif
 
- 		// #ifdef VUE2
 
- 		beforeDestroy() {
 
- 			this.removeEl()
 
- 		},
 
- 		// #endif
 
- 		methods: {
 
- 			removeEl() {
 
- 				if (this.parent) {
 
- 					this.parent.el.views = this.parent.el.views.filter(
 
- 						(item) => item._uid !== this._uid
 
- 					);
 
- 				}
 
- 			},
 
- 			bindRelation() {
 
- 				if(!this.el._uid) {
 
- 					this.el._uid = this._uid 
 
- 				}
 
- 				if(['text','qrcode'].includes(this.type)) {
 
- 					this.el.text = this.$slots && this.$slots.default && this.$slots.default[0].text || `${this.text || ''}`.replace(/\\n/g, '\n')
 
- 				}
 
- 				if(this.type == 'image') {
 
- 					this.el.src = this.src
 
- 				}
 
- 				if (!this.parent) {
 
- 					return;
 
- 				}
 
- 				let views = this.parent.el.views || [];
 
- 				if(views.indexOf(this.el) !== -1) {
 
- 					this.parent.el.views = views.map(v => v._uid == this._uid ? this.el : v)
 
- 				} else {
 
- 					this.parent.el.views = [...views, this.el];
 
- 				}
 
- 			}
 
- 		},
 
- 		mounted() {
 
- 			// this.bindRelation()
 
- 		},
 
- 	}
 
- }
 
 
  |