let baseUrl = 'http://192.168.51.174:5199';
let wsUrl = '';
let dwgPath = '';
let docId = '';
let javaUrl = '';
let curHandleId = '';
// 用户自定义:成员列表,用于评论图纸时@人员,其中memberId和memberName字段名称不能修改
let memberList = {
code: 0,
data: {
rows: [
{
memberId: '12',
memberName: '张三',
email: '',
phone: '',
role: '',
avatarUrl: '/assets/ZwCloud2DSDK/text.png',
},
{
memberId: '32',
memberName: '李四',
email: '',
phone: '',
role: '',
avatarUrl: '/assets/ZwCloud2DSDK/image1.png',
},
{
memberId: '34',
memberName: '王五',
email: '',
phone: '',
role: '',
avatarUrl: '/assets/ZwCloud2DSDK/image2.png',
},
],
},
};
// 用户自定义:当前用户,指定当前评论图纸的用户,其中userId和userName字段名称不能修改
let user = {
userId: '12',
userName: '张三',
email: '',
phone: '',
role: '',
};
let req = null;
let sourcePath = '';
let compareFilePath = '';
const enableSign = true;
const signBlockOper = {
GetBlockData: 0,
UploadSign: 1,
UploadCert: 2,
UploadDwg: 3,
ConFirmEdit: 4,
};
const refType = {
plotMsg: 1,
signaturePic: 2,
};
class Request {
constructor() {}
get(url, params, resType, type) {
return new Promise((res, rej) => {
let paramsArr = [];
for (let k in params) {
paramsArr.push(
encodeURIComponent(k) + '=' + encodeURIComponent(params[k]),
);
}
url = url + '?' + paramsArr.join('&');
let ajax = new XMLHttpRequest();
let checkUrl = type === 'java' ? javaUrl + url : baseUrl + url;
ajax.open('GET', checkUrl);
resType && (ajax.responseType = resType);
ajax.send();
ajax.onload = function () {
if (resType) res(ajax.response);
else {
let data = JSON.parse(ajax.response);
if (data.code === 0) {
res(data.data);
} else {
rej(data.msg);
}
}
};
ajax.onreadystatechange = function () {
if (ajax.readyState === 4 && ajax.status !== 200) {
rej(ajax.status);
}
};
ajax.onerror = function (error) {
rej(error);
};
});
}
post(url, params, resType, type) {
return new Promise((res, rej) => {
let ajax = new XMLHttpRequest();
let checkUrl = type === 'java' ? javaUrl + url : baseUrl + url;
ajax.open('POST', checkUrl);
resType && (ajax.responseType = resType);
if (!(params instanceof FormData)) {
ajax.setRequestHeader('content-type', 'application/json');
}
ajax.send(params);
ajax.onreadystatechange = function () {
if (ajax.readyState === 4) {
if (ajax.status === 200) {
res(ajax.response);
} else {
rej(ajax.status);
}
}
};
ajax.onerror = function (error) {
rej(error);
};
});
}
arrayBufferToBase64(buffer) {
let binary = '';
let bytes = new Uint8Array(buffer);
let len = bytes.byteLength;
for (let i = 0; i < len; i++) {
binary += String.fromCharCode(bytes[i]);
}
return btoa(binary);
}
fontDownload(fontName) {
return this.get('/sdk/font/download', { fontName }, 'blob');
}
transferDoc(dwgPath) {
if (enableSign) {
return this.transferDocV2();
}
return this.get('/sdk/transfer', { projectId: 0, dwgPath: dwgPath });
}
transferDocV2() {
// {
// "dwgPath": "sdk-014_rotate.dwg",
// "useCache": false,
// "showBlock": true,
// "search": {
// "blockPre": "",
// "attrSignSuf": "_机打信息",
// "attrImageSuf": "_签章图",
// "officialSignSuf": "_公章"
// }
// }
let useCache = getParams('useCache');
if (useCache === 'false') {
useCache = false;
} else {
useCache = true;
}
return this.post(
'/sdk/v2/transfer',
JSON.stringify({
dwgPath: dwgPath,
useCache: useCache,
showBlock: true,
search: {
blockPre: getParams('blockPre') || '标准图框_',
attrSignSuf: getParams('attrSignSuf') || '_机打信息',
// attrImageSuf: "_签章图",
officialSignSuf: getParams('officialSignSuf') || '_签章图',
dwgSignSuf: '_DWG签名',
},
}),
).then((res) => {
let { code, data } = JSON.parse(res);
if (code === 0) return data;
});
}
getDisplayData(handleId = 34) {
//电子签章中下载lmf不使用缓存, 正常开图下载lmf优先使用缓存
return this.get(
'/sdk/layout/lmf',
{ handleId, dwgPath: dwgPath, useCache: !enableSign },
'arraybuffer',
);
}
getXrefData(handleId, xrefIds) {
let params = { handleId: handleId, xrefIds: xrefIds, dwgPath: dwgPath };
params = JSON.stringify(params);
return this.post('/sdk/xref', params, 'arraybuffer');
}
getXrefRelation(dwgPath) {
return this.get('/sdk/xref/list', { dwgPath: dwgPath });
}
getXrefThumb(filePath) {
return this.get(
'/sdk/xref/thumb',
{ filePath: filePath },
'arraybuffer',
).then((res) => {
let url = this.arrayBufferToBase64(res);
return 'data:image/jpeg;base64,' + url;
});
}
getPlotData(params) {
let data = JSON.stringify(params);
return this.post('/sdk/print', data, 'arraybuffer');
}
getSignPlotData(params) {
let data = JSON.stringify(params);
return this.post('/sdk/api/print', data, 'arraybuffer');
}
getSignBatchPlotData(params) {
let data = JSON.stringify(params);
return this.post('/sdk/api/batchPrint', data, 'arraybuffer');
}
getImageSrc(filePath) {
return this.get(
'/sdk/image/download',
{ filePath: filePath },
'arraybuffer',
).then((res) => {
let url = this.arrayBufferToBase64(res);
return 'data:image/jpeg;base64,' + url;
});
}
getImageData(filePath) {
return this.get('/sdk/image/download', { filePath: filePath }, 'blob');
}
getImageList() {
return this.get('/sdk/image/list');
}
getPermissionList() {
return this.get('/sdk/getStatus');
}
getRegenData(params) {
Object.assign(params, { dwgPath: dwgPath });
let data = JSON.stringify(params);
return this.post('/sdk/regen', data, 'arraybuffer');
}
getBlockData(params) {
return this.get('/sdk/api/sign/properties', params);
}
uploadSign(params) {
let url = '/sdk/api/sign/upload';
let { signId, file, uploadId } = params;
let formData = new FormData();
formData.append('dwgPath', dwgPath);
formData.append('signId', signId);
formData.append('file', file);
formData.append('uploadId', uploadId);
return this.post(url, formData).then((res) => {
let response = JSON.parse(res);
let { code, data } = response;
if (code === 0) {
return { fileId: data.fileId, signId };
} else {
return { fileId: '', signId };
}
});
}
downloadSign(signFileId) {
let url = '/sdk/api/sign/download/' + signFileId;
return this.get(url, {}, 'arraybuffer').then((res) => {
if (res) {
let url = this.arrayBufferToBase64(res);
return 'data:image/jpeg;base64,' + url;
}
return '';
});
}
saveBlockData(data) {
let params = { dwgPath, data };
params = JSON.stringify(params);
return this.post('/sdk/api/sign/save', params)
.then((res) => {
let response = JSON.parse(res);
let { code } = response;
if (code === 0) {
return true;
} else {
return false;
}
})
.catch(() => false);
}
deleteSign(signId) {
return this.post('/sdk/api/sign/delete?signId=' + signId);
}
getSignHistoryData(params) {
return this.get('/sdk/api/sign/signRecords', params).catch(() => []);
}
getDwgFile() {
return this.get(
'/sdk/doc/download',
{ dwgPath: dwgPath },
'arrayBuffer',
'java',
);
}
uploadFile(file) {
let formData = new FormData();
formData.append('file', file);
return this.post('/sdk/doc/upload', formData, 'json', 'java').catch(() => {
alert('上传接口 /sdk/doc/upload 调用失败 请联系管理员');
});
}
getDwgFile() {
return this.get(
'/sdk/doc/download',
{ dwgPath: dwgPath },
'arraybuffer',
'java',
);
}
getTextStyleFont(path) {
let params = { path: path };
params = JSON.stringify(params);
return this.post('/sdk/font/fetchName', params, 'json', 'java');
}
getAbout() {
return this.get('/about');
}
addComment(params) {
return this.post(
'/sdk/doc/comment/add',
JSON.stringify({
docId,
handleId: curHandleId,
...params,
}),
).then((res) => {
let { code, data } = JSON.parse(res);
if (code === 0) return data;
});
}
editComment(params) {
return this.post(
'/sdk/doc/comment/edit',
JSON.stringify({
docId,
handleId: curHandleId,
...params,
}),
).then((res) => {
let { code, data } = JSON.parse(res);
if (code === 0) return data;
});
}
deleteComment(params) {
return this.post(
'/sdk/doc/comment/delete?id=' + params.id,
JSON.stringify({}),
).then((res) => {
let { code, data } = JSON.parse(res);
if (code === 0) return data;
});
}
replyComment(params) {
return this.post(
'/sdk/doc/comment/reply',
JSON.stringify({
docId,
handleId: curHandleId,
...params,
}),
).then((res) => {
let { code, data } = JSON.parse(res);
if (code === 0) return data;
});
}
getComment(data) {
return this.get('/sdk/doc/comment/listPage', {
docId,
handleId: curHandleId,
pageNum: data.pageNum,
pageSize: data.pageSize,
});
}
/**
* 图纸对比, 调用转换服务
* @returns fcmpInfo
*/
transferFcmp(inputParams) {
let params = {
sourcePath: inputParams.sourcePath,
compareFilePath: inputParams.compareFilePath,
data: inputParams.hasOwnProperty('data')
? inputParams.data
: {
fcmpRcShape: 0,
fcmpRcMargin: 5,
fcmpHatch: 1,
fcmpText: 1,
},
viewport: inputParams.hasOwnProperty('viewport')
? inputParams.viewport
: '',
handleId: inputParams.hasOwnProperty('handleId')
? inputParams.handleId
: '',
};
!params.viewport && delete params.viewport;
!params.handleId && delete params.handleId;
let isTimeout = false;
let timerTimeout = setTimeout(() => {
isTimeout = true;
alert('等待时间已经超过2分钟, 是否退出');
ZwCloud2D.ZwEditor.ZwSetLoadingState(true);
ZwCloud2D.ZwDataProcessor.ZwLoad();
}, 120000);
return this.post('/sdk/fcmp', JSON.stringify(params), 'json').then(
(res) => {
clearTimeout(timerTimeout);
if (res.code !== 0) {
alert(res.msg);
resizeCheck();
return Promise.reject(res.code);
}
if (isTimeout) {
return Promise.reject('transferFcmp request timeout!');
}
let data = res.data;
docId = data.docId || new Date().getTime().toString();
let layouts = [];
(data.layouts || []).forEach((layout) => {
let res = {
handleId: layout.handleId,
isDefault: layout.isDefault === 1 ? 'YES' : 'NO',
name: layout.layoutName,
tabOrder: layout.order,
};
layouts.push(res);
if (layout.isDefault === 1) {
curHandleId = layout.handleId;
}
});
let fcmpInfo = {
baseFileName: data.baseFileName,
baseFileInfo: [
{ lable: '名称', value: sourcePath },
{ lable: '所有者', value: '未知' },
{ lable: '创建时间', value: '未知' },
{ lable: '文件路径', value: '未知' },
],
compareFileName: data.compareFileName,
compareFileInfo: [
{ lable: '名称', value: compareFilePath },
{ lable: '所有者', value: '未知' },
{ lable: '创建时间', value: '未知' },
{ lable: '文件路径', value: '未知' },
],
fcmpDiffExt: data.fcmpDiffExt,
fcmpErrorFlag: data.fcmpErrorFlag,
fonts: data.fontList || [],
layouts: layouts,
fcmpRcShape: params.data.fcmpRcShape,
fcmpRcMargin: params.data.fcmpRcMargin,
fcmpHatch: params.data.fcmpHatch,
fcmpText: params.data.fcmpText,
};
return fcmpInfo;
},
);
}
/**
* 下载图纸转换的显示数据
* @param {string} compareFilePath
* @param {string} sourcePath
* @returns
*/
getFcmpDisplayData(compareFilePath, sourcePath) {
return this.get(
'/sdk/layout/lmf',
{
handleId: compareFilePath.replace(/\.dwg/gi, '_fcmp'),
dwgPath: sourcePath,
useCache: true,
},
'arraybuffer',
);
}
/**
* 获取文件列表
* @returns
*/
getFileList() {
return this.get('/sdk/dwg/list').catch(() => {
alert('获取文件列表接口 /sdk/dwg/list 调用失败 请联系管理员');
});
}
}
req = new Request();
// 生成Guid
function randomFour() {
return (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1);
}
function guid() {
return (
randomFour() +
randomFour() +
'-' +
randomFour() +
'-' +
randomFour() +
'-' +
randomFour() +
'-' +
randomFour() +
randomFour() +
randomFour()
);
}
function getCommentFunc(data) {
// 每次切换布局需要重新获取评论数据
let commentList = {
code: 0,
data: {
rows: [],
},
};
req
.getComment(data)
.then((res) => {
if (res) {
let data = JSON.parse(JSON.stringify(res));
commentList.data.total = data.total;
commentList.data.rows = data.rows;
}
if (data.initial) {
ZwCloud2D.ZwDataManager.ZwSetCommentData({
commentList: commentList,
memberList,
user,
});
} else {
ZwCloud2D.ZwDataManager.ZwSetCommentData({
commentList: commentList,
pageNum: data.pageNum,
});
}
})
.catch((error) => {
if (data.initial) {
ZwCloud2D.ZwDataManager.ZwSetCommentData({
commentList: commentList,
memberList,
user,
});
} else {
ZwCloud2D.ZwDataManager.ZwSetCommentData({
commentList: commentList,
pageNum: data.pageNum,
});
}
console.error(error);
});
}
function saveCommentFunc(data) {
let params = { pageNum: 1, pageSize: data.data.pageSize };
if (data.data) {
// 根据不同场景组织数据并保存
switch (data.type) {
case 'delete':
req
.deleteComment({
id: data.data.id,
})
.then(() => {
this.getCommentFunc(params);
});
break;
case 'edit':
// 编辑评论时需要更新数据
req
.editComment({
id: data.data.id,
content: data.data.content,
realContent: data.data.realContent,
mark: data.data.mark,
withMark: data.data.withMark,
withAt: data.data.withMark,
createBy: user.userId,
creator: user.userName,
})
.then(() => {
this.getCommentFunc(params);
});
break;
default:
{
//新增评论、回复评论的场景
data.data.id = guid();
data.data.createTime = new Date().getTime();
data.data.createBy = user.userId;
data.data.creator = user.userName;
// 有parentId表示是回复评论
if (data.data.parentId) {
req
.replyComment({
parentId: data.data.parentId,
content: data.data.content,
realContent: data.data.realContent,
mark: data.data.mark,
withMark: data.data.withMark,
withAt: data.data.withMark,
createBy: user.userId,
creator: user.userName,
})
.then(() => {
this.getCommentFunc(params);
});
} else {
// 新增评论
req
.addComment({
content: data.data.content,
realContent: data.data.realContent,
mark: data.data.mark,
withMark: data.data.withMark,
withAt: data.data.withMark,
createBy: user.userId,
creator: user.userName,
})
.then(() => {
this.getCommentFunc(params);
});
}
}
break;
}
}
}
ZwCloud2D.ZwDataProcessor.ZwSetConnectUrl = (url1, url2, url3) => {
baseUrl = url1;
wsUrl = url2;
javaUrl = url3;
};
ZwCloud2D.ZwDataProcessor.ZwSetLoadDwg = (path) => {
dwgPath = path;
};
ZwCloud2D.ZwDataProcessor.uploadDwg = (file) => {
let req = new Request();
return req.uploadFile(file);
// .then((res) => {
// dwgPath = res.data.path;
// ZwCloud2D.ZwDataProcessor.ZwLoad();
// let main = document.getElementById('main');
// main.style.display = 'none';
// let mainMobile = document.getElementById('main-mobile');
// mainMobile.style.display = 'none';
// let showDwgBtn = document.getElementById('showDwgBtn');
// let showFontBtn = document.getElementById('showFontBtn');
// showDwgBtn.style.display = 'unset';
// showFontBtn.style.display = 'unset';
// });
};
ZwCloud2D.ZwDataProcessor.uploadFont = (file) => {
let req = new Request();
let pArray = new Array();
for (let i = 0; i < file.length; i++) {
pArray.push(
new Promise((resolve, reject) => {
req.uploadFile(file[i]).then((res) => {
if (res.code === 200) {
resolve();
} else {
reject();
}
});
}),
);
}
Promise.all(pArray)
.then(() => {
alert('上传成功');
})
.catch(() => {
alert('上传失败');
});
};
ZwCloud2D.ZwDataProcessor.selectBaseDwgAndCompareDwg = () => {
return new Promise((res, rej) => {
req.getFileList().then((array) => {
new Modal({
title: '选择两个进行对比的图纸',
fcmpInfoContent: array,
onOk: () => {
res();
},
});
});
});
};
ZwCloud2D.ZwDataProcessor.ZwProcessAboutVersionData = () => {
return req.getAbout().then((res) => {
let aboutVersion = '';
aboutVersion +=
'Front side VERNUM: ' + ZwCloud2D.version.commitId + '
';
aboutVersion +=
'Front side COMMIT TIME: ' + ZwCloud2D.version.commitTime + '
';
aboutVersion +=
'Middleware VERNUM: ' + (res['git.commit.id'] || '') + '
';
aboutVersion +=
'Middleware COMMIT TIME: ' + (res['git.commit.time'] || '') + '
';
aboutVersion +=
'Core service VERNUM: ' + (res['cloud2d.server'] || '') + '
';
ZwCloud2D.ZwSetting.ZwSetAbout({ version: aboutVersion });
});
};
ZwCloud2D.ZwDataProcessor.ZwProcessPermissionData = () => {
return req
.getPermissionList()
.then((data) => {
//启用电子签章功能
if (enableSign) {
ZwCloud2D.ZwEditor.ZwSetUserOptions({
panel: { signPanel: true },
commandButton: { Sign: true, Fcmp: true },
command: { FCMP: true },
});
} else {
//启用文件对比功能
ZwCloud2D.ZwEditor.ZwSetUserOptions({
commandButton: { Fcmp: true },
command: { FCMP: true },
});
}
ZwCloud2D.ZwDataManager.ZwSetSdkPermission(data);
})
.catch((error) => {
console.error(error);
});
};
ZwCloud2D.ZwDataProcessor.ZwProcessFontData = (missingFonts) => {
let pArr = [];
let fontArr = [];
missingFonts.forEach((fontName) => {
let arr = fontName.split('.');
let type = (arr[arr.length - 1] || '').toUpperCase();
pArr.push(
req.fontDownload(fontName).then(async (data) => {
if (data.type === 'application/octet-stream') {
let arraybuffer = await data.arrayBuffer();
fontArr.push({
name: fontName,
type: type,
data: arraybuffer,
});
}
}),
);
});
return Promise.all(pArr).then(() => {
return ZwCloud2D.ZwDataManager.ZwSetFontDataList(fontArr);
});
};
ZwCloud2D.ZwDataProcessor.ZwProcessXrefData = (dwgPath, docName) => {
return req
.getXrefRelation(dwgPath)
.then((xrefRelations) => {
let xrefPromises = [];
let srcMap = new Map();
xrefRelations.forEach((xrefRelation) => {
if (xrefRelation.foundPath) {
xrefPromises.push(
new Promise((res, rej) => {
req.getXrefThumb(xrefRelation.foundPath).then((xrefThumb) => {
srcMap.set(xrefRelation.foundPath, xrefThumb);
res(true);
});
}),
);
}
});
return Promise.all(xrefPromises)
.then(() => {
let params = {
docName: docName,
xrefRelations: xrefRelations,
srcMap: srcMap,
};
ZwCloud2D.ZwDataManager.ZwSetXrefList(params);
})
.catch(() => {
let params = {
docName: docName,
xrefRelations: xrefRelations,
srcMap: srcMap,
};
ZwCloud2D.ZwDataManager.ZwSetXrefList(params);
});
})
.catch((error) => {
console.error(error);
});
};
//ZwCloud SDK 回调
ZwCloud2D.ZwMessageCallback.ZwEvtChangeLayout = (layout) => {
req
.getDisplayData(layout.handleId)
.then((data) => {
let timestamp = new Date().getTime();
ZwCloud2D.ZwDataManager.ZwSetDwgData(layout.handleId, data, timestamp);
})
.catch((error) => {
console.error(error);
});
};
ZwCloud2D.ZwMessageCallback.ZwEvtLoadXrefData = (data) => {
req
.getXrefData(data.handleId, data.xrefIds)
.then((res) => {
ZwCloud2D.ZwDataManager.ZwSetXrefData(res);
})
.catch(() => {
ZwCloud2D.ZwDataManager.ZwSetXrefData();
});
};
ZwCloud2D.ZwMessageCallback.ZwEvtDrawEnd = () => {};
ZwCloud2D.ZwMessageCallback.ZwEvtGetRegenData = async (data) => {
req
.getRegenData(data)
.then((res) => {
ZwCloud2D.ZwDataManager.ZwSetRegenData(res);
})
.catch(() => {
ZwCloud2D.ZwDataManager.ZwSetRegenData(null);
});
};
ZwCloud2D.ZwMessageCallback.ZwEvtLoadImageData = (data) => {
let pArr = new Array();
let imageMap = new Map();
data.forEach((imageUrl) => {
pArr.push(
new Promise((res, rej) => {
req
.getImageData(imageUrl)
.then(async (result) => {
if (result.type === 'application/octet-stream') {
let arraybuffer = await result.arrayBuffer();
imageMap.set(imageUrl, arraybuffer);
}
res(true);
})
.catch((err) => {
res(true);
});
}),
);
});
Promise.all(pArr)
.then(() => {
ZwCloud2D.ZwDataManager.ZwSetImageData(imageMap);
})
.catch((error) => {
console.error(error);
});
};
ZwCloud2D.ZwMessageCallback.ZwEvtLoadImageList = () => {
req.getImageList().then((res) => {
res.forEach((image) => {
let path = image.completePath + image.name;
image.completePath = path;
req.getImageSrc(path).then((imageData) => {
let item = {
name: image.name,
data: imageData,
completePath: image.completePath,
};
ZwCloud2D.ZwDataManager.ZwSetImageList(item);
});
});
});
};
ZwCloud2D.ZwMessageCallback.ZwEvtPlotDwg = (data) => {
let params = Object.assign(data.params, { dwgPath: dwgPath });
if (enableSign) {
params.docId = 0;
let { isZwPlot } = data.params;
if (isZwPlot) {
req
.getSignBatchPlotData(params)
.then((res) => {
ZwCloud2D.ZwDataManager.ZwSetPlotData(data, res);
ZwCloud2D.ZwEditor.ZwSetLoadingState(false);
})
.catch((error) => {
console.error(error);
});
} else {
req
.getSignPlotData(params)
.then((res) => {
ZwCloud2D.ZwDataManager.ZwSetPlotData(data, res);
ZwCloud2D.ZwEditor.ZwSetLoadingState(false);
})
.catch((error) => {
console.error(error);
});
}
} else {
req
.getPlotData(params)
.then((res) => {
ZwCloud2D.ZwDataManager.ZwSetPlotData(data, res);
ZwCloud2D.ZwEditor.ZwSetLoadingState(false);
})
.catch((error) => {
console.error(error);
});
}
};
ZwCloud2D.ZwMessageCallback.ZwEvtSignBlockData = (res) => {
let { type, data } = res;
switch (type) {
case signBlockOper.GetBlockData:
req.getBlockData({ dwgPath, drawFramePrefix: '' }).then((res) => {
ZwCloud2D.ZwDataManager.ZwSignBlockData({ type, data: res });
});
break;
case signBlockOper.UploadSign:
case signBlockOper.UploadCert:
case signBlockOper.UploadDwg:
req.uploadSign(data).then((res) => {
ZwCloud2D.ZwDataManager.ZwSignBlockData({ type, data: res });
});
break;
case signBlockOper.ConFirmEdit:
req.saveBlockData(data).then((res) => {
ZwCloud2D.ZwDataManager.ZwSignBlockData({ type, data: res });
});
break;
default:
break;
}
};
ZwCloud2D.ZwMessageCallback.ZwEvtSignPanelOperation = (signId) => {
req.deleteSign(signId).then((result) => {
ZwCloud2D.ZwDataManager.ZwDeleteSignCallback(result);
});
};
ZwCloud2D.ZwMessageCallback.ZwEvtLoadSignHistoryData = async (data) => {
req.getSignHistoryData({ dwgPath }).then((signHistory) => {
if (signHistory.length === 0) {
ZwCloud2D.ZwDataManager.ZwSetSignHistoryData([]);
return;
}
let attrs = [];
let promiseList = [];
for (let i = 0; i < signHistory.length; i++) {
let block = signHistory[i];
let handleId = block.layoutHandle;
for (let j = 0; j < block.blockData.length; j++) {
let ref = block.blockData[j];
for (let k = 0; k < ref.refData.length; k++) {
let attr = ref.refData[k];
let vv = attr.attrVvector;
let uv = attr.attrUvector;
let lb = attr.attrInsertPoint;
let lt = [lb[0] + vv[0], lb[1] + vv[1], lb[2] + vv[2]];
let rb = [lb[0] + uv[0], lb[1] + uv[1], lb[2] + uv[2]];
let preAttr = attrs.find((atr) => atr.signId === attr.signId);
if (preAttr) {
preAttr.position.push({
id: attr.signId + '-' + handleId,
ptLeftBottom: lb,
ptLeftTop: lt,
ptRightBottom: rb,
});
} else {
attrs.push({
signId: attr.signId,
signTime: attr.signTime,
name: attr.attrName,
signType: attr.type,
creator: '',
position: [
{
id: attr.signId + '-' + handleId,
ptLeftBottom: lb,
ptLeftTop: lt,
ptRightBottom: rb,
},
],
signFileId: attr.signFileId,
});
}
}
}
}
promiseList = attrs.map((attr) => {
return req.downloadSign(attr.signFileId).then((imageData) => {
return {
...attr,
signData: imageData,
};
});
});
Promise.all(promiseList).then((res) => {
ZwCloud2D.ZwDataManager.ZwSetSignHistoryData(res);
});
});
};
ZwCloud2D.ZwMessageCallback.ZwEvtLoadDwgFile = () => {
req.getDwgFile().then((dwgFile) => {
ZwCloud2D.ZwDataManager.ZwSetDwgFileData(dwgFile);
});
};
ZwCloud2D.ZwMessageCallback.ZwEvtGetTextStyleFont = (data) => {
req.getTextStyleFont(data).then((res) => {
ZwCloud2D.ZwDataManager.ZwSetTextStyleFont(res.data.name);
});
};
ZwCloud2D.ZwMessageCallback.ZwEvtUpdateCommentData = async (data) => {
let commentList = {
code: 0,
data: {
rows: [data.data],
},
};
ZwCloud2D.ZwDataManager.ZwSetCommentData({ commentList: commentList });
};
ZwCloud2D.ZwMessageCallback.ZwEvtFileOperate = async () => {
//模拟在移动端触发文件对比功能
ZwCloud2D.ZwMessageCallback.ZwEvtFileCompare({ state: 'enterFcmp' });
};
ZwCloud2D.ZwMessageCallback.ZwEvtFileCompare = async (data) => {
if (data.state === 'enterFcmp') {
await ZwCloud2D.ZwDataProcessor.selectBaseDwgAndCompareDwg();
ZwCloud2D.ZwEditor.ZwSetLoadingState(true);
await req.getXrefRelation(sourcePath);
let fcmpInfo = await req
.transferFcmp({ sourcePath, compareFilePath })
.catch(() => {
ZwCloud2D.ZwMessageCallback.ZwEvtFileCompare({ state: 'exitFcmp' });
return Promise.reject('');
});
dwgPath = sourcePath;
let res = await ZwCloud2D.ZwDataManager.ZwSetFcmpDwgInfo(fcmpInfo);
await ZwCloud2D.ZwDataProcessor.ZwProcessFontData(res.missingFonts);
ZwCloud2D.ZwDataProcessor.ZwProcessXrefData(
sourcePath,
fcmpInfo.baseFileName,
);
let fcmpLmfArrayBuffer = await req.getFcmpDisplayData(
compareFilePath,
sourcePath,
);
ZwCloud2D.ZwDataManager.ZwSetFcmpDwgData(
res.layout.handleId,
fcmpLmfArrayBuffer,
res.timestamp || new Date().getTime(),
);
}
if (data.state === 'getFcmpRegenData') {
let fcmpInfo = await req.transferFcmp({
sourcePath,
compareFilePath,
...data.params,
});
let fcmpLmfArrayBuffer = await req.getFcmpDisplayData(
compareFilePath,
sourcePath,
);
ZwCloud2D.ZwDataManager.ZwSetFcmpRegenData({
lmfData: fcmpLmfArrayBuffer,
...fcmpInfo,
fcmpErrorFlag: 0,
});
}
if (data.state === 'exitFcmp') {
ZwCloud2D.ZwEditor.ZwSetLoadingState(true);
ZwCloud2D.ZwDataProcessor.ZwLoad();
}
};
ZwCloud2D.ZwMessageCallback.ZwEvtGetLayoutHandle = async (data) => {
// 获取布局id
curHandleId = data;
};
ZwCloud2D.ZwMessageCallback.ZwEvtLoadCommentData = async (data) => {
getCommentFunc(data);
};
ZwCloud2D.ZwMessageCallback.ZwEvtUpdateCommentData = async (data) => {
// 评论数据添加到评论面板样例
saveCommentFunc(data);
};
ZwCloud2D.ZwDataProcessor.ZwLoad = async () => {
try {
ZwCloud2D.ZwDataProcessor.ZwProcessAboutVersionData();
ZwCloud2D.ZwDataProcessor.ZwProcessPermissionData();
if (!dwgPath) return;
let data = await req.transferDoc(dwgPath);
docId = new Date().getTime().toString();
let layouts = [];
data.layouts.forEach((layout) => {
let res = {
handleId: layout.handleId,
isDefault: layout.isDefault === 1 ? 'YES' : 'NO',
name: layout.layoutName,
tabOrder: layout.order,
};
layouts.push(res);
if (layout.isDefault === 1) {
curHandleId = layout.handleId;
}
});
let res = await ZwCloud2D.ZwDataManager.ZwSetDwgInfo({
id: docId,
fonts: data.fontList,
layouts: layouts,
name: data.name,
});
await ZwCloud2D.ZwDataProcessor.ZwProcessFontData(res.missingFonts);
ZwCloud2D.ZwDataProcessor.ZwProcessXrefData(dwgPath, data.name);
req
.getDisplayData(res.layout.handleId)
.then((lmfInfo) => {
ZwCloud2D.ZwDataManager.ZwSetDwgData(
res.layout.handleId,
lmfInfo,
res.timestamp || new Date().getTime(),
);
})
.catch((error) => {
console.error(error);
});
if (wsUrl) {
let url =
wsUrl +
'/CadService?sub=' +
Math.floor(Math.random() * 1000) +
'&docId=' +
docId +
'&dwgPath=' +
dwgPath;
ZwCloud2D.ZwDataManager.ZwEntryEdit(url);
}
} catch (error) {
ZwCloud2D.ZwEditor.ZwSetLoadingState(false);
alert(error);
let main = document.getElementById('main');
main.style.display = 'unset';
let mainMobile = document.getElementById('main-mobile');
mainMobile.style.display = 'unset';
let showDwgBtn = document.getElementById('showDwgBtn');
let showFontBtn = document.getElementById('showFontBtn');
showDwgBtn.style.display = 'none';
showFontBtn.style.display = 'none';
resizeCheck();
window.addEventListener('resize', resizeCheck);
console.error(error);
}
};
ZwCloud2D.ZwDataProcessor.ZwFcmpLoad = async () => {
ZwCloud2D.ZwDataProcessor.ZwProcessAboutVersionData();
ZwCloud2D.ZwDataProcessor.ZwProcessPermissionData();
await req.getXrefRelation(sourcePath);
let fcmpInfo = await req
.transferFcmp({ sourcePath, compareFilePath })
.catch(() => {
ZwCloud2D.ZwMessageCallback.ZwEvtFileCompare({ state: 'exitFcmp' });
return Promise.reject('');
});
dwgPath = sourcePath;
let res = await ZwCloud2D.ZwDataManager.ZwSetFcmpDwgInfo(fcmpInfo);
await ZwCloud2D.ZwDataProcessor.ZwProcessFontData(res.missingFonts);
ZwCloud2D.ZwDataProcessor.ZwProcessXrefData(
sourcePath,
fcmpInfo.baseFileName,
);
let fcmpLmfArrayBuffer = await req.getFcmpDisplayData(
compareFilePath,
sourcePath,
);
ZwCloud2D.ZwDataManager.ZwSetFcmpDwgData(
res.layout.handleId,
fcmpLmfArrayBuffer,
res.timestamp || new Date().getTime(),
);
};