You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
	
	
		
			2896 lines
		
	
	
		
			114 KiB
		
	
	
	
		
			HTML
		
	
		
		
			
		
	
	
			2896 lines
		
	
	
		
			114 KiB
		
	
	
	
		
			HTML
		
	
| 
											5 months ago
										 | <!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/fabric_3_6_2.js"></script>
 | ||
|  |   <script src="/webs/resourse/moment.js"></script> | ||
|  |   <script src="/webs/resourse/html2canvas.min.js"></script> --> | ||
|  | 
 | ||
|  |     <script src="/webs/resourse/fabric_3_6_2.js"></script> | ||
|  |     <script src="/webs/resourse/moment.js"></script> | ||
|  |     <script src="/webs/resourse/html2canvas.min.js"></script> | ||
|  | 
 | ||
|  |     <style> | ||
|  |       body { | ||
|  |         margin: 0; | ||
|  |         padding: 0; | ||
|  |         overflow: hidden; | ||
|  |       } | ||
|  | 
 | ||
|  |       .yt_content { | ||
|  |         position: absolute; | ||
|  |         z-index: 1; | ||
|  |         overflow-x: hidden; | ||
|  |         overflow-y: scroll; | ||
|  |       } | ||
|  | 
 | ||
|  |       .voteContent { | ||
|  |         display: flex; | ||
|  |         /* align-items: center; */ | ||
|  |         justify-content: center; | ||
|  |         transform-origin: center center; | ||
|  |       } | ||
|  |     </style> | ||
|  |   </head> | ||
|  | 
 | ||
|  |   <body style="margin: 0; overflow: hidden"> | ||
|  |     <div id="yt_content" class="yt_content"> | ||
|  |       <div id="element" className="voteContent"></div> | ||
|  |     </div> | ||
|  | 
 | ||
|  |     <canvas id="canvas"></canvas> | ||
|  |     <a style="font-family: 'fzxbs'; opacity: 0">字体测试</a> | ||
|  |   </body> | ||
|  |   <script type="text/javascript"> | ||
|  |     // 创建 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 font1 = new FontFace( | ||
|  |       "fzxbs", | ||
|  |       "url(/webs/resourse/kaiti.ttf)  format(truetype)" | ||
|  |     ); | ||
|  |     font1 | ||
|  |       .load() | ||
|  |       .then(() => { | ||
|  |         console.log("success"); | ||
|  |       }) | ||
|  |       .catch((err) => { | ||
|  |         console.log("Failed to load font:"); | ||
|  |       }); | ||
|  | 
 | ||
|  |     const font2 = new FontFace( | ||
|  |       "fzxbs", | ||
|  |       "url(/webs/resourse/heiti.ttf)  format(truetype)" | ||
|  |     ); | ||
|  |     font2 | ||
|  |       .load() | ||
|  |       .then(() => { | ||
|  |         console.log("success"); | ||
|  |       }) | ||
|  |       .catch((err) => { | ||
|  |         console.log("Failed to load font:"); | ||
|  |       }); | ||
|  | 
 | ||
|  |     const font3 = new FontFace( | ||
|  |       "fzxbs", | ||
|  |       "url(/webs/resourse/songti.ttf)  format(truetype)" | ||
|  |     ); | ||
|  |     font3 | ||
|  |       .load() | ||
|  |       .then(() => { | ||
|  |         console.log("success"); | ||
|  |       }) | ||
|  |       .catch((err) => { | ||
|  |         console.log("Failed to load font:"); | ||
|  |       }); | ||
|  | 
 | ||
|  |     const font4 = new FontFace( | ||
|  |       "fzxbs", | ||
|  |       "url(/webs/resourse/fangsong.ttf)  format(truetype)" | ||
|  |     ); | ||
|  |     font4 | ||
|  |       .load() | ||
|  |       .then(() => { | ||
|  |         console.log("success"); | ||
|  |       }) | ||
|  |       .catch((err) => { | ||
|  |         console.log("Failed to load font:"); | ||
|  |       }); | ||
|  | 
 | ||
|  |     //添加文本标签start=============================== | ||
|  |     let handleSetText = (left, top, val) => { | ||
|  |       // console.log(left,top,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 beforpara = ""; | ||
|  |       let afterpara = ""; | ||
|  |       const parmitems = val.systemParContent.split("Ψ"); | ||
|  |       if (parmitems.length > 1) { | ||
|  |         beforpara = parmitems[0]; | ||
|  |         afterpara = parmitems[1]; | ||
|  |       } | ||
|  | 
 | ||
|  |       let textContent = | ||
|  |         beforpara + (val ? val.text + "" : "文本标签") + afterpara; | ||
|  |       if (val.bindingFieldID == "0x1025") { | ||
|  |         if (afterpara.includes("未按") && val.text == "0") { | ||
|  |           textContent = ""; | ||
|  |         } | ||
|  |       } | ||
|  | 
 | ||
|  |       if (val.rowCount === "false") { | ||
|  |         if (val && val.textTrimming !== "1") { | ||
|  |           if (textContent.length * val.fontSize > textWidth) { | ||
|  |             let num = Math.floor(textWidth / val.fontSize); | ||
|  |             textContent = textContent.substr(0, num - 1) + "..."; | ||
|  |           } | ||
|  |         } else { | ||
|  |           if (textContent.length * val.fontSize > textWidth) { | ||
|  |             let num = Math.floor(textWidth / val.fontSize); | ||
|  |             textContent = textContent.substr(0, num); | ||
|  |           } | ||
|  |         } | ||
|  |       } | ||
|  | 
 | ||
|  |       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, | ||
|  |         textTrimming: val && val.textTrimming ? val.textTrimming : "1", | ||
|  |         width: textWidth, | ||
|  |         left: 0, | ||
|  |         top: textTop, | ||
|  |         splitByGrapheme: val && val.rowCount == "true" ? true : 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", | ||
|  |       }); | ||
|  |       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" ? 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" ? true : false, | ||
|  |         bindingFieldID: val && val.bindingFieldID ? val.bindingFieldID : "", | ||
|  |         systemParContent: val.systemParContent, | ||
|  |         cvalue: val, | ||
|  |         lockMovementX: true, //X轴是否可被移动(true为不可) | ||
|  |         lockMovementY: true, //Y轴是否可被移动(true为不可) | ||
|  |         hasControls: false, | ||
|  |         hasBorders: false, | ||
|  |       }); | ||
|  |       if (val.bindingFieldID == "0x1043") { | ||
|  |         let ts = textBox.text; | ||
|  |         let timer = setInterval(() => { | ||
|  |           let dd = parseInt(ts / 60 / 60 / 24); //计算剩余天数 | ||
|  |           dd = dd < 10 ? "0" + dd : dd; | ||
|  |           let hh = parseInt((ts / 60 / 60) % 24); //计算剩余小时数 | ||
|  |           hh = hh < 10 ? "0" + hh : hh; | ||
|  |           let mm = parseInt((ts / 60) % 60); //计算剩余分钟数 | ||
|  |           mm = mm < 10 ? "0" + mm : mm; | ||
|  |           let ss = parseInt(ts % 60); //计算剩余秒数 | ||
|  |           ss = ss < 10 ? "0" + ss : ss; | ||
|  |           console.log(dd + ":" + hh + ":" + mm + ":" + ss); | ||
|  |           textBox.set({ | ||
|  |             text: mm + ":" + ss, | ||
|  |           }); | ||
|  |           if (ts > 0) { | ||
|  |             ts--; | ||
|  |           } else { | ||
|  |             clearInterval(timer); | ||
|  |           } | ||
|  |         }, 1000); | ||
|  |       } | ||
|  | 
 | ||
|  |       canvas.add(group); // 将图形添加至画布 | ||
|  |     }; | ||
|  |     //添加文本标签end=============================== | ||
|  | 
 | ||
|  |     //添加图片照片start===================================== | ||
|  |     let 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', | ||
|  |       }); | ||
|  |       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 ? image.width : 100, | ||
|  |         height: image ? image.height : 100, | ||
|  |         shadow: image && image.effect === "true" ? shadow : null, | ||
|  |         effect: image && image.effect === "true" ? true : false, | ||
|  |         imagePath: | ||
|  |           image && image.imagePath | ||
|  |             ? image.imagePath | ||
|  |             : "webs/upload/img/001.jpg", | ||
|  |         bindingFieldID: image ? image.bindingFieldID : "-1", | ||
|  |         cvalue: image, | ||
|  |         resourceMode: image ? image.resourceMode : "0", | ||
|  |         lockMovementX: true, //X轴是否可被移动(true为不可) | ||
|  |         lockMovementY: true, //Y轴是否可被移动(true为不可) | ||
|  |         hasControls: false, | ||
|  |         hasBorders: false, | ||
|  |         // objectCaching: false // 不缓存 | ||
|  |       }); | ||
|  |       if (image) { | ||
|  |         img.setSrc( | ||
|  |           image && image.imagePath | ||
|  |             ? `http://localhost:9999/${image.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.requestRenderAll(); | ||
|  |           } | ||
|  |         ); | ||
|  |         group.clipPath = | ||
|  |           image.stretch === "2" | ||
|  |             ? new fabric.Rect({ | ||
|  |                 top: -group.height / 2, | ||
|  |                 left: -group.width / 2, | ||
|  |                 width: group.width, | ||
|  |                 height: group.height, | ||
|  |               }) | ||
|  |             : null; | ||
|  |         canvas.add(group); | ||
|  |       } else { | ||
|  |         img.setSrc(`http://localhost:9999/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); | ||
|  |         }); | ||
|  |       } | ||
|  |     }; | ||
|  |     //添加图片照片end================================== | ||
|  |     // 添加视频================================== | ||
|  |     let handleAddVideo = (left, top, vid) => { | ||
|  |       let Video = document.createElement("video"); | ||
|  |       Video.setAttribute( | ||
|  |         "src", | ||
|  |         vid && vid.videoSource | ||
|  |           ? `http://localhost:9999/${vid.videoSource}` | ||
|  |           : "http://localhost:9999/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", | ||
|  |           cvalue: vid, | ||
|  |           id: id, | ||
|  |           lockMovementX: true, //X轴是否可被移动(true为不可) | ||
|  |           lockMovementY: true, //Y轴是否可被移动(true为不可) | ||
|  |           hasControls: false, | ||
|  |           hasBorders: false, | ||
|  |         }); | ||
|  |         document.getElementById("videos")?.appendChild(Video); | ||
|  |         canvas.add(video); | ||
|  |         video.getElement().play(); | ||
|  |         fabric.util.requestAnimFrame(function render() { | ||
|  |           canvas.requestRenderAll(); | ||
|  |           fabric.util.requestAnimFrame(render); | ||
|  |         }); | ||
|  |       }; | ||
|  |     }; | ||
|  |     // 添加视频================================== | ||
|  | 
 | ||
