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