| 
					
				 | 
			
			
				@@ -0,0 +1,214 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// #ifdef APP-NVUE 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	sleep, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	getImageInfo, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	isBase64, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	networkReg 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} from './utils'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+const dom = weex.requireModule('dom') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	version 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} from '../../package.json' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+export default { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	data() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		return { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			tempFilePath: [], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			isInitFile: false, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			osName: uni.getSystemInfoSync().osName 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	methods: { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		getParentWeith() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			return new Promise(resolve => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				dom.getComponentRect(this.$refs.limepainter, (res) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					this.parentWidth = Math.ceil(res.size.width) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					this.canvasWidth = this.canvasWidth || this.parentWidth || 300 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					this.canvasHeight = res.size.height || this.canvasHeight || 150 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					resolve(res.size) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				}) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			}) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		onPageFinish() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			this.webview = this.$refs.webview 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			this.webview.evalJS(`init(${this.dpr})`) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		onMessage(e) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			const res = e.detail.data[0] || null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			if (res.event) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				if (res.event == 'inited') { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					this.inited = true 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				if (res.event == 'fail') { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					this.$emit('fail', res) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				if (res.event == 'layoutChange') { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					const data = typeof res.data == 'string' ? JSON.parse(res.data) : res.data 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					this.canvasWidth = Math.ceil(data.width); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					this.canvasHeight = Math.ceil(data.height); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				if (res.event == 'progressChange') { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					this.progress = res.data * 1 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				if (res.event == 'file') { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					this.tempFilePath.push(res.data) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					if (this.tempFilePath.length > 7) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						this.tempFilePath.shift() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					return 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				if (res.event == 'success') { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					if (res.data) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						this.tempFilePath.push(res.data) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						if (this.tempFilePath.length > 8) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							this.tempFilePath.shift() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						if (this.isCanvasToTempFilePath) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							this.setFilePath(this.tempFilePath.join(''), { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+								isEmit: true 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							}) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					} else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						this.$emit('fail', 'canvas no data') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					return 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				this.$emit(res.event, JSON.parse(res.data)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			} else if (res.file) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				this.file = res.data; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			} else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				console.info(res[0]) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		getWebViewInited() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			if (this.inited) return Promise.resolve(this.inited); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			return new Promise((resolve) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				this.$watch( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					'inited', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					async val => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						if (val) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							resolve(val) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					}, { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						immediate: true 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			}) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		getTempFilePath() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			if (this.tempFilePath.length == 8) return Promise.resolve(this.tempFilePath) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			return new Promise((resolve) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				this.$watch( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					'tempFilePath', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					async val => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						if (val.length == 8) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							resolve(val.join('')) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					}, { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						deep: true 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			}) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		getWebViewDone() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			if (this.progress == 1) return Promise.resolve(this.progress); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			return new Promise((resolve) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				this.$watch( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					'progress', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					async val => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						if (val == 1) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							this.$emit('done') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							this.done = true 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							this.runTask() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							resolve(val) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					}, { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						immediate: true 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			}) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		async render(args) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				await this.getSize(args) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				const { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					width 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				} = args.css || args 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				if (!width && this.parentWidth) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					Object.assign(args, { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						width: this.parentWidth 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					}) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				const newNode = await this.calcImage(args); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				await this.getWebViewInited() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				this.webview.evalJS(`source(${JSON.stringify(newNode)})`) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				await this.getWebViewDone() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				await sleep(this.afterDelay) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				if (this.isCanvasToTempFilePath) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					const params = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						fileType: this.fileType, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						quality: this.quality 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					this.webview.evalJS(`save(${JSON.stringify(params)})`) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				return Promise.resolve() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			} catch (e) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				this.$emit('fail', e) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		async calcImage(args) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			let node = JSON.parse(JSON.stringify(args)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			const urlReg = /url\((.+)\)/ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			const { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				backgroundImage 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			} = node.css || {} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			const isBG = backgroundImage && urlReg.exec(backgroundImage)[1] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			const url = node.url || node.src || isBG 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			if (['text', 'qrcode'].includes(node.type)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				return node 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			if ((node.type === "image" || isBG) && url && !isBase64(url) && (this.osName == 'ios' || !networkReg 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					.test(url))) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				let { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					path 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				} = await getImageInfo(url, true) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				if (isBG) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					node.css.backgroundImage = `url(${path})` 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				} else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					node.src = path 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			} else if (node.views && node.views.length) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				for (let i = 0; i < node.views.length; i++) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					node.views[i] = await this.calcImage(node.views[i]) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			return node 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		async canvasToTempFilePath(args = {}) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			if (!this.inited) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				return this.$emit('fail', 'no init') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			this.tempFilePath = [] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			if (args.fileType == 'jpg') { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				args.fileType = 'jpeg' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			this.webview.evalJS(`save(${JSON.stringify(args)})`) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				let tempFilePath = await this.getTempFilePath() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				tempFilePath = await this.setFilePath(tempFilePath, args) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				args.success({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					errMsg: "canvasToTempFilePath:ok", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					tempFilePath 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				}) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			} catch (e) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				console.log('e', e) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				args.fail({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					error: e 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				}) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// #endif 
			 |