|  |     // 添加议题内容  开始========================= | ||
|  |     let handleSetYtnr = (left, top, item) => { | ||
|  |       console.log("添加议题内容", left, top, item); | ||
|  |       if (!(item && item.text && item.text.to_agendahtml)) return; | ||
|  |       const styleBox = `width:${item.width}px;height:${item.height}px;left:${item.left}px;top:${item.top}px;text-align:${item.verticalAlignment};overflow:hidden;display:flex; justify-content:center`; | ||
|  |       const yt_content = document.getElementById("yt_content"); | ||
|  |       yt_content.style.cssText = styleBox; | ||
|  |       const scale2 = { | ||
|  |         scaleX: (item.width / 1800).toFixed(2), | ||
|  |         scaleY: (item.height / 900).toFixed(2), | ||
|  |       }; | ||
|  |       const scale = Math.min(scale2.scaleX, scale2.scaleY); | ||
|  |       const writeBoxStyle = { | ||
|  |         width: 1800, | ||
|  |         height: 900, | ||
|  |         transformOrigin: "top left", | ||
|  |         transform: `scale(${scale.scaleX})`, | ||
|  |       }; | ||
|  |       const updateYtnrFormValues = {}; | ||
|  |       let textWidth = item ? parseInt(item.width) : 100; | ||
|  |       let textHeigth = item ? parseInt(item.height) : 100; | ||
|  |       let textTop = 0; | ||
|  |       let yttext = item.text.to_agendahtml; | ||
|  |       if ( | ||
|  |         updateYtnrFormValues && | ||
|  |         updateYtnrFormValues.fullScreen && | ||
|  |         updateYtnrFormValues.scaleValue | ||
|  |       ) { | ||
|  |         if (item && (item.fullScreen === true || item.fullScreen === "true")) { | ||
|  |           textWidth = canvas.width; | ||
|  |           textHeigth = canvas.height; | ||
|  |         } else { | ||
|  |           if ( | ||
|  |             updateYtnrFormValues && | ||
|  |             (updateYtnrFormValues.fullScreen == true || | ||
|  |               updateYtnrFormValues.fullScreen == "true") | ||
|  |           ) { | ||
|  |             textWidth = 100 * item.scaleValue; | ||
|  |             textHeigth = 100 * item.scaleValue; | ||
|  |           } else if ( | ||
|  |             item && | ||
|  |             updateYtnrFormValues.scaleValue && | ||
|  |             item.scaleValue == updateYtnrFormValues.scaleValue | ||
|  |           ) { | ||
|  |             textWidth = item ? parseInt(item.width) : 100 * item.scaleValue; | ||
|  |             textHeigth = item ? parseInt(item.height) : 100 * item.scaleValue; | ||
|  |           } else if ( | ||
|  |             item && | ||
|  |             updateYtnrFormValues.scaleValue && | ||
|  |             item.scaleValue !== updateYtnrFormValues.scaleValue | ||
|  |           ) { | ||
|  |             textWidth = item | ||
|  |               ? (parseInt(item.width) / updateYtnrFormValues.scaleValue) * | ||
|  |                 item.scaleValue | ||
|  |               : 100; | ||
|  |             textHeigth = item | ||
|  |               ? (parseInt(item.height) / updateYtnrFormValues.scaleValue) * | ||
|  |                 item.scaleValue | ||
|  |               : 100; | ||
|  |           } | ||
|  |         } | ||
|  |       } else if (item && item.width && item.height) { | ||
|  |         textWidth = parseInt(item.width); | ||
|  |         textHeigth = parseInt(item.height); | ||
|  |       } | ||
|  |       var x = document.getElementById("container"); | ||
|  |       //如果对象x不为空 | ||
|  |       if (x != null) { | ||
|  |         x.remove(); | ||
|  |       } | ||
|  |       item.text.to_agendahtml = item.text.to_agendahtml.replace( | ||
|  |         "        ", | ||
|  |         "         " | ||
|  |       ); | ||
|  |       const element = item.text.to_agendahtml; | ||
|  |       let container = document.createElement("div"); | ||
|  |       container.setAttribute("id", "container"); | ||
|  |       container.innerHTML = element; | ||
|  |       container.style.backgroundColor = item.text.to_agendabgcolor | ||
|  |         ? item.text.to_agendabgcolor | ||
|  |         : "#ffffff"; | ||
|  | 
 | ||
|  |       // container.style.width = textWidth + 'px' | ||
|  |       // container.style.display = 'flex'; | ||
|  |       // container.style.justifyContent='center'; | ||
|  |       // container.style.flexDirection='column'; | ||
|  |       // container.style.height = textHeigth + 'px' | ||
|  |       container.style.width = "1800px"; | ||
|  |       container.style.height = "900px"; | ||
|  |       container.style.display = "flex"; | ||
|  |       container.style.flexDirection = "column"; | ||
|  |       // container.style.alignItems= 'center'; | ||
|  |       container.style.justifyContent = "center"; | ||
|  |       container.style.color = "#000"; | ||
|  |       document.getElementById("element").appendChild(container); | ||
|  | 
 | ||
|  |       document.getElementById("element").style.transform = `scale(${scale})`; | ||
|  |       // document.getElementById("element").style.alignItems='center'; | ||
|  |       document.getElementById("element").style.transformOrigin = "top center"; | ||
|  |     }; | ||
|  |     // 添加议题内容  结束========================= | ||
|  | 
 | ||
|  |     //添加网格列表start================================ | ||
|  |     let handleSetGridList = (left, top, grid) => { | ||
|  |       console.log("网格列表1", grid); | ||
|  |       let list = grid.text ? grid.text : []; | ||
|  |       if (!Array.isArray(list)) return; | ||
|  |       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 y = 1; y <= rowCount; y++) { | ||
|  |         // 行 | ||
|  |         for (let x = 1; x <= colCount; x++) { | ||
|  |           // 列 | ||
|  |           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("", { | ||
|  |             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", | ||
|  |           }); | ||
|  | 
 | ||
|  |           const text2 = new fabric.Textbox("", { | ||
|  |             // width: gridWidth, | ||
|  |             left: x * gridWidth, //设置canvas上的X坐标 | ||
|  |             textAlign: "left", | ||
|  |             top: gridTop - 2 + ((grid ? parseInt(grid.fontSize) : 16) - 18) / 2, | ||
|  |             shadow: grid && grid.effect === "true" ? shadow : null, // 阴影 | ||
|  |             fill: grid ? grid.foreground : "#000", | ||
|  |             fontSize: 18, | ||
|  |             fontWeight: grid ? grid.fontStyle.split(",")[1] : "normal", | ||
|  |             fontStyle: grid ? grid.fontStyle.split(",")[0] : "normal", | ||
|  |             fontFamily: grid ? grid.fontFamily : "SimSun", | ||
|  |           }); | ||
|  | 
 | ||
|  |           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], | ||
|  |           }); | ||
|  |           child.push(border); | ||
|  |           child.push(text); | ||
|  |           child.push(text2); | ||
|  |         } | ||
|  |       } | ||
|  | 
 | ||
|  |       let group = new fabric.Group(child, { | ||
|  |         width: grid ? grid.width : 500, | ||
|  |         height: grid ? grid.height : 250, | ||
|  |         left: grid ? grid.left : left - canvas._offset.left, //设置canvas上的X坐标 | ||
|  |         top: grid ? grid.top : top - canvas._offset.top, //设置canvas上的Y坐标 | ||
|  |         rowCount: grid ? grid.rowCount : 5, //行 | ||
|  |         colCount: grid ? grid.colCount : 5, //列 | ||
|  |         component_type: grid ? grid.component_type : "5", | ||
|  |         cvalue: grid, | ||
|  | 
 | ||
|  |         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" ? true : false, //是否显示二次发言 | ||
|  |         isShowAskSecend: grid && grid.isShowAskSecend === "true" ? true : false, // 是否显示二次询问 | ||
|  |         isShowPersonWork: | ||
|  |           grid && grid.isShowPersonWork === "true" ? true : false, // 是否显示人员职务 | ||
|  |         bindingFieldPeopleType: | ||
|  |           grid && grid.bindingFieldPeopleType | ||
|  |             ? grid.bindingFieldPeopleType.split(",") | ||
|  |             : [], | ||
|  |         lockMovementX: true, //X轴是否可被移动(true为不可) | ||
|  |         lockMovementY: true, //Y轴是否可被移动(true为不可) | ||
|  |         hasControls: false, | ||
|  |         hasBorders: false, | ||
|  |       }); | ||
|  | 
 | ||
