123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660 |
- let baseUrl = 'http://192.168.51.174:9092'
- let userUrl = 'http://192.168.51.174:9091'
- let appKey = ''
- let docId = ''
- let fullVersionPermissions = {
- 'productName': 'ZW2D_CLOUD_FULL_2024',
- 'featureId': 167,
- 'projectId': 0,
- 'expiredTime': '2022-12-12T00:00:00',
- 'authClientNum': 10,
- 'forCloud2D': true,
- 'permissions': [
- {
- 'description': 'DWG 100',
- 'name': 'DWG 100',
- 'permissionId': '100',
- 'type': 'SDK'
- },
- {
- 'description': 'DXF 101',
- 'name': 'DXF 101',
- 'permissionId': '101',
- 'type': 'SDK'
- },
- {
- 'description': '天正 102',
- 'name': '天正 102',
- 'permissionId': '102',
- 'type': 'SDK'
- },
- {
- 'description': '图纸预览图获取',
- 'name': '图纸预览图获取',
- 'permissionId': '201',
- 'type': 'SDK'
- },
- {
- 'description': '视口重生成',
- 'name': '视口重生成',
- 'permissionId': '202',
- 'type': 'SDK'
- },
- {
- 'description': '外部参照图片',
- 'name': '外部参照图片',
- 'permissionId': '203',
- 'type': 'SDK'
- },
- {
- 'description': 'DWG轻量数据生成',
- 'name': 'DWG轻量数据生成',
- 'permissionId': '204',
- 'type': 'SDK'
- },
- {
- 'description': '字体设置',
- 'name': '字体设置',
- 'permissionId': '205',
- 'type': 'SDK'
- },
- {
- 'description': '字体替换设置',
- 'name': '字体替换设置',
- 'permissionId': '206',
- 'type': 'SDK'
- },
- {
- 'description': '字体库',
- 'name': '字体库',
- 'permissionId': '207',
- 'type': 'SDK'
- },
- {
- 'description': '图纸二维线框显示',
- 'name': '图纸二维线框显示',
- 'permissionId': '300',
- 'type': 'SDK'
- },
- {
- 'description': '大图浏览(20M)',
- 'name': '大图浏览(20M)',
- 'permissionId': '301',
- 'type': 'SDK'
- },
- {
- 'description': '着色模式显示支持',
- 'name': '着色模式显示支持',
- 'permissionId': '302',
- 'type': 'SDK'
- },
- {
- 'description': '缩放',
- 'name': '缩放',
- 'permissionId': '303',
- 'type': 'SDK'
- },
- {
- 'description': '平移',
- 'name': '平移',
- 'permissionId': '304',
- 'type': 'SDK'
- },
- {
- 'description': '图片显示',
- 'name': '图片显示',
- 'permissionId': '305',
- 'type': 'SDK'
- },
- {
- 'description': '外部参照显示',
- 'name': '外部参照显示',
- 'permissionId': '306',
- 'type': 'SDK'
- },
- {
- 'description': '布局显示和切换',
- 'name': '布局显示和切换',
- 'permissionId': '307',
- 'type': 'SDK'
- },
- {
- 'description': '图层面板',
- 'name': '图层面板',
- 'permissionId': '308',
- 'type': 'SDK'
- },
- {
- 'description': '图层显示/隐藏',
- 'name': '图层显示/隐藏',
- 'permissionId': '309',
- 'type': 'SDK'
- },
- {
- 'description': '命令行窗口',
- 'name': '命令行窗口',
- 'permissionId': '310',
- 'type': 'SDK'
- },
- {
- 'description': '线宽显示',
- 'name': '线宽显示',
- 'permissionId': '311',
- 'type': 'SDK'
- },
- {
- 'description': '栅格显示',
- 'name': '栅格显示',
- 'permissionId': '312',
- 'type': 'SDK'
- },
- {
- 'description': '外部参照面板',
- 'name': '外部参照面板',
- 'permissionId': '313',
- 'type': 'SDK'
- },
- {
- 'description': '系统参数设置',
- 'name': '系统参数设置',
- 'permissionId': '314',
- 'type': 'SDK'
- },
- {
- 'description': '测量长度/面积/角度/坐标/弧长',
- 'name': '测量长度/面积/角度/坐标/弧长',
- 'permissionId': '400',
- 'type': 'SDK'
- },
- {
- 'description': 'Text 单行文字',
- 'name': 'Text 单行文字',
- 'permissionId': '500',
- 'type': 'SDK'
- },
- {
- 'description': 'Revcloud 云线',
- 'name': 'Revcloud 云线',
- 'permissionId': '501',
- 'type': 'SDK'
- },
- {
- 'description': 'Leader 引线',
- 'name': 'Leader 引线',
- 'permissionId': '502',
- 'type': 'SDK'
- },
- {
- 'description': 'MLeader 多重引线',
- 'name': 'MLeader 多重引线',
- 'permissionId': '503',
- 'type': 'SDK'
- },
- {
- 'description': '图片(即图章功能)',
- 'name': '图片(即图章功能)',
- 'permissionId': '504',
- 'type': 'SDK'
- },
- {
- 'description': 'PLine 多段线',
- 'name': 'PLine 多段线',
- 'permissionId': '505',
- 'type': 'SDK'
- },
- {
- 'description': 'Rectangle 矩形',
- 'name': 'Rectangle 矩形',
- 'permissionId': '506',
- 'type': 'SDK'
- },
- {
- 'description': 'Circle 圆',
- 'name': 'Circle 圆',
- 'permissionId': '507',
- 'type': 'SDK'
- },
- {
- 'description': 'Arc 弧线',
- 'name': 'Arc 弧线',
- 'permissionId': '508',
- 'type': 'SDK'
- },
- {
- 'description': 'DWG导出',
- 'name': 'DWG导出',
- 'permissionId': '600',
- 'type': 'SDK'
- },
- {
- 'description': '图片输出',
- 'name': '图片输出',
- 'permissionId': '601',
- 'type': 'SDK'
- },
- {
- 'description': 'PDF输出',
- 'name': 'PDF输出',
- 'permissionId': '602',
- 'type': 'SDK'
- },
- {
- 'description': '添加预览水印',
- 'name': '添加预览水印',
- 'permissionId': '700',
- 'type': 'SDK'
- },
- {
- 'description': '书签、审图',
- 'name': '书签、审图',
- 'permissionId': '800',
- 'type': 'SDK'
- },
- {
- 'description': '批注面版',
- 'name': '批注面版',
- 'permissionId': '801',
- 'type': 'SDK'
- },
- {
- 'description': '书签定义和调用接口、布局信息和坐标转换接口、缩放比例和生成截图接口等',
- 'name': '书签定义和调用接口、布局信息和坐标转换接口、缩放比例和生成截图接口等',
- 'permissionId': '900',
- 'type': 'SDK'
- },
- ]
- }
- class Request {
- constructor() {
- }
- getData(url, ticket, params, resType) {
- return new Promise((res, rej) => {
- let paramsArr = []
- for (let k in params) {
- paramsArr.push(encodeURIComponent(k) + '=' + encodeURIComponent(params[k]))
- }
- if (params) {
- url = url + '?' + paramsArr.join('&')
- }
- let ajax = new XMLHttpRequest()
- let ip = ticket ? userUrl : baseUrl
- ajax.open('GET', ip + url)
- resType && (ajax.responseType = resType)
- ticket && Object.keys(ticket).forEach(key => {
- ajax.setRequestHeader(key, ticket[key])
- })
- 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 if (data.code === 2060) {
- rej(data.code)
- } else rej(data.msg)
- }
- }
- })
- }
- postData(url, ticket, params, resType) {
- return new Promise((res, rej) => {
- let ajax = new XMLHttpRequest()
- let ip = ticket ? userUrl : baseUrl
- ajax.open('POST', ip + url)
- resType && (ajax.responseType = resType)
- ajax.setRequestHeader('content-type', 'application/json')
- ticket && Object.keys(ticket).forEach(key => {
- ajax.setRequestHeader(key, ticket[key])
- })
- ajax.send(params)
- ajax.onreadystatechange = function () {
- if (ajax.readyState === 4) {
- if (ajax.status === 200) {
- res(ajax.response)
- } else {
- rej()
- }
- }
- }
- })
- }
- get(url, params, resType) {
- if (appKey) {
- let ticket = { 'x-ca-key': appKey }
- return this.getData(url, ticket, params, resType)
- } else {
- return this.getData('/auth/js/ticket?url=' + url).then(res => {
- let ticket = {
- 'x-ca-key': res.appKey,
- 'x-ca-nonce': res.nonce,
- 'x-ca-date': res.timestamp,
- 'x-ca-signature': res.signature,
- }
- return ticket
- }).then(ticket => {
- return this.getData(url, ticket, params, resType)
- })
- }
- }
- post(url, params, resType) {
- if (appKey) {
- let ticket = { 'x-ca-key': appKey }
- return this.postData(url, ticket, params, resType)
- } else {
- return this.getData('/auth/js/ticket?url=' + url).then(res => {
- let ticket = {
- 'x-ca-key': res.appKey,
- 'x-ca-nonce': res.nonce,
- 'x-ca-date': res.timestamp,
- 'x-ca-signature': res.signature,
- }
- return ticket
- }).then(ticket => {
- return this.postData(url, ticket, params, resType)
- })
- }
- }
- 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(fileId) {
- return this.get('/api/js/v1/font/gzip', { fileId: fileId, projectId: 0 }, 'arraybuffer')
- }
- getTransferStatus(){
- let params = { id: docId }
- params = JSON.stringify(params)
- return this.post('/api/js/v1/doc/transferStatus', params,'json')
- }
- transferDoc() {
- return this.get('/api/js/v1/doc/details', { docId: docId })
- }
- getDisplayData(handleId = 34) {
- return this.get('/api/js/v1/layout/lmf', { projectId: 0, handleId, docId: docId })
- }
- filePartDownload(lmfId) {
- return this.get('/api/js/v1/file/partDownload', { fileId: lmfId }, 'arraybuffer')
- }
- getFileInfo(lmfId) {
- return this.get('/api/js/v1/file/info', { id: lmfId })
- }
- getXrefRelation() {
- return this.get('/api/js/v1/xref/info', { id: docId })
- }
- getXrefThumb(fileId) {
- return this.get('/api/js/v1/file/partDownload', { fileId: fileId }, 'arraybuffer').then(res => {
- let url = this.arrayBufferToBase64(res);
- return 'data:image/jpeg;base64,' + url;
- })
- }
- getXrefFile(handleId, xrefIds) {
- let params = { docId: docId, handleId: handleId, xrefIds: xrefIds }
- params = JSON.stringify(params)
- return this.post('/api/js/v1/xref', params, 'json')
- }
- getImageInfo(filePath) {
- let params = { docId: docId, path: filePath }
- params = JSON.stringify(params)
- return this.post('/api/js/v1/link', params, 'json')
- }
- getImageData(fileId) {
- return this.get('/api/js/v1/file/partDownload', { fileId: fileId }, 'arraybuffer').then(res => {
- let url = this.arrayBufferToBase64(res);
- return 'data:image/jpeg;base64,' + url;
- })
- }
- getPlotData(params) {
- let data = JSON.stringify(params)
- return this.post('/api/js/v1/doc/print', data, 'arraybuffer')
- }
- getBatchPlot(params) {
- let data = JSON.stringify(params)
- return this.post('/api/js/v1/doc/batchPrint', data, 'arraybuffer')
- }
- getRegenData(params) {
- Object.assign(params, { docId: docId })
- let data = JSON.stringify(params)
- return this.post('/api/js/v1/layout/regen', data, 'arraybuffer')
- }
- }
- ZwCloud2D.ZwDataProcessor.ZwSetConnectUrl = (url1, url2) => {
- userUrl = url1
- baseUrl = url2;
- }
- ZwCloud2D.ZwDataProcessor.ZwSetAppKey = (key) => {
- appKey = key
- }
- ZwCloud2D.ZwDataProcessor.ZwSetLoadDwg = (path) => {
- docId = path;
- }
- ZwCloud2D.ZwDataProcessor.ZwLoad = () => {
- let req = new Request();
- // 切换布局时候触发回调
- ZwCloud2D.ZwMessageCallback.ZwEvtChangeLayout = layout => {
- req.getDisplayData(layout.handleId).then(result => {
- ZwCloud2D.ZwDataProcessor.ZwGetLmfData(result.lmfId).then(lmfInfo => {
- if (lmfInfo) {
- function zcGetFileInfo() {
- req.getFileInfo(result.lmfId).then(fileInfo => {
- let curTimestamp = new Date(fileInfo.updateTime || fileInfo.createTime).getTime();
- if (lmfInfo.hasCache && curTimestamp.toString() === lmfInfo.timestamp) {
- ZwCloud2D.ZwDataManager.ZwSetDwgData(result.lmfId)
- } else {
- req.filePartDownload(result.lmfId).then(lmfInfo => {
- ZwCloud2D.ZwDataManager.ZwSetDwgData(result.lmfId, lmfInfo, curTimestamp)
- })
- }
- }).catch((res) => {
- if (res === 2060) {
- this.timer = setTimeout(() => {
- clearTimeout(this.timer)
- zcGetFileInfo()
- }, 3000);
- } else {
- console.error(res)
- }
- })
- }
- zcGetFileInfo()
- }
- });
- }).catch(error => {
- console.error(error)
- })
- };
- ZwCloud2D.ZwMessageCallback.ZwEvtLoadXrefData = data => {
- req.getXrefFile(data.handleId, data.xrefIds).then(xrefFile => {
- if (xrefFile.data.fileId) {
- req.filePartDownload(xrefFile.data.fileId).then(fileData => {
- ZwCloud2D.ZwDataManager.ZwSetXrefData(fileData);
- })
- } else {
- ZwCloud2D.ZwDataManager.ZwSetXrefData();
- }
- }).catch(() => {
- ZwCloud2D.ZwDataManager.ZwSetXrefData();
- })
- };
- ZwCloud2D.ZwMessageCallback.ZwEvtLoadImageData = data => {
- let pArr = new Array();
- let imageMap = new Map();
- data.forEach((imageUrl) => {
- pArr.push(new Promise((res, rej) => {
- req.getImageInfo(imageUrl).then(info => {
- if (info.data.fileId) {
- req.getImageData(info.data.fileId).then(result => {
- imageMap.set(imageUrl, result);
- res(true)
- })
- } else {
- res(true)
- }
- }).catch(err => {
- res(true);
- });
- }));
- });
- Promise.all(pArr).then(() => {
- ZwCloud2D.ZwDataManager.ZwSetImageData(imageMap);
- }).catch(error => {
- console.error(error)
- });
- };
- ZwCloud2D.ZwMessageCallback.ZwEvtPlotDwg = (data) => {
- let params = Object.assign(data.params, { docId: docId })
- if (params.isZwPlot) {
- req.getBatchPlot(params).then(res => {
- ZwCloud2D.ZwDataManager.ZwSetPlotData(data, res);
- ZwCloud2D.ZwEditor.ZwSetLoadingState(false);
- })
- } else {
- req.getPlotData(params).then(res => {
- ZwCloud2D.ZwDataManager.ZwSetPlotData(data, res);
- ZwCloud2D.ZwEditor.ZwSetLoadingState(false);
- })
- }
- };
- ZwCloud2D.ZwMessageCallback.ZwEvtGetRegenData = (data) => {
- req.getRegenData(data).then(res => {
- ZwCloud2D.ZwDataManager.ZwSetRegenData(res);
- }).catch(() => {
- ZwCloud2D.ZwDataManager.ZwSetRegenData(null);
- });
- };
- let ZwMain=()=>{
- req.transferDoc().then(data => {
- ZwCloud2D.ZwDataManager.ZwSetSdkPermission(fullVersionPermissions);
-
- // 显示当前布局的数据
- ZwCloud2D.ZwDataManager.ZwSetDwgInfo({ fonts: data.fonts, layouts: data.layouts, name: data.name }).then(res => {
- let pArr = []
- let fontArr = []
-
- res.missingFonts.forEach(font => {
- let arr = font.name.split('.');
- let type = (arr[arr.length - 1] || '').toUpperCase();
-
- pArr.push(req.fontDownload(font.fileId).then(data => {
- if (data.byteLength > 0) {
- fontArr.push(
- {
- name: font.name,
- type: type,
- data: data,
- }
- );
- }
- }));
- });
-
- Promise.all(pArr).then(() => {
- ZwCloud2D.ZwDataManager.ZwSetFontDataList(fontArr).then(() => {
-
- req.getDisplayData(res.layout.handleId).then(result => {
-
- req.getXrefRelation().then(xrefRelations => {
- let xrefPromises = [];
- let srcMap = new Map();
- xrefRelations.forEach((xrefRelation) => {
- if (xrefRelation.fileId) {
- xrefPromises.push(new Promise((res, rej) => {
- req.getXrefThumb(xrefRelation.fileId).then(xrefThumb => {
- srcMap.set(xrefRelation.fileId, xrefThumb);
- res(true);
- });
- }));
- }
- });
- Promise.all(xrefPromises).then(() => {
- let params = { docName: data.name, xrefRelations: xrefRelations, srcMap: srcMap };
- ZwCloud2D.ZwDataManager.ZwSetXrefList(params);
- }).catch(() => {
- let params = { docName: data.name, xrefRelations: xrefRelations, srcMap: srcMap };
- ZwCloud2D.ZwDataManager.ZwSetXrefList(params);
- });
- });
-
- req.getFileInfo(result.lmfId).then(lmfInfo => {
- let curTimestamp = new Date(lmfInfo.updateTime || lmfInfo.createTime).getTime();
- if (res.hasCache && res.timestamp === curTimestamp.toString()) {
- ZwCloud2D.ZwDataManager.ZwSetDwgData(result.lmfId)
- } else {
- req.filePartDownload(result.lmfId).then(lmfInfo => {
- ZwCloud2D.ZwDataManager.ZwSetDwgData(result.lmfId, lmfInfo, curTimestamp)
- })
- }
- }).catch(error => {
- console.error(error)
- })
-
- }).catch(error => {
- console.error(error)
- })
- })
- }).catch(error => {
- console.error(error)
- })
- });
- }).catch(error => {
- console.error(error)
- });
- }
- let getTransferStatus=()=>{
- req.getTransferStatus().then(fileInfo=>{
- let status=fileInfo.data.status
- if (status === 1) {
- let timer = setTimeout(() => {
- clearTimeout(timer)
- getTransferStatus()
- }, 3000);
- } else if(status === 2) {
- ZwMain()
- }else if(status === 3){
- console.error(fileInfo.failedReason)
- }
- }).catch(err=>{
- console.error(err)
- })
- }
- getTransferStatus()
- }
|