ZwCloud2DPrivateAPI.js 33 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250
  1. let baseUrl = 'http://192.168.51.174:5199';
  2. let wsUrl = '';
  3. let dwgPath = '';
  4. let docId = '';
  5. let javaUrl = '';
  6. let curHandleId = '';
  7. // 用户自定义:成员列表,用于评论图纸时@人员,其中memberId和memberName字段名称不能修改
  8. let memberList = {
  9. code: 0,
  10. data: {
  11. rows: [
  12. {
  13. memberId: '12',
  14. memberName: '张三',
  15. email: '',
  16. phone: '',
  17. role: '',
  18. avatarUrl: '/assets/ZwCloud2DSDK/text.png',
  19. },
  20. {
  21. memberId: '32',
  22. memberName: '李四',
  23. email: '',
  24. phone: '',
  25. role: '',
  26. avatarUrl: '/assets/ZwCloud2DSDK/image1.png',
  27. },
  28. {
  29. memberId: '34',
  30. memberName: '王五',
  31. email: '',
  32. phone: '',
  33. role: '',
  34. avatarUrl: '/assets/ZwCloud2DSDK/image2.png',
  35. },
  36. ],
  37. },
  38. };
  39. // 用户自定义:当前用户,指定当前评论图纸的用户,其中userId和userName字段名称不能修改
  40. let user = {
  41. userId: '12',
  42. userName: '张三',
  43. email: '',
  44. phone: '',
  45. role: '',
  46. };
  47. let req = null;
  48. let sourcePath = '';
  49. let compareFilePath = '';
  50. const enableSign = false;
  51. const signBlockOper = {
  52. GetBlockData: 0,
  53. UploadSign: 1,
  54. UploadCert: 2,
  55. UploadDwg: 3,
  56. ConFirmEdit: 4,
  57. };
  58. const refType = {
  59. plotMsg: 1,
  60. signaturePic: 2,
  61. };
  62. class Request {
  63. constructor() {}
  64. get(url, params, resType, type) {
  65. return new Promise((res, rej) => {
  66. let paramsArr = [];
  67. for (let k in params) {
  68. paramsArr.push(
  69. encodeURIComponent(k) + '=' + encodeURIComponent(params[k]),
  70. );
  71. }
  72. url = url + '?' + paramsArr.join('&');
  73. let ajax = new XMLHttpRequest();
  74. let checkUrl = type === 'java' ? javaUrl + url : baseUrl + url;
  75. ajax.open('GET', checkUrl);
  76. resType && (ajax.responseType = resType);
  77. ajax.send();
  78. ajax.onload = function () {
  79. if (resType) res(ajax.response);
  80. else {
  81. let data = JSON.parse(ajax.response);
  82. if (data.code === 0) {
  83. res(data.data);
  84. } else {
  85. rej(data.msg);
  86. }
  87. }
  88. };
  89. ajax.onreadystatechange = function () {
  90. if (ajax.readyState === 4 && ajax.status !== 200) {
  91. rej(ajax.status);
  92. }
  93. };
  94. ajax.onerror = function (error) {
  95. rej(error);
  96. };
  97. });
  98. }
  99. post(url, params, resType, type) {
  100. return new Promise((res, rej) => {
  101. let ajax = new XMLHttpRequest();
  102. let checkUrl = type === 'java' ? javaUrl + url : baseUrl + url;
  103. ajax.open('POST', checkUrl);
  104. resType && (ajax.responseType = resType);
  105. if (!(params instanceof FormData)) {
  106. ajax.setRequestHeader('content-type', 'application/json');
  107. }
  108. ajax.send(params);
  109. ajax.onreadystatechange = function () {
  110. if (ajax.readyState === 4) {
  111. if (ajax.status === 200) {
  112. res(ajax.response);
  113. } else {
  114. rej(ajax.status);
  115. }
  116. }
  117. };
  118. ajax.onerror = function (error) {
  119. rej(error);
  120. };
  121. });
  122. }
  123. arrayBufferToBase64(buffer) {
  124. let binary = '';
  125. let bytes = new Uint8Array(buffer);
  126. let len = bytes.byteLength;
  127. for (let i = 0; i < len; i++) {
  128. binary += String.fromCharCode(bytes[i]);
  129. }
  130. return btoa(binary);
  131. }
  132. fontDownload(fontName) {
  133. return this.get('/sdk/font/download', { fontName }, 'blob');
  134. }
  135. transferDoc(dwgPath) {
  136. if (enableSign) {
  137. return this.transferDocV2();
  138. }
  139. return this.get('/sdk/transfer', { projectId: 0, dwgPath: dwgPath });
  140. }
  141. transferDocV2() {
  142. // {
  143. // "dwgPath": "sdk-014_rotate.dwg",
  144. // "useCache": false,
  145. // "showBlock": true,
  146. // "search": {
  147. // "blockPre": "",
  148. // "attrSignSuf": "_机打信息",
  149. // "attrImageSuf": "_签章图",
  150. // "officialSignSuf": "_公章"
  151. // }
  152. // }
  153. let useCache = getParams('useCache');
  154. if (useCache === 'false') {
  155. useCache = false;
  156. } else {
  157. useCache = true;
  158. }
  159. return this.post(
  160. '/sdk/v2/transfer',
  161. JSON.stringify({
  162. dwgPath: dwgPath,
  163. useCache: useCache,
  164. showBlock: true,
  165. search: {
  166. blockPre: getParams('blockPre') || '标准图框_',
  167. attrSignSuf: getParams('attrSignSuf') || '_机打信息',
  168. // attrImageSuf: "_签章图",
  169. officialSignSuf: getParams('officialSignSuf') || '_签章图',
  170. dwgSignSuf: '_DWG签名',
  171. },
  172. }),
  173. ).then((res) => {
  174. let { code, data } = JSON.parse(res);
  175. if (code === 0) return data;
  176. });
  177. }
  178. getDisplayData(handleId = 34) {
  179. //电子签章中下载lmf不使用缓存, 正常开图下载lmf优先使用缓存
  180. return this.get(
  181. '/sdk/layout/lmf',
  182. { handleId, dwgPath: dwgPath, useCache: !enableSign },
  183. 'arraybuffer',
  184. );
  185. }
  186. getXrefData(handleId, xrefIds) {
  187. let params = { handleId: handleId, xrefIds: xrefIds, dwgPath: dwgPath };
  188. params = JSON.stringify(params);
  189. return this.post('/sdk/xref', params, 'arraybuffer');
  190. }
  191. getXrefRelation(dwgPath) {
  192. return this.get('/sdk/xref/list', { dwgPath: dwgPath });
  193. }
  194. getXrefThumb(filePath) {
  195. return this.get(
  196. '/sdk/xref/thumb',
  197. { filePath: filePath },
  198. 'arraybuffer',
  199. ).then((res) => {
  200. let url = this.arrayBufferToBase64(res);
  201. return 'data:image/jpeg;base64,' + url;
  202. });
  203. }
  204. getPlotData(params) {
  205. let data = JSON.stringify(params);
  206. return this.post('/sdk/print', data, 'arraybuffer');
  207. }
  208. getSignPlotData(params) {
  209. let data = JSON.stringify(params);
  210. return this.post('/sdk/api/print', data, 'arraybuffer');
  211. }
  212. getSignBatchPlotData(params) {
  213. let data = JSON.stringify(params);
  214. return this.post('/sdk/api/batchPrint', data, 'arraybuffer');
  215. }
  216. getImageSrc(filePath) {
  217. return this.get(
  218. '/sdk/image/download',
  219. { filePath: filePath },
  220. 'arraybuffer',
  221. ).then((res) => {
  222. let url = this.arrayBufferToBase64(res);
  223. return 'data:image/jpeg;base64,' + url;
  224. });
  225. }
  226. getImageData(filePath) {
  227. return this.get('/sdk/image/download', { filePath: filePath }, 'blob');
  228. }
  229. getImageList() {
  230. return this.get('/sdk/image/list');
  231. }
  232. getPermissionList() {
  233. return this.get('/sdk/getStatus');
  234. }
  235. getRegenData(params) {
  236. Object.assign(params, { dwgPath: dwgPath });
  237. let data = JSON.stringify(params);
  238. return this.post('/sdk/regen', data, 'arraybuffer');
  239. }
  240. getBlockData(params) {
  241. return this.get('/sdk/api/sign/properties', params);
  242. }
  243. uploadSign(params) {
  244. let url = '/sdk/api/sign/upload';
  245. let { signId, file, uploadId } = params;
  246. let formData = new FormData();
  247. formData.append('dwgPath', dwgPath);
  248. formData.append('signId', signId);
  249. formData.append('file', file);
  250. formData.append('uploadId', uploadId);
  251. return this.post(url, formData).then((res) => {
  252. let response = JSON.parse(res);
  253. let { code, data } = response;
  254. if (code === 0) {
  255. return { fileId: data.fileId, signId };
  256. } else {
  257. return { fileId: '', signId };
  258. }
  259. });
  260. }
  261. downloadSign(signFileId) {
  262. let url = '/sdk/api/sign/download/' + signFileId;
  263. return this.get(url, {}, 'arraybuffer').then((res) => {
  264. if (res) {
  265. let url = this.arrayBufferToBase64(res);
  266. return 'data:image/jpeg;base64,' + url;
  267. }
  268. return '';
  269. });
  270. }
  271. saveBlockData(data) {
  272. let params = { dwgPath, data };
  273. params = JSON.stringify(params);
  274. return this.post('/sdk/api/sign/save', params)
  275. .then((res) => {
  276. let response = JSON.parse(res);
  277. let { code } = response;
  278. if (code === 0) {
  279. return true;
  280. } else {
  281. return false;
  282. }
  283. })
  284. .catch(() => false);
  285. }
  286. deleteSign(signId) {
  287. return this.post('/sdk/api/sign/delete?signId=' + signId);
  288. }
  289. getSignHistoryData(params) {
  290. return this.get('/sdk/api/sign/signRecords', params).catch(() => []);
  291. }
  292. getDwgFile() {
  293. return this.get(
  294. '/sdk/doc/download',
  295. { dwgPath: dwgPath },
  296. 'arrayBuffer',
  297. 'java',
  298. );
  299. }
  300. uploadFile(file) {
  301. let formData = new FormData();
  302. formData.append('file', file);
  303. return this.post('/sdk/doc/upload', formData, 'json', 'java').catch(() => {
  304. alert('上传接口 /sdk/doc/upload 调用失败 请联系管理员');
  305. });
  306. }
  307. getDwgFile() {
  308. return this.get(
  309. '/sdk/doc/download',
  310. { dwgPath: dwgPath },
  311. 'arraybuffer',
  312. 'java',
  313. );
  314. }
  315. getTextStyleFont(path) {
  316. let params = { path: path };
  317. params = JSON.stringify(params);
  318. return this.post('/sdk/font/fetchName', params, 'json', 'java');
  319. }
  320. getAbout() {
  321. return this.get('/about');
  322. }
  323. addComment(params) {
  324. return this.post(
  325. '/sdk/doc/comment/add',
  326. JSON.stringify({
  327. docId,
  328. handleId: curHandleId,
  329. ...params,
  330. }),
  331. ).then((res) => {
  332. let { code, data } = JSON.parse(res);
  333. if (code === 0) return data;
  334. });
  335. }
  336. editComment(params) {
  337. return this.post(
  338. '/sdk/doc/comment/edit',
  339. JSON.stringify({
  340. docId,
  341. handleId: curHandleId,
  342. ...params,
  343. }),
  344. ).then((res) => {
  345. let { code, data } = JSON.parse(res);
  346. if (code === 0) return data;
  347. });
  348. }
  349. deleteComment(params) {
  350. return this.post(
  351. '/sdk/doc/comment/delete?id=' + params.id,
  352. JSON.stringify({}),
  353. ).then((res) => {
  354. let { code, data } = JSON.parse(res);
  355. if (code === 0) return data;
  356. });
  357. }
  358. replyComment(params) {
  359. return this.post(
  360. '/sdk/doc/comment/reply',
  361. JSON.stringify({
  362. docId,
  363. handleId: curHandleId,
  364. ...params,
  365. }),
  366. ).then((res) => {
  367. let { code, data } = JSON.parse(res);
  368. if (code === 0) return data;
  369. });
  370. }
  371. getComment(data) {
  372. return this.get('/sdk/doc/comment/listPage', {
  373. docId,
  374. handleId: curHandleId,
  375. pageNum: data.pageNum,
  376. pageSize: data.pageSize,
  377. });
  378. }
  379. /**
  380. * 图纸对比, 调用转换服务
  381. * @returns fcmpInfo
  382. */
  383. transferFcmp(inputParams) {
  384. let params = {
  385. sourcePath: inputParams.sourcePath,
  386. compareFilePath: inputParams.compareFilePath,
  387. data: inputParams.hasOwnProperty('data')
  388. ? inputParams.data
  389. : {
  390. fcmpRcShape: 0,
  391. fcmpRcMargin: 5,
  392. fcmpHatch: 1,
  393. fcmpText: 1,
  394. },
  395. viewport: inputParams.hasOwnProperty('viewport')
  396. ? inputParams.viewport
  397. : '',
  398. handleId: inputParams.hasOwnProperty('handleId')
  399. ? inputParams.handleId
  400. : '',
  401. };
  402. !params.viewport && delete params.viewport;
  403. !params.handleId && delete params.handleId;
  404. let isTimeout = false;
  405. let timerTimeout = setTimeout(() => {
  406. isTimeout = true;
  407. alert('等待时间已经超过2分钟, 是否退出');
  408. ZwCloud2D.ZwEditor.ZwSetLoadingState(true);
  409. ZwCloud2D.ZwDataProcessor.ZwLoad();
  410. }, 120000);
  411. return this.post('/sdk/fcmp', JSON.stringify(params), 'json').then(
  412. (res) => {
  413. clearTimeout(timerTimeout);
  414. if (res.code !== 0) {
  415. alert(res.msg);
  416. resizeCheck();
  417. return Promise.reject(res.code);
  418. }
  419. if (isTimeout) {
  420. return Promise.reject('transferFcmp request timeout!');
  421. }
  422. let data = res.data;
  423. docId = data.docId || new Date().getTime().toString();
  424. let layouts = [];
  425. (data.layouts || []).forEach((layout) => {
  426. let res = {
  427. handleId: layout.handleId,
  428. isDefault: layout.isDefault === 1 ? 'YES' : 'NO',
  429. name: layout.layoutName,
  430. tabOrder: layout.order,
  431. };
  432. layouts.push(res);
  433. if (layout.isDefault === 1) {
  434. curHandleId = layout.handleId;
  435. }
  436. });
  437. let fcmpInfo = {
  438. baseFileName: data.baseFileName,
  439. baseFileInfo: [
  440. { lable: '名称', value: sourcePath },
  441. { lable: '所有者', value: '未知' },
  442. { lable: '创建时间', value: '未知' },
  443. { lable: '文件路径', value: '未知' },
  444. ],
  445. compareFileName: data.compareFileName,
  446. compareFileInfo: [
  447. { lable: '名称', value: compareFilePath },
  448. { lable: '所有者', value: '未知' },
  449. { lable: '创建时间', value: '未知' },
  450. { lable: '文件路径', value: '未知' },
  451. ],
  452. fcmpDiffExt: data.fcmpDiffExt,
  453. fcmpErrorFlag: data.fcmpErrorFlag,
  454. fonts: data.fontList || [],
  455. layouts: layouts,
  456. fcmpRcShape: params.data.fcmpRcShape,
  457. fcmpRcMargin: params.data.fcmpRcMargin,
  458. fcmpHatch: params.data.fcmpHatch,
  459. fcmpText: params.data.fcmpText,
  460. };
  461. return fcmpInfo;
  462. },
  463. );
  464. }
  465. /**
  466. * 下载图纸转换的显示数据
  467. * @param {string} compareFilePath
  468. * @param {string} sourcePath
  469. * @returns
  470. */
  471. getFcmpDisplayData(compareFilePath, sourcePath) {
  472. return this.get(
  473. '/sdk/layout/lmf',
  474. {
  475. handleId: compareFilePath.replace(/\.dwg/gi, '_fcmp'),
  476. dwgPath: sourcePath,
  477. useCache: true,
  478. },
  479. 'arraybuffer',
  480. );
  481. }
  482. /**
  483. * 获取文件列表
  484. * @returns
  485. */
  486. getFileList() {
  487. return this.get('/sdk/dwg/list').catch(() => {
  488. alert('获取文件列表接口 /sdk/dwg/list 调用失败 请联系管理员');
  489. });
  490. }
  491. }
  492. req = new Request();
  493. // 生成Guid
  494. function randomFour() {
  495. return (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1);
  496. }
  497. function guid() {
  498. return (
  499. randomFour() +
  500. randomFour() +
  501. '-' +
  502. randomFour() +
  503. '-' +
  504. randomFour() +
  505. '-' +
  506. randomFour() +
  507. '-' +
  508. randomFour() +
  509. randomFour() +
  510. randomFour()
  511. );
  512. }
  513. function getCommentFunc(data) {
  514. // 每次切换布局需要重新获取评论数据
  515. let commentList = {
  516. code: 0,
  517. data: {
  518. rows: [],
  519. },
  520. };
  521. req
  522. .getComment(data)
  523. .then((res) => {
  524. if (res) {
  525. let data = JSON.parse(JSON.stringify(res));
  526. commentList.data.total = data.total;
  527. commentList.data.rows = data.rows;
  528. }
  529. if (data.initial) {
  530. ZwCloud2D.ZwDataManager.ZwSetCommentData({
  531. commentList: commentList,
  532. memberList,
  533. user,
  534. });
  535. } else {
  536. ZwCloud2D.ZwDataManager.ZwSetCommentData({
  537. commentList: commentList,
  538. pageNum: data.pageNum,
  539. });
  540. }
  541. })
  542. .catch((error) => {
  543. if (data.initial) {
  544. ZwCloud2D.ZwDataManager.ZwSetCommentData({
  545. commentList: commentList,
  546. memberList,
  547. user,
  548. });
  549. } else {
  550. ZwCloud2D.ZwDataManager.ZwSetCommentData({
  551. commentList: commentList,
  552. pageNum: data.pageNum,
  553. });
  554. }
  555. console.error(error);
  556. });
  557. }
  558. function saveCommentFunc(data) {
  559. let params = { pageNum: 1, pageSize: data.data.pageSize };
  560. if (data.data) {
  561. // 根据不同场景组织数据并保存
  562. switch (data.type) {
  563. case 'delete':
  564. req
  565. .deleteComment({
  566. id: data.data.id,
  567. })
  568. .then(() => {
  569. this.getCommentFunc(params);
  570. });
  571. break;
  572. case 'edit':
  573. // 编辑评论时需要更新数据
  574. req
  575. .editComment({
  576. id: data.data.id,
  577. content: data.data.content,
  578. realContent: data.data.realContent,
  579. mark: data.data.mark,
  580. withMark: data.data.withMark,
  581. withAt: data.data.withMark,
  582. createBy: user.userId,
  583. creator: user.userName,
  584. })
  585. .then(() => {
  586. this.getCommentFunc(params);
  587. });
  588. break;
  589. default:
  590. {
  591. //新增评论、回复评论的场景
  592. data.data.id = guid();
  593. data.data.createTime = new Date().getTime();
  594. data.data.createBy = user.userId;
  595. data.data.creator = user.userName;
  596. // 有parentId表示是回复评论
  597. if (data.data.parentId) {
  598. req
  599. .replyComment({
  600. parentId: data.data.parentId,
  601. content: data.data.content,
  602. realContent: data.data.realContent,
  603. mark: data.data.mark,
  604. withMark: data.data.withMark,
  605. withAt: data.data.withMark,
  606. createBy: user.userId,
  607. creator: user.userName,
  608. })
  609. .then(() => {
  610. this.getCommentFunc(params);
  611. });
  612. } else {
  613. // 新增评论
  614. req
  615. .addComment({
  616. content: data.data.content,
  617. realContent: data.data.realContent,
  618. mark: data.data.mark,
  619. withMark: data.data.withMark,
  620. withAt: data.data.withMark,
  621. createBy: user.userId,
  622. creator: user.userName,
  623. })
  624. .then(() => {
  625. this.getCommentFunc(params);
  626. });
  627. }
  628. }
  629. break;
  630. }
  631. }
  632. }
  633. ZwCloud2D.ZwDataProcessor.ZwSetConnectUrl = (url1, url2, url3) => {
  634. baseUrl = url1;
  635. wsUrl = url2;
  636. javaUrl = url3;
  637. };
  638. ZwCloud2D.ZwDataProcessor.ZwSetLoadDwg = (path) => {
  639. dwgPath = path;
  640. };
  641. ZwCloud2D.ZwDataProcessor.uploadDwg = (file) => {
  642. let req = new Request();
  643. return req.uploadFile(file);
  644. // .then((res) => {
  645. // dwgPath = res.data.path;
  646. // ZwCloud2D.ZwDataProcessor.ZwLoad();
  647. // let main = document.getElementById('main');
  648. // main.style.display = 'none';
  649. // let mainMobile = document.getElementById('main-mobile');
  650. // mainMobile.style.display = 'none';
  651. // let showDwgBtn = document.getElementById('showDwgBtn');
  652. // let showFontBtn = document.getElementById('showFontBtn');
  653. // showDwgBtn.style.display = 'unset';
  654. // showFontBtn.style.display = 'unset';
  655. // });
  656. };
  657. ZwCloud2D.ZwDataProcessor.uploadFont = (file) => {
  658. let req = new Request();
  659. let pArray = new Array();
  660. for (let i = 0; i < file.length; i++) {
  661. pArray.push(
  662. new Promise((resolve, reject) => {
  663. req.uploadFile(file[i]).then((res) => {
  664. if (res.code === 200) {
  665. resolve();
  666. } else {
  667. reject();
  668. }
  669. });
  670. }),
  671. );
  672. }
  673. Promise.all(pArray)
  674. .then(() => {
  675. alert('上传成功');
  676. })
  677. .catch(() => {
  678. alert('上传失败');
  679. });
  680. };
  681. ZwCloud2D.ZwDataProcessor.selectBaseDwgAndCompareDwg = () => {
  682. return new Promise((res, rej) => {
  683. req.getFileList().then((array) => {
  684. new Modal({
  685. title: '选择两个进行对比的图纸',
  686. fcmpInfoContent: array,
  687. onOk: () => {
  688. res();
  689. },
  690. });
  691. });
  692. });
  693. };
  694. ZwCloud2D.ZwDataProcessor.ZwProcessAboutVersionData = () => {
  695. return req.getAbout().then((res) => {
  696. let aboutVersion = '';
  697. aboutVersion +=
  698. 'Front side VERNUM: ' + ZwCloud2D.version.commitId + '<br/>';
  699. aboutVersion +=
  700. 'Front side COMMIT TIME: ' + ZwCloud2D.version.commitTime + '<br/>';
  701. aboutVersion +=
  702. 'Middleware VERNUM: ' + (res['git.commit.id'] || '') + '<br/>';
  703. aboutVersion +=
  704. 'Middleware COMMIT TIME: ' + (res['git.commit.time'] || '') + '<br/>';
  705. aboutVersion +=
  706. 'Core service VERNUM: ' + (res['cloud2d.server'] || '') + '<br/>';
  707. ZwCloud2D.ZwSetting.ZwSetAbout({ version: aboutVersion });
  708. });
  709. };
  710. ZwCloud2D.ZwDataProcessor.ZwProcessPermissionData = () => {
  711. return req
  712. .getPermissionList()
  713. .then((data) => {
  714. //启用电子签章功能
  715. if (enableSign) {
  716. ZwCloud2D.ZwEditor.ZwSetUserOptions({
  717. panel: { signPanel: true },
  718. commandButton: { Sign: true, Fcmp: true },
  719. command: { FCMP: true },
  720. });
  721. } else {
  722. //启用文件对比功能
  723. ZwCloud2D.ZwEditor.ZwSetUserOptions({
  724. commandButton: { Fcmp: true },
  725. command: { FCMP: true },
  726. });
  727. }
  728. ZwCloud2D.ZwDataManager.ZwSetSdkPermission(data);
  729. })
  730. .catch((error) => {
  731. console.error(error);
  732. });
  733. };
  734. ZwCloud2D.ZwDataProcessor.ZwProcessFontData = (missingFonts) => {
  735. let pArr = [];
  736. let fontArr = [];
  737. missingFonts.forEach((fontName) => {
  738. let arr = fontName.split('.');
  739. let type = (arr[arr.length - 1] || '').toUpperCase();
  740. pArr.push(
  741. req.fontDownload(fontName).then(async (data) => {
  742. if (data.type === 'application/octet-stream') {
  743. let arraybuffer = await data.arrayBuffer();
  744. fontArr.push({
  745. name: fontName,
  746. type: type,
  747. data: arraybuffer,
  748. });
  749. }
  750. }),
  751. );
  752. });
  753. return Promise.all(pArr).then(() => {
  754. return ZwCloud2D.ZwDataManager.ZwSetFontDataList(fontArr);
  755. });
  756. };
  757. ZwCloud2D.ZwDataProcessor.ZwProcessXrefData = (dwgPath, docName) => {
  758. return req
  759. .getXrefRelation(dwgPath)
  760. .then((xrefRelations) => {
  761. let xrefPromises = [];
  762. let srcMap = new Map();
  763. xrefRelations.forEach((xrefRelation) => {
  764. if (xrefRelation.foundPath) {
  765. xrefPromises.push(
  766. new Promise((res, rej) => {
  767. req.getXrefThumb(xrefRelation.foundPath).then((xrefThumb) => {
  768. srcMap.set(xrefRelation.foundPath, xrefThumb);
  769. res(true);
  770. });
  771. }),
  772. );
  773. }
  774. });
  775. return Promise.all(xrefPromises)
  776. .then(() => {
  777. let params = {
  778. docName: docName,
  779. xrefRelations: xrefRelations,
  780. srcMap: srcMap,
  781. };
  782. ZwCloud2D.ZwDataManager.ZwSetXrefList(params);
  783. })
  784. .catch(() => {
  785. let params = {
  786. docName: docName,
  787. xrefRelations: xrefRelations,
  788. srcMap: srcMap,
  789. };
  790. ZwCloud2D.ZwDataManager.ZwSetXrefList(params);
  791. });
  792. })
  793. .catch((error) => {
  794. console.error(error);
  795. });
  796. };
  797. //ZwCloud SDK 回调
  798. ZwCloud2D.ZwMessageCallback.ZwEvtChangeLayout = (layout) => {
  799. req
  800. .getDisplayData(layout.handleId)
  801. .then((data) => {
  802. let timestamp = new Date().getTime();
  803. ZwCloud2D.ZwDataManager.ZwSetDwgData(layout.handleId, data, timestamp);
  804. })
  805. .catch((error) => {
  806. console.error(error);
  807. });
  808. };
  809. ZwCloud2D.ZwMessageCallback.ZwEvtLoadXrefData = (data) => {
  810. req
  811. .getXrefData(data.handleId, data.xrefIds)
  812. .then((res) => {
  813. ZwCloud2D.ZwDataManager.ZwSetXrefData(res);
  814. })
  815. .catch(() => {
  816. ZwCloud2D.ZwDataManager.ZwSetXrefData();
  817. });
  818. };
  819. ZwCloud2D.ZwMessageCallback.ZwEvtDrawEnd = () => {};
  820. ZwCloud2D.ZwMessageCallback.ZwEvtGetRegenData = async (data) => {
  821. req
  822. .getRegenData(data)
  823. .then((res) => {
  824. ZwCloud2D.ZwDataManager.ZwSetRegenData(res);
  825. })
  826. .catch(() => {
  827. ZwCloud2D.ZwDataManager.ZwSetRegenData(null);
  828. });
  829. };
  830. ZwCloud2D.ZwMessageCallback.ZwEvtLoadImageData = (data) => {
  831. let pArr = new Array();
  832. let imageMap = new Map();
  833. data.forEach((imageUrl) => {
  834. pArr.push(
  835. new Promise((res, rej) => {
  836. req
  837. .getImageData(imageUrl)
  838. .then(async (result) => {
  839. if (result.type === 'application/octet-stream') {
  840. let arraybuffer = await result.arrayBuffer();
  841. imageMap.set(imageUrl, arraybuffer);
  842. }
  843. res(true);
  844. })
  845. .catch((err) => {
  846. res(true);
  847. });
  848. }),
  849. );
  850. });
  851. Promise.all(pArr)
  852. .then(() => {
  853. ZwCloud2D.ZwDataManager.ZwSetImageData(imageMap);
  854. })
  855. .catch((error) => {
  856. console.error(error);
  857. });
  858. };
  859. ZwCloud2D.ZwMessageCallback.ZwEvtLoadImageList = () => {
  860. req.getImageList().then((res) => {
  861. res.forEach((image) => {
  862. let path = image.completePath + image.name;
  863. image.completePath = path;
  864. req.getImageSrc(path).then((imageData) => {
  865. let item = {
  866. name: image.name,
  867. data: imageData,
  868. completePath: image.completePath,
  869. };
  870. ZwCloud2D.ZwDataManager.ZwSetImageList(item);
  871. });
  872. });
  873. });
  874. };
  875. ZwCloud2D.ZwMessageCallback.ZwEvtPlotDwg = (data) => {
  876. let params = Object.assign(data.params, { dwgPath: dwgPath });
  877. if (enableSign) {
  878. params.docId = 0;
  879. let { isZwPlot } = data.params;
  880. if (isZwPlot) {
  881. req
  882. .getSignBatchPlotData(params)
  883. .then((res) => {
  884. ZwCloud2D.ZwDataManager.ZwSetPlotData(data, res);
  885. ZwCloud2D.ZwEditor.ZwSetLoadingState(false);
  886. })
  887. .catch((error) => {
  888. console.error(error);
  889. });
  890. } else {
  891. req
  892. .getSignPlotData(params)
  893. .then((res) => {
  894. ZwCloud2D.ZwDataManager.ZwSetPlotData(data, res);
  895. ZwCloud2D.ZwEditor.ZwSetLoadingState(false);
  896. })
  897. .catch((error) => {
  898. console.error(error);
  899. });
  900. }
  901. } else {
  902. req
  903. .getPlotData(params)
  904. .then((res) => {
  905. ZwCloud2D.ZwDataManager.ZwSetPlotData(data, res);
  906. ZwCloud2D.ZwEditor.ZwSetLoadingState(false);
  907. })
  908. .catch((error) => {
  909. console.error(error);
  910. });
  911. }
  912. };
  913. ZwCloud2D.ZwMessageCallback.ZwEvtSignBlockData = (res) => {
  914. let { type, data } = res;
  915. switch (type) {
  916. case signBlockOper.GetBlockData:
  917. req.getBlockData({ dwgPath, drawFramePrefix: '' }).then((res) => {
  918. ZwCloud2D.ZwDataManager.ZwSignBlockData({ type, data: res });
  919. });
  920. break;
  921. case signBlockOper.UploadSign:
  922. case signBlockOper.UploadCert:
  923. case signBlockOper.UploadDwg:
  924. req.uploadSign(data).then((res) => {
  925. ZwCloud2D.ZwDataManager.ZwSignBlockData({ type, data: res });
  926. });
  927. break;
  928. case signBlockOper.ConFirmEdit:
  929. req.saveBlockData(data).then((res) => {
  930. ZwCloud2D.ZwDataManager.ZwSignBlockData({ type, data: res });
  931. });
  932. break;
  933. default:
  934. break;
  935. }
  936. };
  937. ZwCloud2D.ZwMessageCallback.ZwEvtSignPanelOperation = (signId) => {
  938. req.deleteSign(signId).then((result) => {
  939. ZwCloud2D.ZwDataManager.ZwDeleteSignCallback(result);
  940. });
  941. };
  942. ZwCloud2D.ZwMessageCallback.ZwEvtLoadSignHistoryData = async (data) => {
  943. req.getSignHistoryData({ dwgPath }).then((signHistory) => {
  944. if (signHistory.length === 0) {
  945. ZwCloud2D.ZwDataManager.ZwSetSignHistoryData([]);
  946. return;
  947. }
  948. let attrs = [];
  949. let promiseList = [];
  950. for (let i = 0; i < signHistory.length; i++) {
  951. let block = signHistory[i];
  952. let handleId = block.layoutHandle;
  953. for (let j = 0; j < block.blockData.length; j++) {
  954. let ref = block.blockData[j];
  955. for (let k = 0; k < ref.refData.length; k++) {
  956. let attr = ref.refData[k];
  957. let vv = attr.attrVvector;
  958. let uv = attr.attrUvector;
  959. let lb = attr.attrInsertPoint;
  960. let lt = [lb[0] + vv[0], lb[1] + vv[1], lb[2] + vv[2]];
  961. let rb = [lb[0] + uv[0], lb[1] + uv[1], lb[2] + uv[2]];
  962. let preAttr = attrs.find((atr) => atr.signId === attr.signId);
  963. if (preAttr) {
  964. preAttr.position.push({
  965. id: attr.signId + '-' + handleId,
  966. ptLeftBottom: lb,
  967. ptLeftTop: lt,
  968. ptRightBottom: rb,
  969. });
  970. } else {
  971. attrs.push({
  972. signId: attr.signId,
  973. signTime: attr.signTime,
  974. name: attr.attrName,
  975. signType: attr.type,
  976. creator: '',
  977. position: [
  978. {
  979. id: attr.signId + '-' + handleId,
  980. ptLeftBottom: lb,
  981. ptLeftTop: lt,
  982. ptRightBottom: rb,
  983. },
  984. ],
  985. signFileId: attr.signFileId,
  986. });
  987. }
  988. }
  989. }
  990. }
  991. promiseList = attrs.map((attr) => {
  992. return req.downloadSign(attr.signFileId).then((imageData) => {
  993. return {
  994. ...attr,
  995. signData: imageData,
  996. };
  997. });
  998. });
  999. Promise.all(promiseList).then((res) => {
  1000. ZwCloud2D.ZwDataManager.ZwSetSignHistoryData(res);
  1001. });
  1002. });
  1003. };
  1004. ZwCloud2D.ZwMessageCallback.ZwEvtLoadDwgFile = () => {
  1005. req.getDwgFile().then((dwgFile) => {
  1006. ZwCloud2D.ZwDataManager.ZwSetDwgFileData(dwgFile);
  1007. });
  1008. };
  1009. ZwCloud2D.ZwMessageCallback.ZwEvtGetTextStyleFont = (data) => {
  1010. req.getTextStyleFont(data).then((res) => {
  1011. ZwCloud2D.ZwDataManager.ZwSetTextStyleFont(res.data.name);
  1012. });
  1013. };
  1014. ZwCloud2D.ZwMessageCallback.ZwEvtUpdateCommentData = async (data) => {
  1015. let commentList = {
  1016. code: 0,
  1017. data: {
  1018. rows: [data.data],
  1019. },
  1020. };
  1021. ZwCloud2D.ZwDataManager.ZwSetCommentData({ commentList: commentList });
  1022. };
  1023. ZwCloud2D.ZwMessageCallback.ZwEvtFileOperate = async () => {
  1024. //模拟在移动端触发文件对比功能
  1025. ZwCloud2D.ZwMessageCallback.ZwEvtFileCompare({ state: 'enterFcmp' });
  1026. };
  1027. ZwCloud2D.ZwMessageCallback.ZwEvtFileCompare = async (data) => {
  1028. if (data.state === 'enterFcmp') {
  1029. await ZwCloud2D.ZwDataProcessor.selectBaseDwgAndCompareDwg();
  1030. ZwCloud2D.ZwEditor.ZwSetLoadingState(true);
  1031. await req.getXrefRelation(sourcePath);
  1032. let fcmpInfo = await req
  1033. .transferFcmp({ sourcePath, compareFilePath })
  1034. .catch(() => {
  1035. ZwCloud2D.ZwMessageCallback.ZwEvtFileCompare({ state: 'exitFcmp' });
  1036. return Promise.reject('');
  1037. });
  1038. dwgPath = sourcePath;
  1039. let res = await ZwCloud2D.ZwDataManager.ZwSetFcmpDwgInfo(fcmpInfo);
  1040. await ZwCloud2D.ZwDataProcessor.ZwProcessFontData(res.missingFonts);
  1041. ZwCloud2D.ZwDataProcessor.ZwProcessXrefData(
  1042. sourcePath,
  1043. fcmpInfo.baseFileName,
  1044. );
  1045. let fcmpLmfArrayBuffer = await req.getFcmpDisplayData(
  1046. compareFilePath,
  1047. sourcePath,
  1048. );
  1049. ZwCloud2D.ZwDataManager.ZwSetFcmpDwgData(
  1050. res.layout.handleId,
  1051. fcmpLmfArrayBuffer,
  1052. res.timestamp || new Date().getTime(),
  1053. );
  1054. }
  1055. if (data.state === 'getFcmpRegenData') {
  1056. let fcmpInfo = await req.transferFcmp({
  1057. sourcePath,
  1058. compareFilePath,
  1059. ...data.params,
  1060. });
  1061. let fcmpLmfArrayBuffer = await req.getFcmpDisplayData(
  1062. compareFilePath,
  1063. sourcePath,
  1064. );
  1065. ZwCloud2D.ZwDataManager.ZwSetFcmpRegenData({
  1066. lmfData: fcmpLmfArrayBuffer,
  1067. ...fcmpInfo,
  1068. fcmpErrorFlag: 0,
  1069. });
  1070. }
  1071. if (data.state === 'exitFcmp') {
  1072. ZwCloud2D.ZwEditor.ZwSetLoadingState(true);
  1073. ZwCloud2D.ZwDataProcessor.ZwLoad();
  1074. }
  1075. };
  1076. ZwCloud2D.ZwMessageCallback.ZwEvtGetLayoutHandle = async (data) => {
  1077. // 获取布局id
  1078. curHandleId = data;
  1079. };
  1080. ZwCloud2D.ZwMessageCallback.ZwEvtLoadCommentData = async (data) => {
  1081. getCommentFunc(data);
  1082. };
  1083. ZwCloud2D.ZwMessageCallback.ZwEvtUpdateCommentData = async (data) => {
  1084. // 评论数据添加到评论面板样例
  1085. saveCommentFunc(data);
  1086. };
  1087. ZwCloud2D.ZwDataProcessor.ZwLoad = async () => {
  1088. try {
  1089. ZwCloud2D.ZwDataProcessor.ZwProcessAboutVersionData();
  1090. ZwCloud2D.ZwDataProcessor.ZwProcessPermissionData();
  1091. if (!dwgPath) return;
  1092. let data = await req.transferDoc(dwgPath);
  1093. docId = new Date().getTime().toString();
  1094. let layouts = [];
  1095. data.layouts.forEach((layout) => {
  1096. let res = {
  1097. handleId: layout.handleId,
  1098. isDefault: layout.isDefault === 1 ? 'YES' : 'NO',
  1099. name: layout.layoutName,
  1100. tabOrder: layout.order,
  1101. };
  1102. layouts.push(res);
  1103. if (layout.isDefault === 1) {
  1104. curHandleId = layout.handleId;
  1105. }
  1106. });
  1107. let res = await ZwCloud2D.ZwDataManager.ZwSetDwgInfo({
  1108. id: docId,
  1109. fonts: data.fontList,
  1110. layouts: layouts,
  1111. name: data.name,
  1112. });
  1113. await ZwCloud2D.ZwDataProcessor.ZwProcessFontData(res.missingFonts);
  1114. ZwCloud2D.ZwDataProcessor.ZwProcessXrefData(dwgPath, data.name);
  1115. req
  1116. .getDisplayData(res.layout.handleId)
  1117. .then((lmfInfo) => {
  1118. ZwCloud2D.ZwDataManager.ZwSetDwgData(
  1119. res.layout.handleId,
  1120. lmfInfo,
  1121. res.timestamp || new Date().getTime(),
  1122. );
  1123. })
  1124. .catch((error) => {
  1125. console.error(error);
  1126. });
  1127. if (wsUrl) {
  1128. let url =
  1129. wsUrl +
  1130. '/CadService?sub=' +
  1131. Math.floor(Math.random() * 1000) +
  1132. '&docId=' +
  1133. docId +
  1134. '&dwgPath=' +
  1135. dwgPath;
  1136. ZwCloud2D.ZwDataManager.ZwEntryEdit(url);
  1137. }
  1138. } catch (error) {
  1139. ZwCloud2D.ZwEditor.ZwSetLoadingState(false);
  1140. alert(error);
  1141. // let main = document.getElementById('main');
  1142. // main.style.display = 'unset';
  1143. // let mainMobile = document.getElementById('main-mobile');
  1144. // mainMobile.style.display = 'unset';
  1145. // let showDwgBtn = document.getElementById('showDwgBtn');
  1146. // let showFontBtn = document.getElementById('showFontBtn');
  1147. // showDwgBtn.style.display = 'none';
  1148. // showFontBtn.style.display = 'none';
  1149. // resizeCheck();
  1150. // window.addEventListener('resize', resizeCheck);
  1151. console.error(error);
  1152. }
  1153. };
  1154. ZwCloud2D.ZwDataProcessor.ZwFcmpLoad = async () => {
  1155. ZwCloud2D.ZwDataProcessor.ZwProcessAboutVersionData();
  1156. ZwCloud2D.ZwDataProcessor.ZwProcessPermissionData();
  1157. await req.getXrefRelation(sourcePath);
  1158. let fcmpInfo = await req
  1159. .transferFcmp({ sourcePath, compareFilePath })
  1160. .catch(() => {
  1161. ZwCloud2D.ZwMessageCallback.ZwEvtFileCompare({ state: 'exitFcmp' });
  1162. return Promise.reject('');
  1163. });
  1164. dwgPath = sourcePath;
  1165. let res = await ZwCloud2D.ZwDataManager.ZwSetFcmpDwgInfo(fcmpInfo);
  1166. await ZwCloud2D.ZwDataProcessor.ZwProcessFontData(res.missingFonts);
  1167. ZwCloud2D.ZwDataProcessor.ZwProcessXrefData(
  1168. sourcePath,
  1169. fcmpInfo.baseFileName,
  1170. );
  1171. let fcmpLmfArrayBuffer = await req.getFcmpDisplayData(
  1172. compareFilePath,
  1173. sourcePath,
  1174. );
  1175. ZwCloud2D.ZwDataManager.ZwSetFcmpDwgData(
  1176. res.layout.handleId,
  1177. fcmpLmfArrayBuffer,
  1178. res.timestamp || new Date().getTime(),
  1179. );
  1180. };