|  |       if (Array.isArray(list) && list.length > 0) { | ||
|  |         for (let i = 1; i <= list.length; i++) { | ||
|  |           let item = child[3 * i - 2]; | ||
|  |           let item2 = child[3 * i - 1]; | ||
|  |           if (item) { | ||
|  |             let pername = list[i - 1].pername; | ||
|  | 
 | ||
|  |             const fontSize = | ||
|  |               grid && parseInt(grid.fontSize) ? parseInt(grid.fontSize) : 16; | ||
|  | 
 | ||
|  |             if (pername.length * fontSize > gridWidth) { | ||
|  |               let num = Math.floor(gridWidth / fontSize); | ||
|  |               pername = pername.substr(0, num); | ||
|  |             } | ||
|  | 
 | ||
|  |             item.text = pername; | ||
|  |             if (item.textAlign == "center") { | ||
|  |               item2.left = item2.left - (item.text.length * item.fontSize) / 2; | ||
|  |             } else if (item.textAlign == "left") { | ||
|  |               item2.left = item2.left - item.text.length * item.fontSize; | ||
|  |             } | ||
|  |             switch (grid.bindingFieldID) { | ||
|  |               case "0x1061": //人员报到人列表 | ||
|  |                 if (item.group?.showStyle == 0) { | ||
|  |                   if (item.group?.colorChangeStyle == 0) { | ||
|  |                     if (list[i - 1].checkinstatus == 1) { | ||
|  |                       item.fill = item.group.foregroundChange; | ||
|  |                     } else { | ||
|  |                       item.fill = item.group.foreground; | ||
|  |                     } | ||
|  |                   } else { | ||
|  |                     if (list[i - 1].checkinstatus == 1) { | ||
|  |                       item.fill = item.group.foreground; | ||
|  |                     } else { | ||
|  |                       item.fill = item.group.foregroundChange; | ||
|  |                     } | ||
|  |                   } | ||
|  |                 } | ||
|  |                 break; | ||
|  |               case "0x1062": //人员发言人列表 | ||
|  |                 let ts = list[i - 1].allowSpeakTime; | ||
|  |                 let timer = setInterval(() => { | ||
|  |                   let dd = parseInt(ts / 60 / 60 / 24); //计算剩余小时 | ||
|  |                   dd = dd < 10 ? "0" + dd : dd; | ||
|  |                   let hh = parseInt((ts / 60 / 60) % 24); //计算剩余小时 | ||
|  |                   hh = hh < 10 ? "0" + hh : hh; | ||
|  |                   let mm = parseInt((ts / 60) % 60); | ||
|  |                   mm = mm < 10 ? "0" + mm : mm; | ||
|  |                   let ss = parseInt(ts % 60); | ||
|  |                   ss = ss < 10 ? "0" + ss : ss; | ||
|  |                   item.set({ | ||
|  |                     text: list[i - 1].pername, | ||
|  |                   }); | ||
|  |                   item2.set({ | ||
|  |                     text: "(" + mm + ":" + ss + ")", | ||
|  |                   }); | ||
|  |                   if (ts > 0) { | ||
|  |                     ts--; | ||
|  |                   } else { | ||
|  |                     clearInterval(timer); | ||
|  |                   } | ||
|  |                 }, 1000); | ||
|  |                 break; | ||
|  |               case "0x1063": //人员申请发言人列表 | ||
|  |                 let tetx = list[i - 1].secondTip | ||
|  |                   ? "(" + list[i - 1].secondTip + ")" | ||
|  |                   : ""; | ||
|  | 
 | ||
|  |                 const fontSize = | ||
|  |                   grid && parseInt(grid.fontSize) | ||
|  |                     ? parseInt(grid.fontSize) | ||
|  |                     : 16; | ||
|  | 
 | ||
|  |                 if (tetx.length * fontSize > gridWidth) { | ||
|  |                   let num = Math.floor(gridWidth / fontSize); | ||
|  |                   tetx = tetx.substr(0, num); | ||
|  |                 } | ||
|  | 
 | ||
|  |                 // item2.text = list[i - 1].secondTip ? '(' + list[i - 1].secondTip + ')' : '' | ||
|  |                 item2.text = tetx; | ||
|  | 
 | ||
|  |                 break; | ||
|  |               case "0x1064": //人员已发言人列表 | ||
|  |                 let tetx2 = list[i - 1].perjob | ||
|  |                   ? "(" + list[i - 1].perjob + ")" | ||
|  |                   : ""; | ||
|  | 
 | ||
|  |                 const fontSize2 = | ||
|  |                   grid && parseInt(grid.fontSize) | ||
|  |                     ? parseInt(grid.fontSize) | ||
|  |                     : 16; | ||
|  | 
 | ||
|  |                 if (tetx2.length * fontSize2 > gridWidth) { | ||
|  |                   let num = Math.floor(gridWidth / fontSize2); | ||
|  |                   tetx2 = tetx2.substr(0, num); | ||
|  |                 } | ||
|  | 
 | ||
|  |                 item2.text = tetx2; | ||
|  |                 // item2.text = list[i - 1].perjob ? '(' + list[i - 1].perjob + ')' : '' | ||
|  |                 break; | ||
|  |               default: | ||
|  |                 break; | ||
|  |             } | ||
|  |           } | ||
|  |         } | ||
|  |       } | ||
|  |       canvas.add(group); // 将图形添加至画布 | ||
|  |     }; | ||
|  |     //添加网格列表end================================ | ||
|  | 
 | ||
|  |     //添加网格列表start================================ | ||
|  |     let handleSetGridList2 = (left, top, grid) => { | ||
|  |       console.log("网格列表", grid); | ||
|  |       let list = grid.text ? grid.text : []; | ||
|  |       if (!Array.isArray(list)) return; | ||
|  |       const gridWidth = grid ? (grid.width - 2) / grid.colCount : 100; | ||
|  | 
 | ||
|  |       const aaaaaa = canvas.getObjects(); | ||
|  |       aaaaaa.forEach((obj) => { | ||
|  |         if (obj.cvalue.id === grid.id) { | ||
|  |           for (let i = 1; i <= obj._objects.length; i++) { | ||
|  |             let bbb = 3 * i - 2; | ||
|  |             let item3 = obj._objects[bbb]; | ||
|  |             if (item3 && bbb <= obj._objects.length) { | ||
|  |               item3.set({ | ||
|  |                 text: "", | ||
|  |               }); | ||
|  |             } | ||
|  |           } | ||
|  |           if (Array.isArray(list) && list.length > 0) { | ||
|  |             for (let i = 1; i <= list.length; i++) { | ||
|  |               let item = obj._objects[3 * i - 2]; | ||
|  |               let item2 = obj._objects[3 * i - 1]; | ||
|  | 
 | ||
|  |               if (item) { | ||
|  |                 let pername = list[i - 1].pername; | ||
|  |                 const fontSize = | ||
|  |                   grid && parseInt(grid.fontSize) | ||
|  |                     ? parseInt(grid.fontSize) | ||
|  |                     : 16; | ||
|  |                 if (pername.length * fontSize > gridWidth) { | ||
|  |                   let num = Math.floor(gridWidth / fontSize); | ||
|  |                   pername = pername.substr(0, num); | ||
|  |                 } | ||
|  | 
 | ||
|  |                 item.set({ | ||
|  |                   text: pername, | ||
|  |                 }); | ||
|  | 
 | ||
|  |                 if (item.textAlign == "center") { | ||
|  |                   item2.set({ | ||
|  |                     left: item2.left - (item.text.length * item.fontSize) / 2, | ||
|  |                   }); | ||
|  |                 } else if (item.textAlign == "left") { | ||
|  |                   item2.set({ | ||
|  |                     left: item2.left - item.text.length * item.fontSize, | ||
|  |                   }); | ||
|  |                 } | ||
|  |                 switch (grid.bindingFieldID) { | ||
|  |                   case "0x1061": //人员报到人列表 | ||
|  |                     if (item.group?.showStyle == 0) { | ||
|  |                       if (item.group?.colorChangeStyle == 0) { | ||
|  |                         if (list[i - 1].checkinstatus == 1) { | ||
|  |                           item.set({ | ||
|  |                             fill: item.group.foregroundChange, | ||
|  |                           }); | ||
|  |                         } else { | ||
|  |                           item.set({ | ||
|  |                             fill: item.group.foreground, | ||
|  |                           }); | ||
|  |                         } | ||
|  |                       } else { | ||
|  |                         if (list[i - 1].checkinstatus == 1) { | ||
|  |                           item.set({ | ||
|  |                             fill: item.group.foreground, | ||
|  |                           }); | ||
|  |                         } else { | ||
|  |                           item.set({ | ||
|  |                             fill: item.group.foregroundChange, | ||
|  |                           }); | ||
|  |                         } | ||
|  |                       } | ||
|  |                     } | ||
|  |                     break; | ||
|  |                   case "0x1062": //人员发言人列表 | ||
|  |                     let ts = list[i - 1].allowSpeakTime; | ||
|  |                     let timer = setInterval(() => { | ||
|  |                       let dd = parseInt(ts / 60 / 60 / 24); //计算剩余小时 | ||
|  |                       dd = dd < 10 ? "0" + dd : dd; | ||
|  |                       let hh = parseInt((ts / 60 / 60) % 24); //计算剩余小时 | ||
|  |                       hh = hh < 10 ? "0" + hh : hh; | ||
|  |                       let mm = parseInt((ts / 60) % 60); | ||
|  |                       mm = mm < 10 ? "0" + mm : mm; | ||
|  |                       let ss = parseInt(ts % 60); | ||
|  |                       ss = ss < 10 ? "0" + ss : ss; | ||
|  |                       item.set({ | ||
|  |                         text: list[i - 1].pername, | ||
|  |                       }); | ||
|  |                       item2.set({ | ||
|  |                         text: "(" + mm + ":" + ss + ")", | ||
|  |                       }); | ||
|  |                       if (ts > 0) { | ||
|  |                         ts--; | ||
|  |                       } else { | ||
|  |                         clearInterval(timer); | ||
|  |                       } | ||
|  |                     }, 1000); | ||
|  |                     break; | ||
|  |                   case "0x1063": //人员申请发言人列表 | ||
|  |                     item2.set({ | ||
|  |                       text: list[i - 1].secondTip | ||
|  |                         ? "(" + list[i - 1].secondTip + ")" | ||
|  |                         : "", | ||
|  |                     }); | ||
|  |                     break; | ||
|  |                   case "0x1064": //人员已发言人列表 | ||
|  |                     item2.set({ | ||
|  |                       text: list[i - 1].perjob | ||
|  |                         ? "(" + list[i - 1].perjob + ")" | ||
|  |                         : "", | ||
|  |                     }); | ||
|  |                     break; | ||
|  |                   default: | ||
|  |                     break; | ||
|  |                 } | ||
|  |               } | ||
|  |             } | ||
|  |           } | ||
|  |           canvas.renderAll(); | ||
|  |         } | ||
|  |       }); | ||
|  |     }; | ||
|  |     //添加网格列表end================================ | ||
|  | 
 | ||
|  |     //添加横向滚动文本start=============================== | ||
|  |     let handleSetHxgdwb = (left, top, item) => { | ||
|  |       const textWidth = item ? item.width : 200; | ||
|  |       const textHeigth = item ? 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, | ||
|  |       }); | ||
|  |       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", | ||
|  |       }); | ||
|  |       let group = new fabric.Group([border, textBox], { | ||
|  |         width: textWidth, | ||
|  |         height: textHeigth, | ||
|  |         left: item ? item.left : left - canvas._offset.left, //设置canvas上的X坐标 | ||
|  |         top: item ? item.top : 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", | ||
|  |         cvalue: item, | ||
|  |         lockMovementX: true, //X轴是否可被移动(true为不可) | ||
|  |         lockMovementY: true, //Y轴是否可被移动(true为不可) | ||
|  |         hasControls: false, | ||
|  |         hasBorders: false, | ||
|  |       }); | ||
|  |       canvas.add(group); // 将图形添加至画布 | ||
|  |       if (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(); | ||
|  |       } | ||
|  |     }; | ||
|  |     //添加横向滚动文本end=============================== | ||
|  | 
 | ||
