205 lines
5.6 KiB
JavaScript
205 lines
5.6 KiB
JavaScript
/**
|
|
* @desc 加载资源
|
|
* @method on
|
|
* @return Promise
|
|
* @example YJ.on().then(()=>{
|
|
*
|
|
* })
|
|
* */
|
|
// import * as THREE from '../../static/3rdparty/three/three.module.min.js';
|
|
|
|
function on(
|
|
options = {
|
|
isc: false,
|
|
excel: false,
|
|
flv: false,
|
|
rtsp: false,
|
|
hls: false,
|
|
host: '',
|
|
username: '',
|
|
password: ''
|
|
}
|
|
) {
|
|
// window.THREE = THREE
|
|
return new Promise((resolve, reject) => {
|
|
let prefix = getSourceRootPath()
|
|
let sources = [
|
|
'/custom/css/index.css',
|
|
'/arrow/algorithm.js',
|
|
'/arrow/plotUtil.js',
|
|
'/3rdparty/turf.min.js',
|
|
'/3rdparty/fabric.min.js',
|
|
'/3rdparty/proj4.js',
|
|
'/3rdparty/pako.min.js',
|
|
'/3rdparty/heatmap.js',
|
|
'/3rdparty/tween.umd.js',
|
|
// '/3rdparty/video.min.js',
|
|
// '/3rdparty/videojs-contrib-hls.min.js',
|
|
'/Cesium/Cesium.js',
|
|
'/Cesium/Widgets/widgets.css',
|
|
'/3rdparty/ewPlugins.min.js',
|
|
'/3rdparty/wangeditor/index.js',
|
|
'/3rdparty/wangeditor/style.css',
|
|
'/3rdparty/html2canvas.min.js',
|
|
'/3rdparty/kriging.js',
|
|
'/3rdparty/echarts.min.js',
|
|
'/3rdparty/clipboard.min.js',
|
|
'/3rdparty/libgif.js',
|
|
'/3rdparty/liveplayer/liveplayer-element.min.js',
|
|
'/3rdparty/jedate/jedate.min.js',
|
|
'/3rdparty/jedate/skin/jedate.css',
|
|
// '/3rdparty/ewColorPicker/ew-color-picker.min.css',
|
|
// '/3rdparty/ewColorPicker/ew-color-picker.min.js',
|
|
// '/3rdparty/modelloadermin.js',
|
|
// '/3rdparty/element-ui/index.css',
|
|
// '/3rdparty/element-ui/icon.css',
|
|
// '/3rdparty/element-ui/index.js',
|
|
|
|
// '/3rdparty/viewerCesiumNavigationMixin.min.js',
|
|
]
|
|
|
|
window['YJSDK3rdpartyResourceAddress'] = prefix + '/3rdparty'
|
|
|
|
if (options.ws) {
|
|
sources.push('/3rdparty/reconnecting-websocket.js')
|
|
}
|
|
|
|
if (options.flv || options.rtsp) {
|
|
sources.push('/3rdparty/flv.min.js')
|
|
}
|
|
let sourceThree = document.createElement('script')
|
|
sourceThree.setAttribute('type', 'module')
|
|
sourceThree.textContent = `
|
|
import * as THREE from '${prefix}/3rdparty/three/three.module.min.js';
|
|
window.THREE = THREE
|
|
`
|
|
document.querySelector('html').appendChild(sourceThree)
|
|
let sourceSVG = document.createElement('script')
|
|
sourceSVG.setAttribute('type', 'module')
|
|
sourceSVG.textContent = `
|
|
import { SVGLoader } from '${prefix}/3rdparty/three/jsm/loaders/SVGLoader.js';
|
|
window.SVGLoader = SVGLoader
|
|
`
|
|
document.querySelector('html').appendChild(sourceSVG)
|
|
let promise_arr = []
|
|
sources.forEach(uri => {
|
|
let source
|
|
if (uri.endsWith('.js')) {
|
|
source = document.createElement('script')
|
|
source.setAttribute('type', 'text/javascript')
|
|
source.setAttribute('src', prefix + uri)
|
|
} else {
|
|
source = document.createElement('link')
|
|
source.setAttribute('rel', 'stylesheet')
|
|
source.setAttribute('href', prefix + uri)
|
|
}
|
|
document.querySelector('html').appendChild(source)
|
|
|
|
let promise = new Promise((res, reject) => {
|
|
source.onload = () => {
|
|
res()
|
|
}
|
|
}).then(result => result)
|
|
promise_arr.push(promise)
|
|
})
|
|
|
|
Promise.all(promise_arr)
|
|
.then(data => {
|
|
// let source1
|
|
// source1 = document.createElement('script')
|
|
// source1.setAttribute('type', 'text/javascript')
|
|
// source1.setAttribute('src', prefix + '/3rdparty/modelloader.js')
|
|
// document.querySelector('html').appendChild(source1)
|
|
let source
|
|
source = document.createElement('script')
|
|
source.setAttribute('type', 'text/javascript')
|
|
source.setAttribute(
|
|
'src',
|
|
prefix + '/3rdparty/viewerCesiumNavigationMixin.min.js'
|
|
)
|
|
document.querySelector('html').appendChild(source)
|
|
source.onload = () => {
|
|
setHost(options.host)
|
|
if (options.username) {
|
|
//可以不登录,不登录时无法加载服务端的数据
|
|
login(options).then(r => {
|
|
resolve()
|
|
})
|
|
} else {
|
|
resolve()
|
|
}
|
|
}
|
|
|
|
let source2
|
|
source2 = document.createElement('script')
|
|
source2.setAttribute('type', 'text/javascript')
|
|
source2.setAttribute('src', prefix + '/3rdparty/CesiumHeatmap.js')
|
|
document.querySelector('html').appendChild(source2)
|
|
})
|
|
.catch(e => {
|
|
reject(e)
|
|
})
|
|
})
|
|
}
|
|
|
|
let yjTokenKey = '9e549c39c542fc9f835c2a5c260f8cc1'
|
|
let hostkey = '40ef4712c26360d01e397ebcb0d031ca'
|
|
|
|
async function login(options = {}) {
|
|
let rsp = await fetch(
|
|
(options.host || '') + '/yjearth4.0/api/v1/user/sign-in',
|
|
{
|
|
method: 'post',
|
|
body: JSON.stringify({
|
|
username: options.username,
|
|
password: options.password
|
|
}),
|
|
headers: {
|
|
'Content-Type': 'application/json'
|
|
}
|
|
}
|
|
)
|
|
let res = await rsp.text()
|
|
res = JSON.parse(res)
|
|
if (res.code === 0) {
|
|
setHost(options.host)
|
|
if (res.token) {
|
|
setToken(res.token)
|
|
} else {
|
|
setToken(res.data.token)
|
|
}
|
|
}
|
|
}
|
|
|
|
function setHost(host) {
|
|
localStorage.setItem(hostkey, host || '')
|
|
}
|
|
|
|
function getHost() {
|
|
return localStorage.getItem(hostkey) || ''
|
|
}
|
|
|
|
function setToken(token) {
|
|
localStorage.setItem(yjTokenKey, token)
|
|
}
|
|
|
|
function getToken() {
|
|
return localStorage.getItem(yjTokenKey)
|
|
}
|
|
|
|
function getSourceRootPath() {
|
|
let sdkName = 'YJEarth.min.js'
|
|
let scripts = document.querySelectorAll('script')
|
|
let prefix = ''
|
|
scripts.forEach(item => {
|
|
if (item.src.indexOf(sdkName) > -1) {
|
|
let arr = item.src.split('/')
|
|
arr.pop()
|
|
prefix = arr.join('/')
|
|
}
|
|
})
|
|
return prefix
|
|
}
|
|
|
|
export { on, setToken, getToken, getHost }
|