|  |  | <!DOCTYPE html>
 | 
						
						
						
							|  |  | <html>
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | <head>
 | 
						
						
						
							|  |  | 	<meta charset="utf-8">
 | 
						
						
						
							|  |  | 	<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
 | 
						
						
						
							|  |  | 	<title>屏幕预览</title>
 | 
						
						
						
							|  |  | 	<link rel="stylesheet" type="text/css" href="/webs/resourse/iconfont.css">
 | 
						
						
						
							|  |  |     <script src="/webs/resourse/fabric.js"></script>
 | 
						
						
						
							|  |  | 	<script src="/webs/resourse/moment.js"></script>
 | 
						
						
						
							|  |  | </head>
 | 
						
						
						
							|  |  | <style>
 | 
						
						
						
							|  |  | 	.yt_content {
 | 
						
						
						
							|  |  | 		position: absolute;
 | 
						
						
						
							|  |  | 		z-index: 1;
 | 
						
						
						
							|  |  | 		overflow-x: hidden;
 | 
						
						
						
							|  |  | 		overflow-y: scroll;
 | 
						
						
						
							|  |  | 	}
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | 	body {
 | 
						
						
						
							|  |  | 		margin: 0;
 | 
						
						
						
							|  |  | 		padding: 0;
 | 
						
						
						
							|  |  | 		overflow: hidden;
 | 
						
						
						
							|  |  | 	}
 | 
						
						
						
							|  |  | </style>
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | <body>
 | 
						
						
						
							|  |  | 	<canvas id="canvas"></canvas>
 | 
						
						
						
							|  |  | 	<div id="yt_content" class="yt_content">
 | 
						
						
						
							|  |  | 		<div id="element" className='voteContent'>
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | 		</div>
 | 
						
						
						
							|  |  | 	</div>
 | 
						
						
						
							|  |  | 	<a style="font-family: 'fzxbs';opacity: 0;">字体测试</a>
 | 
						
						
						
							|  |  | </body>
 | 
						
						
						
							|  |  | <script type="text/javascript">
 | 
						
						
						
							|  |  | 	// let resultJson = JSON.parse(window.opener.name)
 | 
						
						
						
							|  |  | 	// console.log(resultJson)
 | 
						
						
						
							|  |  | 	// let canvas = new fabric.Canvas("canvas", {
 | 
						
						
						
							|  |  | 	// 	stopContextMenu: true,  //禁止默认右击事件
 | 
						
						
						
							|  |  | 	// });
 | 
						
						
						
							|  |  | 	// canvas.setWidth(resultJson.width)
 | 
						
						
						
							|  |  | 	// canvas.setHeight(resultJson.height)
 | 
						
						
						
							|  |  | 	//加载JSON数据 
 | 
						
						
						
							|  |  | 	// resultJson.objects.map(item => {
 | 
						
						
						
							|  |  | 	// 	item.lockMovementX = true //X轴是否可被移动(true为不可)
 | 
						
						
						
							|  |  | 	// 	item.lockMovementY = true //Y轴是否可被移动(true为不可)
 | 
						
						
						
							|  |  | 	// 	item.hasControls = false
 | 
						
						
						
							|  |  | 	// 	item.hasBorders = false
 | 
						
						
						
							|  |  | 	// })
 | 
						
						
						
							|  |  | 	// canvas.loadFromJSON(resultJson)
 | 
						
						
						
							|  |  | 	// 创建 FontFace 对象并加载字体文件
 | 
						
						
						
							|  |  |  	const font = new FontFace('fzxbs', 'url(/webs/resourse/fzxbs.ttf)  format(truetype)');
 | 
						
						
						
							|  |  |     font.load().then(() => {
 | 
						
						
						
							|  |  |       console.log('success');   
 | 
						
						
						
							|  |  |     }).catch((err) => {
 | 
						
						
						
							|  |  |       console.log('Failed to load font:');
 | 
						
						
						
							|  |  |     });
 | 
						
						
						
							|  |  | 	const configUrl = `http://${window.location.hostname}:9800`
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | 	window.onload = function () {
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | 		console.log('加载完成')
 | 
						
						
						
							|  |  | 		getDataFunc()
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | 		// window.addEventListener('message', function (e) {
 | 
						
						
						
							|  |  | 		// 	console.log(JSON.parse(e.data))
 | 
						
						
						
							|  |  | 		// 	let resultJson = JSON.parse(e.data)
 | 
						
						
						
							|  |  | 		// 	let canvas = new fabric.Canvas("canvas", {
 | 
						
						
						
							|  |  | 		// 		// fireRightClick: true,  //启用右键
 | 
						
						
						
							|  |  | 		// 		stopContextMenu: true,  //禁止默认右击事件
 | 
						
						
						
							|  |  | 		// 	});
 | 
						
						
						
							|  |  | 		// 	canvas.setWidth(window.innerWidth)
 | 
						
						
						
							|  |  | 		// 	canvas.setHeight(window.innerHeight)
 | 
						
						
						
							|  |  | 		// 	//加载JSON数据
 | 
						
						
						
							|  |  | 		// 	canvas.loadFromJSON(resultJson)
 | 
						
						
						
							|  |  | 		// })
 | 
						
						
						
							|  |  | 	}
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | 	function getDataFunc() {
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | 		let url = window.location.search
 | 
						
						
						
							|  |  | 		console.log(1111, window.location)
 | 
						
						
						
							|  |  | 		console.log(2222, url.substring(url.lastIndexOf('=') + 1, url.length))
 | 
						
						
						
							|  |  | 		// let userId = url.substring(url.lastIndexOf('=') + 1, url.length)
 | 
						
						
						
							|  |  | 		const urlParams = getUrlParams(url);
 | 
						
						
						
							|  |  | 		console.log(333, urlParams)
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | 		const screenformid = urlParams["screenformid"] ? urlParams["screenformid"] : '';
 | 
						
						
						
							|  |  | 		console.log(44, screenformid)
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | 		fetch(`http://${window.location.hostname}:9800/vhwcapi/v1/web/api/service/tscreenform/getscreenform`, {
 | 
						
						
						
							|  |  | 			method: 'POST',
 | 
						
						
						
							|  |  | 			headers: {
 | 
						
						
						
							|  |  | 				Authorization: localStorage.getItem('antd-token-authority') + '',
 | 
						
						
						
							|  |  | 				// 'Apply-User': userInfo.id,
 | 
						
						
						
							|  |  | 				// 'System-User': userInfo.systemUser,
 | 
						
						
						
							|  |  | 			},
 | 
						
						
						
							|  |  | 			body: JSON.stringify({
 | 
						
						
						
							|  |  | 				id: screenformid
 | 
						
						
						
							|  |  | 			}),
 | 
						
						
						
							|  |  | 			timeout: 50000,
 | 
						
						
						
							|  |  | 		}).then(response => {
 | 
						
						
						
							|  |  | 			return response.json()
 | 
						
						
						
							|  |  | 		}).then(data => {
 | 
						
						
						
							|  |  | 			console.log('获取数据', data)
 | 
						
						
						
							|  |  | 			initCanvas(data.datarecord)
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | 		}).catch(err => {
 | 
						
						
						
							|  |  | 			console.log(err);
 | 
						
						
						
							|  |  | 		});
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | 	}
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | 	function getUrlParams(url) {
 | 
						
						
						
							|  |  | 		const params = {};
 | 
						
						
						
							|  |  | 		const urlParts = url.split('?');
 | 
						
						
						
							|  |  | 		if (urlParts.length > 1) {
 | 
						
						
						
							|  |  | 			const paramString = urlParts[1];
 | 
						
						
						
							|  |  | 			const paramPairs = paramString.split('&');
 | 
						
						
						
							|  |  | 			paramPairs.forEach(pair => {
 | 
						
						
						
							|  |  | 				const keyValue = pair.split('=');
 | 
						
						
						
							|  |  | 				params[keyValue[0]] = keyValue[1];
 | 
						
						
						
							|  |  | 			});
 | 
						
						
						
							|  |  | 		}
 | 
						
						
						
							|  |  | 		return params;
 | 
						
						
						
							|  |  | 	}
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | 	let canvas = new fabric.Canvas('canvas', {
 | 
						
						
						
							|  |  | 		fireRightClick: true, //启用右键
 | 
						
						
						
							|  |  | 		stopContextMenu: true, //禁止默认右击事件
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | 		lockMovementX: true, //X轴是否可被移动(true为不可)
 | 
						
						
						
							|  |  | 		lockMovementY: true, //Y轴是否可被移动(true为不可)
 | 
						
						
						
							|  |  | 		hasControls: false,
 | 
						
						
						
							|  |  | 		hasBorders: false,
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | 	});
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | 	//初始化画布
 | 
						
						
						
							|  |  | 	function initCanvas(data) {
 | 
						
						
						
							|  |  | 		console.log('initCanvas', data)
 | 
						
						
						
							|  |  | 		let width2 = data.list.sf_width;
 | 
						
						
						
							|  |  | 		let height2 = data.list.sf_height;
 | 
						
						
						
							|  |  | 		let backColor = data.list.sf_bgcolor
 | 
						
						
						
							|  |  | 		// canvas.setWidth(width2)
 | 
						
						
						
							|  |  | 		// canvas.setHeight(height2)
 | 
						
						
						
							|  |  | 		canvas.setWidth(data.list?data.list.sf_width:window.innerWidth)
 | 
						
						
						
							|  |  | 	  canvas.setHeight(data.list?data.list.sf_height:window.innerHeight)
 | 
						
						
						
							|  |  | 		canvas.set({
 | 
						
						
						
							|  |  | 			backgroundColor: backColor,
 | 
						
						
						
							|  |  | 		})
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | 		//窗体属性设置
 | 
						
						
						
							|  |  | 		canvas.backgroundColor = data.list.sf_bgcolor;
 | 
						
						
						
							|  |  | 		canvas.sf_name = data.list.sf_name;
 | 
						
						
						
							|  |  | 		canvas.sf_width = data.list.sf_width;
 | 
						
						
						
							|  |  | 		canvas.sf_height = data.list.sf_height;
 | 
						
						
						
							|  |  | 		canvas.sf_bgcolor = data.list.sf_bgcolor;
 | 
						
						
						
							|  |  | 		canvas.sf_describe = data.list.sf_describe;
 | 
						
						
						
							|  |  | 		let resultJson = { objects: [] };
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | 		console.log('画布数据的接口', data);
 | 
						
						
						
							|  |  | 		let selectOptions = [];
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | 		resultJson.objects = data?.dbresult || [];
 | 
						
						
						
							|  |  | 		resultJson.objects.map((item, index) => {
 | 
						
						
						
							|  |  | 			selectOptions.push(index);
 | 
						
						
						
							|  |  | 			switch (item.component_type) {
 | 
						
						
						
							|  |  | 				case '0': // 按钮控件
 | 
						
						
						
							|  |  | 					handleSetAnkj(item.top, item.left, item);
 | 
						
						
						
							|  |  | 					break;
 | 
						
						
						
							|  |  | 				case '1': //文本标签
 | 
						
						
						
							|  |  | 					handleSetText(item.top, item.left, item);
 | 
						
						
						
							|  |  | 					break;
 | 
						
						
						
							|  |  | 				case '2': //图片照片
 | 
						
						
						
							|  |  | 					handleAddImage(item.top, item.left, item);
 | 
						
						
						
							|  |  | 					break;
 | 
						
						
						
							|  |  | 				case '3': //视频控件
 | 
						
						
						
							|  |  | 					handleAddVideo(item.top, item.left, item);
 | 
						
						
						
							|  |  | 					break;
 | 
						
						
						
							|  |  | 				case '4': //议题内容
 | 
						
						
						
							|  |  | 					handleSetYtnr(item.top, item.left, item);
 | 
						
						
						
							|  |  | 					break;
 | 
						
						
						
							|  |  | 				case '5':
 | 
						
						
						
							|  |  | 					handleSetGridList(item.top, item.left, item);
 | 
						
						
						
							|  |  | 					break;
 | 
						
						
						
							|  |  | 				case '6': //横向滚动文本
 | 
						
						
						
							|  |  | 					handleSetHxgdwb(item.top, item.left, item);
 | 
						
						
						
							|  |  | 					break;
 | 
						
						
						
							|  |  | 				case '7': //照片列表
 | 
						
						
						
							|  |  | 					handleSetPhoto(item.top, item.left, item);
 | 
						
						
						
							|  |  | 					break;
 | 
						
						
						
							|  |  | 				case '8': //代表团列表
 | 
						
						
						
							|  |  | 					handleSetDeputation(item.top, item.left, item);
 | 
						
						
						
							|  |  | 					break;
 | 
						
						
						
							|  |  | 				case '9': //子义题列表
 | 
						
						
						
							|  |  | 					handleSetZytlb(item.top, item.left, item);
 | 
						
						
						
							|  |  | 					break;
 | 
						
						
						
							|  |  | 				case '10': //时间控件
 | 
						
						
						
							|  |  | 					handleSetSjkj(item.top, item.left, item);
 | 
						
						
						
							|  |  | 					break;
 | 
						
						
						
							|  |  | 				case '11':
 | 
						
						
						
							|  |  | 				case '12':
 | 
						
						
						
							|  |  | 				case '13': //图形控件
 | 
						
						
						
							|  |  | 					handleSetImage(item.top, item.left, item.component_type, item);
 | 
						
						
						
							|  |  | 					break;
 | 
						
						
						
							|  |  | 			}
 | 
						
						
						
							|  |  | 		});
 | 
						
						
						
							|  |  | 		canvas.renderAll();
 | 
						
						
						
							|  |  | 		canvas.setZoom(1);
 | 
						
						
						
							|  |  | 		
 | 
						
						
						
							|  |  | 	}
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | 	//处理画布数据函数
 | 
						
						
						
							|  |  | 	function getValues(item, val) {
 | 
						
						
						
							|  |  | 		if (val) {
 | 
						
						
						
							|  |  | 			Object.keys(val).forEach((key) => {
 | 
						
						
						
							|  |  | 				if (item.bindingFieldID == key) {
 | 
						
						
						
							|  |  | 					item.text = val[key];
 | 
						
						
						
							|  |  | 				}
 | 
						
						
						
							|  |  | 			});
 | 
						
						
						
							|  |  | 		}
 | 
						
						
						
							|  |  | 	};
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | 	//添加文本标签start===============================
 | 
						
						
						
							|  |  | 	handleSetText = (top, left, val) => {
 | 
						
						
						
							|  |  | 		const textWidth = val ? parseInt(val.width) : 200;
 | 
						
						
						
							|  |  | 		const textHeigth = val ? parseInt(val.height) : 100;
 | 
						
						
						
							|  |  | 		let textTop = 0;
 | 
						
						
						
							|  |  | 		if (val && val.verticalAlignment === 'center') {
 | 
						
						
						
							|  |  | 			textTop = textTop + (textHeigth - val.fontSize) / 2;
 | 
						
						
						
							|  |  | 		} else if (val && val.verticalAlignment === 'bottom') {
 | 
						
						
						
							|  |  | 			textTop = textTop + (textHeigth - val.fontSize);
 | 
						
						
						
							|  |  | 		}
 | 
						
						
						
							|  |  | 		let textContent = val ? val.text : '文本标签';
 | 
						
						
						
							|  |  | 		if (val) {
 | 
						
						
						
							|  |  | 			if (textContent.length * val.fontSize > textWidth) {
 | 
						
						
						
							|  |  | 				let num = Math.floor(textWidth / val.fontSize);
 | 
						
						
						
							|  |  | 				textContent = textContent.substr(0, num - 1) + '...';
 | 
						
						
						
							|  |  | 			}
 | 
						
						
						
							|  |  | 		}
 | 
						
						
						
							|  |  | 		const textBox = new fabric.Textbox(textContent, {
 | 
						
						
						
							|  |  | 			fill: val && val.foreground ? val.foreground : '#000',
 | 
						
						
						
							|  |  | 			fontSize: val && val.fontSize ? parseInt(val.fontSize) : 18,
 | 
						
						
						
							|  |  | 			fontWeight: val && val.fontWeight ? val.fontWeight : 'normal',
 | 
						
						
						
							|  |  | 			fontStyle: val && val.fontStyle ? val.fontStyle : 'normal',
 | 
						
						
						
							|  |  | 			fontFamily: val && val.fontFamily ? val.fontFamily : 'SimSun',
 | 
						
						
						
							|  |  | 			textAlign: val && val.horizontalAlignment ? val.horizontalAlignment : '',
 | 
						
						
						
							|  |  | 			shadow: val && val.effect == 'true' ? shadow : null,
 | 
						
						
						
							|  |  | 			width: textWidth,
 | 
						
						
						
							|  |  | 			left: 0,
 | 
						
						
						
							|  |  | 			top: textTop,
 | 
						
						
						
							|  |  | 			splitByGrapheme: val && val.rowCount == 'true' ? true : false,
 | 
						
						
						
							|  |  | 			lockMovementX: true, //X轴是否可被移动(true为不可)
 | 
						
						
						
							|  |  | 			lockMovementY: true, //Y轴是否可被移动(true为不可)
 | 
						
						
						
							|  |  | 			hasControls: false,
 | 
						
						
						
							|  |  | 			hasBorders: false,
 | 
						
						
						
							|  |  | 		});
 | 
						
						
						
							|  |  | 		const border = new fabric.Rect({
 | 
						
						
						
							|  |  | 			left: 0,
 | 
						
						
						
							|  |  | 			top: 0,
 | 
						
						
						
							|  |  | 			width: textWidth,
 | 
						
						
						
							|  |  | 			height: textHeigth,
 | 
						
						
						
							|  |  | 			background: val && val.background.includes('#') ? val.background : '', //透明
 | 
						
						
						
							|  |  | 			fill: val && val.background.includes('#') ? val.background : '', //透明
 | 
						
						
						
							|  |  | 			opacity: val && val.background.includes('#') ? 1 : 0,
 | 
						
						
						
							|  |  | 			_type: 'border',
 | 
						
						
						
							|  |  | 			lockMovementX: true, //X轴是否可被移动(true为不可)
 | 
						
						
						
							|  |  | 			lockMovementY: true, //Y轴是否可被移动(true为不可)
 | 
						
						
						
							|  |  | 			hasControls: false,
 | 
						
						
						
							|  |  | 			hasBorders: false,
 | 
						
						
						
							|  |  | 		});
 | 
						
						
						
							|  |  | 		let group = new fabric.Group([border, textBox], {
 | 
						
						
						
							|  |  | 			width: textWidth,
 | 
						
						
						
							|  |  | 			height: textHeigth,
 | 
						
						
						
							|  |  | 			text: val ? val.text : '文本标签',
 | 
						
						
						
							|  |  | 			left: val ? parseInt(val.left) : parseInt(left - canvas._offset.left), //设置canvas上的X坐标
 | 
						
						
						
							|  |  | 			top: val ? parseInt(val.top) : parseInt(top - canvas._offset.top), //设置canvas上的Y坐标
 | 
						
						
						
							|  |  | 			effect: val && (val.effect == 'true' || val.effect == true) ? true : false,
 | 
						
						
						
							|  |  | 			component_type: '1',
 | 
						
						
						
							|  |  | 			fontFamily: val && val.fontFamily ? val.fontFamily : 'SimSun',
 | 
						
						
						
							|  |  | 			fontSize: val && val.fontSize ? val.fontSize : 18,
 | 
						
						
						
							|  |  | 			fontStyle: val && val.fontStyle ? val.fontStyle : 'normal',
 | 
						
						
						
							|  |  | 			fontWeight: val && val.fontWeight ? val.fontWeight : 'normal',
 | 
						
						
						
							|  |  | 			horizontalAlignment: val && val.horizontalAlignment ? val.horizontalAlignment : 'left',
 | 
						
						
						
							|  |  | 			verticalAlignment: val && val.verticalAlignment ? val.verticalAlignment : 'top',
 | 
						
						
						
							|  |  | 			background: val && val.background.includes('#') ? val.background : '', //透明
 | 
						
						
						
							|  |  | 			foreground: val ? val.foreground : '#000', //字体颜色
 | 
						
						
						
							|  |  | 			textTrimming: val && val.textTrimming ? val.textTrimming : '1',
 | 
						
						
						
							|  |  | 			rowCount: val && (val.rowCount == 'true' || val.rowCount == true) ? true : false,
 | 
						
						
						
							|  |  | 			bindingFieldID: val && val.bindingFieldID ? val.bindingFieldID : '',
 | 
						
						
						
							|  |  | 			systemParContent: val && val.systemParContent ? val.systemParContent : '',
 | 
						
						
						
							|  |  | 			lockMovementX: true, //X轴是否可被移动(true为不可)
 | 
						
						
						
							|  |  | 			lockMovementY: true, //Y轴是否可被移动(true为不可)
 | 
						
						
						
							|  |  | 			hasControls: false,
 | 
						
						
						
							|  |  | 			hasBorders: false,
 | 
						
						
						
							|  |  | 		});
 | 
						
						
						
							|  |  | 		canvas.add(group); // 将图形添加至画布
 | 
						
						
						
							|  |  | 		group['setControlVisible']('mtr', false);
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | 		canvas.setActiveObject(group);
 | 
						
						
						
							|  |  | 	};
 | 
						
						
						
							|  |  | 	//添加文本标签end===============================
 | 
						
						
						
							|  |  | 	//添加图片照片start=====================================
 | 
						
						
						
							|  |  | 	handleAddImage = (left, top, image) => {
 | 
						
						
						
							|  |  | 		let ImgElement = document.createElement('img');
 | 
						
						
						
							|  |  | 		// ImgElement.src = image
 | 
						
						
						
							|  |  | 		let img = new fabric.Image(ImgElement, {
 | 
						
						
						
							|  |  | 			scaleX: 1,
 | 
						
						
						
							|  |  | 			scaleY: 1,
 | 
						
						
						
							|  |  | 			// originX: 'center',
 | 
						
						
						
							|  |  | 			// originY: 'center',
 | 
						
						
						
							|  |  | 			lockMovementX: true, //X轴是否可被移动(true为不可)
 | 
						
						
						
							|  |  | 			lockMovementY: true, //Y轴是否可被移动(true为不可)
 | 
						
						
						
							|  |  | 			hasControls: false,
 | 
						
						
						
							|  |  | 			hasBorders: false,
 | 
						
						
						
							|  |  | 		});
 | 
						
						
						
							|  |  | 		const imagePath = image && image.imagePath ? (image.imagePath.includes('http') ? image.imagePath : `${configUrl}/${image.imagePath}`) : `${configUrl}/webs/upload/img/001.jpg`
 | 
						
						
						
							|  |  | 		let group = new fabric.Group([img], {
 | 
						
						
						
							|  |  | 			// left: 130, //设置canvas上的X坐标
 | 
						
						
						
							|  |  | 			// top: 130, //设置canvas上的Y坐标
 | 
						
						
						
							|  |  | 			left: image ? parseInt(image.left) : parseInt(left - canvas._offset.left), //设置canvas上的X坐标
 | 
						
						
						
							|  |  | 			top: image ? parseInt(image.top) : parseInt(top - canvas._offset.top), //设置canvas上的Y坐标
 | 
						
						
						
							|  |  | 			component_type: '2',
 | 
						
						
						
							|  |  | 			width: image ? parseInt(image.width) : 100,
 | 
						
						
						
							|  |  | 			height: image ? parseInt(image.height) : 100,
 | 
						
						
						
							|  |  | 			shadow: image && image.effect === 'true' ? shadow : null,
 | 
						
						
						
							|  |  | 			effect: image && image.effect === 'true' ? true : false,
 | 
						
						
						
							|  |  | 			imagePath: imagePath,
 | 
						
						
						
							|  |  | 			bindingFieldID: image ? image.bindingFieldID : '-1',
 | 
						
						
						
							|  |  | 			resourceMode: image ? image.resourceMode : '0',
 | 
						
						
						
							|  |  | 			stretch: image ? image.stretch : '4',
 | 
						
						
						
							|  |  | 			// objectCaching: false // 不缓存`
 | 
						
						
						
							|  |  | 			lockMovementX: true, //X轴是否可被移动(true为不可)
 | 
						
						
						
							|  |  | 			lockMovementY: true, //Y轴是否可被移动(true为不可)
 | 
						
						
						
							|  |  | 			hasControls: false,
 | 
						
						
						
							|  |  | 			hasBorders: false,
 | 
						
						
						
							|  |  | 		});
 | 
						
						
						
							|  |  | 		if (image) {
 | 
						
						
						
							|  |  | 			img.setSrc(image && image.imagePath ? imagePath : ImageControl, () => {
 | 
						
						
						
							|  |  | 				// 默认
 | 
						
						
						
							|  |  | 				let scaleY = 1;
 | 
						
						
						
							|  |  | 				let scaleX = 1;
 | 
						
						
						
							|  |  | 				if (image.stretch === '2') {
 | 
						
						
						
							|  |  | 					// 同比例裁剪照片
 | 
						
						
						
							|  |  | 					const scale = group.width / img.width > group.height / img.height ? group.width / img.width : group.height / img.height;
 | 
						
						
						
							|  |  | 					scaleY = scale;
 | 
						
						
						
							|  |  | 					scaleX = scale;
 | 
						
						
						
							|  |  | 				} else if (image.stretch === '3') {
 | 
						
						
						
							|  |  | 					// 同比例
 | 
						
						
						
							|  |  | 					const scale = group.width / img.width < group.height / img.height ? group.width / img.width : group.height / img.height;
 | 
						
						
						
							|  |  | 					scaleY = scale;
 | 
						
						
						
							|  |  | 					scaleX = scale;
 | 
						
						
						
							|  |  | 				} else if (image.stretch === '4') {
 | 
						
						
						
							|  |  | 					// 填充
 | 
						
						
						
							|  |  | 					scaleY = group.height / img.height;
 | 
						
						
						
							|  |  | 					scaleX = group.width / img.width;
 | 
						
						
						
							|  |  | 				}
 | 
						
						
						
							|  |  | 				img.set({
 | 
						
						
						
							|  |  | 					left: 0,
 | 
						
						
						
							|  |  | 					top: 0,
 | 
						
						
						
							|  |  | 					originX: 'center',
 | 
						
						
						
							|  |  | 					originY: 'center',
 | 
						
						
						
							|  |  | 					scaleX: scaleX,
 | 
						
						
						
							|  |  | 					scaleY: scaleY,
 | 
						
						
						
							|  |  | 				});
 | 
						
						
						
							|  |  | 				canvas.renderAll();
 | 
						
						
						
							|  |  | 			});
 | 
						
						
						
							|  |  | 			group.clipPath =
 | 
						
						
						
							|  |  | 				image.stretch === '2'
 | 
						
						
						
							|  |  | 					? new fabric.Rect({
 | 
						
						
						
							|  |  | 						top: -group.height / 2,
 | 
						
						
						
							|  |  | 						left: -group.width / 2,
 | 
						
						
						
							|  |  | 						width: group.width,
 | 
						
						
						
							|  |  | 						height: group.height,
 | 
						
						
						
							|  |  | 						lockMovementX: true, //X轴是否可被移动(true为不可)
 | 
						
						
						
							|  |  | 						lockMovementY: true, //Y轴是否可被移动(true为不可)
 | 
						
						
						
							|  |  | 						hasControls: false,
 | 
						
						
						
							|  |  | 						hasBorders: false,
 | 
						
						
						
							|  |  | 					})
 | 
						
						
						
							|  |  | 					: null;
 | 
						
						
						
							|  |  | 			canvas.add(group);
 | 
						
						
						
							|  |  | 		} else {
 | 
						
						
						
							|  |  | 			img.setSrc(`${configUrl}/webs/upload/img/001.jpg`, () => {
 | 
						
						
						
							|  |  | 				const scaleY = group.height / img.height;
 | 
						
						
						
							|  |  | 				const scaleX = group.width / img.width;
 | 
						
						
						
							|  |  | 				img.set({
 | 
						
						
						
							|  |  | 					left: 0,
 | 
						
						
						
							|  |  | 					top: 0,
 | 
						
						
						
							|  |  | 					originX: 'center',
 | 
						
						
						
							|  |  | 					originY: 'center',
 | 
						
						
						
							|  |  | 					scaleX: scaleX,
 | 
						
						
						
							|  |  | 					scaleY: scaleY,
 | 
						
						
						
							|  |  | 				});
 | 
						
						
						
							|  |  | 				canvas.add(group);
 | 
						
						
						
							|  |  | 				canvas.renderAll();
 | 
						
						
						
							|  |  | 			});
 | 
						
						
						
							|  |  | 		}
 | 
						
						
						
							|  |  | 		group['setControlVisible']('mtr', false);
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | 	};
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | 	// 添加视频==================================
 | 
						
						
						
							|  |  | 	handleAddVideo = (left, top, vid) => {
 | 
						
						
						
							|  |  | 		// let Video = document.getElementById('video')
 | 
						
						
						
							|  |  | 		// Video.src = "http://localhost:9800/webs/upload/img/demo.mp4"
 | 
						
						
						
							|  |  | 		let Video = document.createElement('video');
 | 
						
						
						
							|  |  | 		Video.setAttribute('src', vid && vid.videoSource ? `${configUrl}/${vid.videoSource}` : `${configUrl}/webs/upload/demo.mp4`);
 | 
						
						
						
							|  |  | 		let id = Date.now();
 | 
						
						
						
							|  |  | 		Video.onloadedmetadata = () => {
 | 
						
						
						
							|  |  | 			URL.revokeObjectURL(Video.src);
 | 
						
						
						
							|  |  | 			const width = Video.videoWidth;
 | 
						
						
						
							|  |  | 			const height = Video.videoHeight;
 | 
						
						
						
							|  |  | 			const scaleX = vid ? vid.width / Video.videoWidth : 1;
 | 
						
						
						
							|  |  | 			const scaleY = vid ? vid.height / Video.videoHeight : 1;
 | 
						
						
						
							|  |  | 			Video.setAttribute('width', width);
 | 
						
						
						
							|  |  | 			Video.setAttribute('height', height);
 | 
						
						
						
							|  |  | 			Video.setAttribute('controls', 'controls');
 | 
						
						
						
							|  |  | 			Video.setAttribute('id', id);
 | 
						
						
						
							|  |  | 			Video.setAttribute('autoplay', 'autoplay');
 | 
						
						
						
							|  |  | 			Video.setAttribute('loop', 'loop');
 | 
						
						
						
							|  |  | 			let video = new fabric.Image(Video, {
 | 
						
						
						
							|  |  | 				left: vid ? parseInt(vid.left) : parseInt(left - canvas._offset.left), //设置canvas上的X坐标
 | 
						
						
						
							|  |  | 				top: vid ? parseInt(vid.top) : parseInt(top - canvas._offset.top), //设置canvas上的Y坐标
 | 
						
						
						
							|  |  | 				scaleX: scaleX,
 | 
						
						
						
							|  |  | 				scaleY: scaleY,
 | 
						
						
						
							|  |  | 				width: width,
 | 
						
						
						
							|  |  | 				height: height,
 | 
						
						
						
							|  |  | 				component_type: '3',
 | 
						
						
						
							|  |  | 				id: id,
 | 
						
						
						
							|  |  | 				// objectCaching: false,
 | 
						
						
						
							|  |  | 				lockMovementX: true, //X轴是否可被移动(true为不可)
 | 
						
						
						
							|  |  | 				lockMovementY: true, //Y轴是否可被移动(true为不可)
 | 
						
						
						
							|  |  | 				hasControls: false,
 | 
						
						
						
							|  |  | 				hasBorders: false,
 | 
						
						
						
							|  |  | 			});
 | 
						
						
						
							|  |  | 			document.getElementById('videos')?.appendChild(Video);
 | 
						
						
						
							|  |  | 			canvas.add(video);
 | 
						
						
						
							|  |  | 			video['setControlVisible']('mtr', false);
 | 
						
						
						
							|  |  | 			video.getElement().play();
 | 
						
						
						
							|  |  | 			fabric.util.requestAnimFrame(function render() {
 | 
						
						
						
							|  |  | 				canvas.renderAll();
 | 
						
						
						
							|  |  | 				fabric.util.requestAnimFrame(render);
 | 
						
						
						
							|  |  | 			});
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | 		};
 | 
						
						
						
							|  |  | 	};
 | 
						
						
						
							|  |  | 	// 添加视频==================================
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | 	// 添加议题内容  开始=========================
 | 
						
						
						
							|  |  | 	handleSetYtnr = (top, left, item) => {
 | 
						
						
						
							|  |  | 		const text = item && item.text ? item.text : '议题内容';
 | 
						
						
						
							|  |  | 		let textWidth = item ? parseInt(item.width) : 100;
 | 
						
						
						
							|  |  | 		let textHeigth = item ? parseInt(item.height) : 100;
 | 
						
						
						
							|  |  | 		let textTop = 0;
 | 
						
						
						
							|  |  | 		let updateYtnrFormValues = {}
 | 
						
						
						
							|  |  | 		if (updateYtnrFormValues && updateYtnrFormValues.fullScreen && updateYtnrFormValues.scaleValue) {
 | 
						
						
						
							|  |  | 			if (item && (item.fullScreen === true || item.fullScreen === 'true')) {
 | 
						
						
						
							|  |  | 				textWidth = parentObj.sf_width;
 | 
						
						
						
							|  |  | 				textHeigth = parentObj.sf_height;
 | 
						
						
						
							|  |  | 			} else {
 | 
						
						
						
							|  |  | 				if (updateYtnrFormValues && (updateYtnrFormValues.fullScreen == true || updateYtnrFormValues.fullScreen == 'true')) {
 | 
						
						
						
							|  |  | 					textWidth = 100;
 | 
						
						
						
							|  |  | 					textHeigth = 100;
 | 
						
						
						
							|  |  | 				} else if (item && updateYtnrFormValues.scaleValue && item.scaleValue == updateYtnrFormValues.scaleValue) {
 | 
						
						
						
							|  |  | 					textWidth = item ? parseInt(item.width) : 100;
 | 
						
						
						
							|  |  | 					textHeigth = item ? parseInt(item.height) : 100;
 | 
						
						
						
							|  |  | 				} else if (item && updateYtnrFormValues.scaleValue && item.scaleValue !== updateYtnrFormValues.scaleValue) {
 | 
						
						
						
							|  |  | 					textWidth = item ? parseInt(item.width) : 100;
 | 
						
						
						
							|  |  | 					textHeigth = item ? parseInt(item.height) : 100;
 | 
						
						
						
							|  |  | 				}
 | 
						
						
						
							|  |  | 			}
 | 
						
						
						
							|  |  | 		} else if (item && item.width && item.height) {
 | 
						
						
						
							|  |  | 			textWidth = parseInt(item.width);
 | 
						
						
						
							|  |  | 			textHeigth = parseInt(item.height);
 | 
						
						
						
							|  |  | 		}
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | 		if (item && item.verticalAlignment === 'center') {
 | 
						
						
						
							|  |  | 			if (item) textTop = textTop + textHeigth - 16;
 | 
						
						
						
							|  |  | 		} else if (item && item.verticalAlignment === 'bottom') {
 | 
						
						
						
							|  |  | 			textTop = textTop + textHeigth - 16;
 | 
						
						
						
							|  |  | 		}
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | 		const textbox = new fabric.Textbox(item && item.text ? item.text : '议题内容', {
 | 
						
						
						
							|  |  | 			// width: textWidth,
 | 
						
						
						
							|  |  | 			// height: textHeigth,
 | 
						
						
						
							|  |  | 			left: 0, //设置canvas上的X坐标
 | 
						
						
						
							|  |  | 			top: textTop, //设置canvas上的Y坐标
 | 
						
						
						
							|  |  | 			fontSize: 16,
 | 
						
						
						
							|  |  | 			fill: item && item.colorChangeStyle ? item.colorChangeStyle : '#000',
 | 
						
						
						
							|  |  | 			// scaleX: item && item.scaleValue ? item.scaleValue : 1,
 | 
						
						
						
							|  |  | 			// scaleY: item && item.scaleValue ? item.scaleValue : 1,
 | 
						
						
						
							|  |  | 			// textAlign: 'center',
 | 
						
						
						
							|  |  | 			lockMovementX: true, //X轴是否可被移动(true为不可)
 | 
						
						
						
							|  |  | 			lockMovementY: true, //Y轴是否可被移动(true为不可)
 | 
						
						
						
							|  |  | 			hasControls: false,
 | 
						
						
						
							|  |  | 			hasBorders: false,
 | 
						
						
						
							|  |  | 		});
 | 
						
						
						
							|  |  | 		const border = new fabric.Rect({
 | 
						
						
						
							|  |  | 			// width: item && item.width ? item.width : 100,
 | 
						
						
						
							|  |  | 			// height: item && item.height ? item.height : 100,
 | 
						
						
						
							|  |  | 			width: textWidth,
 | 
						
						
						
							|  |  | 			height: textHeigth,
 | 
						
						
						
							|  |  | 			left: 0, //设置canvas上的X坐标
 | 
						
						
						
							|  |  | 			top: 0, //设置canvas上的Y坐标  顶部对齐
 | 
						
						
						
							|  |  | 			fill: '',
 | 
						
						
						
							|  |  | 			_type: 'border',
 | 
						
						
						
							|  |  | 			lockMovementX: true, //X轴是否可被移动(true为不可)
 | 
						
						
						
							|  |  | 			lockMovementY: true, //Y轴是否可被移动(true为不可)
 | 
						
						
						
							|  |  | 			hasControls: false,
 | 
						
						
						
							|  |  | 			hasBorders: false,
 | 
						
						
						
							|  |  | 		});
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | 		let group = new fabric.Group([textbox, border], {
 | 
						
						
						
							|  |  | 			width: textWidth,
 | 
						
						
						
							|  |  | 			height: textHeigth,
 | 
						
						
						
							|  |  | 			fontSize: 16,
 | 
						
						
						
							|  |  | 			text: item ? item.text : text,
 | 
						
						
						
							|  |  | 			left: item && (item.fullScreen === true || item.fullScreen === 'true') ? 0 : item && (item.fullScreen === false || item.fullScreen === 'false') ? item.left : left - parseInt(canvas._offset.left), //设置canvas上的X坐标
 | 
						
						
						
							|  |  | 			top: item && (item.fullScreen === true || item.fullScreen === 'true') ? 0 : item && (item.fullScreen === false || item.fullScreen === 'false') ? item.top : top - parseInt(canvas._offset.top), //设置canvas上的Y坐标
 | 
						
						
						
							|  |  | 			verticalAlignment: item && item.verticalAlignment ? item.verticalAlignment : 'top',
 | 
						
						
						
							|  |  | 			scaleValue: item && item.scaleValue ? item.scaleValue : 1,
 | 
						
						
						
							|  |  | 			fullScreen: item && item.fullScreen ? item.fullScreen : 'false',
 | 
						
						
						
							|  |  | 			currntTopic: item && item.currntTopic ? item.currntTopic : 'current',
 | 
						
						
						
							|  |  | 			component_type: item && item.component_type ? item.component_type : '4',
 | 
						
						
						
							|  |  | 			bindingFieldID: item && item.bindingFieldID ? item.bindingFieldID : '0x1030',
 | 
						
						
						
							|  |  | 			colorChangeStyle: item && item.colorChangeStyle ? item.colorChangeStyle : '#000',
 | 
						
						
						
							|  |  | 			lockMovementX: true, //X轴是否可被移动(true为不可)
 | 
						
						
						
							|  |  | 			lockMovementY: true, //Y轴是否可被移动(true为不可)
 | 
						
						
						
							|  |  | 			hasControls: false,
 | 
						
						
						
							|  |  | 			hasBorders: false,
 | 
						
						
						
							|  |  | 		});
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | 		canvas.add(group); // 将图形添加至画布
 | 
						
						
						
							|  |  | 		group['setControlVisible']('mtr', false);
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | 		canvas.setActiveObject(group);
 | 
						
						
						
							|  |  | 	};
 | 
						
						
						
							|  |  | 	// 添加议题内容  结束=========================
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | 	//添加网格列表start================================
 | 
						
						
						
							|  |  | 	handleSetGridList = (left, top, grid) => {
 | 
						
						
						
							|  |  | 		let child = [];
 | 
						
						
						
							|  |  | 		const rowCount = grid ? grid.rowCount : 5;
 | 
						
						
						
							|  |  | 		const colCount = grid ? grid.colCount : 5;
 | 
						
						
						
							|  |  | 		const text = grid && grid.text ? grid.text : '网格列表';
 | 
						
						
						
							|  |  | 		const gridWidth = grid ? (grid.width - 2) / grid.colCount : 100;
 | 
						
						
						
							|  |  | 		const gridHeigth = grid ? (grid.height - 2) / grid.rowCount : 50;
 | 
						
						
						
							|  |  | 		for (let x = 1; x <= colCount; x++) {
 | 
						
						
						
							|  |  | 			// 列
 | 
						
						
						
							|  |  | 			for (let y = 1; y <= rowCount; y++) {
 | 
						
						
						
							|  |  | 				// 行
 | 
						
						
						
							|  |  | 				let gridTop = (y - 1) * gridHeigth;
 | 
						
						
						
							|  |  | 				if ((grid && grid.verticalAlignment === 'center') || !grid) {
 | 
						
						
						
							|  |  | 					if (grid) gridTop = gridTop + (gridHeigth - grid.fontSize) / 2;
 | 
						
						
						
							|  |  | 					else gridTop = gridTop + (gridHeigth - 16) / 2;
 | 
						
						
						
							|  |  | 				} else if (grid && grid.verticalAlignment === 'bottom') {
 | 
						
						
						
							|  |  | 					gridTop = gridTop + (gridHeigth - grid.fontSize);
 | 
						
						
						
							|  |  | 				}
 | 
						
						
						
							|  |  | 				const text = new fabric.Textbox(grid && grid.text ? grid.text : '网格列表', {
 | 
						
						
						
							|  |  | 					width: gridWidth,
 | 
						
						
						
							|  |  | 					left: (x - 1) * gridWidth - 2, //设置canvas上的X坐标
 | 
						
						
						
							|  |  | 					textAlign: grid ? grid.horizontalAlignment : 'center',
 | 
						
						
						
							|  |  | 					top: gridTop - 2,
 | 
						
						
						
							|  |  | 					shadow: grid && grid.effect === 'true' ? shadow : null, // 阴影
 | 
						
						
						
							|  |  | 					fill: grid ? grid.foreground : '#000',
 | 
						
						
						
							|  |  | 					fontSize: grid ? parseInt(grid.fontSize) : 16,
 | 
						
						
						
							|  |  | 					fontWeight: grid ? grid.fontStyle.split(',')[1] : 'normal',
 | 
						
						
						
							|  |  | 					fontStyle: grid ? grid.fontStyle.split(',')[0] : 'normal',
 | 
						
						
						
							|  |  | 					fontFamily: grid ? grid.fontFamily : 'SimSun',
 | 
						
						
						
							|  |  | 					// top: (y - 1) * gridHeigth, //设置canvas上的Y坐标  顶部对齐
 | 
						
						
						
							|  |  | 					// top: (y - 1) * gridHeigth + (gridHeigth - grid.fontSize) / 2, //设置canvas上的Y坐标  垂直居中对齐
 | 
						
						
						
							|  |  | 					// top: (y - 1) * gridHeigth + (gridHeigth - grid.fontSize), //设置canvas上的Y坐标  垂直底部对齐
 | 
						
						
						
							|  |  | 					lockMovementX: true, //X轴是否可被移动(true为不可)
 | 
						
						
						
							|  |  | 					lockMovementY: true, //Y轴是否可被移动(true为不可)
 | 
						
						
						
							|  |  | 					hasControls: false,
 | 
						
						
						
							|  |  | 					hasBorders: false,
 | 
						
						
						
							|  |  | 				});
 | 
						
						
						
							|  |  | 				const border = new fabric.Rect({
 | 
						
						
						
							|  |  | 					width: gridWidth,
 | 
						
						
						
							|  |  | 					height: gridHeigth,
 | 
						
						
						
							|  |  | 					left: (x - 1) * gridWidth, //设置canvas上的X坐标
 | 
						
						
						
							|  |  | 					top: (y - 1) * gridHeigth, //设置canvas上的Y坐标  顶部对齐
 | 
						
						
						
							|  |  | 					stroke: grid ? grid.lineColor : '#dcdcdc',
 | 
						
						
						
							|  |  | 					fill: grid && grid.background.includes('#') ? grid.background : '',
 | 
						
						
						
							|  |  | 					_type: 'border',
 | 
						
						
						
							|  |  | 					strokeWidth: grid && grid.showGridLines === 'true' ? parseInt(grid.lineWidth) : 1,
 | 
						
						
						
							|  |  | 					visible: grid && (grid.showGridLines === 'false' || grid.showGridLines === false) ? false : true,
 | 
						
						
						
							|  |  | 					strokeDashArray: grid && grid.lineStyle === '2' ? [5, 10] : [0, 0],
 | 
						
						
						
							|  |  | 					lockMovementX: true, //X轴是否可被移动(true为不可)
 | 
						
						
						
							|  |  | 					lockMovementY: true, //Y轴是否可被移动(true为不可)
 | 
						
						
						
							|  |  | 					hasControls: false,
 | 
						
						
						
							|  |  | 					hasBorders: false,
 | 
						
						
						
							|  |  | 				});
 | 
						
						
						
							|  |  | 				child.push(border);
 | 
						
						
						
							|  |  | 				child.push(text);
 | 
						
						
						
							|  |  | 			}
 | 
						
						
						
							|  |  | 		}
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | 		let group = new fabric.Group(child, {
 | 
						
						
						
							|  |  | 			width: grid ? grid.width : 500,
 | 
						
						
						
							|  |  | 			height: grid ? grid.height : 250,
 | 
						
						
						
							|  |  | 			left: grid ? parseInt(grid.left) : parseInt(left - canvas._offset.left), //设置canvas上的X坐标
 | 
						
						
						
							|  |  | 			top: grid ? parseInt(grid.top) : parseInt(top - canvas._offset.top), //设置canvas上的Y坐标
 | 
						
						
						
							|  |  | 			rowCount: grid ? grid.rowCount : 5, //行
 | 
						
						
						
							|  |  | 			colCount: grid ? grid.colCount : 5, //列
 | 
						
						
						
							|  |  | 			component_type: grid ? grid.component_type : '5',
 | 
						
						
						
							|  |  | 			horizontalAlignment: grid ? grid.horizontalAlignment : 'center', //水平对齐方式left, center, right
 | 
						
						
						
							|  |  | 			verticalAlignment: grid ? grid.verticalAlignment : 'center', //垂直方式对齐top, center, bottom
 | 
						
						
						
							|  |  | 			colorChangeStyle: grid ? grid.colorChangeStyle : '0', //颜色变化
 | 
						
						
						
							|  |  | 			showStyle: grid ? grid.showStyle : '0', //显示方式
 | 
						
						
						
							|  |  | 			trendsStyle: grid ? grid.trendsStyle : '0', //动态方式
 | 
						
						
						
							|  |  | 			peoplesStyle: grid ? grid.peoplesStyle : '0', //加入方式
 | 
						
						
						
							|  |  | 			foregroundChange: grid ? grid.foregroundChange : '#000', //变化字色
 | 
						
						
						
							|  |  | 			text: text,
 | 
						
						
						
							|  |  | 			lineStyle: grid ? grid.lineStyle : '0', //网格线样式
 | 
						
						
						
							|  |  | 			showGridLines: grid && (grid.showGridLines === 'false' || grid.showGridLines === false) ? false : true, //是否显示网格
 | 
						
						
						
							|  |  | 			lineWidth: grid ? grid.lineWidth : '1', //网格线宽度
 | 
						
						
						
							|  |  | 			lineColor: grid ? grid.lineColor : '#000', //网格线颜色
 | 
						
						
						
							|  |  | 			background: grid && grid.background.includes('#') ? grid.background : '', //透明
 | 
						
						
						
							|  |  | 			effect: grid && grid.effect === 'true' ? true : false, // 阴影
 | 
						
						
						
							|  |  | 			fontFamily: grid ? grid.fontFamily : 'SimSun', //字体
 | 
						
						
						
							|  |  | 			fontStyle: grid ? grid.fontStyle : 'normal,normal,normal', //字体宽度设置
 | 
						
						
						
							|  |  | 			foreground: grid ? grid.foreground : '#000', //字体颜色
 | 
						
						
						
							|  |  | 			fontSize: grid ? grid.fontSize : 16, //字体大小
 | 
						
						
						
							|  |  | 			peopleOrderBy: grid && grid.peopleOrderBy ? grid.peopleOrderBy : undefined, //人员排序
 | 
						
						
						
							|  |  | 			rowMin: grid && grid.rowMin ? grid.rowMin : undefined, //行号从
 | 
						
						
						
							|  |  | 			rowMax: grid && grid.rowMax ? grid.rowMax : undefined, //到
 | 
						
						
						
							|  |  | 			colMin: grid && grid.colMin ? grid.colMin : undefined, //列号从
 | 
						
						
						
							|  |  | 			colMax: grid && grid.colMax ? grid.colMax : undefined, //到
 | 
						
						
						
							|  |  | 			textDirection: grid && grid.textDirection ? grid.textDirection : undefined, //人员排序的加入方式
 | 
						
						
						
							|  |  | 			textItemWidth: grid && grid.textItemWidth ? grid.textItemWidth : undefined, //文本项宽
 | 
						
						
						
							|  |  | 			bindingFieldID: grid && grid.bindingFieldID ? grid.bindingFieldID : '-1',
 | 
						
						
						
							|  |  | 			isShowSpeakSecend: grid && (grid.isShowSpeakSecend === 'true' || grid.isShowSpeakSecend === true) ? true : false, //是否显示二次发言
 | 
						
						
						
							|  |  | 			isShowAskSecend: grid && (grid.isShowAskSecend === 'true' || grid.isShowAskSecend === true) ? true : false, // 是否显示二次询问
 | 
						
						
						
							|  |  | 			isShowPersonWork: grid && (grid.isShowPersonWork === 'true' || grid.isShowPersonWork === true) ? true : false, // 是否显示人员职务
 | 
						
						
						
							|  |  | 			bindingFieldPeopleType: grid && grid.bindingFieldPeopleType ? grid.bindingFieldPeopleType.split(',') : [],
 | 
						
						
						
							|  |  | 			lockMovementX: true, //X轴是否可被移动(true为不可)
 | 
						
						
						
							|  |  | 			lockMovementY: true, //Y轴是否可被移动(true为不可)
 | 
						
						
						
							|  |  | 			hasControls: false,
 | 
						
						
						
							|  |  | 			hasBorders: false,
 | 
						
						
						
							|  |  | 		});
 | 
						
						
						
							|  |  | 		canvas.add(group); // 将图形添加至画布
 | 
						
						
						
							|  |  | 		group['setControlVisible']('mtr', false);
 | 
						
						
						
							|  |  | 		//更新canvas
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | 		canvas.setActiveObject(group);
 | 
						
						
						
							|  |  | 	};
 | 
						
						
						
							|  |  | 	//添加网格列表end================================
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | 	//添加横向滚动文本start===============================
 | 
						
						
						
							|  |  | 	handleSetHxgdwb = (left, top, item) => {
 | 
						
						
						
							|  |  | 		const textWidth = item ? parseInt(item.width) : 200;
 | 
						
						
						
							|  |  | 		const textHeigth = item ? parseInt(item.height) : 100;
 | 
						
						
						
							|  |  | 		let textContent = item && item.txtContent ? item.txtContent : '横向滚动文本';
 | 
						
						
						
							|  |  | 		const textBox = new fabric.Textbox(textContent, {
 | 
						
						
						
							|  |  | 			fill: item && item.foreground ? item.foreground : '#000',
 | 
						
						
						
							|  |  | 			fontSize: item && item.fontSize ? parseInt(item.fontSize) : 18,
 | 
						
						
						
							|  |  | 			fontWeight: item && item.fontWeight ? item.fontWeight : 'normal',
 | 
						
						
						
							|  |  | 			fontStyle: item && item.fontStyle ? item.fontStyle : 'normal',
 | 
						
						
						
							|  |  | 			fontFamily: item && item.fontFamily ? item.fontFamily : 'SimSun',
 | 
						
						
						
							|  |  | 			width: textWidth,
 | 
						
						
						
							|  |  | 			left: 0,
 | 
						
						
						
							|  |  | 			top: 0,
 | 
						
						
						
							|  |  | 			lockMovementX: true, //X轴是否可被移动(true为不可)
 | 
						
						
						
							|  |  | 			lockMovementY: true, //Y轴是否可被移动(true为不可)
 | 
						
						
						
							|  |  | 			hasControls: false,
 | 
						
						
						
							|  |  | 			hasBorders: false,
 | 
						
						
						
							|  |  | 		});
 | 
						
						
						
							|  |  | 		const border = new fabric.Rect({
 | 
						
						
						
							|  |  | 			left: 0,
 | 
						
						
						
							|  |  | 			top: 0,
 | 
						
						
						
							|  |  | 			width: textWidth,
 | 
						
						
						
							|  |  | 			height: textHeigth,
 | 
						
						
						
							|  |  | 			background: item && item.background.includes('#') ? item.background : '', //透明
 | 
						
						
						
							|  |  | 			fill: item && item.background.includes('#') ? item.background : '', //透明
 | 
						
						
						
							|  |  | 			_type: 'border',
 | 
						
						
						
							|  |  | 			lockMovementX: true, //X轴是否可被移动(true为不可)
 | 
						
						
						
							|  |  | 			lockMovementY: true, //Y轴是否可被移动(true为不可)
 | 
						
						
						
							|  |  | 			hasControls: false,
 | 
						
						
						
							|  |  | 			hasBorders: false,
 | 
						
						
						
							|  |  | 		});
 | 
						
						
						
							|  |  | 		let group = new fabric.Group([border, textBox], {
 | 
						
						
						
							|  |  | 			width: textWidth,
 | 
						
						
						
							|  |  | 			height: textHeigth,
 | 
						
						
						
							|  |  | 			left: item ? parseInt(item.left) : parseInt(left - canvas._offset.left), //设置canvas上的X坐标
 | 
						
						
						
							|  |  | 			top: item ? parseInt(item.top) : parseInt(top - canvas._offset.top), //设置canvas上的Y坐标
 | 
						
						
						
							|  |  | 			background: item && item.background.includes('#') ? item.background : '', //透明
 | 
						
						
						
							|  |  | 			foreground: item && item.foreground ? item.foreground : '#000',
 | 
						
						
						
							|  |  | 			fontSize: item && item.fontSize ? parseInt(item.fontSize) : 18,
 | 
						
						
						
							|  |  | 			fontWeight: item && item.fontWeight ? item.fontWeight : 'normal',
 | 
						
						
						
							|  |  | 			fontStyle: item && item.fontStyle ? item.fontStyle : 'normal',
 | 
						
						
						
							|  |  | 			fontFamily: item && item.fontFamily ? item.fontFamily : 'SimSun',
 | 
						
						
						
							|  |  | 			txtContent: textContent,
 | 
						
						
						
							|  |  | 			moveSpeed: item && item.moveSpeed ? item.moveSpeed : '1000',
 | 
						
						
						
							|  |  | 			component_type: '6',
 | 
						
						
						
							|  |  | 			lockMovementX: true, //X轴是否可被移动(true为不可)
 | 
						
						
						
							|  |  | 			lockMovementY: true, //Y轴是否可被移动(true为不可)
 | 
						
						
						
							|  |  | 			hasControls: false,
 | 
						
						
						
							|  |  | 			hasBorders: false,
 | 
						
						
						
							|  |  | 		});
 | 
						
						
						
							|  |  | 		canvas.add(group); // 将图形添加至画布
 | 
						
						
						
							|  |  | 		group['setControlVisible']('mtr', false);
 | 
						
						
						
							|  |  | 		if (item && parseInt(item.moveSpeed) !== 6000) {
 | 
						
						
						
							|  |  | 			const handleSetHxgdwbAnimate = () => {
 | 
						
						
						
							|  |  | 				textBox.animate('left', item ? item.width / 2 : 100, {
 | 
						
						
						
							|  |  | 					from: -(item ? item.width / 2 : 100),
 | 
						
						
						
							|  |  | 					duration: item && item.moveSpeed ? parseInt(item.moveSpeed) : 1000,
 | 
						
						
						
							|  |  | 					onChange: canvas.renderAll.bind(canvas),
 | 
						
						
						
							|  |  | 					onComplete: handleSetHxgdwbAnimate,
 | 
						
						
						
							|  |  | 				});
 | 
						
						
						
							|  |  | 			};
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | 			handleSetHxgdwbAnimate();
 | 
						
						
						
							|  |  | 		}
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | 		canvas.setActiveObject(group);
 | 
						
						
						
							|  |  | 	};
 | 
						
						
						
							|  |  | 	//添加横向滚动文本end===============================
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | 	//添加照片列表start============================
 | 
						
						
						
							|  |  | 	handleSetPhoto = (left, top, grid) => {
 | 
						
						
						
							|  |  | 		let child = [];
 | 
						
						
						
							|  |  | 		const rowCount = grid ? grid.rowCount : 5;
 | 
						
						
						
							|  |  | 		const colCount = grid ? grid.colCount : 1;
 | 
						
						
						
							|  |  | 		const text = grid && grid.text ? grid.text : '照片列表';
 | 
						
						
						
							|  |  | 		const gridWidth = grid ? (grid.width - 2) / grid.colCount : 100;
 | 
						
						
						
							|  |  | 		const gridHeigth = grid ? (grid.height - 2) / grid.rowCount : 50;
 | 
						
						
						
							|  |  | 		for (let x = 1; x <= colCount; x++) {
 | 
						
						
						
							|  |  | 			//列
 | 
						
						
						
							|  |  | 			for (let y = 1; y <= rowCount; y++) {
 | 
						
						
						
							|  |  | 				//行
 | 
						
						
						
							|  |  | 				let gridTop = (y - 1) * gridHeigth;
 | 
						
						
						
							|  |  | 				if ((grid && grid.verticalAlignment === 'center') || !grid) {
 | 
						
						
						
							|  |  | 					if (grid) gridTop = gridTop + (gridHeigth - parseInt(grid.fontSize)) / 2;
 | 
						
						
						
							|  |  | 					else gridTop = gridTop + (gridHeigth - 16) / 2;
 | 
						
						
						
							|  |  | 				} else if (grid && grid.verticalAlignment === 'bottom') {
 | 
						
						
						
							|  |  | 					gridTop = gridTop + (gridHeigth - parseInt(grid.fontSize));
 | 
						
						
						
							|  |  | 				}
 | 
						
						
						
							|  |  | 				const text = new fabric.Textbox(grid && grid.text ? grid.text : '照片列表', {
 | 
						
						
						
							|  |  | 					width: gridWidth,
 | 
						
						
						
							|  |  | 					// height: gridHeigth,
 | 
						
						
						
							|  |  | 					left: (x - 1) * gridWidth - 2, //设置canvas上的x坐标
 | 
						
						
						
							|  |  | 					top: gridTop - 2, //设置canvas上的Y坐标
 | 
						
						
						
							|  |  | 					shadow: grid && (grid.effect == 'true' || grid.effect == true) ? shadow : null, // 阴影
 | 
						
						
						
							|  |  | 					fontFamily: grid && grid.fontFamily ? grid.fontFamily : 'SimSun',
 | 
						
						
						
							|  |  | 					fill: grid && grid.foreground ? grid.foreground : '#000000',
 | 
						
						
						
							|  |  | 					fontSize: grid && grid.fontSize ? parseInt(grid.fontSize) : 16,
 | 
						
						
						
							|  |  | 					fontStyle: grid && grid.fontStyle ? grid.fontStyle : 'normal',
 | 
						
						
						
							|  |  | 					fontWeight: grid && grid.fontWeight ? grid.fontWeight : 'normal',
 | 
						
						
						
							|  |  | 					textAlign: grid && grid.horizontalAlignment ? grid.horizontalAlignment : 'center',
 | 
						
						
						
							|  |  | 					lockMovementX: true, //X轴是否可被移动(true为不可)
 | 
						
						
						
							|  |  | 					lockMovementY: true, //Y轴是否可被移动(true为不可)
 | 
						
						
						
							|  |  | 					hasControls: false,
 | 
						
						
						
							|  |  | 					hasBorders: false,
 | 
						
						
						
							|  |  | 				});
 | 
						
						
						
							|  |  | 				const border = new fabric.Rect({
 | 
						
						
						
							|  |  | 					width: gridWidth,
 | 
						
						
						
							|  |  | 					height: gridHeigth,
 | 
						
						
						
							|  |  | 					left: (x - 1) * gridWidth, //设置canvas上的X坐标
 | 
						
						
						
							|  |  | 					top: (y - 1) * gridHeigth, //设置canvas上的Y坐标  顶部对齐
 | 
						
						
						
							|  |  | 					strokeWidth: grid && (grid.showGridLines === 'true' || grid.showGridLines === true) ? parseInt(grid.lineWidth) : 1, //网格线宽度
 | 
						
						
						
							|  |  | 					stroke: grid && grid.lineColor ? grid.lineColor : '#dcdcdc', //网格线颜色
 | 
						
						
						
							|  |  | 					strokeDashArray: grid && grid.lineStyle === '2' ? [5, 10] : [0, 0], //实虚线
 | 
						
						
						
							|  |  | 					fill: grid && grid.background.includes('#') ? grid.background : '',
 | 
						
						
						
							|  |  | 					_type: 'border',
 | 
						
						
						
							|  |  | 					visible: grid && (grid.showGridLines === 'false' || grid.showGridLines === false) ? false : true,
 | 
						
						
						
							|  |  | 					lockMovementX: true, //X轴是否可被移动(true为不可)
 | 
						
						
						
							|  |  | 					lockMovementY: true, //Y轴是否可被移动(true为不可)
 | 
						
						
						
							|  |  | 					hasControls: false,
 | 
						
						
						
							|  |  | 					hasBorders: false,
 | 
						
						
						
							|  |  | 				});
 | 
						
						
						
							|  |  | 				child.push(border);
 | 
						
						
						
							|  |  | 				child.push(text);
 | 
						
						
						
							|  |  | 			}
 | 
						
						
						
							|  |  | 		}
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | 		let group = new fabric.Group(child, {
 | 
						
						
						
							|  |  | 			width: grid ? parseInt(grid.width) : 100,
 | 
						
						
						
							|  |  | 			height: grid ? parseInt(grid.height) : 250,
 | 
						
						
						
							|  |  | 			left: grid ? grid.left : left - parseInt(canvas._offset.left), //设置canvas上的X坐标
 | 
						
						
						
							|  |  | 			top: grid ? grid.top : top - parseInt(canvas._offset.top), //设置canvas上的Y坐标
 | 
						
						
						
							|  |  | 			rowCount: grid ? grid.rowCount : 5, //行
 | 
						
						
						
							|  |  | 			colCount: grid ? grid.colCount : 1, //列
 | 
						
						
						
							|  |  | 			component_type: grid ? grid.component_type : '7',
 | 
						
						
						
							|  |  | 			horizontalAlignment: grid && grid.horizontalAlignment ? grid.horizontalAlignment : 'center', //水平对齐方式left, center, right
 | 
						
						
						
							|  |  | 			verticalAlignment: grid && grid.verticalAlignment ? grid.verticalAlignment : 'center', //垂直方式对齐top, center, bottom
 | 
						
						
						
							|  |  | 			text: text,
 | 
						
						
						
							|  |  | 			background: grid && grid.background.includes('#') ? grid.background : '', //透明
 | 
						
						
						
							|  |  | 			effect: grid && (grid.effect === 'true' || grid.effect === true) ? true : false, // 阴影
 | 
						
						
						
							|  |  | 			lineStyle: grid && grid.lineStyle ? grid.lineStyle : '1', //网格线样式
 | 
						
						
						
							|  |  | 			showGridLines: grid && (grid.showGridLines === 'false' || grid.showGridLines === false) ? false : true, //是否显示网格
 | 
						
						
						
							|  |  | 			lineWidth: grid ? parseInt(grid.lineWidth) : 1, //网格线宽度
 | 
						
						
						
							|  |  | 			lineColor: grid ? grid.lineColor : '#dcdcdc', //网格线颜色
 | 
						
						
						
							|  |  | 			peopleStyle: grid ? grid.peopleStyle : '0', //照片显示方式
 | 
						
						
						
							|  |  | 			isShowText: grid ? grid.isShowText : false, //是否显示文字
 | 
						
						
						
							|  |  | 			textShowLocation: grid ? grid.textShowLocation : '0', //文字显示位置
 | 
						
						
						
							|  |  | 			fontFamily: grid ? grid.fontFamily : 'SimSun', //字体
 | 
						
						
						
							|  |  | 			foreground: grid ? grid.foreground : '#000000', //字体颜色
 | 
						
						
						
							|  |  | 			fontSize: grid ? grid.fontSize : 16, //字体大小
 | 
						
						
						
							|  |  | 			fontStyle: grid ? grid.fontStyle : 'normal',
 | 
						
						
						
							|  |  | 			fontWeight: grid ? grid.fontWeight : 'normal',
 | 
						
						
						
							|  |  | 			lockMovementX: true, //X轴是否可被移动(true为不可)
 | 
						
						
						
							|  |  | 			lockMovementY: true, //Y轴是否可被移动(true为不可)
 | 
						
						
						
							|  |  | 			hasControls: false,
 | 
						
						
						
							|  |  | 			hasBorders: false,
 | 
						
						
						
							|  |  | 		});
 | 
						
						
						
							|  |  | 		canvas.add(group); // 将图形添加至画布
 | 
						
						
						
							|  |  | 		group['setControlVisible']('mtr', false);
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | 		canvas.setActiveObject(group);
 | 
						
						
						
							|  |  | 	};
 | 
						
						
						
							|  |  | 	//添加照片列表end============================
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | 	//添加代表团列表start====================
 | 
						
						
						
							|  |  | 	handleSetDeputation = (top, left, grid) => {
 | 
						
						
						
							|  |  | 		let child = []; //动画一
 | 
						
						
						
							|  |  | 		let child2 = []; //动画二
 | 
						
						
						
							|  |  | 		let childHead = []; //列头
 | 
						
						
						
							|  |  | 		let childWrapper = []; //最外层边框
 | 
						
						
						
							|  |  | 		let text = grid && grid.text ? grid.text : '代表团列表';
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | 		const list = [
 | 
						
						
						
							|  |  | 			{ deputation: '北京', yd: '8', sd: '5', wd: '3' },
 | 
						
						
						
							|  |  | 			{ deputation: '上海', yd: '8', sd: '5', wd: '3' },
 | 
						
						
						
							|  |  | 			{ deputation: '南京', yd: '8', sd: '5', wd: '3' },
 | 
						
						
						
							|  |  | 			{ deputation: '广州', yd: '8', sd: '5', wd: '3' },
 | 
						
						
						
							|  |  | 			{ deputation: '天津', yd: '8', sd: '5', wd: '3' },
 | 
						
						
						
							|  |  | 			// { deputation: '重庆', yd: '8' , sd: '5' , wd: '3'},
 | 
						
						
						
							|  |  | 		];
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | 		let length = 6 - list.length;
 | 
						
						
						
							|  |  | 		if (0 < length) {
 | 
						
						
						
							|  |  | 			for (let i = 1; i <= length; i++) {
 | 
						
						
						
							|  |  | 				list.push({ deputation: '', yd: '', sd: '', wd: '' });
 | 
						
						
						
							|  |  | 			}
 | 
						
						
						
							|  |  | 		}
 | 
						
						
						
							|  |  | 		const propsObj = list[0] || { deputation: '北京', yd: '8', sd: '5', wd: '3' };
 | 
						
						
						
							|  |  | 		const rowCount = list.length;
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | 		const colCount = Object.keys(propsObj).length;
 | 
						
						
						
							|  |  | 		const gridWidth = grid && grid.width ? (grid.width - 2) / colCount : 100;
 | 
						
						
						
							|  |  | 		// const gridHeigth = 50
 | 
						
						
						
							|  |  | 		const gridHeigth = grid && grid.height ? grid.height / 7 : 50;
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | 		let headList = { deputation: '代表团', yd: '应到', sd: '实到', wd: '未到' };
 | 
						
						
						
							|  |  | 		for (let x = 1; x <= colCount; x++) {
 | 
						
						
						
							|  |  | 			//列
 | 
						
						
						
							|  |  | 			const currentHeadText = headList[Object.keys(headList)[x - 1]];
 | 
						
						
						
							|  |  | 			// console.log(currentHeadText);
 | 
						
						
						
							|  |  | 			const haedTextbox = new fabric.Textbox(currentHeadText, {
 | 
						
						
						
							|  |  | 				width: gridWidth,
 | 
						
						
						
							|  |  | 				left: (x - 1) * gridWidth - 2, //设置canvas上的x坐标
 | 
						
						
						
							|  |  | 				top: grid && grid.groupHeadColumnFontSize ? (gridHeigth - parseInt(grid.groupHeadColumnFontSize)) / 2 : 16, //设置canvas上的Y坐标
 | 
						
						
						
							|  |  | 				fontFamily: grid && grid.groupHeadColumnFontName ? grid.groupHeadColumnFontName : 'SimSun',
 | 
						
						
						
							|  |  | 				fontSize: grid && grid.groupHeadColumnFontSize ? parseInt(grid.groupHeadColumnFontSize) : 16,
 | 
						
						
						
							|  |  | 				fontStyle: grid && grid.groupHeadColumnFontStyle ? grid.groupHeadColumnFontStyle.split(',')[0] : 'normal',
 | 
						
						
						
							|  |  | 				fontWeight: grid && grid.groupHeadColumnFontStyle ? grid.groupHeadColumnFontStyle.split(',')[1] : 'normal',
 | 
						
						
						
							|  |  | 				textAlign: grid && grid.horizontalAlignment ? grid.horizontalAlignment : 'center',
 | 
						
						
						
							|  |  | 				lockMovementX: true, //X轴是否可被移动(true为不可)
 | 
						
						
						
							|  |  | 				lockMovementY: true, //Y轴是否可被移动(true为不可)
 | 
						
						
						
							|  |  | 				hasControls: false,
 | 
						
						
						
							|  |  | 				hasBorders: false,
 | 
						
						
						
							|  |  | 			});
 | 
						
						
						
							|  |  | 			const headBorder = new fabric.Rect({
 | 
						
						
						
							|  |  | 				width: gridWidth,
 | 
						
						
						
							|  |  | 				height: gridHeigth,
 | 
						
						
						
							|  |  | 				left: (x - 1) * gridWidth, //设置canvas上的X坐标
 | 
						
						
						
							|  |  | 				top: 0, //设置canvas上的Y坐标  顶部对齐
 | 
						
						
						
							|  |  | 				stroke: grid && grid.lineColor ? grid.lineColor : '#dcdcdc', //网格线颜色
 | 
						
						
						
							|  |  | 				fill: grid && grid.groupHeadColumnColor ? grid.groupHeadColumnColor : '#f4f4f4', //背景颜色
 | 
						
						
						
							|  |  | 				_type: 'border',
 | 
						
						
						
							|  |  | 				visible: grid && (grid.showGroupHeadColumn == 'false' || grid.showGroupHeadColumn == false) ? false : true,
 | 
						
						
						
							|  |  | 				strokeWidth: grid && (grid.showGroupHeadColumn == 'true' || grid.showGroupHeadColumn == true) ? parseInt(grid.lineWidth) : 1,
 | 
						
						
						
							|  |  | 				lockMovementX: true, //X轴是否可被移动(true为不可)
 | 
						
						
						
							|  |  | 				lockMovementY: true, //Y轴是否可被移动(true为不可)
 | 
						
						
						
							|  |  | 				hasControls: false,
 | 
						
						
						
							|  |  | 				hasBorders: false,
 | 
						
						
						
							|  |  | 			});
 | 
						
						
						
							|  |  | 			childHead.push(headBorder);
 | 
						
						
						
							|  |  | 			childHead.push(haedTextbox);
 | 
						
						
						
							|  |  | 		}
 | 
						
						
						
							|  |  | 		let headColumnGroup = new fabric.Group(childHead, {
 | 
						
						
						
							|  |  | 			width: grid ? parseInt(grid.width) : 400,
 | 
						
						
						
							|  |  | 			height: gridHeigth,
 | 
						
						
						
							|  |  | 			left: grid ? grid.left : left - parseInt(canvas._offset.left), //设置canvas上的X坐标
 | 
						
						
						
							|  |  | 			top: grid ? grid.top : top - parseInt(canvas._offset.top), //设置canvas上的Y坐标
 | 
						
						
						
							|  |  | 			showGroupHeadColumn: grid && (grid.showGroupHeadColumn == 'false' || grid.showGroupHeadColumn == false) ? false : true, //是否显示列头
 | 
						
						
						
							|  |  | 			groupHeadColumnColor: grid ? grid.groupHeadColumnColor : '#f4f4f4',
 | 
						
						
						
							|  |  | 			groupHeadColumnFontName: grid ? grid.groupHeadColumnFontName : 'SimSun',
 | 
						
						
						
							|  |  | 			groupHeadColumnFontSize: grid ? grid.groupHeadColumnFontSize : 16,
 | 
						
						
						
							|  |  | 			groupHeadColumnFontStyle: grid ? grid.groupHeadColumnFontStyle : 'normal,normal',
 | 
						
						
						
							|  |  | 			lockMovementX: true, //X轴是否可被移动(true为不可)
 | 
						
						
						
							|  |  | 			lockMovementY: true, //Y轴是否可被移动(true为不可)
 | 
						
						
						
							|  |  | 			hasControls: false,
 | 
						
						
						
							|  |  | 			hasBorders: false,
 | 
						
						
						
							|  |  | 		});
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | 		for (let y = 1; y <= rowCount; y++) {
 | 
						
						
						
							|  |  | 			// 行
 | 
						
						
						
							|  |  | 			const obj = list[y - 1];
 | 
						
						
						
							|  |  | 			// console.log(`----------第${y}行----------`);
 | 
						
						
						
							|  |  | 			for (let x = 1; x <= colCount; x++) {
 | 
						
						
						
							|  |  | 				// 列
 | 
						
						
						
							|  |  | 				const curentText = obj[Object.keys(obj)[x - 1]]; //当前单元格的值
 | 
						
						
						
							|  |  | 				// console.log(curentText);
 | 
						
						
						
							|  |  | 				let gridTop = (y - 2) * gridHeigth;
 | 
						
						
						
							|  |  | 				if ((grid && grid.verticalAlignment === 'center') || !grid) {
 | 
						
						
						
							|  |  | 					if (grid) gridTop = gridTop + (gridHeigth - parseInt(grid.fontSize)) / 2;
 | 
						
						
						
							|  |  | 					else gridTop = gridTop + (gridHeigth - 16) / 2;
 | 
						
						
						
							|  |  | 				} else if (grid && grid.verticalAlignment === 'bottom') {
 | 
						
						
						
							|  |  | 					gridTop = gridTop + (gridHeigth - parseInt(grid.fontSize));
 | 
						
						
						
							|  |  | 				}
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | 				const textbox = new fabric.Textbox(curentText, {
 | 
						
						
						
							|  |  | 					width: gridWidth,
 | 
						
						
						
							|  |  | 					height: gridHeigth,
 | 
						
						
						
							|  |  | 					// height: 50,
 | 
						
						
						
							|  |  | 					left: (x - 1) * gridWidth - 2, //设置canvas上的x坐标
 | 
						
						
						
							|  |  | 					top: gridTop - 2, //设置canvas上的Y坐标
 | 
						
						
						
							|  |  | 					shadow: grid && (grid.effect == 'true' || grid.effect == true) ? shadow : null,
 | 
						
						
						
							|  |  | 					fontFamily: grid && grid.fontFamily ? grid.fontFamily : 'SimSun',
 | 
						
						
						
							|  |  | 					fill: grid && grid.foreground ? grid.foreground : '#000000',
 | 
						
						
						
							|  |  | 					fontSize: grid && grid.fontSize ? parseInt(grid.fontSize) : 16,
 | 
						
						
						
							|  |  | 					fontStyle: grid && grid.fontStyle ? grid.fontStyle : 'normal',
 | 
						
						
						
							|  |  | 					fontWeight: grid && grid.fontWeight ? grid.fontWeight : 'normal',
 | 
						
						
						
							|  |  | 					textAlign: grid && grid.horizontalAlignment ? grid.horizontalAlignment : 'center',
 | 
						
						
						
							|  |  | 					lockMovementX: true, //X轴是否可被移动(true为不可)
 | 
						
						
						
							|  |  | 					lockMovementY: true, //Y轴是否可被移动(true为不可)
 | 
						
						
						
							|  |  | 					hasControls: false,
 | 
						
						
						
							|  |  | 					hasBorders: false,
 | 
						
						
						
							|  |  | 				});
 | 
						
						
						
							|  |  | 				const border = new fabric.Rect({
 | 
						
						
						
							|  |  | 					width: gridWidth,
 | 
						
						
						
							|  |  | 					// height: 50,
 | 
						
						
						
							|  |  | 					height: gridHeigth,
 | 
						
						
						
							|  |  | 					left: (x - 1) * gridWidth, //设置canvas上的X坐标
 | 
						
						
						
							|  |  | 					top: (y - 2) * gridHeigth, //设置canvas上的Y坐标  顶部对齐
 | 
						
						
						
							|  |  | 					stroke: grid && grid.lineColor ? grid.lineColor : '#dcdcdc', //网格线颜色
 | 
						
						
						
							|  |  | 					strokeDashArray: grid && grid.lineStyle === '2' ? [5, 10] : [0, 0], //实虚线
 | 
						
						
						
							|  |  | 					fill: grid && grid.background.includes('#') ? grid.background : '',
 | 
						
						
						
							|  |  | 					_type: 'border',
 | 
						
						
						
							|  |  | 					visible: grid && (grid.showGridLines === 'false' || grid.showGridLines === false) ? false : true,
 | 
						
						
						
							|  |  | 					strokeWidth: grid && (grid.showGridLines === 'true' || grid.showGridLines === true) ? parseInt(grid.lineWidth) : 1,
 | 
						
						
						
							|  |  | 					lockMovementX: true, //X轴是否可被移动(true为不可)
 | 
						
						
						
							|  |  | 					lockMovementY: true, //Y轴是否可被移动(true为不可)
 | 
						
						
						
							|  |  | 					hasControls: false,
 | 
						
						
						
							|  |  | 					hasBorders: false,
 | 
						
						
						
							|  |  | 				});
 | 
						
						
						
							|  |  | 				child.push(border);
 | 
						
						
						
							|  |  | 				child.push(textbox);
 | 
						
						
						
							|  |  | 			}
 | 
						
						
						
							|  |  | 		}
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | 		let group = new fabric.Group(child, {
 | 
						
						
						
							|  |  | 			left: grid ? grid.left : left - parseInt(canvas._offset.left), //设置canvas上的X坐标
 | 
						
						
						
							|  |  | 			// top: grid ? (grid.top + 75) : top - parseInt(canvas._offset.top) + 75, //设置canvas上的Y坐标
 | 
						
						
						
							|  |  | 			top: grid ? grid.top + gridHeigth + 3 * gridHeigth - 18 : top - parseInt(canvas._offset.top) + (3 / 2) * gridHeigth, //设置canvas上的Y坐标
 | 
						
						
						
							|  |  | 			width: grid ? parseInt(grid.width) : 400,
 | 
						
						
						
							|  |  | 			// height: group ? parseInt(group.height) : 250,
 | 
						
						
						
							|  |  | 			height: grid ? 6 * list.length : 300,
 | 
						
						
						
							|  |  | 			rowCount: grid ? grid.rowCount : list.length, //行
 | 
						
						
						
							|  |  | 			colCount: grid ? grid.colCount : 4, //列
 | 
						
						
						
							|  |  | 			lockMovementX: true, //X轴是否可被移动(true为不可)
 | 
						
						
						
							|  |  | 			lockMovementY: true, //Y轴是否可被移动(true为不可)
 | 
						
						
						
							|  |  | 			hasControls: false,
 | 
						
						
						
							|  |  | 			hasBorders: false,
 | 
						
						
						
							|  |  | 		});
 | 
						
						
						
							|  |  | 		// 第二个动画
 | 
						
						
						
							|  |  | 		for (let y = 1; y <= rowCount; y++) {
 | 
						
						
						
							|  |  | 			// 行
 | 
						
						
						
							|  |  | 			const obj = list[y - 1];
 | 
						
						
						
							|  |  | 			// console.log(`----------第${y}行----------`);
 | 
						
						
						
							|  |  | 			for (let x = 1; x <= colCount; x++) {
 | 
						
						
						
							|  |  | 				// 列
 | 
						
						
						
							|  |  | 				const curentText = obj[Object.keys(obj)[x - 1]]; //当前单元格的值
 | 
						
						
						
							|  |  | 				// console.log(curentText);
 | 
						
						
						
							|  |  | 				let gridTop = (y - 1) * gridHeigth;
 | 
						
						
						
							|  |  | 				if ((grid && grid.verticalAlignment === 'center') || !grid) {
 | 
						
						
						
							|  |  | 					if (grid) gridTop = gridTop + (gridHeigth - parseInt(grid.fontSize)) / 2;
 | 
						
						
						
							|  |  | 					else gridTop = gridTop + (gridHeigth - 16) / 2;
 | 
						
						
						
							|  |  | 				} else if (grid && grid.verticalAlignment === 'bottom') {
 | 
						
						
						
							|  |  | 					gridTop = gridTop + (gridHeigth - parseInt(grid.fontSize));
 | 
						
						
						
							|  |  | 				}
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | 				const textbox2 = new fabric.Textbox(curentText, {
 | 
						
						
						
							|  |  | 					width: gridWidth,
 | 
						
						
						
							|  |  | 					// height: gridHeigth,
 | 
						
						
						
							|  |  | 					left: (x - 1) * gridWidth - 2, //设置canvas上的x坐标
 | 
						
						
						
							|  |  | 					top: gridTop - 2, //设置canvas上的Y坐标
 | 
						
						
						
							|  |  | 					shadow: grid && (grid.effect == 'true' || grid.effect == true) ? shadow : null,
 | 
						
						
						
							|  |  | 					fontFamily: grid && grid.fontFamily ? grid.fontFamily : 'SimSun',
 | 
						
						
						
							|  |  | 					fill: grid && grid.foreground ? grid.foreground : '#000000',
 | 
						
						
						
							|  |  | 					fontSize: grid && grid.fontSize ? parseInt(grid.fontSize) : 16,
 | 
						
						
						
							|  |  | 					fontStyle: grid && grid.fontStyle ? grid.fontStyle : 'normal',
 | 
						
						
						
							|  |  | 					fontWeight: grid && grid.fontWeight ? grid.fontWeight : 'normal',
 | 
						
						
						
							|  |  | 					textAlign: grid && grid.horizontalAlignment ? grid.horizontalAlignment : 'center',
 | 
						
						
						
							|  |  | 					lockMovementX: true, //X轴是否可被移动(true为不可)
 | 
						
						
						
							|  |  | 					lockMovementY: true, //Y轴是否可被移动(true为不可)
 | 
						
						
						
							|  |  | 					hasControls: false,
 | 
						
						
						
							|  |  | 					hasBorders: false,
 | 
						
						
						
							|  |  | 				});
 | 
						
						
						
							|  |  | 				const border2 = new fabric.Rect({
 | 
						
						
						
							|  |  | 					width: gridWidth,
 | 
						
						
						
							|  |  | 					height: gridHeigth,
 | 
						
						
						
							|  |  | 					left: (x - 1) * gridWidth, //设置canvas上的X坐标
 | 
						
						
						
							|  |  | 					top: (y - 1) * gridHeigth, //设置canvas上的Y坐标  顶部对齐
 | 
						
						
						
							|  |  | 					stroke: grid && grid.lineColor ? grid.lineColor : '#dcdcdc', //网格线颜色
 | 
						
						
						
							|  |  | 					strokeDashArray: grid && grid.lineStyle === '2' ? [5, 10] : [0, 0], //实虚线
 | 
						
						
						
							|  |  | 					fill: grid && grid.background.includes('#') ? grid.background : '',
 | 
						
						
						
							|  |  | 					_type: 'border',
 | 
						
						
						
							|  |  | 					visible: grid && (grid.showGridLines === 'false' || grid.showGridLines === false) ? false : true,
 | 
						
						
						
							|  |  | 					strokeWidth: grid && (grid.showGridLines === 'true' || grid.showGridLines === true) ? parseInt(grid.lineWidth) : 1,
 | 
						
						
						
							|  |  | 					lockMovementX: true, //X轴是否可被移动(true为不可)
 | 
						
						
						
							|  |  | 					lockMovementY: true, //Y轴是否可被移动(true为不可)
 | 
						
						
						
							|  |  | 					hasControls: false,
 | 
						
						
						
							|  |  | 					hasBorders: false,
 | 
						
						
						
							|  |  | 				});
 | 
						
						
						
							|  |  | 				child2.push(border2);
 | 
						
						
						
							|  |  | 				child2.push(textbox2);
 | 
						
						
						
							|  |  | 			}
 | 
						
						
						
							|  |  | 		}
 | 
						
						
						
							|  |  | 		let group2 = new fabric.Group(child2, {
 | 
						
						
						
							|  |  | 			left: grid ? grid.left : left - parseInt(canvas._offset.left), //设置canvas上的X坐标
 | 
						
						
						
							|  |  | 			top: grid ? grid.top + gridHeigth + 3 * gridHeigth - 18 : top - parseInt(canvas._offset.top) + (3 / 2) * gridHeigth, //设置canvas上的Y坐标
 | 
						
						
						
							|  |  | 			width: grid ? parseInt(grid.width) : 400,
 | 
						
						
						
							|  |  | 			// height: group2 ? parseInt(group2.height) : 250,
 | 
						
						
						
							|  |  | 			height: grid ? 6 * list.length : 300,
 | 
						
						
						
							|  |  | 			rowCount: grid ? grid.rowCount : list.length, //行
 | 
						
						
						
							|  |  | 			colCount: grid ? grid.colCount : 4, //列
 | 
						
						
						
							|  |  | 			lockMovementX: true, //X轴是否可被移动(true为不可)
 | 
						
						
						
							|  |  | 			lockMovementY: true, //Y轴是否可被移动(true为不可)
 | 
						
						
						
							|  |  | 			hasControls: false,
 | 
						
						
						
							|  |  | 			hasBorders: false,
 | 
						
						
						
							|  |  | 		});
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | 		let linear = function (t, b, c, d) {
 | 
						
						
						
							|  |  | 			return (c * t) / d + b;
 | 
						
						
						
							|  |  | 		};
 | 
						
						
						
							|  |  | 		if (list.length > 6 && (grid && parseInt(grid.moveSpeed) !== 6000)) {
 | 
						
						
						
							|  |  | 			const handleSetDeputationAnimate1 = () => {
 | 
						
						
						
							|  |  | 				// group.animate('top', -(list.length * gridHeigth * 3 / 2 - (list.length * gridHeigth - group.height)), {
 | 
						
						
						
							|  |  | 				group.animate('top', -((list.length * gridHeigth * 3) / 2 - (list.length * gridHeigth - group.height - 2 * gridHeigth)), {
 | 
						
						
						
							|  |  | 					// from: -(list.length * gridHeigth / 2 - (list.length * gridHeigth - group.height)),
 | 
						
						
						
							|  |  | 					from: -((list.length * gridHeigth) / 2 - (list.length * gridHeigth - group.height - 2 * gridHeigth)),
 | 
						
						
						
							|  |  | 					duration: grid && grid.moveSpeed ? parseInt(grid.moveSpeed) : 10000,
 | 
						
						
						
							|  |  | 					onChange: canvas.renderAll.bind(canvas),
 | 
						
						
						
							|  |  | 					onComplete: handleSetDeputationAnimate1,
 | 
						
						
						
							|  |  | 					easing: linear,
 | 
						
						
						
							|  |  | 				});
 | 
						
						
						
							|  |  | 			};
 | 
						
						
						
							|  |  | 			handleSetDeputationAnimate1();
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | 			const handleSetDeputationAnimate2 = () => {
 | 
						
						
						
							|  |  | 				group2.animate('top', -((list.length * gridHeigth) / 2 - (list.length * gridHeigth - group.height - 2 * gridHeigth)), {
 | 
						
						
						
							|  |  | 					from: (list.length * gridHeigth) / 2 + (list.length * gridHeigth - group.height - 2 * gridHeigth),
 | 
						
						
						
							|  |  | 					duration: grid && grid.moveSpeed ? parseInt(grid.moveSpeed) : 10000,
 | 
						
						
						
							|  |  | 					onChange: canvas.renderAll.bind(canvas),
 | 
						
						
						
							|  |  | 					onComplete: handleSetDeputationAnimate2,
 | 
						
						
						
							|  |  | 					easing: linear,
 | 
						
						
						
							|  |  | 				});
 | 
						
						
						
							|  |  | 			};
 | 
						
						
						
							|  |  | 			handleSetDeputationAnimate2();
 | 
						
						
						
							|  |  | 		}
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | 		var rect = new fabric.Rect({
 | 
						
						
						
							|  |  | 			width: grid ? parseInt(grid.width) : 400,
 | 
						
						
						
							|  |  | 			height: grid ? parseInt(grid.height) : 350,
 | 
						
						
						
							|  |  | 			left: grid ? grid.left : left - parseInt(canvas._offset.left), //设置canvas上的X坐标
 | 
						
						
						
							|  |  | 			top: grid ? grid.top : top - parseInt(canvas._offset.top), //设置canvas上的Y坐标
 | 
						
						
						
							|  |  | 			// stroke: '#dcdcdc',
 | 
						
						
						
							|  |  | 			strokeWidth: 1,
 | 
						
						
						
							|  |  | 			fill: '',
 | 
						
						
						
							|  |  | 			lockMovementX: true, //X轴是否可被移动(true为不可)
 | 
						
						
						
							|  |  | 			lockMovementY: true, //Y轴是否可被移动(true为不可)
 | 
						
						
						
							|  |  | 			hasControls: false,
 | 
						
						
						
							|  |  | 			hasBorders: false,
 | 
						
						
						
							|  |  | 		});
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | 		childWrapper.push(group);
 | 
						
						
						
							|  |  | 		if (list.length > 6) {
 | 
						
						
						
							|  |  | 			childWrapper.push(group2);
 | 
						
						
						
							|  |  | 		}
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | 		grid && (grid.showGroupHeadColumn == 'false' || grid.showGroupHeadColumn == false) ? '' : childWrapper.push(headColumnGroup);
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | 		childWrapper.push(rect);
 | 
						
						
						
							|  |  | 		// grid && (grid.showGroupHeadColumn == 'false' || grid.showGroupHeadColumn == false) ? childWrapper.splice(2,1) : ''
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | 		let groupWrapper = new fabric.Group(childWrapper, {
 | 
						
						
						
							|  |  | 			left: grid ? grid.left : left - parseInt(canvas._offset.left), //设置canvas上的X坐标
 | 
						
						
						
							|  |  | 			top: grid ? grid.top : top - parseInt(canvas._offset.top), //设置canvas上的Y坐标
 | 
						
						
						
							|  |  | 			width: grid ? parseInt(grid.width) : 400,
 | 
						
						
						
							|  |  | 			height: grid ? parseInt(grid.height) : 350,
 | 
						
						
						
							|  |  | 			rowCount: grid ? grid.rowCount : list.length, //行
 | 
						
						
						
							|  |  | 			colCount: grid ? grid.colCount : 4, //列
 | 
						
						
						
							|  |  | 			horizontalAlignment: grid && grid.horizontalAlignment ? grid.horizontalAlignment : 'center', //水平对齐方式left, center, right
 | 
						
						
						
							|  |  | 			verticalAlignment: grid && grid.verticalAlignment ? grid.verticalAlignment : 'center', //垂直方式对齐top, center, bottom
 | 
						
						
						
							|  |  | 			lineStyle: grid && grid.lineStyle ? grid.lineStyle : '1', //网格线样式
 | 
						
						
						
							|  |  | 			showGridLines: grid && (grid.showGridLines === 'false' || grid.showGridLines === false) ? false : true, //是否显示网格
 | 
						
						
						
							|  |  | 			lineWidth: grid ? parseInt(grid.lineWidth) : 1, //网格线宽度
 | 
						
						
						
							|  |  | 			lineColor: grid ? grid.lineColor : '#dcdcdc', //网格线颜色
 | 
						
						
						
							|  |  | 			effect: grid && (grid.effect === 'true' || grid.effect === true) ? true : false, // 阴影
 | 
						
						
						
							|  |  | 			fontFamily: grid ? grid.fontFamily : 'SimSun', //字体
 | 
						
						
						
							|  |  | 			foreground: grid ? grid.foreground : '#000000', //字体颜色
 | 
						
						
						
							|  |  | 			fontSize: grid ? grid.fontSize : 16, //字体大小
 | 
						
						
						
							|  |  | 			fontStyle: grid ? grid.fontStyle : 'normal',
 | 
						
						
						
							|  |  | 			fontWeight: grid ? grid.fontWeight : 'normal',
 | 
						
						
						
							|  |  | 			background: grid && grid.background.includes('#') ? grid.background : '', //透明
 | 
						
						
						
							|  |  | 			moveSpeed: grid && grid.moveSpeed ? grid.moveSpeed : '10000',
 | 
						
						
						
							|  |  | 			text: text,
 | 
						
						
						
							|  |  | 			showGroupHeadColumn: grid && (grid.showGroupHeadColumn === 'false' || grid.showGroupHeadColumn === false) ? false : true, //是否显示列头
 | 
						
						
						
							|  |  | 			groupHeadColumnColor: grid ? grid.groupHeadColumnColor : '#f4f4f4',
 | 
						
						
						
							|  |  | 			groupHeadColumnFontName: grid ? grid.groupHeadColumnFontName : 'SimSun',
 | 
						
						
						
							|  |  | 			groupHeadColumnFontSize: grid ? grid.groupHeadColumnFontSize : 16,
 | 
						
						
						
							|  |  | 			groupHeadColumnFontStyle: grid ? grid.groupHeadColumnFontStyle : 'normal,normal',
 | 
						
						
						
							|  |  | 			component_type: grid ? grid.component_type : '8',
 | 
						
						
						
							|  |  | 			bindingFieldID: grid && grid.bindingFieldID ? grid.bindingFieldID : '0x1096',
 | 
						
						
						
							|  |  | 			lockMovementX: true, //X轴是否可被移动(true为不可)
 | 
						
						
						
							|  |  | 			lockMovementY: true, //Y轴是否可被移动(true为不可)
 | 
						
						
						
							|  |  | 			hasControls: false,
 | 
						
						
						
							|  |  | 			hasBorders: false,
 | 
						
						
						
							|  |  | 		});
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | 		groupWrapper.clipTo = function (ctx) {
 | 
						
						
						
							|  |  | 			ctx.beginPath();
 | 
						
						
						
							|  |  | 			ctx.rect(-this.width / 2, -this.height / 2, this.width, this.height); // 根据Group对象的左上角和宽高计算路径
 | 
						
						
						
							|  |  | 		};
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | 		canvas.add(groupWrapper); // 将图形添加至画布
 | 
						
						
						
							|  |  | 		groupWrapper['setControlVisible']('mtr', false);
 | 
						
						
						
							|  |  | 		//更新canvas
 | 
						
						
						
							|  |  | 		canvas.setActiveObject(groupWrapper);
 | 
						
						
						
							|  |  | 	};
 | 
						
						
						
							|  |  | 	//添加代表团列表end====================
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | 	//添加子义题列表start========================
 | 
						
						
						
							|  |  | 	handleSetZytlb = (top, left, grid) => {
 | 
						
						
						
							|  |  | 		let child = []; //动画一
 | 
						
						
						
							|  |  | 		let child2 = []; //动画二
 | 
						
						
						
							|  |  | 		let childHead = []; //列头
 | 
						
						
						
							|  |  | 		let childWrapper = []; //最外层边框
 | 
						
						
						
							|  |  | 		let text = grid && grid.text ? grid.text : '子议题列表';
 | 
						
						
						
							|  |  | 		const topicName = grid?.keyTopicSelect && (grid.keyTopicSelect === 'true' || grid.keyTopicSelect === true) ? true : false;
 | 
						
						
						
							|  |  | 		const zc = grid?.key1Select && (grid.key1Select === 'true' || grid.key1Select === true) ? true : false;
 | 
						
						
						
							|  |  | 		const fd = grid?.key2Select && (grid.key2Select === 'true' || grid.key2Select === true) ? true : false;
 | 
						
						
						
							|  |  | 		const qq = grid?.key3Select && (grid.key3Select === 'true' || grid.key3Select === true) ? true : false;
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | 		const wa = grid?.keyOtherSelect && (grid.keyOtherSelect === 'true' || grid.keyOtherSelect === true) ? true : false;
 | 
						
						
						
							|  |  | 		const jg = grid?.keyResultSelect && (grid.keyResultSelect === 'true' || grid.keyResultSelect === true) ? true : false;
 | 
						
						
						
							|  |  | 		const num = grid?.topicNumOnePage ? grid.topicNumOnePage : 6;
 | 
						
						
						
							|  |  | 		const tempGridSetting = {
 | 
						
						
						
							|  |  | 			topicName: topicName,
 | 
						
						
						
							|  |  | 			zc: zc,
 | 
						
						
						
							|  |  | 			fd: fd,
 | 
						
						
						
							|  |  | 			qq: qq,
 | 
						
						
						
							|  |  | 			wa: wa,
 | 
						
						
						
							|  |  | 			jg: jg,
 | 
						
						
						
							|  |  | 		};
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | 		const list = [
 | 
						
						
						
							|  |  | 			{ topicName: '议题名称', zc: '赞成人数', fd: '反对人数', qq: '弃权人数', wa: '未按人数', jg: '表决结果' },
 | 
						
						
						
							|  |  | 			{ topicName: '第一次全体会议', zc: '26', fd: '3', qq: '2', wa: '0', jg: '赞成' },
 | 
						
						
						
							|  |  | 			{ topicName: '第二次全体会议', zc: '26', fd: '3', qq: '2', wa: '0', jg: '赞成' },
 | 
						
						
						
							|  |  | 			{ topicName: '第三次全体会议', zc: '26', fd: '3', qq: '2', wa: '0', jg: '赞成' },
 | 
						
						
						
							|  |  | 			{ topicName: '第四次全体会议', zc: '26', fd: '3', qq: '2', wa: '0', jg: '赞成' },
 | 
						
						
						
							|  |  | 			{ topicName: '第五次全体会议', zc: '26', fd: '3', qq: '2', wa: '0', jg: '赞成' },
 | 
						
						
						
							|  |  | 			{ topicName: '第六次全体会议', zc: '26', fd: '3', qq: '2', wa: '0', jg: '赞成' },
 | 
						
						
						
							|  |  | 			{ topicName: '第七次全体会议', zc: '26', fd: '3', qq: '2', wa: '0', jg: '赞成' },
 | 
						
						
						
							|  |  | 		];
 | 
						
						
						
							|  |  | 		let length = num - list.length;
 | 
						
						
						
							|  |  | 		if (0 < length) {
 | 
						
						
						
							|  |  | 			for (let i = 1; i <= length; i++) {
 | 
						
						
						
							|  |  | 				list.push({ topicName: '', zc: '', fd: '', qq: '', wa: '', jg: '' });
 | 
						
						
						
							|  |  | 			}
 | 
						
						
						
							|  |  | 		}
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | 		if (!topicName && !zc && !fd && !qq && !wa && !jg) {
 | 
						
						
						
							|  |  | 			list.length = num;
 | 
						
						
						
							|  |  | 		}
 | 
						
						
						
							|  |  | 		const propsObj = list[0] || { topicName: '第一次全体会议', zc: '26', fd: '3', qq: '2', wa: '0', jg: '赞成' };
 | 
						
						
						
							|  |  | 		const rowCount = list.length;
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | 		const colCount = Object.keys(propsObj).length;
 | 
						
						
						
							|  |  | 		const gridWidth1 = grid ? (grid.width - 2) * (parseInt(grid.topicPercent) / 100) : 100;
 | 
						
						
						
							|  |  | 		const gridWidth2 = grid ? ((grid.width - 2) * (parseInt(100 - grid.topicPercent) / 100)) / 5 : 100;
 | 
						
						
						
							|  |  | 		const gridHeigth = grid ? grid.height / (parseInt(grid.topicNumOnePage) + 1) : 50;
 | 
						
						
						
							|  |  | 		// const gridHeigth = 50
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | 		// let copeHeadList = { topicName: '议题名称', zc: '赞成人数', fd: '反对人数', qq: '弃权人数', wa: '未按人数', jg: '表决结果' };
 | 
						
						
						
							|  |  | 		// let headList = {};
 | 
						
						
						
							|  |  | 		// Object.keys(copeHeadList).map((item) => {
 | 
						
						
						
							|  |  | 		//     headList[item] = tempGridSetting[item] ? copeHeadList[item] : '';
 | 
						
						
						
							|  |  | 		// });
 | 
						
						
						
							|  |  | 		// console.log('议题表头111', headList);
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | 		list.map((item) => {
 | 
						
						
						
							|  |  | 			Object.keys(item).map((itemChild) => {
 | 
						
						
						
							|  |  | 				item[itemChild] = tempGridSetting[itemChild] ? item[itemChild] : '';
 | 
						
						
						
							|  |  | 			});
 | 
						
						
						
							|  |  | 		});
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | 		for (let x = 1; x <= colCount; x++) {
 | 
						
						
						
							|  |  | 			//列
 | 
						
						
						
							|  |  | 			if (x == 1) {
 | 
						
						
						
							|  |  | 				// const currentHeadText = headList[Object.keys(headList)[x - 1]];
 | 
						
						
						
							|  |  | 				// const haedTextbox = new fabric.Textbox(currentHeadText, {
 | 
						
						
						
							|  |  | 				//     width: gridWidth1,
 | 
						
						
						
							|  |  | 				//     left: (x - 1) * gridWidth1 - 2, //设置canvas上的x坐标
 | 
						
						
						
							|  |  | 				//     top: grid && grid.fontSize ? (gridHeigth - parseInt(grid.fontSize)) / 2 : 16, //设置canvas上的Y坐标
 | 
						
						
						
							|  |  | 				//     fill: grid && grid.foreground ? grid.foreground : '#333',
 | 
						
						
						
							|  |  | 				//     // top: 0,
 | 
						
						
						
							|  |  | 				//     fontFamily: grid && grid.fontFamily ? grid.fontFamily : 'SimSun',
 | 
						
						
						
							|  |  | 				//     fontSize: grid && grid.fontSize ? parseInt(grid.fontSize) : 18,
 | 
						
						
						
							|  |  | 				//     fontStyle: grid && grid.fontStyle ? grid.fontStyle.split(',')[0] : 'normal',
 | 
						
						
						
							|  |  | 				//     fontWeight: grid && grid.fontWeight ? grid.fontWeight : 'normal',
 | 
						
						
						
							|  |  | 				//     textAlign: grid && grid.horizontalAlignment ? grid.horizontalAlignment : 'center',
 | 
						
						
						
							|  |  | 				// });
 | 
						
						
						
							|  |  | 				// const headBorder = new fabric.Rect({
 | 
						
						
						
							|  |  | 				//     width: gridWidth1,
 | 
						
						
						
							|  |  | 				//     height: gridHeigth,
 | 
						
						
						
							|  |  | 				//     left: (x - 1) * gridWidth1, //设置canvas上的X坐标
 | 
						
						
						
							|  |  | 				//     top: 0, //设置canvas上的Y坐标  顶部对齐
 | 
						
						
						
							|  |  | 				//     stroke: grid && grid.lineColor ? grid.lineColor : '#dcdcdc', //网格线颜色
 | 
						
						
						
							|  |  | 				//     // fill: grid && grid.foreground ? grid.foreground : '#f4f4f4',
 | 
						
						
						
							|  |  | 				//     fill: canvas.backgroundColor && canvas.backgroundColor.includes('#') ? canvas.backgroundColor : '#f4f4f4', //背景颜色
 | 
						
						
						
							|  |  | 				//     _type: 'border',
 | 
						
						
						
							|  |  | 				//     visible: grid && (grid.showGridLines === 'false' || grid.showGridLines === false) ? false : true,
 | 
						
						
						
							|  |  | 				//     strokeWidth: grid && (grid.showGridLines === 'true' || grid.showGridLines === true) ? parseInt(grid.lineWidth) : 1,
 | 
						
						
						
							|  |  | 				// });
 | 
						
						
						
							|  |  | 				// childHead.push(headBorder);
 | 
						
						
						
							|  |  | 				// childHead.push(haedTextbox);
 | 
						
						
						
							|  |  | 			} else {
 | 
						
						
						
							|  |  | 				// const currentHeadText = headList[Object.keys(headList)[x - 1]];
 | 
						
						
						
							|  |  | 				// const haedTextbox = new fabric.Textbox(currentHeadText, {
 | 
						
						
						
							|  |  | 				//     width: gridWidth2,
 | 
						
						
						
							|  |  | 				//     left: (x - 2) * gridWidth2 - 2 + gridWidth1, //设置canvas上的x坐标
 | 
						
						
						
							|  |  | 				//     top: grid && grid.fontSize ? (gridHeigth - parseInt(grid.fontSize)) / 2 : 16, //设置canvas上的Y坐标
 | 
						
						
						
							|  |  | 				//     fill: grid && grid.foreground ? grid.foreground : '#333',
 | 
						
						
						
							|  |  | 				//     // top: 0,
 | 
						
						
						
							|  |  | 				//     fontFamily: grid && grid.fontFamily ? grid.fontFamily : 'SimSun',
 | 
						
						
						
							|  |  | 				//     fontSize: grid && grid.fontSize ? parseInt(grid.fontSize) : 18,
 | 
						
						
						
							|  |  | 				//     fontStyle: grid && grid.fontStyle ? grid.fontStyle.split(',')[0] : 'normal',
 | 
						
						
						
							|  |  | 				//     fontWeight: grid && grid.fontWeight ? grid.fontWeight : 'normal',
 | 
						
						
						
							|  |  | 				//     textAlign: grid && grid.horizontalAlignment ? grid.horizontalAlignment : 'center',
 | 
						
						
						
							|  |  | 				// });
 | 
						
						
						
							|  |  | 				// const headBorder = new fabric.Rect({
 | 
						
						
						
							|  |  | 				//     width: gridWidth2,
 | 
						
						
						
							|  |  | 				//     height: gridHeigth,
 | 
						
						
						
							|  |  | 				//     left: (x - 2) * gridWidth2 + gridWidth1, //设置canvas上的X坐标
 | 
						
						
						
							|  |  | 				//     top: 0, //设置canvas上的Y坐标  顶部对齐
 | 
						
						
						
							|  |  | 				//     stroke: grid && grid.lineColor ? grid.lineColor : '#dcdcdc', //网格线颜色
 | 
						
						
						
							|  |  | 				//     // fill: grid && grid.foreground ? grid.foreground : '#f4f4f4',
 | 
						
						
						
							|  |  | 				//     fill: canvas.backgroundColor && canvas.backgroundColor.includes('#')? canvas.backgroundColor : '#f4f4f4', //背景颜色
 | 
						
						
						
							|  |  | 				//     _type: 'border',
 | 
						
						
						
							|  |  | 				//     visible: grid && (grid.showGridLines === 'false' || grid.showGridLines === false) ? false : true,
 | 
						
						
						
							|  |  | 				//     strokeWidth: grid && (grid.showGridLines === 'true' || grid.showGridLines === true) ? parseInt(grid.lineWidth) : 1,
 | 
						
						
						
							|  |  | 				// });
 | 
						
						
						
							|  |  | 				// childHead.push(headBorder);
 | 
						
						
						
							|  |  | 				// childHead.push(haedTextbox);
 | 
						
						
						
							|  |  | 			}
 | 
						
						
						
							|  |  | 		}
 | 
						
						
						
							|  |  | 		var headColumnGroup = new fabric.Group(childHead, {
 | 
						
						
						
							|  |  | 			width: grid ? parseInt(grid.width) : 600,
 | 
						
						
						
							|  |  | 			height: gridHeigth,
 | 
						
						
						
							|  |  | 			left: grid ? grid.left : left - parseInt(canvas._offset.left) + (grid?.width ? grid.width / 6 : 100), //设置canvas上的X坐标
 | 
						
						
						
							|  |  | 			top: grid ? parseInt(grid.fontSize) / 2 : 0,
 | 
						
						
						
							|  |  | 			// top: grid ? grid.top : top - parseInt(canvas._offset.top), //设置canvas上的Y坐标
 | 
						
						
						
							|  |  | 			showGroupHeadColumn: grid && (grid.showGridLines == 'false' || grid.showGridLines == false) ? false : true, //是否显示列头
 | 
						
						
						
							|  |  | 			// groupHeadColumnColor: grid ? grid.background : '#f4f4f4',
 | 
						
						
						
							|  |  | 			groupHeadColumnColor: grid ? grid.background : '#f4f4f4',
 | 
						
						
						
							|  |  | 			groupHeadColumnFontName: grid ? grid.fontFamily : 'SimSun',
 | 
						
						
						
							|  |  | 			groupHeadColumnFontSize: grid ? grid.fontSize : 18,
 | 
						
						
						
							|  |  | 			groupHeadColumnFontStyle: grid ? grid.fontStyle : 'normal',
 | 
						
						
						
							|  |  | 			groupHeadColumnFontWeight: grid ? grid.fontWeight : 'normal',
 | 
						
						
						
							|  |  | 			lockMovementX: true, //X轴是否可被移动(true为不可)
 | 
						
						
						
							|  |  | 			lockMovementY: true, //Y轴是否可被移动(true为不可)
 | 
						
						
						
							|  |  | 			hasControls: false,
 | 
						
						
						
							|  |  | 			hasBorders: false,
 | 
						
						
						
							|  |  | 		});
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | 		for (let y = 1; y <= rowCount; y++) {
 | 
						
						
						
							|  |  | 			// 行
 | 
						
						
						
							|  |  | 			const obj = list[y - 1];
 | 
						
						
						
							|  |  | 			// console.log(`----------第${y}行----------`);
 | 
						
						
						
							|  |  | 			for (let x = 1; x <= colCount; x++) {
 | 
						
						
						
							|  |  | 				// 列
 | 
						
						
						
							|  |  | 				if (x == 1) {
 | 
						
						
						
							|  |  | 					const curentText = obj[Object.keys(obj)[x - 1]]; //当前单元格的值
 | 
						
						
						
							|  |  | 					let gridTop = (y - 2) * gridHeigth;
 | 
						
						
						
							|  |  | 					if ((grid && grid.verticalAlignment === 'center') || !grid) {
 | 
						
						
						
							|  |  | 						if (grid) gridTop = gridTop + (gridHeigth - parseInt(grid.fontSize)) / 2;
 | 
						
						
						
							|  |  | 						else gridTop = gridTop + (gridHeigth - 16) / 2;
 | 
						
						
						
							|  |  | 					} else if (grid && grid.verticalAlignment === 'bottom') {
 | 
						
						
						
							|  |  | 						gridTop = gridTop + (gridHeigth - parseInt(grid.fontSize));
 | 
						
						
						
							|  |  | 					}
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | 					const textbox = new fabric.Textbox(curentText, {
 | 
						
						
						
							|  |  | 						width: gridWidth1,
 | 
						
						
						
							|  |  | 						height: gridHeigth,
 | 
						
						
						
							|  |  | 						left: (x - 1) * gridWidth1 - 2, //设置canvas上的x坐标
 | 
						
						
						
							|  |  | 						top: gridTop - 2, //设置canvas上的Y坐标
 | 
						
						
						
							|  |  | 						shadow: grid && (grid.effect == 'true' || grid.effect == true) ? shadow : null,
 | 
						
						
						
							|  |  | 						fontFamily: grid && grid.fontFamily ? grid.fontFamily : 'SimSun',
 | 
						
						
						
							|  |  | 						fill: grid && grid.foreground ? grid.foreground : '#000000',
 | 
						
						
						
							|  |  | 						fontSize: grid && grid.fontSize ? parseInt(grid.fontSize) : 18,
 | 
						
						
						
							|  |  | 						fontStyle: grid && grid.fontStyle ? grid.fontStyle : 'normal',
 | 
						
						
						
							|  |  | 						fontWeight: grid && grid.fontWeight ? grid.fontWeight : 'normal',
 | 
						
						
						
							|  |  | 						textAlign: grid && grid.horizontalAlignment ? grid.horizontalAlignment : 'center',
 | 
						
						
						
							|  |  | 						lockMovementX: true, //X轴是否可被移动(true为不可)
 | 
						
						
						
							|  |  | 						lockMovementY: true, //Y轴是否可被移动(true为不可)
 | 
						
						
						
							|  |  | 						hasControls: false,
 | 
						
						
						
							|  |  | 						hasBorders: false,
 | 
						
						
						
							|  |  | 					});
 | 
						
						
						
							|  |  | 					const border = new fabric.Rect({
 | 
						
						
						
							|  |  | 						width: gridWidth1,
 | 
						
						
						
							|  |  | 						height: gridHeigth,
 | 
						
						
						
							|  |  | 						left: (x - 1) * gridWidth1, //设置canvas上的X坐标
 | 
						
						
						
							|  |  | 						top: (y - 2) * gridHeigth, //设置canvas上的Y坐标  顶部对齐
 | 
						
						
						
							|  |  | 						stroke: grid && grid.lineColor ? grid.lineColor : '#dcdcdc', //网格线颜色
 | 
						
						
						
							|  |  | 						strokeDashArray: grid && grid.lineStyle === '2' ? [5, 10] : [0, 0], //实虚线
 | 
						
						
						
							|  |  | 						fill: grid && grid.background.includes('#') ? grid.background : '',
 | 
						
						
						
							|  |  | 						_type: 'border',
 | 
						
						
						
							|  |  | 						visible: grid && (grid.showGridLines === 'false' || grid.showGridLines === false) ? false : true,
 | 
						
						
						
							|  |  | 						strokeWidth: grid && (grid.showGridLines === 'true' || grid.showGridLines === true) ? parseInt(grid.lineWidth) : 1,
 | 
						
						
						
							|  |  | 						lockMovementX: true, //X轴是否可被移动(true为不可)
 | 
						
						
						
							|  |  | 						lockMovementY: true, //Y轴是否可被移动(true为不可)
 | 
						
						
						
							|  |  | 						hasControls: false,
 | 
						
						
						
							|  |  | 						hasBorders: false,
 | 
						
						
						
							|  |  | 					});
 | 
						
						
						
							|  |  | 					child.push(border);
 | 
						
						
						
							|  |  | 					child.push(textbox);
 | 
						
						
						
							|  |  | 				} else {
 | 
						
						
						
							|  |  | 					const curentText = obj[Object.keys(obj)[x - 1]]; //当前单元格的值
 | 
						
						
						
							|  |  | 					let gridTop = (y - 2) * gridHeigth;
 | 
						
						
						
							|  |  | 					if ((grid && grid.verticalAlignment === 'center') || !grid) {
 | 
						
						
						
							|  |  | 						if (grid) gridTop = gridTop + (gridHeigth - parseInt(grid.fontSize)) / 2;
 | 
						
						
						
							|  |  | 						else gridTop = gridTop + (gridHeigth - 16) / 2;
 | 
						
						
						
							|  |  | 					} else if (grid && grid.verticalAlignment === 'bottom') {
 | 
						
						
						
							|  |  | 						gridTop = gridTop + (gridHeigth - parseInt(grid.fontSize));
 | 
						
						
						
							|  |  | 					}
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | 					const textbox = new fabric.Textbox(curentText, {
 | 
						
						
						
							|  |  | 						width: gridWidth2,
 | 
						
						
						
							|  |  | 						height: gridHeigth,
 | 
						
						
						
							|  |  | 						left: (x - 2) * gridWidth2 + gridWidth1 - 2, //设置canvas上的x坐标
 | 
						
						
						
							|  |  | 						top: gridTop - 2, //设置canvas上的Y坐标
 | 
						
						
						
							|  |  | 						shadow: grid && (grid.effect == 'true' || grid.effect == true) ? shadow : null,
 | 
						
						
						
							|  |  | 						fontFamily: grid && grid.fontFamily ? grid.fontFamily : 'SimSun',
 | 
						
						
						
							|  |  | 						fill: grid && grid.foreground ? grid.foreground : '#000000',
 | 
						
						
						
							|  |  | 						fontSize: grid && grid.fontSize ? parseInt(grid.fontSize) : 18,
 | 
						
						
						
							|  |  | 						fontStyle: grid && grid.fontStyle ? grid.fontStyle : 'normal',
 | 
						
						
						
							|  |  | 						fontWeight: grid && grid.fontWeight ? grid.fontWeight : 'normal',
 | 
						
						
						
							|  |  | 						textAlign: grid && grid.horizontalAlignment ? grid.horizontalAlignment : 'center',
 | 
						
						
						
							|  |  | 						lockMovementX: true, //X轴是否可被移动(true为不可)
 | 
						
						
						
							|  |  | 						lockMovementY: true, //Y轴是否可被移动(true为不可)
 | 
						
						
						
							|  |  | 						hasControls: false,
 | 
						
						
						
							|  |  | 						hasBorders: false,
 | 
						
						
						
							|  |  | 					});
 | 
						
						
						
							|  |  | 					const border = new fabric.Rect({
 | 
						
						
						
							|  |  | 						width: gridWidth2,
 | 
						
						
						
							|  |  | 						height: gridHeigth,
 | 
						
						
						
							|  |  | 						left: (x - 2) * gridWidth2 + gridWidth1, //设置canvas上的X坐标
 | 
						
						
						
							|  |  | 						top: (y - 2) * gridHeigth, //设置canvas上的Y坐标  顶部对齐
 | 
						
						
						
							|  |  | 						stroke: grid && grid.lineColor ? grid.lineColor : '#dcdcdc', //网格线颜色
 | 
						
						
						
							|  |  | 						strokeDashArray: grid && grid.lineStyle === '2' ? [5, 10] : [0, 0], //实虚线
 | 
						
						
						
							|  |  | 						fill: grid && grid.background.includes('#') ? grid.background : '',
 | 
						
						
						
							|  |  | 						_type: 'border',
 | 
						
						
						
							|  |  | 						visible: grid && (grid.showGridLines === 'false' || grid.showGridLines === false) ? false : true,
 | 
						
						
						
							|  |  | 						strokeWidth: grid && (grid.showGridLines === 'true' || grid.showGridLines === true) ? parseInt(grid.lineWidth) : 1,
 | 
						
						
						
							|  |  | 						lockMovementX: true, //X轴是否可被移动(true为不可)
 | 
						
						
						
							|  |  | 						lockMovementY: true, //Y轴是否可被移动(true为不可)
 | 
						
						
						
							|  |  | 						hasControls: false,
 | 
						
						
						
							|  |  | 						hasBorders: false,
 | 
						
						
						
							|  |  | 					});
 | 
						
						
						
							|  |  | 					child.push(border);
 | 
						
						
						
							|  |  | 					child.push(textbox);
 | 
						
						
						
							|  |  | 				}
 | 
						
						
						
							|  |  | 			}
 | 
						
						
						
							|  |  | 		}
 | 
						
						
						
							|  |  | 		let group = new fabric.Group(child, {
 | 
						
						
						
							|  |  | 			left: grid ? grid.left : left - parseInt(canvas._offset.left), //设置canvas上的X坐标
 | 
						
						
						
							|  |  | 			top: grid ? grid.top + gridHeigth + 3 * gridHeigth - 18 : top - parseInt(canvas._offset.top) + gridHeigth + 3 * gridHeigth - 18, //设置canvas上的Y坐标
 | 
						
						
						
							|  |  | 			width: grid ? parseInt(grid.width) : 600,
 | 
						
						
						
							|  |  | 			height: grid ? grid.topicNumOnePage * list.length : 250,
 | 
						
						
						
							|  |  | 			lockMovementX: true, //X轴是否可被移动(true为不可)
 | 
						
						
						
							|  |  | 			lockMovementY: true, //Y轴是否可被移动(true为不可)
 | 
						
						
						
							|  |  | 			hasControls: false,
 | 
						
						
						
							|  |  | 			hasBorders: false,
 | 
						
						
						
							|  |  | 		});
 | 
						
						
						
							|  |  | 		// 第二个动画
 | 
						
						
						
							|  |  | 		// for (let y = 1; y <= rowCount; y++) {
 | 
						
						
						
							|  |  | 		//     // 行
 | 
						
						
						
							|  |  | 		//     const obj = list[y - 1];
 | 
						
						
						
							|  |  | 		//     // console.log(`----------第${y}行----------`);
 | 
						
						
						
							|  |  | 		//     for (let x = 1; x <= colCount; x++) {
 | 
						
						
						
							|  |  | 		//         // 列
 | 
						
						
						
							|  |  | 		//         const curentText = obj[Object.keys(obj)[x - 1]]; //当前单元格的值
 | 
						
						
						
							|  |  | 		//         // console.log(curentText);
 | 
						
						
						
							|  |  | 		//         let gridTop = (y - 2) * gridHeigth;
 | 
						
						
						
							|  |  | 		//         if ((grid && grid.verticalAlignment === 'center') || !grid) {
 | 
						
						
						
							|  |  | 		//             if (grid) gridTop = gridTop + (gridHeigth - parseInt(grid.fontSize)) / 2;
 | 
						
						
						
							|  |  | 		//             else gridTop = gridTop + (gridHeigth - 16) / 2;
 | 
						
						
						
							|  |  | 		//         } else if (grid && grid.verticalAlignment === 'bottom') {
 | 
						
						
						
							|  |  | 		//             gridTop = gridTop + (gridHeigth - parseInt(grid.fontSize));
 | 
						
						
						
							|  |  | 		//         }
 | 
						
						
						
							|  |  | 		//         if (x == 1) {
 | 
						
						
						
							|  |  | 		//             const textbox2 = new fabric.Textbox(curentText, {
 | 
						
						
						
							|  |  | 		//                 width: gridWidth1,
 | 
						
						
						
							|  |  | 		//                 // height: gridHeigth,
 | 
						
						
						
							|  |  | 		//                 left: (x - 1) * gridWidth1 - 2, //设置canvas上的x坐标
 | 
						
						
						
							|  |  | 		//                 top: gridTop - 2, //设置canvas上的Y坐标
 | 
						
						
						
							|  |  | 		//                 shadow: grid && (grid.effect == 'true' || grid.effect == true) ? shadow : null,
 | 
						
						
						
							|  |  | 		//                 fontFamily: grid && grid.fontFamily ? grid.fontFamily : 'SimSun',
 | 
						
						
						
							|  |  | 		//                 fill: grid && grid.foreground ? grid.foreground : '#000000',
 | 
						
						
						
							|  |  | 		//                 fontSize: grid && grid.fontSize ? parseInt(grid.fontSize) : 18,
 | 
						
						
						
							|  |  | 		//                 fontStyle: grid && grid.fontStyle ? grid.fontStyle : 'normal',
 | 
						
						
						
							|  |  | 		//                 fontWeight: grid && grid.fontWeight ? grid.fontWeight : 'normal',
 | 
						
						
						
							|  |  | 		//                 textAlign: grid && grid.horizontalAlignment ? grid.horizontalAlignment : 'center',
 | 
						
						
						
							|  |  | 		//             });
 | 
						
						
						
							|  |  | 		//             const border2 = new fabric.Rect({
 | 
						
						
						
							|  |  | 		//                 width: gridWidth1,
 | 
						
						
						
							|  |  | 		//                 height: gridHeigth,
 | 
						
						
						
							|  |  | 		//                 left: (x - 1) * gridWidth1, //设置canvas上的X坐标
 | 
						
						
						
							|  |  | 		//                 top: 0,
 | 
						
						
						
							|  |  | 		//                 // top: (y - 2) * gridHeigth, //设置canvas上的Y坐标  顶部对齐
 | 
						
						
						
							|  |  | 		//                 stroke: grid && grid.lineColor ? grid.lineColor : '#dcdcdc', //网格线颜色
 | 
						
						
						
							|  |  | 		//                 strokeDashArray: grid && grid.lineStyle === '2' ? [5, 10] : [0, 0], //实虚线
 | 
						
						
						
							|  |  | 		//                 fill: grid && grid.background.includes('#') ? grid.background : '',
 | 
						
						
						
							|  |  | 		//                 _type: 'border',
 | 
						
						
						
							|  |  | 		//                 visible: grid && (grid.showGridLines === 'false' || grid.showGridLines === false) ? false : true,
 | 
						
						
						
							|  |  | 		//                 strokeWidth: grid && (grid.showGridLines === 'true' || grid.showGridLines === true) ? parseInt(grid.lineWidth) : 1,
 | 
						
						
						
							|  |  | 		//             });
 | 
						
						
						
							|  |  | 		//             child2.push(border2);
 | 
						
						
						
							|  |  | 		//             child2.push(textbox2);
 | 
						
						
						
							|  |  | 		//         } else {
 | 
						
						
						
							|  |  | 		//             const curentText = obj[Object.keys(obj)[x - 1]]; //当前单元格的值
 | 
						
						
						
							|  |  | 		//             // console.log(curentText);
 | 
						
						
						
							|  |  | 		//             let gridTop = (y - 2) * gridHeigth;
 | 
						
						
						
							|  |  | 		//             if ((grid && grid.verticalAlignment === 'center') || !grid) {
 | 
						
						
						
							|  |  | 		//                 if (grid) gridTop = gridTop + (gridHeigth - parseInt(grid.fontSize)) / 2;
 | 
						
						
						
							|  |  | 		//                 else gridTop = gridTop + (gridHeigth - 16) / 2;
 | 
						
						
						
							|  |  | 		//             } else if (grid && grid.verticalAlignment === 'bottom') {
 | 
						
						
						
							|  |  | 		//                 gridTop = gridTop + (gridHeigth - parseInt(grid.fontSize));
 | 
						
						
						
							|  |  | 		//             }
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | 		//             const textbox2 = new fabric.Textbox(curentText, {
 | 
						
						
						
							|  |  | 		//                 width: gridWidth2,
 | 
						
						
						
							|  |  | 		//                 // height: gridHeigth,
 | 
						
						
						
							|  |  | 		//                 left: (x - 2) * gridWidth2 + gridWidth1 - 2, //设置canvas上的x坐标
 | 
						
						
						
							|  |  | 		//                 // top: 0,
 | 
						
						
						
							|  |  | 		//                 top: gridTop - 2, //设置canvas上的Y坐标
 | 
						
						
						
							|  |  | 		//                 shadow: grid && (grid.effect == 'true' || grid.effect == true) ? shadow : null,
 | 
						
						
						
							|  |  | 		//                 fontFamily: grid && grid.fontFamily ? grid.fontFamily : 'SimSun',
 | 
						
						
						
							|  |  | 		//                 fill: grid && grid.foreground ? grid.foreground : '#000000',
 | 
						
						
						
							|  |  | 		//                 fontSize: grid && grid.fontSize ? parseInt(grid.fontSize) : 18,
 | 
						
						
						
							|  |  | 		//                 fontStyle: grid && grid.fontStyle ? grid.fontStyle : 'normal',
 | 
						
						
						
							|  |  | 		//                 fontWeight: grid && grid.fontWeight ? grid.fontWeight : 'normal',
 | 
						
						
						
							|  |  | 		//                 textAlign: grid && grid.horizontalAlignment ? grid.horizontalAlignment : 'center',
 | 
						
						
						
							|  |  | 		//             });
 | 
						
						
						
							|  |  | 		//             const border2 = new fabric.Rect({
 | 
						
						
						
							|  |  | 		//                 width: gridWidth2,
 | 
						
						
						
							|  |  | 		//                 height: gridHeigth,
 | 
						
						
						
							|  |  | 		//                 left: (x - 2) * gridWidth2 + gridWidth1, //设置canvas上的X坐标
 | 
						
						
						
							|  |  | 		//                 top: (y - 2) * gridHeigth, //设置canvas上的Y坐标  顶部对齐
 | 
						
						
						
							|  |  | 		//                 stroke: grid && grid.lineColor ? grid.lineColor : '#dcdcdc', //网格线颜色
 | 
						
						
						
							|  |  | 		//                 strokeDashArray: grid && grid.lineStyle === '2' ? [5, 10] : [0, 0], //实虚线
 | 
						
						
						
							|  |  | 		//                 fill: grid && grid.background.includes('#') ? grid.background : '',
 | 
						
						
						
							|  |  | 		//                 _type: 'border',
 | 
						
						
						
							|  |  | 		//                 visible: grid && (grid.showGridLines === 'false' || grid.showGridLines === false) ? false : true,
 | 
						
						
						
							|  |  | 		//                 strokeWidth: grid && (grid.showGridLines === 'true' || grid.showGridLines === true) ? parseInt(grid.lineWidth) : 1,
 | 
						
						
						
							|  |  | 		//             });
 | 
						
						
						
							|  |  | 		//             child2.push(border2);
 | 
						
						
						
							|  |  | 		//             child2.push(textbox2);
 | 
						
						
						
							|  |  | 		//         }
 | 
						
						
						
							|  |  | 		//     }
 | 
						
						
						
							|  |  | 		// }
 | 
						
						
						
							|  |  | 		// let group2 = new fabric.Group(child2, {
 | 
						
						
						
							|  |  | 		//     left: grid ? grid.left : left - parseInt(canvas._offset.left), //设置canvas上的X坐标
 | 
						
						
						
							|  |  | 		//     top: grid ? grid.top + gridHeigth + 3 * gridHeigth - 18 : top - parseInt(canvas._offset.top) + gridHeigth + 3 * gridHeigth - 18, //设置canvas上的Y坐标
 | 
						
						
						
							|  |  | 		//     width: grid ? parseInt(grid.width) : 600,
 | 
						
						
						
							|  |  | 		//     height: grid ? grid.topicNumOnePage * list.length : 250,
 | 
						
						
						
							|  |  | 		// });
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | 		let linear = function (t, b, c, d) {
 | 
						
						
						
							|  |  | 			return (c * t) / d + b;
 | 
						
						
						
							|  |  | 		};
 | 
						
						
						
							|  |  | 		if (list.length > num && (grid && parseInt(grid.moveSpeed) !== 6000)) {
 | 
						
						
						
							|  |  | 			const handleSetDeputationAnimate1 = () => {
 | 
						
						
						
							|  |  | 				group.animate('top', -((list.length * gridHeigth * 3) / 2 - (list.length * gridHeigth - group.height - 2 * gridHeigth)), {
 | 
						
						
						
							|  |  | 					// from: -(list.length * gridHeigth / 2 - (list.length * gridHeigth - group.height)),
 | 
						
						
						
							|  |  | 					from: -((list.length * gridHeigth) / 2 - (list.length * gridHeigth - group.height - 2 * gridHeigth)),
 | 
						
						
						
							|  |  | 					duration: grid && grid.moveSpeed ? parseInt(grid.moveSpeed) : 5000,
 | 
						
						
						
							|  |  | 					onChange: canvas.renderAll.bind(canvas),
 | 
						
						
						
							|  |  | 					onComplete: handleSetDeputationAnimate1,
 | 
						
						
						
							|  |  | 					easing: linear,
 | 
						
						
						
							|  |  | 				});
 | 
						
						
						
							|  |  | 			};
 | 
						
						
						
							|  |  | 			handleSetDeputationAnimate1();
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | 			// const handleSetDeputationAnimate2 = () => {
 | 
						
						
						
							|  |  | 			//     group2.animate('top', -((list.length * gridHeigth) / 2 - (list.length * gridHeigth - group.height - 2 * gridHeigth)), {
 | 
						
						
						
							|  |  | 			//         from: (list.length * gridHeigth) / 2 + (list.length * gridHeigth - group.height - 2 * gridHeigth),
 | 
						
						
						
							|  |  | 			//         duration: grid && grid.moveSpeed ? parseInt(grid.moveSpeed) : 5000,
 | 
						
						
						
							|  |  | 			//         onChange: canvas.renderAll.bind(canvas),
 | 
						
						
						
							|  |  | 			//         onComplete: handleSetDeputationAnimate2,
 | 
						
						
						
							|  |  | 			//         easing: linear,
 | 
						
						
						
							|  |  | 			//     });
 | 
						
						
						
							|  |  | 			// };
 | 
						
						
						
							|  |  | 			// handleSetDeputationAnimate2();
 | 
						
						
						
							|  |  | 		}
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | 		var rect = new fabric.Rect({
 | 
						
						
						
							|  |  | 			width: grid ? parseInt(grid.width) : 600,
 | 
						
						
						
							|  |  | 			height: grid ? parseInt(grid.height) : 350,
 | 
						
						
						
							|  |  | 			left: grid ? grid.left : left - parseInt(canvas._offset.left), //设置canvas上的X坐标
 | 
						
						
						
							|  |  | 			top: 0,
 | 
						
						
						
							|  |  | 			// top: grid ? grid.top : top - parseInt(canvas._offset.top), //设置canvas上的Y坐标
 | 
						
						
						
							|  |  | 			stroke: '#dcdcdc',
 | 
						
						
						
							|  |  | 			strokeWidth: 1,
 | 
						
						
						
							|  |  | 			fill: '',
 | 
						
						
						
							|  |  | 			lockMovementX: true, //X轴是否可被移动(true为不可)
 | 
						
						
						
							|  |  | 			lockMovementY: true, //Y轴是否可被移动(true为不可)
 | 
						
						
						
							|  |  | 			hasControls: false,
 | 
						
						
						
							|  |  | 			hasBorders: false,
 | 
						
						
						
							|  |  | 		});
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | 		childWrapper.push(rect);
 | 
						
						
						
							|  |  | 		childWrapper.push(group);
 | 
						
						
						
							|  |  | 		if (list.length > num) {
 | 
						
						
						
							|  |  | 			// childWrapper.push(group2);
 | 
						
						
						
							|  |  | 		}
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | 		childWrapper.push(headColumnGroup);
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | 		let groupWrapper = new fabric.Group(childWrapper, {
 | 
						
						
						
							|  |  | 			width: grid ? parseInt(grid.width) : 600,
 | 
						
						
						
							|  |  | 			height: grid ? parseInt(grid.height) : 350,
 | 
						
						
						
							|  |  | 			left: grid ? grid.left : left - parseInt(canvas._offset.left), //设置canvas上的X坐标
 | 
						
						
						
							|  |  | 			top: grid ? grid.top : top - parseInt(canvas._offset.top), //设置canvas上的Y坐标
 | 
						
						
						
							|  |  | 			component_type: '9',
 | 
						
						
						
							|  |  | 			horizontalAlignment: grid ? grid.horizontalAlignment : 'center', //水平对齐方式left, center, right
 | 
						
						
						
							|  |  | 			verticalAlignment: grid ? grid.verticalAlignment : 'center', //垂直方式对齐top, center, bottom
 | 
						
						
						
							|  |  | 			text: text,
 | 
						
						
						
							|  |  | 			moveSpeed: grid && grid.moveSpeed ? grid.moveSpeed : '5000',
 | 
						
						
						
							|  |  | 			background: grid && grid.background.includes('#') ? grid.background : '', //透明
 | 
						
						
						
							|  |  | 			effect: grid && (grid.effect === 'true' || grid.effect === true) ? true : false, // 阴影
 | 
						
						
						
							|  |  | 			lineStyle: grid && grid.lineStyle ? grid.lineStyle : '1', //网格线样式
 | 
						
						
						
							|  |  | 			showGridLines: grid && (grid.showGridLines === 'false' || grid.showGridLines === false) ? false : true, //是否显示网格
 | 
						
						
						
							|  |  | 			lineWidth: grid && grid.lineWidth ? parseInt(grid.lineWidth) : '1', //网格线宽度
 | 
						
						
						
							|  |  | 			lineColor: grid && grid.lineColor ? grid.lineColor : '#dcdcdc', //网格线颜色
 | 
						
						
						
							|  |  | 			fontFamily: grid ? grid.fontFamily : 'SimSun', //字体
 | 
						
						
						
							|  |  | 			fontStyle: grid ? grid.fontStyle : 'normal', //字体宽度设置
 | 
						
						
						
							|  |  | 			foreground: grid ? grid.foreground : '#000', //字体颜色
 | 
						
						
						
							|  |  | 			fontSize: grid ? parseInt(grid.fontSize) : 18, //字体大小
 | 
						
						
						
							|  |  | 			fontWeight: grid && grid.fontWeight ? grid.fontWeight : 'normal', //字体宽度
 | 
						
						
						
							|  |  | 			keyTopicSelect: grid && (grid.keyTopicSelect === 'true' || grid.keyTopicSelect === true) ? true : false, // 是否显示议题
 | 
						
						
						
							|  |  | 			topicPercent: grid ? parseInt(grid.topicPercent) : Math.round((1 / 6) * 100), // 议题百分比
 | 
						
						
						
							|  |  | 			topicNumOnePage: grid ? parseInt(grid.topicNumOnePage) : 6, //每页条数
 | 
						
						
						
							|  |  | 			key1Select: grid && (grid.key1Select === 'true' || grid.key1Select === true) ? true : false, //是否显示按键1
 | 
						
						
						
							|  |  | 			key2Select: grid && (grid.key2Select === 'true' || grid.key2Select === true) ? true : false, //是否显示按键2
 | 
						
						
						
							|  |  | 			key3Select: grid && (grid.key3Select === 'true' || grid.key3Select === true) ? true : false, //是否显示按键3
 | 
						
						
						
							|  |  | 			button1: grid && (grid.button1 === 'true' || grid.button1 === true) ? true : false, //是否显示赞成
 | 
						
						
						
							|  |  | 			button2: grid && (grid.button2 === 'true' || grid.button2 === true) ? true : false, //是否显示反对
 | 
						
						
						
							|  |  | 			button3: grid && (grid.button3 === 'true' || grid.button3 === true) ? true : false, //是否显示弃权
 | 
						
						
						
							|  |  | 			keyOtherSelect: grid && (grid.keyOtherSelect === 'true' || grid.keyOtherSelect === true) ? true : false, //是否显示未按
 | 
						
						
						
							|  |  | 			keyResultSelect: grid && (grid.keyResultSelect === 'true' || grid.keyResultSelect === true) ? true : false, //是否显示议题结果
 | 
						
						
						
							|  |  | 			lockMovementX: true, //X轴是否可被移动(true为不可)
 | 
						
						
						
							|  |  | 			lockMovementY: true, //Y轴是否可被移动(true为不可)
 | 
						
						
						
							|  |  | 			hasControls: false,
 | 
						
						
						
							|  |  | 			hasBorders: false,
 | 
						
						
						
							|  |  | 		});
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | 		groupWrapper.clipTo = function (ctx) {
 | 
						
						
						
							|  |  | 			ctx.beginPath();
 | 
						
						
						
							|  |  | 			ctx.rect(-this.width / 2, -this.height / 2, this.width, this.height); // 根据Group对象的左上角和宽高计算路径
 | 
						
						
						
							|  |  | 		};
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | 		canvas.add(groupWrapper);
 | 
						
						
						
							|  |  | 		groupWrapper['setControlVisible']('mtr', false);
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | 		canvas.setActiveObject(groupWrapper);
 | 
						
						
						
							|  |  | 	};
 | 
						
						
						
							|  |  | 	//添加子义题列表end========================
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | 	//添加时间控件列表start====================
 | 
						
						
						
							|  |  | 	handleSetSjkj = (top, left, grid) => {
 | 
						
						
						
							|  |  | 		const bjctDate = 'YYYY-MM-DD';
 | 
						
						
						
							|  |  | 		let date = grid ? moment(Date.now()).format(grid.formatPar) : moment(Date.now()).format(bjctDate);
 | 
						
						
						
							|  |  | 		const textWidth = grid ? parseInt(grid.width) : 200;
 | 
						
						
						
							|  |  | 		const textHeight = grid ? parseInt(grid.height) : 100;
 | 
						
						
						
							|  |  | 		let textTop = 0;
 | 
						
						
						
							|  |  | 		let textbox = new fabric.Textbox(grid ? moment(Date.now()).format(grid.formatPar) : moment(Date.now()).format(bjctDate), {
 | 
						
						
						
							|  |  | 			fill: grid && grid.fill ? grid.fill : grid && grid.foreground ? grid.foreground : '#000',
 | 
						
						
						
							|  |  | 			fontSize: grid && grid.fontSize ? parseInt(grid.fontSize) : 18,
 | 
						
						
						
							|  |  | 			fontWeight: grid && grid.fontWeight ? grid.fontWeight : 'normal',
 | 
						
						
						
							|  |  | 			fontStyle: grid && grid.fontStyle ? grid.fontStyle : 'normal',
 | 
						
						
						
							|  |  | 			fontFamily: grid && grid.fontFamily ? grid.fontFamily : 'SimSun',
 | 
						
						
						
							|  |  | 			width: textWidth,
 | 
						
						
						
							|  |  | 			left: 0,
 | 
						
						
						
							|  |  | 			top: textTop,
 | 
						
						
						
							|  |  | 			lockMovementX: true, //X轴是否可被移动(true为不可)
 | 
						
						
						
							|  |  | 			lockMovementY: true, //Y轴是否可被移动(true为不可)
 | 
						
						
						
							|  |  | 			hasControls: false,
 | 
						
						
						
							|  |  | 			hasBorders: false,
 | 
						
						
						
							|  |  | 		});
 | 
						
						
						
							|  |  | 		const border = new fabric.Rect({
 | 
						
						
						
							|  |  | 			left: 0,
 | 
						
						
						
							|  |  | 			top: 0,
 | 
						
						
						
							|  |  | 			width: textWidth,
 | 
						
						
						
							|  |  | 			height: textHeight,
 | 
						
						
						
							|  |  | 			background: grid && grid.background.includes('#') ? grid.background : '',
 | 
						
						
						
							|  |  | 			fill: grid && grid.background.includes('#') ? grid.background : '',
 | 
						
						
						
							|  |  | 			_type: 'border',
 | 
						
						
						
							|  |  | 			lockMovementX: true, //X轴是否可被移动(true为不可)
 | 
						
						
						
							|  |  | 			lockMovementY: true, //Y轴是否可被移动(true为不可)
 | 
						
						
						
							|  |  | 			hasControls: false,
 | 
						
						
						
							|  |  | 			hasBorders: false,
 | 
						
						
						
							|  |  | 		});
 | 
						
						
						
							|  |  | 		let group = new fabric.Group([border, textbox], {
 | 
						
						
						
							|  |  | 			text: date,
 | 
						
						
						
							|  |  | 			width: textWidth,
 | 
						
						
						
							|  |  | 			height: textHeight,
 | 
						
						
						
							|  |  | 			left: grid ? parseInt(grid.left) : parseInt(left - canvas._offset.left),
 | 
						
						
						
							|  |  | 			top: grid ? parseInt(grid.top) : parseInt(top - canvas._offset.top),
 | 
						
						
						
							|  |  | 			formatPar: grid && grid.formatPar ? grid.formatPar : bjctDate, // 时间格式
 | 
						
						
						
							|  |  | 			background: grid && grid.background.includes('#') ? grid.background : '',
 | 
						
						
						
							|  |  | 			fill: grid && grid.fill ? grid.fill : grid && grid.foreground ? grid.foreground : '#000',
 | 
						
						
						
							|  |  | 			fontSize: grid && grid.fontSize ? parseInt(grid.fontSize) : 18,
 | 
						
						
						
							|  |  | 			fontWeight: grid && grid.fontWeight ? grid.fontWeight : 'normal',
 | 
						
						
						
							|  |  | 			fontStyle: grid && grid.fontStyle ? grid.fontStyle : 'normal',
 | 
						
						
						
							|  |  | 			fontFamily: grid && grid.fontFamily ? grid.fontFamily : 'SimSun',
 | 
						
						
						
							|  |  | 			component_type: '10',
 | 
						
						
						
							|  |  | 			lockMovementX: true, //X轴是否可被移动(true为不可)
 | 
						
						
						
							|  |  | 			lockMovementY: true, //Y轴是否可被移动(true为不可)
 | 
						
						
						
							|  |  | 			hasControls: false,
 | 
						
						
						
							|  |  | 			hasBorders: false,
 | 
						
						
						
							|  |  | 		});
 | 
						
						
						
							|  |  | 		canvas.add(group);
 | 
						
						
						
							|  |  | 		group['setControlVisible']('mtr', false);
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | 		canvas.setActiveObject(group);
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | 		timer = setInterval(() => {
 | 
						
						
						
							|  |  | 			group.item(1).set({ text: grid ? moment(Date.now()).format(grid.formatPar) : moment(Date.now()).format(bjctDate) });
 | 
						
						
						
							|  |  | 			canvas.renderAll();
 | 
						
						
						
							|  |  | 		}, 1000);
 | 
						
						
						
							|  |  | 	};
 | 
						
						
						
							|  |  | 	//添加时间控件列表end====================
 | 
						
						
						
							|  |  | 	//添加按钮控件列表start====================
 | 
						
						
						
							|  |  | 	handleSetAnkj = (top, left, btn) => {
 | 
						
						
						
							|  |  | 		const textTop = btn && btn.fontSize ? (btn.height - parseInt(btn.fontSize)) / 2 : 3;
 | 
						
						
						
							|  |  | 		if (btn && btn.showStyle === 'circleAndLamp') {
 | 
						
						
						
							|  |  | 			if (btn.bindingFieldID === '0x2021') {
 | 
						
						
						
							|  |  | 				// 报到按钮
 | 
						
						
						
							|  |  | 				let textbox = new fabric.Textbox(btn ? btn.text : '初始值', {
 | 
						
						
						
							|  |  | 					fontStyle: btn && btn.fontStyle ? btn.fontStyle : 'normal', // 字体宽度设置
 | 
						
						
						
							|  |  | 					fontFamily: btn && btn.fontFamily ? btn.fontFamily : 'SimSun', // 字体
 | 
						
						
						
							|  |  | 					fontSize: btn && btn.fontSize ? parseInt(btn.fontSize) : 16, // 字体大小
 | 
						
						
						
							|  |  | 					fill: btn && btn.foreground.includes('#') ? btn.foreground : '#000000', // 字体颜色
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | 					textAlign: 'center',
 | 
						
						
						
							|  |  | 					// width: btn && btn.width ? btn.width : 50,
 | 
						
						
						
							|  |  | 					// height: btn && btn.height ? btn.height*0.3 : 25,
 | 
						
						
						
							|  |  | 					left: btn && btn.width ? (btn.width) / 2 - parseInt(btn.fontSize) : 0,
 | 
						
						
						
							|  |  | 					top: btn && btn.width ? btn.width * 0.7 + 25 : textTop,
 | 
						
						
						
							|  |  | 					rx: btn && btn.width ? btn.width * 0.2 : 0,
 | 
						
						
						
							|  |  | 					ry: btn && btn.width ? btn.width * 0.2 : 0,
 | 
						
						
						
							|  |  | 					lockMovementX: true, //X轴是否可被移动(true为不可)
 | 
						
						
						
							|  |  | 					lockMovementY: true, //Y轴是否可被移动(true为不可)
 | 
						
						
						
							|  |  | 					hasControls: false,
 | 
						
						
						
							|  |  | 					hasBorders: false,
 | 
						
						
						
							|  |  | 				});
 | 
						
						
						
							|  |  | 				let smallCircle = new fabric.Rect({
 | 
						
						
						
							|  |  | 					left: (btn.width) / 2 - (btn.width * 0.2) / 2,
 | 
						
						
						
							|  |  | 					top: 0,
 | 
						
						
						
							|  |  | 					width: btn.width * 0.2,
 | 
						
						
						
							|  |  | 					height: btn.width * 0.2,
 | 
						
						
						
							|  |  | 					// fill: '#000000',
 | 
						
						
						
							|  |  | 					fill: btn && btn.colorChangeStyle ? btn.colorChangeStyle : '#000000',
 | 
						
						
						
							|  |  | 					// stroke: '#dcdcdc',
 | 
						
						
						
							|  |  | 					stroke: btn && btn.colorChangeStyle ? btn.colorChangeStyle : '#000000',
 | 
						
						
						
							|  |  | 					showStyle: 'circle', // 按钮形状
 | 
						
						
						
							|  |  | 					strokeWidth: 2,
 | 
						
						
						
							|  |  | 					_type: 'border',
 | 
						
						
						
							|  |  | 					rx: btn.width * 0.2,
 | 
						
						
						
							|  |  | 					ry: btn.width * 0.2,
 | 
						
						
						
							|  |  | 					lockMovementX: true, //X轴是否可被移动(true为不可)
 | 
						
						
						
							|  |  | 					lockMovementY: true, //Y轴是否可被移动(true为不可)
 | 
						
						
						
							|  |  | 					hasControls: false,
 | 
						
						
						
							|  |  | 					hasBorders: false,
 | 
						
						
						
							|  |  | 				});
 | 
						
						
						
							|  |  | 				const border = new fabric.Rect({
 | 
						
						
						
							|  |  | 					left: (btn.width / 2) - (btn.width * 0.5) / 2,
 | 
						
						
						
							|  |  | 					top: btn.width * 0.2 + 20,
 | 
						
						
						
							|  |  | 					width: btn && btn.width ? btn.width * 0.5 : 50,
 | 
						
						
						
							|  |  | 					height: btn && btn.width ? btn.width * 0.5 : 50,
 | 
						
						
						
							|  |  | 					fill: btn && btn.background ? btn.background : '#ffffff',
 | 
						
						
						
							|  |  | 					stroke: '#dcdcdc',
 | 
						
						
						
							|  |  | 					strokeWidth: 1,
 | 
						
						
						
							|  |  | 					_type: 'border',
 | 
						
						
						
							|  |  | 					width: btn && btn.width ? btn.width * 0.5 : 50,
 | 
						
						
						
							|  |  | 					height: btn && btn.width ? btn.width * 0.5 : 50,
 | 
						
						
						
							|  |  | 					rx: btn && btn.width ? btn.width * 0.5 : 0,
 | 
						
						
						
							|  |  | 					ry: btn && btn.width ? btn.width * 0.5 : 0,
 | 
						
						
						
							|  |  | 					lockMovementX: true, //X轴是否可被移动(true为不可)
 | 
						
						
						
							|  |  | 					lockMovementY: true, //Y轴是否可被移动(true为不可)
 | 
						
						
						
							|  |  | 					hasControls: false,
 | 
						
						
						
							|  |  | 					hasBorders: false,
 | 
						
						
						
							|  |  | 				});
 | 
						
						
						
							|  |  | 				let group = new fabric.Group([smallCircle, border, textbox], {
 | 
						
						
						
							|  |  | 					width: btn && btn.width ? btn.width : 50,
 | 
						
						
						
							|  |  | 					height: btn && btn.height ? btn.height : 100,
 | 
						
						
						
							|  |  | 					left: btn ? parseInt(btn.left) : parseInt(left - canvas._offset.left),
 | 
						
						
						
							|  |  | 					top: btn ? parseInt(btn.top) : parseInt(top - canvas._offset.top) + 60,
 | 
						
						
						
							|  |  | 					component_type: '0',
 | 
						
						
						
							|  |  | 					// hasControls: false,
 | 
						
						
						
							|  |  | 					colorChangeStyle: btn && btn.colorChangeStyle && btn.colorChangeStyle.includes('#') ? btn.colorChangeStyle : '#000000', // 灯颜色
 | 
						
						
						
							|  |  | 					showStyle: btn && btn.showStyle ? btn.showStyle : 'square', // 按钮形状
 | 
						
						
						
							|  |  | 					background: btn && btn.background.includes('#') ? btn.background : '#ffffff', // 按钮背景颜色
 | 
						
						
						
							|  |  | 					fontSize: btn && btn.fontSize ? parseInt(btn.fontSize) : 16, // 字体大小
 | 
						
						
						
							|  |  | 					foreground: btn && btn.foreground.includes('#') ? btn.foreground : '#000000', // 字体颜色
 | 
						
						
						
							|  |  | 					text: btn ? btn.text : '初始值', // 内容
 | 
						
						
						
							|  |  | 					fontStyle: btn && btn.fontStyle ? btn.fontStyle : 'normal', // 字体宽度设置
 | 
						
						
						
							|  |  | 					fontFamily: btn && btn.fontFamily ? btn.fontFamily : 'SimSun', // 字体
 | 
						
						
						
							|  |  | 					bindingFieldID: btn && btn.bindingFieldID ? btn.bindingFieldID : undefined, // 系统设置
 | 
						
						
						
							|  |  | 					lockMovementX: true, //X轴是否可被移动(true为不可)
 | 
						
						
						
							|  |  | 					lockMovementY: true, //Y轴是否可被移动(true为不可)
 | 
						
						
						
							|  |  | 					hasControls: false,
 | 
						
						
						
							|  |  | 					hasBorders: false,
 | 
						
						
						
							|  |  | 				});
 | 
						
						
						
							|  |  | 				canvas.add(group);
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | 				canvas.setActiveObject(group);
 | 
						
						
						
							|  |  | 			}
 | 
						
						
						
							|  |  | 			else {
 | 
						
						
						
							|  |  | 				// console.log('绘制灯', btn);
 | 
						
						
						
							|  |  | 				let textbox = new fabric.Textbox(btn ? btn.text : '初始值', {
 | 
						
						
						
							|  |  | 					fontStyle: btn && btn.fontStyle ? btn.fontStyle : 'normal', // 字体宽度设置
 | 
						
						
						
							|  |  | 					fontFamily: btn && btn.fontFamily ? btn.fontFamily : 'SimSun', // 字体
 | 
						
						
						
							|  |  | 					fontSize: btn && btn.fontSize ? parseInt(btn.fontSize) : 16, // 字体大小
 | 
						
						
						
							|  |  | 					fill: btn && btn.foreground.includes('#') ? btn.foreground : '#000000', // 字体颜色
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | 					textAlign: 'center',
 | 
						
						
						
							|  |  | 					// width: btn && btn.width ? btn.width : 50,
 | 
						
						
						
							|  |  | 					// height: btn && btn.height ? btn.height*0.3 : 25,
 | 
						
						
						
							|  |  | 					left: btn && btn.width ? (btn.width) / 2 - parseInt(btn.fontSize) : 0,
 | 
						
						
						
							|  |  | 					top: btn && btn.width ? btn.width * 0.7 + 25 : textTop,
 | 
						
						
						
							|  |  | 					rx: btn && btn.width ? btn.width * 0.2 : 0,
 | 
						
						
						
							|  |  | 					ry: btn && btn.width ? btn.width * 0.2 : 0,
 | 
						
						
						
							|  |  | 					lockMovementX: true, //X轴是否可被移动(true为不可)
 | 
						
						
						
							|  |  | 					lockMovementY: true, //Y轴是否可被移动(true为不可)
 | 
						
						
						
							|  |  | 					hasControls: false,
 | 
						
						
						
							|  |  | 					hasBorders: false,
 | 
						
						
						
							|  |  | 				});
 | 
						
						
						
							|  |  | 				let smallCircle = new fabric.Rect({
 | 
						
						
						
							|  |  | 					left: (btn.width) / 2 - (btn.width * 0.2) / 2,
 | 
						
						
						
							|  |  | 					top: 0,
 | 
						
						
						
							|  |  | 					width: btn.width * 0.2,
 | 
						
						
						
							|  |  | 					height: btn.width * 0.2,
 | 
						
						
						
							|  |  | 					// fill: '#000000',
 | 
						
						
						
							|  |  | 					fill: btn && btn.colorChangeStyle ? btn.colorChangeStyle : '#000000',
 | 
						
						
						
							|  |  | 					// stroke: '#dcdcdc',
 | 
						
						
						
							|  |  | 					stroke: btn && btn.colorChangeStyle ? btn.colorChangeStyle : '#000000',
 | 
						
						
						
							|  |  | 					showStyle: 'circle', // 按钮形状
 | 
						
						
						
							|  |  | 					strokeWidth: 2,
 | 
						
						
						
							|  |  | 					_type: 'border',
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | 					rx: btn.width * 0.2,
 | 
						
						
						
							|  |  | 					ry: btn.width * 0.2,
 | 
						
						
						
							|  |  | 					lockMovementX: true, //X轴是否可被移动(true为不可)
 | 
						
						
						
							|  |  | 					lockMovementY: true, //Y轴是否可被移动(true为不可)
 | 
						
						
						
							|  |  | 					hasControls: false,
 | 
						
						
						
							|  |  | 					hasBorders: false,
 | 
						
						
						
							|  |  | 				});
 | 
						
						
						
							|  |  | 				const border = new fabric.Rect({
 | 
						
						
						
							|  |  | 					left: (btn.width / 2) - (btn.width * 0.5) / 2,
 | 
						
						
						
							|  |  | 					top: btn.width * 0.2 + 20,
 | 
						
						
						
							|  |  | 					width: btn && btn.width ? btn.width * 0.5 : 50,
 | 
						
						
						
							|  |  | 					height: btn && btn.width ? btn.width * 0.5 : 50,
 | 
						
						
						
							|  |  | 					fill: btn && btn.background ? btn.background : '#ffffff',
 | 
						
						
						
							|  |  | 					stroke: '#dcdcdc',
 | 
						
						
						
							|  |  | 					strokeWidth: 1,
 | 
						
						
						
							|  |  | 					_type: 'border',
 | 
						
						
						
							|  |  | 					width: btn && btn.width ? btn.width * 0.5 : 50,
 | 
						
						
						
							|  |  | 					height: btn && btn.width ? btn.width * 0.5 : 50,
 | 
						
						
						
							|  |  | 					rx: btn && btn.width ? btn.width * 0.5 : 0,
 | 
						
						
						
							|  |  | 					ry: btn && btn.width ? btn.width * 0.5 : 0,
 | 
						
						
						
							|  |  | 					lockMovementX: true, //X轴是否可被移动(true为不可)
 | 
						
						
						
							|  |  | 					lockMovementY: true, //Y轴是否可被移动(true为不可)
 | 
						
						
						
							|  |  | 					hasControls: false,
 | 
						
						
						
							|  |  | 					hasBorders: false,
 | 
						
						
						
							|  |  | 				});
 | 
						
						
						
							|  |  | 				let group = new fabric.Group([smallCircle, border, textbox], {
 | 
						
						
						
							|  |  | 					width: btn && btn.width ? btn.width : 50,
 | 
						
						
						
							|  |  | 					height: btn && btn.height ? btn.height : 100,
 | 
						
						
						
							|  |  | 					left: btn ? parseInt(btn.left) : parseInt(left - canvas._offset.left),
 | 
						
						
						
							|  |  | 					top: btn ? parseInt(btn.top) : parseInt(top - canvas._offset.top) + 60,
 | 
						
						
						
							|  |  | 					component_type: '0',
 | 
						
						
						
							|  |  | 					// hasControls: false,
 | 
						
						
						
							|  |  | 					colorChangeStyle: btn && btn.colorChangeStyle && btn.colorChangeStyle.includes('#') ? btn.colorChangeStyle : '#000000', // 灯颜色
 | 
						
						
						
							|  |  | 					showStyle: btn && btn.showStyle ? btn.showStyle : 'square', // 按钮形状
 | 
						
						
						
							|  |  | 					background: btn && btn.background.includes('#') ? btn.background : '#ffffff', // 按钮背景颜色
 | 
						
						
						
							|  |  | 					fontSize: btn && btn.fontSize ? parseInt(btn.fontSize) : 16, // 字体大小
 | 
						
						
						
							|  |  | 					foreground: btn && btn.foreground.includes('#') ? btn.foreground : '#000000', // 字体颜色
 | 
						
						
						
							|  |  | 					text: btn ? btn.text : '初始值', // 内容
 | 
						
						
						
							|  |  | 					fontStyle: btn && btn.fontStyle ? btn.fontStyle : 'normal', // 字体宽度设置
 | 
						
						
						
							|  |  | 					fontFamily: btn && btn.fontFamily ? btn.fontFamily : 'SimSun', // 字体
 | 
						
						
						
							|  |  | 					bindingFieldID: btn && btn.bindingFieldID ? btn.bindingFieldID : undefined, // 系统设置
 | 
						
						
						
							|  |  | 					lockMovementX: true, //X轴是否可被移动(true为不可)
 | 
						
						
						
							|  |  | 					lockMovementY: true, //Y轴是否可被移动(true为不可)
 | 
						
						
						
							|  |  | 					hasControls: false,
 | 
						
						
						
							|  |  | 					hasBorders: false,
 | 
						
						
						
							|  |  | 				});
 | 
						
						
						
							|  |  | 				canvas.add(group);
 | 
						
						
						
							|  |  | 				canvas.setActiveObject(group);
 | 
						
						
						
							|  |  | 			}
 | 
						
						
						
							|  |  | 		} else {
 | 
						
						
						
							|  |  | 			let textbox = new fabric.Textbox(btn ? btn.text : '初始值', {
 | 
						
						
						
							|  |  | 				fontStyle: btn && btn.fontStyle ? btn.fontStyle : 'normal', // 字体宽度设置
 | 
						
						
						
							|  |  | 				fontFamily: btn && btn.fontFamily ? btn.fontFamily : 'SimSun', // 字体
 | 
						
						
						
							|  |  | 				fontSize: btn && btn.fontSize ? parseInt(btn.fontSize) : 16, // 字体大小
 | 
						
						
						
							|  |  | 				fill: btn && btn.foreground.includes('#') ? btn.foreground : '#000000', // 字体颜色
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | 				textAlign: 'center',
 | 
						
						
						
							|  |  | 				width: btn && btn.width ? btn.width : 100,
 | 
						
						
						
							|  |  | 				height: btn && btn.height ? (btn.showStyle === 'circle' ? btn.width : btn.height) : 50,
 | 
						
						
						
							|  |  | 				left: 0,
 | 
						
						
						
							|  |  | 				top: textTop,
 | 
						
						
						
							|  |  | 				rx: btn && btn.showStyle === 'circle' ? btn.width : 0,
 | 
						
						
						
							|  |  | 				ry: btn && btn.showStyle === 'circle' ? btn.width : 0,
 | 
						
						
						
							|  |  | 				lockMovementX: true, //X轴是否可被移动(true为不可)
 | 
						
						
						
							|  |  | 				lockMovementY: true, //Y轴是否可被移动(true为不可)
 | 
						
						
						
							|  |  | 				hasControls: false,
 | 
						
						
						
							|  |  | 				hasBorders: false,
 | 
						
						
						
							|  |  | 			});
 | 
						
						
						
							|  |  | 			const border = new fabric.Rect({
 | 
						
						
						
							|  |  | 				left: 0,
 | 
						
						
						
							|  |  | 				top: 0,
 | 
						
						
						
							|  |  | 				width: btn && btn.width ? btn.width : 100,
 | 
						
						
						
							|  |  | 				height: btn && btn.height ? (btn.showStyle === 'circle' ? btn.width : btn.height) : 50,
 | 
						
						
						
							|  |  | 				fill: btn && btn.background ? btn.background : '#ffffff',
 | 
						
						
						
							|  |  | 				stroke: '#dcdcdc',
 | 
						
						
						
							|  |  | 				strokeWidth: 1,
 | 
						
						
						
							|  |  | 				_type: 'border',
 | 
						
						
						
							|  |  | 				width: btn && btn.width ? btn.width : 100,
 | 
						
						
						
							|  |  | 				height: btn && btn.height ? (btn.showStyle === 'circle' ? btn.width : btn.height) : 50,
 | 
						
						
						
							|  |  | 				rx: btn && btn.showStyle === 'circle' ? btn.width : 0,
 | 
						
						
						
							|  |  | 				ry: btn && btn.showStyle === 'circle' ? btn.width : 0,
 | 
						
						
						
							|  |  | 				lockMovementX: true, //X轴是否可被移动(true为不可)
 | 
						
						
						
							|  |  | 				lockMovementY: true, //Y轴是否可被移动(true为不可)
 | 
						
						
						
							|  |  | 				hasControls: false,
 | 
						
						
						
							|  |  | 				hasBorders: false,
 | 
						
						
						
							|  |  | 			});
 | 
						
						
						
							|  |  | 			let group = new fabric.Group([border, textbox], {
 | 
						
						
						
							|  |  | 				width: btn && btn.width ? btn.width : 50,
 | 
						
						
						
							|  |  | 				height: btn && btn.height ? (btn.showStyle === 'circle' ? btn.width : btn.height) : 25,
 | 
						
						
						
							|  |  | 				left: btn ? parseInt(btn.left) : parseInt(left - canvas._offset.left),
 | 
						
						
						
							|  |  | 				top: btn ? parseInt(btn.top) : parseInt(top - canvas._offset.top),
 | 
						
						
						
							|  |  | 				component_type: '0',
 | 
						
						
						
							|  |  | 				// hasControls: false,
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | 				showStyle: btn && btn.showStyle ? btn.showStyle : 'square', // 按钮形状
 | 
						
						
						
							|  |  | 				background: btn && btn.background.includes('#') ? btn.background : '#ffffff', // 按钮背景颜色
 | 
						
						
						
							|  |  | 				fontSize: btn && btn.fontSize ? parseInt(btn.fontSize) : 16, // 字体大小
 | 
						
						
						
							|  |  | 				foreground: btn && btn.foreground.includes('#') ? btn.foreground : '#000000', // 字体颜色
 | 
						
						
						
							|  |  | 				text: btn ? btn.text : '初始值', // 内容
 | 
						
						
						
							|  |  | 				fontStyle: btn && btn.fontStyle ? btn.fontStyle : 'normal', // 字体宽度设置
 | 
						
						
						
							|  |  | 				fontFamily: btn && btn.fontFamily ? btn.fontFamily : 'SimSun', // 字体
 | 
						
						
						
							|  |  | 				bindingFieldID: btn && btn.bindingFieldID ? btn.bindingFieldID : undefined, // 系统设置
 | 
						
						
						
							|  |  | 				lockMovementX: true, //X轴是否可被移动(true为不可)
 | 
						
						
						
							|  |  | 				lockMovementY: true, //Y轴是否可被移动(true为不可)
 | 
						
						
						
							|  |  | 				hasControls: false,
 | 
						
						
						
							|  |  | 				hasBorders: false,
 | 
						
						
						
							|  |  | 			});
 | 
						
						
						
							|  |  | 			canvas.add(group);
 | 
						
						
						
							|  |  | 			canvas.setActiveObject(group);
 | 
						
						
						
							|  |  | 		}
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | 	};
 | 
						
						
						
							|  |  | 	//添加按钮控件列表end====================
 | 
						
						
						
							|  |  | 	//添加线条控制start====================
 | 
						
						
						
							|  |  | 	handleSetImage = (left, top, type, val) => {
 | 
						
						
						
							|  |  | 		let x1 = val ? val.left : left - canvas._offset.left;
 | 
						
						
						
							|  |  | 		let y1 = val ? val.top : top - canvas._offset.top;
 | 
						
						
						
							|  |  | 		let x2 = val ? val.left + val.width : left - canvas._offset.left + 200;
 | 
						
						
						
							|  |  | 		let y2 = val ? val.top + val.height : top - canvas._offset.top + 100;
 | 
						
						
						
							|  |  | 		let lineBoxWidth = val ? parseInt(val.width) : 200;
 | 
						
						
						
							|  |  | 		let lineBoxHeigth = val ? parseInt(val.height) : 100;
 | 
						
						
						
							|  |  | 		switch (type) {
 | 
						
						
						
							|  |  | 			case 'horizontalrealline':
 | 
						
						
						
							|  |  | 			case '11':
 | 
						
						
						
							|  |  | 				let horizontalRealLine = new fabric.Line([x1, y1, x2, y1], {
 | 
						
						
						
							|  |  | 					stroke: val ? val.stroke : '#e70808', //线颜色
 | 
						
						
						
							|  |  | 					strokeWidth: val ? Number(val.strokeThickness) : 2, //线宽
 | 
						
						
						
							|  |  | 					left: lineBoxWidth,
 | 
						
						
						
							|  |  | 					top: 0,
 | 
						
						
						
							|  |  | 					width: lineBoxWidth,
 | 
						
						
						
							|  |  | 					_type: 'line',
 | 
						
						
						
							|  |  | 					lockMovementX: true, //X轴是否可被移动(true为不可)
 | 
						
						
						
							|  |  | 					lockMovementY: true, //Y轴是否可被移动(true为不可)
 | 
						
						
						
							|  |  | 					hasControls: false,
 | 
						
						
						
							|  |  | 					hasBorders: false,
 | 
						
						
						
							|  |  | 				});
 | 
						
						
						
							|  |  | 				let borderHRL = new fabric.Rect({
 | 
						
						
						
							|  |  | 					left: lineBoxWidth,
 | 
						
						
						
							|  |  | 					top: 0,
 | 
						
						
						
							|  |  | 					width: lineBoxWidth,
 | 
						
						
						
							|  |  | 					height: lineBoxHeigth,
 | 
						
						
						
							|  |  | 					fill: '',
 | 
						
						
						
							|  |  | 					_type: 'border',
 | 
						
						
						
							|  |  | 					lockMovementX: true, //X轴是否可被移动(true为不可)
 | 
						
						
						
							|  |  | 					lockMovementY: true, //Y轴是否可被移动(true为不可)
 | 
						
						
						
							|  |  | 					hasControls: false,
 | 
						
						
						
							|  |  | 					hasBorders: false,
 | 
						
						
						
							|  |  | 				});
 | 
						
						
						
							|  |  | 				let groupHRL = new fabric.Group([borderHRL, horizontalRealLine], {
 | 
						
						
						
							|  |  | 					component_type: '11',
 | 
						
						
						
							|  |  | 					width: lineBoxWidth,
 | 
						
						
						
							|  |  | 					height: lineBoxHeigth,
 | 
						
						
						
							|  |  | 					stroke: val ? val.stroke : '#e70808', //线颜色
 | 
						
						
						
							|  |  | 					strokeThickness: val ? val.strokeThickness : 2, //线宽
 | 
						
						
						
							|  |  | 					left: val ? parseInt(val.left) : parseInt(left - canvas._offset.left), //设置canvas上的X坐标
 | 
						
						
						
							|  |  | 					top: val ? parseInt(val.top) : parseInt(top - canvas._offset.top), //设置canvas上的Y坐标
 | 
						
						
						
							|  |  | 					lockMovementX: true, //X轴是否可被移动(true为不可)
 | 
						
						
						
							|  |  | 					lockMovementY: true, //Y轴是否可被移动(true为不可)
 | 
						
						
						
							|  |  | 					hasControls: false,
 | 
						
						
						
							|  |  | 					hasBorders: false,
 | 
						
						
						
							|  |  | 				});
 | 
						
						
						
							|  |  | 				canvas.add(groupHRL); // 将图形添加至画布
 | 
						
						
						
							|  |  | 				groupHRL['setControlVisible']('mtr', false);
 | 
						
						
						
							|  |  | 				break;
 | 
						
						
						
							|  |  | 			case 'horizontaldottedline':
 | 
						
						
						
							|  |  | 			case '12':
 | 
						
						
						
							|  |  | 				let horizontalDottedLine = new fabric.Line([x1, y1, x2, y1], {
 | 
						
						
						
							|  |  | 					stroke: val ? val.stroke : '#000000', //线颜色
 | 
						
						
						
							|  |  | 					strokeWidth: val ? Number(val.strokeThickness) : 2, //线宽
 | 
						
						
						
							|  |  | 					strokeDashArray: [5, 5],
 | 
						
						
						
							|  |  | 					left: lineBoxWidth,
 | 
						
						
						
							|  |  | 					top: 0,
 | 
						
						
						
							|  |  | 					width: lineBoxWidth,
 | 
						
						
						
							|  |  | 					_type: 'line',
 | 
						
						
						
							|  |  | 					lockMovementX: true, //X轴是否可被移动(true为不可)
 | 
						
						
						
							|  |  | 					lockMovementY: true, //Y轴是否可被移动(true为不可)
 | 
						
						
						
							|  |  | 					hasControls: false,
 | 
						
						
						
							|  |  | 					hasBorders: false,
 | 
						
						
						
							|  |  | 				});
 | 
						
						
						
							|  |  | 				let borderHDL = new fabric.Rect({
 | 
						
						
						
							|  |  | 					left: lineBoxWidth,
 | 
						
						
						
							|  |  | 					top: 0,
 | 
						
						
						
							|  |  | 					width: lineBoxWidth,
 | 
						
						
						
							|  |  | 					height: lineBoxHeigth,
 | 
						
						
						
							|  |  | 					fill: '',
 | 
						
						
						
							|  |  | 					_type: 'border',
 | 
						
						
						
							|  |  | 					lockMovementX: true, //X轴是否可被移动(true为不可)
 | 
						
						
						
							|  |  | 					lockMovementY: true, //Y轴是否可被移动(true为不可)
 | 
						
						
						
							|  |  | 					hasControls: false,
 | 
						
						
						
							|  |  | 					hasBorders: false,
 | 
						
						
						
							|  |  | 				});
 | 
						
						
						
							|  |  | 				let groupHDL = new fabric.Group([borderHDL, horizontalDottedLine], {
 | 
						
						
						
							|  |  | 					component_type: '12',
 | 
						
						
						
							|  |  | 					width: lineBoxWidth,
 | 
						
						
						
							|  |  | 					height: lineBoxHeigth,
 | 
						
						
						
							|  |  | 					stroke: val ? val.stroke : '#000000', //线颜色
 | 
						
						
						
							|  |  | 					strokeThickness: val ? val.strokeThickness : 2, //线宽
 | 
						
						
						
							|  |  | 					left: val ? parseInt(val.left) : parseInt(left - canvas._offset.left), //设置canvas上的X坐标
 | 
						
						
						
							|  |  | 					top: val ? parseInt(val.top) : parseInt(top - canvas._offset.top), //设置canvas上的Y坐标
 | 
						
						
						
							|  |  | 					lockMovementX: true, //X轴是否可被移动(true为不可)
 | 
						
						
						
							|  |  | 					lockMovementY: true, //Y轴是否可被移动(true为不可)
 | 
						
						
						
							|  |  | 					hasControls: false,
 | 
						
						
						
							|  |  | 					hasBorders: false,
 | 
						
						
						
							|  |  | 				});
 | 
						
						
						
							|  |  | 				canvas.add(groupHDL);
 | 
						
						
						
							|  |  | 				groupHDL['setControlVisible']('mtr', false);
 | 
						
						
						
							|  |  | 				break;
 | 
						
						
						
							|  |  | 			case 'verticalrealline':
 | 
						
						
						
							|  |  | 			case '13':
 | 
						
						
						
							|  |  | 				let verticalRealLine = new fabric.Line([x1, y1, x1, y2], {
 | 
						
						
						
							|  |  | 					stroke: val ? val.stroke : '#000000', //线颜色
 | 
						
						
						
							|  |  | 					strokeWidth: val ? Number(val.strokeThickness) : 2, //线宽
 | 
						
						
						
							|  |  | 					left: lineBoxWidth,
 | 
						
						
						
							|  |  | 					top: 0,
 | 
						
						
						
							|  |  | 					width: lineBoxWidth,
 | 
						
						
						
							|  |  | 					_type: 'line',
 | 
						
						
						
							|  |  | 					lockMovementX: true, //X轴是否可被移动(true为不可)
 | 
						
						
						
							|  |  | 					lockMovementY: true, //Y轴是否可被移动(true为不可)
 | 
						
						
						
							|  |  | 					hasControls: false,
 | 
						
						
						
							|  |  | 					hasBorders: false,
 | 
						
						
						
							|  |  | 				});
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | 				let borderVRL = new fabric.Rect({
 | 
						
						
						
							|  |  | 					left: lineBoxWidth,
 | 
						
						
						
							|  |  | 					top: 0,
 | 
						
						
						
							|  |  | 					width: lineBoxWidth,
 | 
						
						
						
							|  |  | 					height: lineBoxHeigth,
 | 
						
						
						
							|  |  | 					fill: '',
 | 
						
						
						
							|  |  | 					_type: 'border',
 | 
						
						
						
							|  |  | 					lockMovementX: true, //X轴是否可被移动(true为不可)
 | 
						
						
						
							|  |  | 					lockMovementY: true, //Y轴是否可被移动(true为不可)
 | 
						
						
						
							|  |  | 					hasControls: false,
 | 
						
						
						
							|  |  | 					hasBorders: false,
 | 
						
						
						
							|  |  | 				});
 | 
						
						
						
							|  |  | 				let groupVRL = new fabric.Group([borderVRL, verticalRealLine], {
 | 
						
						
						
							|  |  | 					component_type: '13',
 | 
						
						
						
							|  |  | 					width: lineBoxWidth,
 | 
						
						
						
							|  |  | 					height: lineBoxHeigth,
 | 
						
						
						
							|  |  | 					stroke: val ? val.stroke : '#000000', //线颜色
 | 
						
						
						
							|  |  | 					strokeThickness: val ? val.strokeThickness : 2, //线宽
 | 
						
						
						
							|  |  | 					left: val ? parseInt(val.left) : parseInt(left - canvas._offset.left), //设置canvas上的X坐标
 | 
						
						
						
							|  |  | 					top: val ? parseInt(val.top) : parseInt(top - canvas._offset.top), //设置canvas上的Y坐标
 | 
						
						
						
							|  |  | 					lockMovementX: true, //X轴是否可被移动(true为不可)
 | 
						
						
						
							|  |  | 					lockMovementY: true, //Y轴是否可被移动(true为不可)
 | 
						
						
						
							|  |  | 					hasControls: false,
 | 
						
						
						
							|  |  | 					hasBorders: false,
 | 
						
						
						
							|  |  | 				});
 | 
						
						
						
							|  |  | 				canvas.add(groupVRL);
 | 
						
						
						
							|  |  | 				groupVRL['setControlVisible']('mtr', false);
 | 
						
						
						
							|  |  | 				break;
 | 
						
						
						
							|  |  | 			case 'verticaldottedline':
 | 
						
						
						
							|  |  | 			case '14':
 | 
						
						
						
							|  |  | 				let verticalDottedLine = new fabric.Line([x1, y1, x1, y2], {
 | 
						
						
						
							|  |  | 					stroke: val ? val.stroke : '#000000', //线颜色
 | 
						
						
						
							|  |  | 					strokeWidth: val ? Number(val.strokeThickness) : 2, //线宽
 | 
						
						
						
							|  |  | 					strokeDashArray: [5, 5],
 | 
						
						
						
							|  |  | 					left: lineBoxWidth,
 | 
						
						
						
							|  |  | 					top: 0,
 | 
						
						
						
							|  |  | 					width: lineBoxWidth,
 | 
						
						
						
							|  |  | 					_type: 'line',
 | 
						
						
						
							|  |  | 					lockMovementX: true, //X轴是否可被移动(true为不可)
 | 
						
						
						
							|  |  | 					lockMovementY: true, //Y轴是否可被移动(true为不可)
 | 
						
						
						
							|  |  | 					hasControls: false,
 | 
						
						
						
							|  |  | 					hasBorders: false,
 | 
						
						
						
							|  |  | 				});
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | 				let borderVDL = new fabric.Rect({
 | 
						
						
						
							|  |  | 					left: lineBoxWidth,
 | 
						
						
						
							|  |  | 					top: 0,
 | 
						
						
						
							|  |  | 					width: lineBoxWidth,
 | 
						
						
						
							|  |  | 					height: lineBoxHeigth,
 | 
						
						
						
							|  |  | 					fill: '',
 | 
						
						
						
							|  |  | 					_type: 'border',
 | 
						
						
						
							|  |  | 					lockMovementX: true, //X轴是否可被移动(true为不可)
 | 
						
						
						
							|  |  | 					lockMovementY: true, //Y轴是否可被移动(true为不可)
 | 
						
						
						
							|  |  | 					hasControls: false,
 | 
						
						
						
							|  |  | 					hasBorders: false,
 | 
						
						
						
							|  |  | 				});
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | 				let groupVDL = new fabric.Group([borderVDL, verticalDottedLine], {
 | 
						
						
						
							|  |  | 					component_type: '14',
 | 
						
						
						
							|  |  | 					width: lineBoxWidth,
 | 
						
						
						
							|  |  | 					height: lineBoxHeigth,
 | 
						
						
						
							|  |  | 					stroke: val ? val.stroke : '#000000', //线颜色
 | 
						
						
						
							|  |  | 					strokeThickness: val ? val.strokeThickness : 2, //线宽
 | 
						
						
						
							|  |  | 					left: val ? parseInt(val.left) : parseInt(left - canvas._offset.left), //设置canvas上的X坐标
 | 
						
						
						
							|  |  | 					top: val ? parseInt(val.top) : parseInt(top - canvas._offset.top), //设置canvas上的Y坐标
 | 
						
						
						
							|  |  | 					lockMovementX: true, //X轴是否可被移动(true为不可)
 | 
						
						
						
							|  |  | 					lockMovementY: true, //Y轴是否可被移动(true为不可)
 | 
						
						
						
							|  |  | 					hasControls: false,
 | 
						
						
						
							|  |  | 					hasBorders: false,
 | 
						
						
						
							|  |  | 				});
 | 
						
						
						
							|  |  | 				canvas.add(groupVDL);
 | 
						
						
						
							|  |  | 				groupVDL['setControlVisible']('mtr', false);
 | 
						
						
						
							|  |  | 				break;
 | 
						
						
						
							|  |  | 			default:
 | 
						
						
						
							|  |  | 				break;
 | 
						
						
						
							|  |  | 		}
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | 	};
 | 
						
						
						
							|  |  | 	//添加线条控制end====================
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | 	// 从子组件同步控件信息到canvas
 | 
						
						
						
							|  |  | 	handleRefreshComponent = (params) => {
 | 
						
						
						
							|  |  | 		const { canvas } = this.state;
 | 
						
						
						
							|  |  | 		const { location, dispatch } = this.props;
 | 
						
						
						
							|  |  | 		const group = canvas.getActiveObject();
 | 
						
						
						
							|  |  | 		let video = null;
 | 
						
						
						
							|  |  | 		let img = null;
 | 
						
						
						
							|  |  | 		// 上传图片
 | 
						
						
						
							|  |  | 		if (group.component_type === '2') {
 | 
						
						
						
							|  |  | 			img = group.getObjects().find((item) => {
 | 
						
						
						
							|  |  | 				// 通过 isType 判断图片元素,因为组内有2个元素(一个图片,一个文本)
 | 
						
						
						
							|  |  | 				return item.isType('image');
 | 
						
						
						
							|  |  | 			});
 | 
						
						
						
							|  |  | 		} else if (group.component_type === '3') {
 | 
						
						
						
							|  |  | 			video = document.getElementById(group.id);
 | 
						
						
						
							|  |  | 		}
 | 
						
						
						
							|  |  | 		if (params.imagePath && typeof params.imagePath !== 'string') {
 | 
						
						
						
							|  |  | 			const formData = new FormData();
 | 
						
						
						
							|  |  | 			formData.append('upload', params.imagePath);
 | 
						
						
						
							|  |  | 			dispatch({
 | 
						
						
						
							|  |  | 				type: 'bjct/single_img_return_route',
 | 
						
						
						
							|  |  | 				payload: formData,
 | 
						
						
						
							|  |  | 				callback: (res) => {
 | 
						
						
						
							|  |  | 					if (res.success) {
 | 
						
						
						
							|  |  | 						// 视频
 | 
						
						
						
							|  |  | 						if (group.component_type === '3') {
 | 
						
						
						
							|  |  | 							video.src = `${configUrl}/${res.datarecord}`;
 | 
						
						
						
							|  |  | 							video.play();
 | 
						
						
						
							|  |  | 							group.top = params.top || group.top;
 | 
						
						
						
							|  |  | 							group.left = params.left || group.left;
 | 
						
						
						
							|  |  | 							group.width = params.width || group.width;
 | 
						
						
						
							|  |  | 							group.height = params.height || group.height;
 | 
						
						
						
							|  |  | 							group.fullScreen = params.fullScreen;
 | 
						
						
						
							|  |  | 							group.videoSource = res.datarecord;
 | 
						
						
						
							|  |  | 							canvas.renderAll();
 | 
						
						
						
							|  |  | 							return;
 | 
						
						
						
							|  |  | 						}
 | 
						
						
						
							|  |  | 						group.top = +params.top || group.top;
 | 
						
						
						
							|  |  | 						group.left = +params.left || group.left;
 | 
						
						
						
							|  |  | 						group.width = +params.width || group.width;
 | 
						
						
						
							|  |  | 						group.height = +params.height || group.height;
 | 
						
						
						
							|  |  | 						group.fullScreen = params.fullScreen;
 | 
						
						
						
							|  |  | 						group.effect = params.effect;
 | 
						
						
						
							|  |  | 						group.shadow = params.effect ? shadow : null;
 | 
						
						
						
							|  |  | 						group.stretch = params.stretch;
 | 
						
						
						
							|  |  | 						group.resourceMode = params.resourceMode;
 | 
						
						
						
							|  |  | 						group.imagePath = res.datarecord;
 | 
						
						
						
							|  |  | 						group.bindingFieldID = params.bindingFieldID || group.bindingFieldID;
 | 
						
						
						
							|  |  | 						if (group.component_type === '2' && group.fullScreen) {
 | 
						
						
						
							|  |  | 							group.top = 0;
 | 
						
						
						
							|  |  | 							group.left = 0;
 | 
						
						
						
							|  |  | 						}
 | 
						
						
						
							|  |  | 						// 找到图片,然后更换
 | 
						
						
						
							|  |  | 						img.setSrc(`${configUrl}/${res.datarecord}`, () => {
 | 
						
						
						
							|  |  | 							// 默认
 | 
						
						
						
							|  |  | 							let scaleY = 1;
 | 
						
						
						
							|  |  | 							let scaleX = 1;
 | 
						
						
						
							|  |  | 							if (params.stretch === '2') {
 | 
						
						
						
							|  |  | 								// 同比例裁剪照片
 | 
						
						
						
							|  |  | 								const scale = group.width / img.width > group.height / img.height ? group.width / img.width : group.height / img.height;
 | 
						
						
						
							|  |  | 								scaleY = scale;
 | 
						
						
						
							|  |  | 								scaleX = scale;
 | 
						
						
						
							|  |  | 							} else if (params.stretch === '3') {
 | 
						
						
						
							|  |  | 								// 同比例
 | 
						
						
						
							|  |  | 								const scale = group.width / img.width < group.height / img.height ? group.width / img.width : group.height / img.height;
 | 
						
						
						
							|  |  | 								scaleY = scale;
 | 
						
						
						
							|  |  | 								scaleX = scale;
 | 
						
						
						
							|  |  | 							} else if (params.stretch === '4') {
 | 
						
						
						
							|  |  | 								// 填充
 | 
						
						
						
							|  |  | 								scaleY = group.height / img.height;
 | 
						
						
						
							|  |  | 								scaleX = group.width / img.width;
 | 
						
						
						
							|  |  | 							}
 | 
						
						
						
							|  |  | 							img.set({
 | 
						
						
						
							|  |  | 								left: 0,
 | 
						
						
						
							|  |  | 								top: 0,
 | 
						
						
						
							|  |  | 								originX: 'center',
 | 
						
						
						
							|  |  | 								originY: 'center',
 | 
						
						
						
							|  |  | 								scaleX: scaleX,
 | 
						
						
						
							|  |  | 								scaleY: scaleY,
 | 
						
						
						
							|  |  | 							});
 | 
						
						
						
							|  |  | 							canvas.renderAll();
 | 
						
						
						
							|  |  | 						});
 | 
						
						
						
							|  |  | 						group.clipPath =
 | 
						
						
						
							|  |  | 							params.stretch === '2'
 | 
						
						
						
							|  |  | 								? new fabric.Rect({
 | 
						
						
						
							|  |  | 									top: -group.height / 2,
 | 
						
						
						
							|  |  | 									left: -group.width / 2,
 | 
						
						
						
							|  |  | 									width: group.width,
 | 
						
						
						
							|  |  | 									height: group.height,
 | 
						
						
						
							|  |  | 									lockMovementX: true, //X轴是否可被移动(true为不可)
 | 
						
						
						
							|  |  | 									lockMovementY: true, //Y轴是否可被移动(true为不可)
 | 
						
						
						
							|  |  | 									hasControls: false,
 | 
						
						
						
							|  |  | 									hasBorders: false,
 | 
						
						
						
							|  |  | 								})
 | 
						
						
						
							|  |  | 								: null;
 | 
						
						
						
							|  |  | 					} else {
 | 
						
						
						
							|  |  | 						message.error('图片上传失败');
 | 
						
						
						
							|  |  | 					}
 | 
						
						
						
							|  |  | 				},
 | 
						
						
						
							|  |  | 			});
 | 
						
						
						
							|  |  | 		} else {
 | 
						
						
						
							|  |  | 			group.top = params.top || group.top;
 | 
						
						
						
							|  |  | 			group.left = params.left || group.left;
 | 
						
						
						
							|  |  | 			group.width = +params.width || group.width;
 | 
						
						
						
							|  |  | 			group.height = +params.height || group.height;
 | 
						
						
						
							|  |  | 			group.fullScreen = params.fullScreen || group.fullScreen;
 | 
						
						
						
							|  |  | 			group.effect = params.effect || group.effect;
 | 
						
						
						
							|  |  | 			group.shadow = params.effect && group.component_type === '2' ? shadow : null;
 | 
						
						
						
							|  |  | 			group.stretch = params && params.stretch ? params.stretch : group.stretch;
 | 
						
						
						
							|  |  | 			group.resourceMode = params.resourceMode || group.resourceMode;
 | 
						
						
						
							|  |  | 			group.imagePath = group.imagePath;
 | 
						
						
						
							|  |  | 			group.bindingFieldID = params.bindingFieldID || group.bindingFieldID;
 | 
						
						
						
							|  |  | 			group.resourceMode = params.resourceMode || group.resourceMode;
 | 
						
						
						
							|  |  | 			if (group.component_type === '2') {
 | 
						
						
						
							|  |  | 				// 默认
 | 
						
						
						
							|  |  | 				let scaleY = 1;
 | 
						
						
						
							|  |  | 				let scaleX = 1;
 | 
						
						
						
							|  |  | 				if (params.stretch === '2') {
 | 
						
						
						
							|  |  | 					// 同比例裁剪照片
 | 
						
						
						
							|  |  | 					const scale = group.width / img.width > group.height / img.height ? group.width / img.width : group.height / img.height;
 | 
						
						
						
							|  |  | 					scaleY = scale;
 | 
						
						
						
							|  |  | 					scaleX = scale;
 | 
						
						
						
							|  |  | 				} else if (params.stretch === '3') {
 | 
						
						
						
							|  |  | 					// 同比例
 | 
						
						
						
							|  |  | 					const scale = group.width / img.width < group.height / img.height ? group.width / img.width : group.height / img.height;
 | 
						
						
						
							|  |  | 					scaleY = scale;
 | 
						
						
						
							|  |  | 					scaleX = scale;
 | 
						
						
						
							|  |  | 				} else if (params.stretch === '4' || !params.stretch) {
 | 
						
						
						
							|  |  | 					// 填充
 | 
						
						
						
							|  |  | 					scaleY = group.height / img.height;
 | 
						
						
						
							|  |  | 					scaleX = group.width / img.width;
 | 
						
						
						
							|  |  | 				}
 | 
						
						
						
							|  |  | 				img.set({
 | 
						
						
						
							|  |  | 					left: 0,
 | 
						
						
						
							|  |  | 					top: 0,
 | 
						
						
						
							|  |  | 					originX: 'center',
 | 
						
						
						
							|  |  | 					originY: 'center',
 | 
						
						
						
							|  |  | 					scaleX: scaleX,
 | 
						
						
						
							|  |  | 					scaleY: scaleY,
 | 
						
						
						
							|  |  | 				});
 | 
						
						
						
							|  |  | 				group.clipPath =
 | 
						
						
						
							|  |  | 					params.stretch === '2'
 | 
						
						
						
							|  |  | 						? new fabric.Rect({
 | 
						
						
						
							|  |  | 							top: -group.height / 2,
 | 
						
						
						
							|  |  | 							left: -group.width / 2,
 | 
						
						
						
							|  |  | 							width: group.width,
 | 
						
						
						
							|  |  | 							height: group.height,
 | 
						
						
						
							|  |  | 							lockMovementX: true, //X轴是否可被移动(true为不可)
 | 
						
						
						
							|  |  | 							lockMovementY: true, //Y轴是否可被移动(true为不可)
 | 
						
						
						
							|  |  | 							hasControls: false,
 | 
						
						
						
							|  |  | 							hasBorders: false,
 | 
						
						
						
							|  |  | 						})
 | 
						
						
						
							|  |  | 						: null;
 | 
						
						
						
							|  |  | 				group.top = params.top;
 | 
						
						
						
							|  |  | 				group.left = params.left;
 | 
						
						
						
							|  |  | 			} else if (group.component_type === '3') {
 | 
						
						
						
							|  |  | 				const scaleX = params.width / video.videoWidth;
 | 
						
						
						
							|  |  | 				const scaleY = params.height / video.videoHeight;
 | 
						
						
						
							|  |  | 				group.set({
 | 
						
						
						
							|  |  | 					scaleX: scaleX,
 | 
						
						
						
							|  |  | 					scaleY: scaleY,
 | 
						
						
						
							|  |  | 					width: video.videoWidth,
 | 
						
						
						
							|  |  | 					height: video.videoHeight,
 | 
						
						
						
							|  |  | 				});
 | 
						
						
						
							|  |  | 			} else if (group.component_type === '5') {
 | 
						
						
						
							|  |  | 				params.bindingFieldPeopleType = typeof params.bindingFieldPeopleType == 'string' ? params.bindingFieldPeopleType : params.bindingFieldPeopleType.join(',');
 | 
						
						
						
							|  |  | 				canvas.remove(group);
 | 
						
						
						
							|  |  | 				this.handleSetGridList(params.left, params.left, params);
 | 
						
						
						
							|  |  | 			}
 | 
						
						
						
							|  |  | 			canvas.renderAll();
 | 
						
						
						
							|  |  | 			// canvas.setActiveObject(group);
 | 
						
						
						
							|  |  | 		}
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | 	};
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | </script>
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | </html> |