|  |     //添加照片列表start============================ | ||
|  |     let handleSetPhoto = (left, top, grid) => { | ||
|  |       console.log("添加照片列表start", 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) / grid.colCount : 100 | ||
|  |       // const gridHeigth = grid ? (grid.height) / grid.rowCount : 50 | ||
|  |       // for (let y = 1; y <= rowCount; y++) { //行 | ||
|  |       //   for (let x = 1; x <= colCount; x++) { //列 | ||
|  | 
 | ||
|  |       //     let gridTop = (y - 1) * gridHeigth | ||
|  | 
 | ||
|  |       //     let ImgElement = document.createElement('img') | ||
|  |       //     let img = new fabric.Image(ImgElement, { | ||
|  | 
 | ||
|  |       //       left: (x - 1) * gridWidth, | ||
|  |       //       top: (y - 1) * gridHeigth, | ||
|  | 
 | ||
|  |       //       originX: 'left', | ||
|  |       //       originY: 'top', | ||
|  |       //       width: gridWidth - parseInt(grid.lineWidth) * 6, | ||
|  |       //       height: gridHeigth - parseInt(grid.lineWidth) * 6, | ||
|  | 
 | ||
|  |       //     }) | ||
|  | 
 | ||
|  |       //     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, | ||
|  |       //     }); | ||
|  |       //     child.push(img) | ||
|  |       //     child.push(border) | ||
|  |       //   } | ||
|  |       // }; | ||
|  | 
 | ||
|  |       // let group = new fabric.Group(child, { | ||
|  |       //   width: grid ? grid.width : 100, | ||
|  |       //   height: grid ? grid.height : 250, | ||
|  |       //   left: grid ? grid.left : left - canvas._offset.left, //设置canvas上的X坐标 | ||
|  |       //   top: grid ? grid.top : top - canvas._offset.top, //设置canvas上的Y坐标 | ||
|  |       //   rowCount: grid ? grid.rowCount : 5, //行 | ||
|  |       //   colCount: grid ? grid.colCount : 1, //列 | ||
|  |       //   component_type: grid ? grid.component_type : '7', | ||
|  |       //   cvalue: grid, | ||
|  |       //   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, | ||
|  |       // }); | ||
|  | 
 | ||
|  |       // if (Array.isArray(text) && text.length > 0) { | ||
|  |       //   for (let i = 1; i <= text.length; i++) { | ||
|  |       //     let item = child[2 * i - 2] | ||
|  |       //     if (item) { | ||
|  | 
 | ||
|  |       //       console.log('将图形添加至画布', item) | ||
|  | 
 | ||
|  |       //       if (text[i - 1].perimage) { | ||
|  |       //         item.setSrc(`http://localhost:9999/${text[i - 1].perimage}`, () => { | ||
|  |       //           const scaleY = gridHeigth / item.height | ||
|  |       //           const scaleX = gridWidth / item.width | ||
|  |       //           item.set({ | ||
|  |       //             scaleX: scaleX, | ||
|  |       //             scaleY: scaleY, | ||
|  |       //           }) | ||
|  |       //         }) | ||
|  |       //       } | ||
|  |       //     } | ||
|  |       //   } | ||
|  |       // } | ||
|  | 
 | ||
|  |       // setTimeout(() => { | ||
|  |       //   canvas.add(group); // 将图形添加至画布 | ||
|  |       // }, 250); | ||
|  | 
 | ||
|  |       let child = []; | ||
|  | 
 | ||
|  |       const rowCount = grid ? grid.rowCount : 5; | ||
|  |       const colCount = grid ? grid.colCount : 1; | ||
|  |       const text = | ||
|  |         grid && grid.text && Array.isArray(grid.text) ? grid.text : []; | ||
|  |       const gridWidth = grid ? (grid.width - 2) / grid.colCount : 100; | ||
|  |       const gridHeigth = grid ? (grid.height - 2) / grid.rowCount : 50; | ||
|  | 
 | ||
|  |       const gridImgWidth = grid | ||
|  |         ? (grid.width - parseInt(grid.lineWidth) * grid.colCount) / | ||
|  |           grid.colCount | ||
|  |         : 100; | ||
|  |       const gridImgHeigth = grid | ||
|  |         ? (grid.height - parseInt(grid.lineWidth) * grid.rowCount) / | ||
|  |           grid.rowCount | ||
|  |         : 50; | ||
|  | 
 | ||
|  |       let index = 0; | ||
|  | 
 | ||
|  |       let loadImages = text.map((item) => { | ||
|  |         return new Promise((resolve) => { | ||
|  |           fabric.Image.fromURL( | ||
|  |             `http://localhost:9999/${item.perimage}`, | ||
|  |             (img) => { | ||
|  |               // 设置图片在Group内的相对位置 | ||
|  |               const scaleX = gridImgWidth / img.width; | ||
|  |               const scaleY = gridImgHeigth / img.height; | ||
|  |               img.set({ | ||
|  |                 originX: "left", | ||
|  |                 originY: "top", | ||
|  |                 scaleX: img._element === null ? 1 : scaleX, | ||
|  |                 scaleY: img._element === null ? 1 : scaleY, | ||
|  |                 top: parseInt(grid.lineWidth), | ||
|  |                 left: parseInt(grid.lineWidth), | ||
|  |               }); | ||
|  |               resolve(img); | ||
|  |             }, | ||
|  |             { crossOrigin: "anonymous" } | ||
|  |           ); | ||
|  |         }); | ||
|  |       }); | ||
|  | 
 | ||
|  |       // 所有图片加载完成后创建Group | ||
|  |       Promise.all(loadImages).then((images) => { | ||
|  |         child = images; | ||
|  |         for (let y = 1; y <= rowCount; y++) { | ||
|  |           //行 | ||
|  |           for (let x = 1; x <= colCount; x++) { | ||
|  |             //列 | ||
|  | 
 | ||
|  |             let gridTop = (y - 1) * gridHeigth + parseInt(grid.lineWidth); | ||
|  |             let gridLeft = (x - 1) * gridWidth + parseInt(grid.lineWidth); | ||
|  | 
 | ||
|  |             if (text.length > index && text[index].perimage) { | ||
|  |               child[index].set({ | ||
|  |                 top: gridTop, | ||
|  |                 left: gridLeft, | ||
|  |               }); | ||
|  | 
 | ||
|  |               index++; | ||
|  |             } | ||
|  | 
 | ||
|  |             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, | ||
|  |             }); | ||
|  | 
 | ||
|  |             child.push(border); | ||
|  |           } | ||
|  |         } | ||
|  | 
 | ||
|  |         const 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", | ||
|  |           cvalue: grid, | ||
|  |           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); | ||
|  |         canvas.requestRenderAll(); | ||
|  |       }); | ||
|  |     }; | ||
|  | 
 | ||
|  |     //添加照片列表end============================ | ||
|  | 
 | ||
|  |     //添加代表团列表start==================== | ||
|  |     let handleSetDeputation = (left, top, grid) => { | ||
|  |       const list = grid.text; | ||
|  |       if (!Array.isArray(list)) return; | ||
|  |       let child = []; //动画一 | ||
|  |       let child2 = []; //动画二 | ||
|  |       let childHead = []; //列头 | ||
|  |       let childWrapper = []; //最外层边框 | ||
|  |       let length = 6 - list.length; | ||
|  |       if (0 < length) { | ||
|  |         for (let i = 1; i <= length; i++) { | ||
|  |           list.push({ | ||
|  |             groupname: "", | ||
|  |             groupshouldnum: "", | ||
|  |             grouparrivenum: "", | ||
|  |             groupnoarrivenum: "", | ||
|  |           }); | ||
|  |         } | ||
|  |       } | ||
|  |       const propsObj = list[0] || { | ||
|  |         groupname: "", | ||
|  |         groupshouldnum: "", | ||
|  |         grouparrivenum: "", | ||
|  |         groupnoarrivenum: "", | ||
|  |       }; | ||
|  |       const rowCount = list.length; | ||
|  | 
 | ||
|  |       const colCount = Object.keys(propsObj).length; | ||
|  |       const gridWidth = grid && grid.width ? (grid.width - 2) / colCount : 100; | ||
|  |       const gridHeigth = grid && grid.height ? grid.height / 7 : 50; | ||
|  | 
 | ||
|  |       let headList = { | ||
|  |         groupname: "代表团", | ||
|  |         groupshouldnum: "应到", | ||
|  |         grouparrivenum: "实到", | ||
|  |         groupnoarrivenum: "未到", | ||
|  |       }; | ||
|  |       for (let x = 1; x <= colCount; x++) { | ||
|  |         //列 | ||
|  |         const currentHeadText = headList[Object.keys(headList)[x - 1]] + ""; | ||
|  |         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", | ||
|  |         }); | ||
|  |         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, | ||
|  |         }); | ||
|  |         childHead.push(headBorder); | ||
|  |         childHead.push(haedTextbox); | ||
|  |       } | ||
|  |       var 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", | ||
|  |       }); | ||
|  | 
 | ||
|  |       let keys = [ | ||
|  |         "groupname", | ||
|  |         "groupshouldnum", | ||
|  |         "grouparrivenum", | ||
|  |         "groupnoarrivenum", | ||
|  |       ]; | ||
|  | 
 | ||
|  |       for (let y = 1; y <= rowCount; y++) { | ||
|  |         // 行 | ||
|  |         const obj = list[y - 1]; | ||
|  | 
 | ||
|  |         for (let x = 1; x <= colCount; x++) { | ||
|  |           // 列 | ||
|  |           // const curentText = obj[Object.keys(obj)[x - 1]] + '' //当前单元格的值 | ||
|  |           let curentText = obj[keys[x - 1]] + ""; //当前单元格的值 | ||
|  | 
 | ||
|  |           const fontSize = grid && grid.fontSize ? parseInt(grid.fontSize) : 16; | ||
|  |           if (curentText.length * fontSize > gridWidth) { | ||
|  |             let num = Math.floor(gridWidth / fontSize); | ||
|  |             curentText = curentText.substr(0, num); | ||
|  |           } | ||
|  | 
 | ||
|  |           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", | ||
|  |           }); | ||
|  |           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, | ||
|  |           }); | ||
|  |           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) + (3 / 2) * gridHeigth, //设置canvas上的Y坐标 | ||
|  |         width: grid ? parseInt(grid.width) : 400, | ||
|  |         height: grid ? 6 * list.length : 250, | ||
|  |         rowCount: grid ? grid.rowCount : list.length, //行 | ||
|  |         colCount: grid ? grid.colCount : 4, //列 | ||
|  |       }); | ||
|  |       // 第二个动画 | ||
|  |       for (let y = 1; y <= rowCount; y++) { | ||
|  |         // 行 | ||
|  |         const obj = list[y - 1]; | ||
|  |         for (let x = 1; x <= colCount; x++) { | ||
|  |           // 列 | ||
|  |           // const curentText = obj[Object.keys(obj)[x - 1]] + '' //当前单元格的值 | ||
|  |           let curentText = obj[keys[x - 1]] + ""; //当前单元格的值 | ||
|  | 
 | ||
|  |           const fontSize = grid && grid.fontSize ? parseInt(grid.fontSize) : 16; | ||
|  |           if (curentText.length * fontSize > gridWidth) { | ||
|  |             let num = Math.floor(gridWidth / fontSize); | ||
|  |             curentText = curentText.substr(0, num); | ||
|  |           } | ||
|  | 
 | ||
|  |           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, | ||
|  |             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", | ||
|  |           }); | ||
|  |           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, | ||
|  |           }); | ||
|  |           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 : 250, | ||
|  |         rowCount: grid ? grid.rowCount : list.length, //行 | ||
|  |         colCount: grid ? grid.colCount : 4, //列 | ||
|  |       }); | ||
|  | 
 | ||
|  |       let linear = function (t, b, c, d) { | ||
|  |         return (c * t) / d + b; | ||
|  |       }; | ||
|  |       if (list.length > 6) { | ||
|  |         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: "", | ||
|  |       }); | ||
|  | 
 | ||
|  |       childWrapper.push(group); | ||
|  |       if (list.length > 6) { | ||
|  |         childWrapper.push(group2); | ||
|  |       } | ||
|  |       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", | ||
|  |         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", | ||
|  |         cvalue: grid, | ||
|  |         bindingFieldID: | ||
|  |           grid && grid.bindingFieldID ? grid.bindingFieldID : "0x1096", | ||
|  |       }); | ||
|  | 
 | ||
|  |       groupWrapper.clipTo = function (ctx) { | ||
|  |         ctx.beginPath(); | ||
|  |         ctx.rect(-this.width / 2, -this.height / 2, this.width, this.height); // 根据Group对象的左上角和宽高计算路径 | ||
|  |       }; | ||
|  | 
 | ||
|  |       canvas.add(groupWrapper); | ||
|  |     }; | ||
|  |     //添加代表团列表end==================== | ||
|  | 
 | ||
|  |     //添加子议题列表start======================== | ||
|  |     let handleSetZytlb = (left, top, grid, result) => { | ||
|  |       console.log("子议题列表", grid, result); | ||
|  |       let resultJson = { objects: [], ScreenData: {}, ScreenContent: {} }; | ||
|  |       resultJson.ScreenData = result.ScreenData; | ||
|  |       resultJson.ScreenContent = result.ScreenContent; | ||
|  |       // let list = grid.text | ||
|  |       let list = resultJson.ScreenData["0x106C"]; | ||
|  |       if (!Array.isArray(list)) return; | ||
|  |       let child = []; //动画一 | ||
|  |       let child2 = []; //动画二 | ||
|  |       let childHead = []; //列头 | ||
|  |       let childWrapper = []; //最外层边框 | ||
|  |       const num = grid?.topicNumOnePage ? grid.topicNumOnePage : 5; | ||
|  |       var newList = list.filter((val, index, arr) => { | ||
|  |         return index !== 0; | ||
|  |       }); | ||
|  |       var newList = list; | ||
|  |       let length = num - newList.length + 1; | ||
|  | 
 | ||
|  |       if (0 < length) { | ||
|  |         for (let i = 1; i <= length; i++) { | ||
|  |           newList.push({ | ||
|  |             To_name: "", | ||
|  |             key1Select: "", | ||
|  |             key2Select: "", | ||
|  |             key3Select: "", | ||
|  |             keyOtherSelect: "", | ||
|  |             keyResultSelect: "", | ||
|  |           }); | ||
|  |         } | ||
|  |       } | ||
|  | 
 | ||
|  |       const rowCount = newList.length; | ||
|  |       const propsObj = list[0]; | ||
|  |       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; | ||
|  | 
 | ||
|  |       let headList = list[0]; | ||
|  | 
 | ||
|  |       for (let x = 1; x <= colCount; x++) { | ||
|  |         //列 | ||
|  |         if (x == 1) { | ||
|  |           let currentHeadText = headList[Object.keys(headList)[x - 1]] + ""; | ||
|  | 
 | ||
|  |           const fontSize = grid && grid.fontSize ? parseInt(grid.fontSize) : 18; | ||
|  | 
 | ||
|  |           if (currentHeadText.length * fontSize > gridWidth1) { | ||
|  |             let num = Math.floor(gridWidth1 / fontSize); | ||
|  |             currentHeadText = currentHeadText.substr(0, num); | ||
|  |           } | ||
|  | 
 | ||
|  |           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", | ||
|  |             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: resultJson.ScreenContent ? resultJson.ScreenContent.Sf_bgcolor : "#f4f4f4", //背景颜色 | ||
|  | 
 | ||
|  |             fill: | ||
|  |               grid && grid.background && grid.background === "true" | ||
|  |                 ? resultJson.ScreenContent | ||
|  |                   ? resultJson.ScreenContent.Sf_bgcolor | ||
|  |                   : "#fff" | ||
|  |                 : grid && grid.background && grid.background.includes("#") | ||
|  |                 ? grid.background | ||
|  |                 : "#fff", | ||
|  | 
 | ||
|  |             _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 { | ||
|  |           let currentHeadText = headList[Object.keys(headList)[x - 1]] + ""; | ||
|  | 
 | ||
|  |           const fontSize = grid && grid.fontSize ? parseInt(grid.fontSize) : 18; | ||
|  | 
 | ||
|  |           if (currentHeadText.length * fontSize > gridWidth1) { | ||
|  |             let num = Math.floor(gridWidth1 / fontSize); | ||
|  |             currentHeadText = textContent.substr(0, num); | ||
|  |           } | ||
|  | 
 | ||
|  |           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", | ||
|  |             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: resultJson.ScreenContent ? resultJson.ScreenContent.Sf_bgcolor : "#f4f4f4", //背景颜色 | ||
|  | 
 | ||
|  |             fill: | ||
|  |               grid && grid.background && grid.background === "true" | ||
|  |                 ? resultJson.ScreenContent | ||
|  |                   ? resultJson.ScreenContent.Sf_bgcolor | ||
|  |                   : "#fff" | ||
|  |                 : grid && grid.background && grid.background.includes("#") | ||
|  |                 ? grid.background | ||
|  |                 : "#fff", | ||
|  | 
 | ||
|  |             _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: - parseInt(grid.fontSize)/2, | ||
|  |       //     top: 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", | ||
|  |       //     groupHeadColumnFontName:grid ? grid.fontFamily : 'SimSun', | ||
|  |       //     groupHeadColumnFontSize:grid ? grid.fontSize : 18, | ||
|  |       //     groupHeadColumnFontStyle:grid ? grid.fontStyle : 'normal', | ||
|  |       //     groupHeadColumnFontWeight: grid ? grid.fontWeight : 'normal' | ||
|  |       // }) | ||
|  | 
 | ||
|  |       for (let y = 1; y <= rowCount; y++) { | ||
|  |         // 行 | ||
|  |         const obj = newList[y - 1]; | ||
|  |         for (let x = 1; x <= colCount; x++) { | ||
|  |           // 列 | ||
|  |           if (x == 1) { | ||
|  |             let curentText = obj[Object.keys(obj)[x - 1]] + ""; //当前单元格的值 | ||
|  | 
 | ||
|  |             const fontSize = | ||
|  |               grid && grid.fontSize ? parseInt(grid.fontSize) : 18; | ||
|  | 
 | ||
|  |             if (curentText.length * fontSize > gridWidth1) { | ||
|  |               let num = Math.floor(gridWidth1 / fontSize); | ||
|  |               curentText = curentText.substr(0, num); | ||
|  |             } | ||
|  | 
 | ||
|  |             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", | ||
|  |             }); | ||
|  |             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 : '', | ||
|  | 
 | ||
|  |               fill: | ||
|  |                 grid && grid.background && grid.background === "true" | ||
|  |                   ? resultJson.ScreenContent | ||
|  |                     ? resultJson.ScreenContent.Sf_bgcolor | ||
|  |                     : "#fff" | ||
|  |                   : grid && grid.background && grid.background.includes("#") | ||
|  |                   ? grid.background | ||
|  |                   : "#fff", | ||
|  | 
 | ||
|  |               _type: "border", | ||
|  |               visible: | ||
|  |                 grid && | ||
|  |                 (grid.showGridLines === "false" || grid.showGridLines === false) | ||
|  |                   ? false | ||
|  |                   : true, | ||
|  |               strokeWidth: | ||
|  |                 grid && | ||
|  |                 (grid.showGridLines === "true" || grid.showGridLines === true) | ||
|  |                   ? parseInt(grid.lineWidth) | ||
|  |                   : 1, | ||
|  |             }); | ||
|  |             child.push(border); | ||
|  |             child.push(textbox); | ||
|  |           } else { | ||
|  |             let curentText = obj[Object.keys(obj)[x - 1]] + ""; //当前单元格的值 | ||
|  | 
 | ||
|  |             const fontSize = | ||
|  |               grid && grid.fontSize ? parseInt(grid.fontSize) : 18; | ||
|  | 
 | ||
|  |             if (curentText.length * fontSize > gridWidth1) { | ||
|  |               let num = Math.floor(gridWidth1 / fontSize); | ||
|  |               curentText = curentText.substr(0, num); | ||
|  |             } | ||
|  | 
 | ||
|  |             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", | ||
|  |             }); | ||
|  |             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 : '', | ||
|  | 
 | ||
|  |               fill: | ||
|  |                 grid && grid.background && grid.background === "true" | ||
|  |                   ? resultJson.ScreenContent | ||
|  |                     ? resultJson.ScreenContent.Sf_bgcolor | ||
|  |                     : "#fff" | ||
|  |                   : grid && grid.background && grid.background.includes("#") | ||
|  |                   ? grid.background | ||
|  |                   : "#fff", | ||
|  | 
 | ||
|  |               _type: "border", | ||
|  |               visible: | ||
|  |                 grid && | ||
|  |                 (grid.showGridLines === "false" || grid.showGridLines === false) | ||
|  |                   ? false | ||
|  |                   : true, | ||
|  |               strokeWidth: | ||
|  |                 grid && | ||
|  |                 (grid.showGridLines === "true" || grid.showGridLines === true) | ||
|  |                   ? parseInt(grid.lineWidth) | ||
|  |                   : 1, | ||
|  |             }); | ||
|  |             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坐标 | ||
|  |         // top: grid ? gridHeigth + 3*gridHeigth - 18 : top - parseInt(canvas._offset.top) + gridHeigth + 3*gridHeigth - 18, //设置canvas上的Y坐标 | ||
|  |         top: gridHeigth, //设置canvas上的Y坐标 | ||
|  |         width: grid ? parseInt(grid.width) : 600, | ||
|  |         height: grid ? grid.topicNumOnePage * list.length : 250, | ||
|  |       }); | ||
|  |       // 第二个动画 | ||
|  |       // for(let y = 1; y <= rowCount; y++) { // 行 | ||
|  |       //   const obj = newList[y-1] | ||
|  |       //   for(let x = 1; x <= colCount; x++) { // 列 | ||
|  |       //       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)) | ||
|  |       //       } | ||
|  |       //     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]] + '' //当前单元格的值 | ||
|  |       //       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: 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) { | ||
|  |         if (parseInt(grid.moveSpeed) !== 6000) { | ||
|  |           const handleSetDeputationAnimate1 = () => { | ||
|  |             group.animate( | ||
|  |               "top", | ||
|  |               -( | ||
|  |                 (list.length * gridHeigth * 3) / 2 - | ||
|  |                 (list.length * gridHeigth - group.height) | ||
|  |               ), | ||
|  |               { | ||
|  |                 from: -( | ||
|  |                   (list.length * gridHeigth) / 2 - | ||
|  |                   (list.length * gridHeigth - group.height) | ||
|  |                 ), | ||
|  |                 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) | ||
|  |               ), | ||
|  |               { | ||
|  |                 from: | ||
|  |                   (list.length * gridHeigth) / 2 + | ||
|  |                   (list.length * gridHeigth - group.height), | ||
|  |                 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: "", | ||
|  |       }); | ||
|  | 
 | ||
|  |       // 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.top+parseInt(canvas._offset.top)), | ||
|  |         top: grid ? grid.top : top - parseInt(canvas._offset.top), | ||
|  |         // top: grid ? grid.top : top - parseInt(canvas._offset.top), //设置canvas上的Y坐标 | ||
|  |         component_type: "9", | ||
|  |         cvalue: grid, | ||
|  |         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 | ||
|  |         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); | ||
|  |     }; | ||
|  |     //添加时间控件列表start==================== | ||
|  |     let timer = null; | ||
|  |     let handleSetSjkj = (left, top, grid) => { | ||
|  |       let date = grid | ||
|  |         ? moment(Date.now()).format(grid.formatPar) | ||
|  |         : moment(Date.now()).format("YYYY年MM月DD日"); | ||
|  |       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("YYYY年MM月DD日"), | ||
|  |         { | ||
|  |           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, | ||
|  |         } | ||
|  |       ); | ||
|  |       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", | ||
|  |       }); | ||
|  |       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 : "YYYY年MM月DD日", // 时间格式 | ||
|  |         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", | ||
|  |         cvalue: grid, | ||
|  |         lockMovementX: true, //X轴是否可被移动(true为不可) | ||
|  |         lockMovementY: true, //Y轴是否可被移动(true为不可) | ||
|  |         hasControls: false, | ||
|  |         hasBorders: false, | ||
|  |       }); | ||
|  |       canvas.add(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==================== | ||
|  |     let 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 ? val.width : 200; | ||
|  |       let lineBoxHeigth = val ? 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", | ||
|  |           }); | ||
|  |           let borderHRL = new fabric.Rect({ | ||
|  |             left: lineBoxWidth, | ||
|  |             top: 0, | ||
|  |             width: lineBoxWidth, | ||
|  |             height: lineBoxHeigth, | ||
|  |             fill: "", | ||
|  |             _type: "border", | ||
|  |           }); | ||
|  |           let groupHRL = new fabric.Group([borderHRL, horizontalRealLine], { | ||
|  |             component_type: "11", | ||
|  |             cvalue: val, | ||
|  |             width: lineBoxWidth, | ||
|  |             height: lineBoxHeigth, | ||
|  |             stroke: val ? val.stroke : "#e70808", //线颜色 | ||
|  |             strokeThickness: val ? val.strokeThickness : 2, //线宽 | ||
|  |             left: val ? val.left : left - canvas._offset.left, //设置canvas上的X坐标 | ||
|  |             top: val ? val.top : top - canvas._offset.top, //设置canvas上的Y坐标 | ||
|  |             lockMovementX: true, //X轴是否可被移动(true为不可) | ||
|  |             lockMovementY: true, //Y轴是否可被移动(true为不可) | ||
|  |             hasControls: false, | ||
|  |             hasBorders: false, | ||
|  |           }); | ||
|  |           canvas.add(groupHRL); // 将图形添加至画布 | ||
|  |           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", | ||
|  |           }); | ||
|  |           let borderHDL = new fabric.Rect({ | ||
|  |             left: lineBoxWidth, | ||
|  |             top: 0, | ||
|  |             width: lineBoxWidth, | ||
|  |             height: lineBoxHeigth, | ||
|  |             fill: "", | ||
|  |             _type: "border", | ||
|  |           }); | ||
|  |           let groupHDL = new fabric.Group([borderHDL, horizontalDottedLine], { | ||
|  |             component_type: "12", | ||
|  |             cvalue: val, | ||
|  |             width: lineBoxWidth, | ||
|  |             height: lineBoxHeigth, | ||
|  |             stroke: val ? val.stroke : "#000000", //线颜色 | ||
|  |             strokeThickness: val ? val.strokeThickness : 2, //线宽 | ||
|  |             left: val ? val.left : left - canvas._offset.left, //设置canvas上的X坐标 | ||
|  |             top: val ? val.top : top - canvas._offset.top, //设置canvas上的Y坐标 | ||
|  |             lockMovementX: true, //X轴是否可被移动(true为不可) | ||
|  |             lockMovementY: true, //Y轴是否可被移动(true为不可) | ||
|  |             hasControls: false, | ||
|  |             hasBorders: false, | ||
|  |           }); | ||
|  |           canvas.add(groupHDL); | ||
|  |           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", | ||
|  |           }); | ||
|  | 
 | ||
|  |           let borderVRL = new fabric.Rect({ | ||
|  |             left: lineBoxWidth, | ||
|  |             top: 0, | ||
|  |             width: lineBoxWidth, | ||
|  |             height: lineBoxHeigth, | ||
|  |             fill: "", | ||
|  |             _type: "border", | ||
|  |           }); | ||
|  |           let groupVRL = new fabric.Group([borderVRL, verticalRealLine], { | ||
|  |             component_type: "13", | ||
|  |             cvalue: val, | ||
|  |             width: lineBoxWidth, | ||
|  |             height: lineBoxHeigth, | ||
|  |             stroke: val ? val.stroke : "#000000", //线颜色 | ||
|  |             strokeThickness: val ? val.strokeThickness : 2, //线宽 | ||
|  |             left: val ? val.left : left - canvas._offset.left, //设置canvas上的X坐标 | ||
|  |             top: val ? val.top : top - canvas._offset.top, //设置canvas上的Y坐标 | ||
|  |             lockMovementX: true, //X轴是否可被移动(true为不可) | ||
|  |             lockMovementY: true, //Y轴是否可被移动(true为不可) | ||
|  |             hasControls: false, | ||
|  |             hasBorders: false, | ||
|  |           }); | ||
|  |           canvas.add(groupVRL); | ||
|  |           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", | ||
|  |           }); | ||
|  | 
 | ||
|  |           let borderVDL = new fabric.Rect({ | ||
|  |             left: lineBoxWidth, | ||
|  |             top: 0, | ||
|  |             width: lineBoxWidth, | ||
|  |             height: lineBoxHeigth, | ||
|  |             fill: "", | ||
|  |             _type: "border", | ||
|  |           }); | ||
|  | 
 | ||
|  |           let groupVDL = new fabric.Group([borderVDL, verticalDottedLine], { | ||
|  |             component_type: "14", | ||
|  |             cvalue: val, | ||
|  |             width: lineBoxWidth, | ||
|  |             height: lineBoxHeigth, | ||
|  |             stroke: val ? val.stroke : "#000000", //线颜色 | ||
|  |             strokeThickness: val ? val.strokeThickness : 2, //线宽 | ||
|  |             left: val ? val.left : left - canvas._offset.left, //设置canvas上的X坐标 | ||
|  |             top: val ? val.top : top - canvas._offset.top, //设置canvas上的Y坐标 | ||
|  |             lockMovementX: true, //X轴是否可被移动(true为不可) | ||
|  |             lockMovementY: true, //Y轴是否可被移动(true为不可) | ||
|  |             hasControls: false, | ||
|  |             hasBorders: false, | ||
|  |           }); | ||
|  |           canvas.add(groupVDL); | ||
|  |           break; | ||
|  |         default: | ||
|  |           break; | ||
|  |       } | ||
|  |     }; | ||
|  |     //添加线条控制end==================== | ||
|  | 
 | ||
|  |     //处理画布数据函数 | ||
|  |     let getValues = (item, val) => { | ||
|  |       if (val) { | ||
|  |         Object.keys(val).forEach((key) => { | ||
|  |           if (item.bindingFieldID == key) { | ||
|  |             item.text = val[key]; | ||
|  |           } | ||
|  |         }); | ||
|  |       } | ||
|  |     }; | ||
|  | 
 | ||
|  |     let canvas = new fabric.Canvas("canvas", { | ||
|  |       stopContextMenu: true, //禁止默认右击事件 | ||
|  |       renderOnAddRemove: false, | ||
|  |     }); | ||
|  | 
 | ||
|  |     function init() { | ||
|  |       let url = window.location.search; | ||
|  |       if (url.indexOf("?") != -1) { | ||
|  |         console.log(url.substring(url.lastIndexOf("=") + 1, url.length)); | ||
|  |         let userId = url.substring(url.lastIndexOf("=") + 1, url.length); | ||
|  |         fetch( | ||
|  |           "http://localhost:9999/vhwcapi/v1/web/api/service/congresscontrol/tacitScreen", | ||
|  |           { | ||
|  |             method: "POST", | ||
|  |             headers: { | ||
|  |               Authorization: localStorage.getItem("antd-token-authority") + "", | ||
|  |               // 'Apply-User': userInfo.id, | ||
|  |               // 'System-User': userInfo.systemUser, | ||
|  |             }, | ||
|  |             body: JSON.stringify({ | ||
|  |               id: userId, | ||
|  |             }), | ||
|  |             timeout: 50000, | ||
|  |           } | ||
|  |         ) | ||
|  |           .then((response) => { | ||
|  |             return response.json(); | ||
|  |           }) | ||
|  |           .then((data) => { | ||
|  |             console.log(data); | ||
|  |             screendata = data; | ||
|  |             updateCanvas(data); | ||
|  |           }) | ||
|  |           .catch((err) => { | ||
|  |             console.log(err); | ||
|  |           }); | ||
|  |         var websocketPath = | ||
|  |             "ws://localhost:9999/vhwcapi/v1/websocket/ccuwebsocket?userid=" + | ||
|  |             userId, | ||
|  |           websocket = new WebSocket(websocketPath); | ||
|  |         websocket.onopen = function (evt) {}; | ||
|  |         websocket.onmessage = function (evt) { | ||
|  |           console.log("消息", JSON.parse(evt.data)); | ||
|  |           let result = JSON.parse(evt.data).datarecord; | ||
|  |           if (screendata != result) { | ||
|  |             if ( | ||
|  |               result.ScreenFromContent && | ||
|  |               result.ScreenFromContent.length > 0 | ||
|  |             ) { | ||
|  |               updateCanvasobjects(result); | ||
|  |               screendata = result; | ||
|  |             } | ||
|  |           } | ||
|  |         }; | ||
|  |         websocket.onclose = function (evt) {}; | ||
|  |         websocket.onerror = function (evt) {}; | ||
|  |       } | ||
|  |     } | ||
|  | 
 | ||
|  |     function updateCanvasobjects(result) { | ||
|  |       if (screendata != result) { | ||
|  |         if (screendata?.ScreenContent?.Id == result.ScreenContent.Id) { | ||
|  |           let canvasobjects = canvas.getObjects(); | ||
|  |           if (canvasobjects.length > 0) { | ||
|  |             Object.keys(result.ScreenData).forEach((key) => { | ||
|  |               canvasobjects.map((item) => { | ||
|  |                 if ( | ||
|  |                   item.bindingFieldID == key || | ||
|  |                   item.cvalue.bindingFieldID == key | ||
|  |                 ) { | ||
|  |                   switch (item.component_type) { | ||
|  |                     case "1": //文本标签 | ||
|  |                       if (item.text != result.ScreenData[key]) { | ||
|  |                         // let textContent = result.ScreenData[key].toString(); | ||
|  |                         let beforpara = ""; | ||
|  |                         let afterpara = ""; | ||
|  |                         const parmitems = item.systemParContent.split("Ψ"); | ||
|  |                         if (parmitems.length > 1) { | ||
|  |                           beforpara = parmitems[0]; | ||
|  |                           afterpara = parmitems[1]; | ||
|  |                         } | ||
|  | 
 | ||
|  |                         let textContent = | ||
|  |                           beforpara + | ||
|  |                           result.ScreenData[key].toString() + | ||
|  |                           afterpara; | ||
|  |                         if (item.bindingFieldID == "0x1025") { | ||
|  |                           if ( | ||
|  |                             afterpara.includes("未按") && | ||
|  |                             result.ScreenData[key].toString() == "0" | ||
|  |                           ) { | ||
|  |                             textContent = ""; | ||
|  |                           } | ||
|  |                         } | ||
|  |                         if (item && item.textTrimming != "1") { | ||
|  |                           if (textContent.length * item.fontSize > textWidth) { | ||
|  |                             if (item.rowCount) { | ||
|  |                               let num = Math.floor(textWidth / item.fontSize); | ||
|  |                               textContent = | ||
|  |                                 textContent.substr(0, num - 1) + "..."; | ||
|  |                             } else { | ||
|  |                               let num = Math.floor(textWidth / item.fontSize); | ||
|  |                               textContent = textContent.substr(0, num); | ||
|  |                             } | ||
|  |                           } | ||
|  |                         } | ||
|  |                         item.set("text", result.ScreenData[key]); | ||
|  |                         item._objects[1].set("text", textContent); | ||
|  |                         // item.text=result.ScreenData[key]; | ||
|  |                         // item._objects[1].text=textContent; | ||
|  |                       } | ||
|  |                       break; | ||
|  |                     case "2": //图片照片 | ||
|  |                       canvas.remove(item); | ||
|  | 
 | ||
|  |                       let b = {}; | ||
|  |                       for ( | ||
|  |                         let i = 0; | ||
|  |                         i < result.ScreenFromContent.length; | ||
|  |                         i++ | ||
|  |                       ) { | ||
|  |                         if ( | ||
|  |                           result.ScreenFromContent[i].bindingFieldID === key | ||
|  |                         ) { | ||
|  |                           b = result.ScreenFromContent[i]; | ||
|  |                         } | ||
|  |                       } | ||
|  | 
 | ||
|  |                       let gridImg = Object.assign({}, b, { | ||
|  |                         imagePath: result.ScreenData[key], | ||
|  |                       }); | ||
|  | 
 | ||
|  |                       handleAddImage(gridImg.top, gridImg.left, gridImg); | ||
|  | 
 | ||
|  |                       break; | ||
|  |                     case "3": //视频控件 | ||
|  |                       break; | ||
|  |                     case "4": //议题内容 | ||
|  |                       console.log("议题内容"); | ||
|  |                       if (item.text != result.ScreenData[key].to_agendahtml) { | ||
|  |                         canvas.remove(item); | ||
|  |                         let c = {}; | ||
|  |                         for ( | ||
|  |                           let i = 0; | ||
|  |                           i < result.ScreenFromContent.length; | ||
|  |                           i++ | ||
|  |                         ) { | ||
|  |                           if ( | ||
|  |                             result.ScreenFromContent[i].bindingFieldID === key | ||
|  |                           ) { | ||
|  |                             c = result.ScreenFromContent[i]; | ||
|  |                           } | ||
|  |                         } | ||
|  | 
 | ||
|  |                         let itemYtnr = Object.assign({}, c, { | ||
|  |                           text: result.ScreenData[key], | ||
|  |                         }); | ||
|  | 
 | ||
|  |                         handleSetYtnr(itemYtnr.top, itemYtnr.left, itemYtnr); | ||
|  |                       } | ||
|  | 
 | ||
|  |                       break; | ||
|  |                     case "5": //网格列表 | ||
|  |                       // canvas.remove(item) | ||
|  |                       let a = {}; | ||
|  |                       for ( | ||
|  |                         let i = 0; | ||
|  |                         i < result.ScreenFromContent.length; | ||
|  |                         i++ | ||
|  |                       ) { | ||
|  |                         if ( | ||
|  |                           result.ScreenFromContent[i].bindingFieldID === key | ||
|  |                         ) { | ||
|  |                           a = result.ScreenFromContent[i]; | ||
|  | 
 | ||
|  |                           var aaaaa = result.ScreenData[key] | ||
|  |                             ? result.ScreenData[key] | ||
|  |                             : []; | ||
|  | 
 | ||
|  |                           var bbbb = []; | ||
|  |                           aaaaa && | ||
|  |                             aaaaa.map((item) => { | ||
|  |                               if (item.formid === a.id) { | ||
|  |                                 bbbb.push(item); | ||
|  |                               } | ||
|  |                             }); | ||
|  | 
 | ||
|  |                           let grid = Object.assign({}, a, { text: bbbb }); | ||
|  | 
 | ||
|  |                           console.log("111111111111111111111111111"); | ||
|  |                           handleSetGridList2(grid.top, grid.left, grid); | ||
|  |                         } | ||
|  |                       } | ||
|  | 
 | ||
|  |                       break; | ||
|  |                     case "6": //横向滚动文本 | ||
|  |                       break; | ||
|  |                     case "7": //照片列表 | ||
|  |                       console.log("删除图片", item); | ||
|  | 
 | ||
|  |                       canvas.remove(item); | ||
|  | 
 | ||
|  |                       let imageObj = {}; | ||
|  |                       for ( | ||
|  |                         let i = 0; | ||
|  |                         i < result.ScreenFromContent.length; | ||
|  |                         i++ | ||
|  |                       ) { | ||
|  |                         if ( | ||
|  |                           result.ScreenFromContent[i].bindingFieldID === key | ||
|  |                         ) { | ||
|  |                           imageObj = result.ScreenFromContent[i]; | ||
|  |                         } | ||
|  |                       } | ||
|  |                       let imageLIst = Object.assign({}, imageObj, { | ||
|  |                         text: result.ScreenData[key], | ||
|  |                       }); | ||
|  |                       handleSetPhoto(imageLIst.top, imageLIst.left, imageLIst); | ||
|  | 
 | ||
|  |                       break; | ||
|  |                     case "8": //代表团列表 | ||
|  |                       canvas.remove(item); | ||
|  |                       let d = {}; | ||
|  |                       for ( | ||
|  |                         let i = 0; | ||
|  |                         i < result.ScreenFromContent.length; | ||
|  |                         i++ | ||
|  |                       ) { | ||
|  |                         if ( | ||
|  |                           result.ScreenFromContent[i].bindingFieldID === key | ||
|  |                         ) { | ||
|  |                           d = result.ScreenFromContent[i]; | ||
|  |                         } | ||
|  |                       } | ||
|  | 
 | ||
|  |                       let itemDeputation = Object.assign({}, d, { | ||
|  |                         text: result.ScreenData[key], | ||
|  |                       }); | ||
|  | 
 | ||
|  |                       handleSetDeputation( | ||
|  |                         itemDeputation.top, | ||
|  |                         itemDeputation.left, | ||
|  |                         itemDeputation | ||
|  |                       ); | ||
|  |                       break; | ||
|  |                     case "9": //子义题列表 | ||
|  |                       canvas.remove(item); | ||
|  |                       let f = {}; | ||
|  |                       for ( | ||
|  |                         let i = 0; | ||
|  |                         i < result.ScreenFromContent.length; | ||
|  |                         i++ | ||
|  |                       ) { | ||
|  |                         if ( | ||
|  |                           result.ScreenFromContent[i].bindingFieldID === key | ||
|  |                         ) { | ||
|  |                           f = result.ScreenFromContent[i]; | ||
|  |                         } | ||
|  |                       } | ||
|  | 
 | ||
|  |                       let itemZytlb = Object.assign({}, f, { | ||
|  |                         text: result.ScreenData[key], | ||
|  |                       }); | ||
|  |                       handleSetZytlb( | ||
|  |                         itemZytlb.top, | ||
|  |                         itemZytlb.left, | ||
|  |                         itemZytlb, | ||
|  |                         result | ||
|  |                       ); | ||
|  |                       break; | ||
|  |                     case "10": //时间控件 | ||
|  |                       break; | ||
|  |                     case "11": | ||
|  |                     case "12": | ||
|  |                     case "13": //图形控件 | ||
|  |                       canvas.remove(item); | ||
|  |                       let e = {}; | ||
|  |                       for ( | ||
|  |                         let i = 0; | ||
|  |                         i < result.ScreenFromContent.length; | ||
|  |                         i++ | ||
|  |                       ) { | ||
|  |                         if ( | ||
|  |                           result.ScreenFromContent[i].bindingFieldID === key | ||
|  |                         ) { | ||
|  |                           e = result.ScreenFromContent[i]; | ||
|  |                         } | ||
|  |                       } | ||
|  | 
 | ||
|  |                       let itemImage = Object.assign({}, e, {}); | ||
|  | 
 | ||
|  |                       handleSetImage = | ||
|  |                         (itemImage.left, | ||
|  |                         itemImage.top, | ||
|  |                         itemImage.type, | ||
|  |                         itemImage); | ||
|  |                       break; | ||
|  |                   } | ||
|  |                 } | ||
|  |               }); | ||
|  |             }); | ||
|  |             canvas.requestRenderAll(); | ||
|  |           } else { | ||
|  |             Object.keys(result.ScreenData).forEach((key) => { | ||
|  |               if ("0x1030" === key) { | ||
|  |                 switch (result.ScreenFromContent[0].component_type) { | ||
|  |                   case "4": //议题内容 | ||
|  |                     console.log("议题内容"); | ||
|  | 
 | ||
|  |                     let c = {}; | ||
|  |                     for (let i = 0; i < result.ScreenFromContent.length; i++) { | ||
|  |                       if (result.ScreenFromContent[i].bindingFieldID === key) { | ||
|  |                         c = result.ScreenFromContent[i]; | ||
|  |                       } | ||
|  |                     } | ||
|  | 
 | ||
|  |                     let itemYtnr = Object.assign({}, c, { | ||
|  |                       text: result.ScreenData[key], | ||
|  |                     }); | ||
|  | 
 | ||
|  |                     handleSetYtnr(itemYtnr.top, itemYtnr.left, itemYtnr); | ||
|  | 
 | ||
|  |                     break; | ||
|  | 
 | ||
|  |                   case "9": //子义题列表 | ||
|  |                     let f = {}; | ||
|  |                     for (let i = 0; i < result.ScreenFromContent.length; i++) { | ||
|  |                       if (result.ScreenFromContent[i].bindingFieldID === key) { | ||
|  |                         f = result.ScreenFromContent[i]; | ||
|  |                       } | ||
|  |                     } | ||
|  | 
 | ||
|  |                     let itemZytlb = Object.assign({}, f, { | ||
|  |                       text: result.ScreenData[key], | ||
|  |                     }); | ||
|  |                     handleSetZytlb( | ||
|  |                       itemZytlb.top, | ||
|  |                       itemZytlb.left, | ||
|  |                       itemZytlb, | ||
|  |                       result | ||
|  |                     ); | ||
|  |                     break; | ||
|  |                 } | ||
|  |               } | ||
|  |             }); | ||
|  |           } | ||
|  |         } else { | ||
|  |           var container = document.getElementById("container"); | ||
|  |           var element = document.getElementById("element"); | ||
|  |           var yt_content = document.getElementById("yt_content"); | ||
|  | 
 | ||
|  |           if (container) { | ||
|  |             element.removeChild(container); | ||
|  |           } | ||
|  |           element.style.cssText = ""; | ||
|  |           yt_content.style.cssText = ""; | ||
|  | 
 | ||
|  |           updateCanvas(result); | ||
|  |         } | ||
|  |       } | ||
|  |     } | ||
|  | 
 | ||
|  |     var screendata; | ||
|  |     function updateCanvas(result) { | ||
|  |       console.log("画布更新", result); | ||
|  |       canvas.clear(); | ||
|  |       let resultJson = { objects: [], ScreenData: {}, ScreenContent: {} }; | ||
|  |       resultJson.objects = result.ScreenFromContent | ||
|  |         ? result.ScreenFromContent | ||
|  |         : []; | ||
|  |       resultJson.ScreenData = result.ScreenData; | ||
|  |       resultJson.ScreenContent = result.ScreenContent; | ||
|  |       canvas.setWidth( | ||
|  |         resultJson.ScreenContent | ||
|  |           ? resultJson.ScreenContent.Sf_width | ||
|  |           : window.innerWidth | ||
|  |       ); | ||
|  |       canvas.setHeight( | ||
|  |         resultJson.ScreenContent | ||
|  |           ? resultJson.ScreenContent.Sf_height | ||
|  |           : window.innerHeight | ||
|  |       ); | ||
|  |       canvas.set({ | ||
|  |         backgroundColor: resultJson.ScreenContent | ||
|  |           ? resultJson.ScreenContent.Sf_bgcolor | ||
|  |           : "", | ||
|  |       }); | ||
|  | 
 | ||
|  |       //加载JSON数据 | ||
|  |       resultJson.objects.map((item) => { | ||
|  |         switch (item.component_type) { | ||
|  |           case "1": //文本标签 | ||
|  |             getValues(item, resultJson.ScreenData); | ||
|  |             handleSetText(item.top, item.left, item); | ||
|  |             break; | ||
|  |           case "2": //图片照片 | ||
|  |             getValues(item, resultJson.ScreenData); | ||
|  |             handleAddImage(item.top, item.left, item); | ||
|  |             break; | ||
|  |           case "3": //视频控件 | ||
|  |             getValues(item, resultJson.ScreenData); | ||
|  |             handleAddVideo(item.top, item.left, item); | ||
|  |             break; | ||
|  |           case "4": //议题内容 | ||
|  |             getValues(item, resultJson.ScreenData); | ||
|  |             handleSetYtnr(item.top, item.left, item); | ||
|  |             break; | ||
|  |           case "5": | ||
|  |             getValues(item, resultJson.ScreenData); | ||
|  | 
 | ||
|  |             const aaaaa = result.ScreenData[item.bindingFieldID] | ||
|  |               ? result.ScreenData[item.bindingFieldID] | ||
|  |               : []; | ||
|  | 
 | ||
|  |             var bbbb = []; | ||
|  |             aaaaa && | ||
|  |               aaaaa.map((i) => { | ||
|  |                 if (i.formid === item.id) { | ||
|  |                   bbbb.push(i); | ||
|  |                 } | ||
|  |               }); | ||
|  | 
 | ||
|  |             let item2222 = Object.assign({}, item, { text: bbbb }); | ||
|  | 
 | ||
|  |             console.log("222222222222222222222", item2222); | ||
|  | 
 | ||
|  |             handleSetGridList(item.top, item.left, item2222); | ||
|  |             break; | ||
|  |           case "6": //横向滚动文本 | ||
|  |             getValues(item, resultJson.ScreenData); | ||
|  |             handleSetHxgdwb(item.top, item.left, item); | ||
|  |             break; | ||
|  |           case "7": //照片列表 | ||
|  |             getValues(item, resultJson.ScreenData); | ||
|  |             handleSetPhoto(item.top, item.left, item); | ||
|  |             break; | ||
|  |           case "8": //代表团列表 | ||
|  |             getValues(item, resultJson.ScreenData); | ||
|  |             handleSetDeputation(item.top, item.left, item); | ||
|  |             break; | ||
|  |           case "9": //子义题列表 | ||
|  |             getValues(item, resultJson.ScreenData); | ||
|  |             handleSetZytlb(item.top, item.left, item, result); | ||
|  |             break; | ||
|  |           case "10": //时间控件 | ||
|  |             getValues(item, resultJson.ScreenData); | ||
|  |             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.requestRenderAll(); | ||
|  |     } | ||
|  | 
 | ||
|  |     //  function onOpen(evt) { | ||
|  |     //   doSend("ping"); | ||
|  |     //  } | ||
|  | 
 | ||
|  |     //  function onClose(evt) { | ||
|  |     // console.log(evt) | ||
|  |     //  } | ||
|  | 
 | ||
|  |     //  function onMessage(evt) { | ||
|  |     //   console.log(evt) | ||
|  |     //   websocket.close(); | ||
|  |     //  } | ||
|  | 
 | ||
|  |     //  function onError(evt) { | ||
|  |     //   console.log(evt) | ||
|  |     //  } | ||
|  | 
 | ||
|  |     //  function doSend(message) { | ||
|  |     //   console.log(evt) | ||
|  |     //   websocket.send(message); | ||
|  |     //  } | ||
|  | 
 | ||
|  |     window.addEventListener("load", init, false); | ||
|  |     //添加线条控制end==================== | ||
|  |     window.addEventListener("beforeunload", function (event) { | ||
|  |       event.preventDefault(); // 阻止默认的关闭提示框 | ||
|  |       // clearInterval(intervalId) | ||
|  |       clearInterval(timer); | ||
|  |     }); | ||
|  |   </script> | ||
|  | </html> |