代码迁移

This commit is contained in:
zh
2025-07-03 13:54:01 +08:00
parent b04de8a084
commit 2a4da33e62
985 changed files with 358292 additions and 13 deletions

65
src/Tools/getGoodsList.js Normal file
View File

@ -0,0 +1,65 @@
import { getHost, getToken } from "../on";
let list = []
let promise_arr = []
let load = false
function apiQueryGoodsList() {
load = false
return new Promise(async (resolve, reject) => {
let host = getHost()
let url = ""
const params = {
page: 1,
page_size: 99999999
};
const queryString = new URLSearchParams(params).toString();
if (host.endsWith("yjearth4.0"))
url = `${host}/api/v1/goods/list?${queryString}`
else
url = `${host}/yjearth4.0/api/v1/goods/list?${queryString}`
fetch(url, {
method: 'get',
headers: {
'Content-Type': 'application/json',
"token": getToken(),
"Authorization": "Bearer " + getToken(),
}
}).then((response) => {
if (response.status === 200) {
response.json().then((data) => {
if (data.code === 200 || data.code === 0) {
if (data.data && data.data.list) {
list = data.data.list
resolve()
for (let i = 0; i < promise_arr.length; i++) {
const element = promise_arr[i];
element()
}
}
}
load = true
})
}
else {
load =true
}
})
})
}
function getGoodsList() {
return new Promise(async (resolve, reject) => {
let a = () => {
return resolve(list)
}
if (load) {
return resolve(list)
}
else {
promise_arr.push(a)
}
})
}
export { apiQueryGoodsList, getGoodsList }

1073
src/Tools/index.js Normal file

File diff suppressed because it is too large Load Diff

1069
src/Tools/proj.js Normal file

File diff suppressed because it is too large Load Diff

414
src/Tools/projConvert.js Normal file
View File

@ -0,0 +1,414 @@
import Dialog from '../BaseDialog'
import { Proj } from './proj'
import { legp } from '../Obj/Element/datalist';
let _DialogObject
const open = async (sdk, closeCallBack) => {
let proj = new Proj()
if (_DialogObject && _DialogObject.close) {
_DialogObject.close()
_DialogObject = null
}
_DialogObject = await new Dialog(sdk.viewer._container, {
title: '功能转换',
left: '180px',
top: '100px',
closeCallBack: () => {
closeCallBack && closeCallBack()
}
})
await _DialogObject.init()
let html = `
<span class="custom-divider"></span>
<div class="div-item">
<div class="row">
<div class="col input-select-box">
<span class="label" style="flex: 0 0 60px;">输入格式</span>
<div class="input-select"></div>
</div>
</div>
</div>
<div class="div-item item" data-type="${0}">
<span class="custom-divider"></span>
<p style="font-size: 16px;padding-bottom: 6px;margin-top: 10px;margin-bottom: 5px;">
<span style="margin-right: 10px;">度</span>
<span style="font-size: 12px;margin-bottom: 5px;color: #F16C55">例如116.6°, 39.9°</span>
</p>
<div class="row">
<div class="col">
<span class="label" style="flex: auto;">经度</span>
<input class="input lng" type="number" min="-180" max="180" value="0" title="">
</div>
<div class="col" style="margin: 0;">
<span class="label">纬度</span>
<input class="input lat" type="number" min="-90" max="90" value="0" title="">
</div>
<div class="col" style="flex: 0 0 24px;">
<i class="icon-copy-box" title="复制" data-clipboard-action="copy" data-clipboard-target=".input" style="cursor: pointer;">
<svg class="icon-copy" style="margin: 4px;margin-bottom: 0px;"><use xlink:href="#yj-icon-copy"></use></svg>
</i>
<button class="convert" style="margin-left: 10px;">转 换</button>
</div>
</div>
</div>
<div class="div-item item" data-type="${1}">
<span class="custom-divider"></span>
<p style="font-size: 16px;padding-bottom: 6px;margin-top: 10px;margin-bottom: 5px;">
<span style="margin-right: 10px;">度分</span>
<span style="font-size: 12px;margin-bottom: 5px;color: #F16C55">例如95°10.1702', 49°12.4015'</span>
</p>
<div class="row">
<div class="col" style="flex-direction: column;">
<div class="row" style="margin-bottom: 15px;">
<span class="label">经度</span>
<input class="input lng-dm-d" style="flex: 1;" type="number" min="-180" max="180" value="0" title="">
<span class="label" style="flex: 0 0 14px;margin: 0 10px;">度</span>
<input class="input lng-dm-m" style="flex: 1;" type="number" min="0" max="60" value="0" title="">
<span class="label" style="flex: 0 0 14px;margin: 0 10px;">分</span>
<span class="top-line"></span>
</div>
<div class="row">
<span class="label">纬度</span>
<input class="input lat-dm-d" style="flex: 1;" type="number" min="-90" max="90" value="0" title="">
<span class="label" style="flex: 0 0 14px;margin: 0 10px;">度</span>
<input class="input lat-dm-m" style="flex: 1;" type="number" min="0" max="60" value="0" title="">
<span class="label" style="flex: 0 0 14px;margin: 0 10px;">分</span>
<span class="bottom-line"></span>
</div>
</div>
<div class="col" style="flex: 0 0 24px;margin: 0;">
<i class="icon-copy-box" title="复制" data-clipboard-action="copy" data-clipboard-target=".input" style="cursor: pointer;position: relative;left: -30px;">
<svg class="icon-copy" style="margin: 4px;margin-bottom: 0px;"><use xlink:href="#yj-icon-copy"></use></svg>
</i>
<button class="convert" style="margin-left: 10px;">转 换</button>
</div>
</div>
</div>
<div class="div-item item" data-type="${2}">
<span class="custom-divider"></span>
<p style="font-size: 16px;padding-bottom: 6px;margin-top: 10px;margin-bottom: 5px;">
<span style="margin-right: 10px;">度分秒</span>
<span style="font-size: 12px;margin-bottom: 5px;color: #F16C55">例如11°18'54.37", 39°13'46.57"</span>
</p>
<div class="row">
<div class="col" style="flex-direction: column;">
<div class="row" style="margin-bottom: 15px;">
<span class="label">经度</span>
<input class="input lng-dms-d" style="flex: 1;" type="number" min="-180" max="180" value="0" title="">
<span class="label" style="flex: 0 0 14px;margin: 0 10px;">度</span>
<input class="input lng-dms-m" style="flex: 1;" type="number" min="0" max="60" value="0" title="">
<span class="label" style="flex: 0 0 14px;margin: 0 10px;">分</span>
<input class="input lng-dms-s" style="flex: 1;" type="number" min="0" max="60" value="0" title="">
<span class="label" style="flex: 0 0 14px;margin: 0 10px;">秒</span>
<span class="top-line"></span>
</div>
<div class="row">
<span class="label">纬度</span>
<input class="input lat-dms-d" style="flex: 1;" type="number" min="-90" max="90" value="0" title="">
<span class="label" style="flex: 0 0 14px;margin: 0 10px;">度</span>
<input class="input lat-dms-m" style="flex: 1;" type="number" min="0" max="60" value="0" title="">
<span class="label" style="flex: 0 0 14px;margin: 0 10px;">分</span>
<input class="input lat-dms-s" style="flex: 1;" type="number" min="0" max="60" value="0" title="">
<span class="label" style="flex: 0 0 14px;margin: 0 10px;">秒</span>
<span class="bottom-line"></span>
</div>
</div>
<div class="col" style="flex: 0 0 24px; margin: 0;">
<i class="icon-copy-box" title="复制" data-clipboard-action="copy" data-clipboard-target=".input" style="cursor: pointer;position: relative;left: -30px;">
<svg class="icon-copy" style="margin: 4px;margin-bottom: 0px;"><use xlink:href="#yj-icon-copy"></use></svg>
</i>
<button class="convert" style="margin-left: 10px;">转 换</button>
</div>
</div>
</div>
<span class="custom-divider" style="order: 10;margin-top: 12px;"></span>
`
_DialogObject._element.body.className = _DialogObject._element.body.className + ' proj-convert'
let contentElm = document.createElement('div')
contentElm.style.width = '460px'
contentElm.style.display = 'flex'
contentElm.style.flexDirection = 'column'
contentElm.innerHTML = html
_DialogObject.contentAppChild(contentElm)
let items = contentElm.getElementsByClassName('item')
for (let i = 0; i < items.length; i++) {
let type = items[i].getAttribute('data-type')
let convertElm = items[i].getElementsByClassName('convert')[0]
let copyElm = items[i].getElementsByClassName('icon-copy-box')[0]
let clipboard = new ClipboardJS(copyElm, {
text: (trigger) => {
let text, lngD, lngM, lngS, latD, latM, latS
switch (type) {
case 0:
case '0':
let lng = items[i].getElementsByClassName('lng')[0].value
let lat = items[i].getElementsByClassName('lat')[0].value
text = lng + '°,' + lat + '°'
break
case 1:
case '1':
lngD = contentElm.getElementsByClassName('lng-dm-d')[0].value
lngM = contentElm.getElementsByClassName('lng-dm-m')[0].value
latD = contentElm.getElementsByClassName('lat-dm-d')[0].value
latM = contentElm.getElementsByClassName('lat-dm-m')[0].value
text = lngD + '°' + lngM + "'," + latD + '°' + latM + "'"
break
case 2:
case '2':
lngD = contentElm.getElementsByClassName('lng-dms-d')[0].value
lngM = contentElm.getElementsByClassName('lng-dms-m')[0].value
lngS = contentElm.getElementsByClassName('lng-dms-s')[0].value
latD = contentElm.getElementsByClassName('lat-dms-d')[0].value
latM = contentElm.getElementsByClassName('lat-dms-m')[0].value
latS = contentElm.getElementsByClassName('lat-dms-s')[0].value
text =
lngD +
'°' +
lngM +
"'" +
lngS +
'",' +
latD +
'°' +
latM +
"'" +
latS +
'"'
break
}
return text;
}
});
clipboard.on('success', function (e) {
window.ELEMENT &&
window.ELEMENT.Message({
message: '已复制到剪切板',
type: 'success',
duration: 1500
})
});
clipboard.on('error', function (e) {
window.ELEMENT &&
window.ELEMENT.Message({
message: '复制失败',
type: 'warning',
duration: 1500
})
});
convertElm.addEventListener('click', () => {
// let a = proj.degreesToDMS(100.345546743)
let lng,
lat,
lngD,
lngM,
lngS,
latD,
latM,
latS,
lngDM,
latDM,
lngDMS,
latDMS,
lngdnArr1,
lngdnArr2,
latdnArr1,
latdnArr2,
lngdnsArr1,
lngdnsArr2,
lngdnsArr3,
latdnsArr1,
latdnsArr2,
latdnsArr3
switch (type) {
case 0:
case '0':
lng = items[i].getElementsByClassName('lng')[0].value
lat = items[i].getElementsByClassName('lat')[0].value
lngDM = proj.degreesToDMS(lng, true)
latDM = proj.degreesToDMS(lat, true)
lngdnArr1 = lngDM.split('°')
lngdnArr2 = lngdnArr1[1].split("'")
latdnArr1 = latDM.split('°')
latdnArr2 = latdnArr1[1].split("'")
contentElm.getElementsByClassName('lng-dm-d')[0].value = lngdnArr1[0]
contentElm.getElementsByClassName('lng-dm-m')[0].value = lngdnArr2[0]
contentElm.getElementsByClassName('lat-dm-d')[0].value = latdnArr1[0]
contentElm.getElementsByClassName('lat-dm-m')[0].value = latdnArr2[0]
lngDMS = proj.degreesToDMS(lng)
latDMS = proj.degreesToDMS(lat)
lngdnsArr1 = lngDMS.split('°')
lngdnsArr2 = lngdnsArr1[1].split("'")
lngdnsArr3 = lngdnsArr2[1].split('"')
latdnsArr1 = latDMS.split('°')
latdnsArr2 = latdnsArr1[1].split("'")
latdnsArr3 = latdnsArr2[1].split('"')
contentElm.getElementsByClassName('lng-dms-d')[0].value =
lngdnsArr1[0]
contentElm.getElementsByClassName('lng-dms-m')[0].value =
lngdnsArr2[0]
contentElm.getElementsByClassName('lng-dms-s')[0].value =
lngdnsArr3[0]
contentElm.getElementsByClassName('lat-dms-d')[0].value =
latdnsArr1[0]
contentElm.getElementsByClassName('lat-dms-m')[0].value =
latdnsArr2[0]
contentElm.getElementsByClassName('lat-dms-s')[0].value =
latdnsArr3[0]
break
case 1:
case '1':
lngD = items[i].getElementsByClassName('lng-dm-d')[0].value
lngM = items[i].getElementsByClassName('lng-dm-m')[0].value
latD = items[i].getElementsByClassName('lat-dm-d')[0].value
latM = items[i].getElementsByClassName('lat-dm-m')[0].value
lng = proj.dmsToDecimal(lngD + '°' + lngM + "'", true)
lat = proj.dmsToDecimal(latD + '°' + latM + "'", true)
contentElm.getElementsByClassName('lng')[0].value = lng
contentElm.getElementsByClassName('lat')[0].value = lat
lngDMS = proj.degreesToDMS(lng)
latDMS = proj.degreesToDMS(lat)
lngdnsArr1 = lngDMS.split('°')
lngdnsArr2 = lngdnsArr1[1].split("'")
lngdnsArr3 = lngdnsArr2[1].split('"')
latdnsArr1 = latDMS.split('°')
latdnsArr2 = latdnsArr1[1].split("'")
latdnsArr3 = latdnsArr2[1].split('"')
contentElm.getElementsByClassName('lng-dms-d')[0].value =
lngdnsArr1[0]
contentElm.getElementsByClassName('lng-dms-m')[0].value =
lngdnsArr2[0]
contentElm.getElementsByClassName('lng-dms-s')[0].value =
lngdnsArr3[0]
contentElm.getElementsByClassName('lat-dms-d')[0].value =
latdnsArr1[0]
contentElm.getElementsByClassName('lat-dms-m')[0].value =
latdnsArr2[0]
contentElm.getElementsByClassName('lat-dms-s')[0].value =
latdnsArr3[0]
break
case 2:
case '2':
lngD = items[i].getElementsByClassName('lng-dms-d')[0].value
lngM = items[i].getElementsByClassName('lng-dms-m')[0].value
lngS = items[i].getElementsByClassName('lng-dms-s')[0].value
latD = items[i].getElementsByClassName('lat-dms-d')[0].value
latM = items[i].getElementsByClassName('lat-dms-m')[0].value
latS = items[i].getElementsByClassName('lat-dms-s')[0].value
lngDMS = lngD + '°' + lngM + "'" + lngS + '"'
latDMS = latD + '°' + latM + "'" + latS + '"'
lng = proj.dmsToDecimal(lngDMS)
lat = proj.dmsToDecimal(latDMS)
contentElm.getElementsByClassName('lng')[0].value = lng
contentElm.getElementsByClassName('lat')[0].value = lat
lngDM = proj.degreesToDMS(lng, true)
latDM = proj.degreesToDMS(lat, true)
lngdnArr1 = lngDM.split('°')
lngdnArr2 = lngdnArr1[1].split("'")
latdnArr1 = latDM.split('°')
latdnArr2 = latdnArr1[1].split("'")
contentElm.getElementsByClassName('lng-dm-d')[0].value = lngdnArr1[0]
contentElm.getElementsByClassName('lng-dm-m')[0].value = lngdnArr2[0]
contentElm.getElementsByClassName('lat-dm-d')[0].value = latdnArr1[0]
contentElm.getElementsByClassName('lat-dm-m')[0].value = latdnArr2[0]
break
}
window.ELEMENT &&
window.ELEMENT.Message({
message: '转换成功',
type: 'success',
duration: 1500
})
for (let m = 0; m < items.length; m++) {
items[m].style.display = 'block'
}
})
if (i == 0) {
items[i].style.order = 0
items[i].style.display = 'block'
convertElm.style.display = 'inline-block'
} else {
items[i].style.order = 1
items[i].style.display = 'none'
convertElm.style.display = 'none'
}
}
let inputElms = contentElm.getElementsByTagName('input')
for (let i = 0; i < inputElms.length; i++) {
inputElms[i].addEventListener('blur', (e) => {
if (!e.target.value) {
e.target.value = 0
}
let value = Number(e.target.value)
if ((e.target.max) && value > Number(e.target.max)) {
value = Number(e.target.max)
}
if ((e.target.min) && value < Number(e.target.min)) {
value = Number(e.target.min)
}
e.target.value = value
})
}
let selectData = [{
name: '度',
value: '度',
key: 0
},
{
name: '度分',
value: '度分',
key: 1
},
{
name: '度分秒',
value: '度分秒',
key: 2
}
]
let selectDataLegpObject = legp(_DialogObject._element.content.getElementsByClassName('input-select-box')[0], ".input-select")
if (selectDataLegpObject) {
selectDataLegpObject.legp_search(selectData)
let selectDataLegpElm = _DialogObject._element.content.getElementsByClassName('input-select')[0].getElementsByTagName('input')[0]
selectDataLegpElm.value = selectData[0].value
selectDataLegpElm.addEventListener('input', () => {
for (let i = 0; i < selectData.length; i++) {
if (selectData[i].value === selectDataLegpElm.value) {
for (let m = 0; m < items.length; m++) {
let convertElm = items[m].getElementsByClassName('convert')[0]
if (m == selectData[i].key) {
items[m].style.order = 0
items[m].style.display = 'block'
convertElm.style.display = 'inline-block'
} else {
if (m === 0) {
items[m].style.order = 2
}
else {
items[m].style.order = 1
}
items[m].style.display = 'none'
convertElm.style.display = 'none'
}
}
break
}
}
})
}
}
const close = () => {
if (_DialogObject && _DialogObject.close) {
_DialogObject.close()
_DialogObject = null
}
}
export { open, close }

View File

@ -0,0 +1,197 @@
import Dialog from '../BaseDialog';
import { Proj } from './proj';
import { legp } from '../Obj/Element/datalist';
import MouseEvent from '../Event/index'
import MouseTip from '../MouseTip'
import Tools from '../Tools'
let _DialogObject
const open = async (sdk, closeCallBack) => {
let topls = new Tools()
let proj = new Proj()
let tip
let event
if (_DialogObject && _DialogObject.close) {
_DialogObject.close()
_DialogObject = null
}
_DialogObject = await new Dialog(sdk.viewer._container, {
title: '投影转换', left: '180px', top: '100px',
closeCallBack: () => {
closeCallBack && closeCallBack()
},
})
await _DialogObject.init()
let html = `
<span class="custom-divider"></span>
<div style="width: 540px;display: flex;">
<div class="row left" style="flex: 1;margin-bottom: 0;">
<div style="margin: 10px 0;flex: 1;display: flex;align-items: center;flex: 1;justify-content: space-between;">
<span class="lable-left-line">源坐标</span>
<button class="btn pick" style="margin-left: 20px;"><svg class="icon-edit"><use xlink:href="#yj-icon-edit"></use></svg>坐标拾取</button>
</div>
<div>
<div style="display: flex;margin-bottom: 12px;align-items: center;">
<span class="label" style="flex: 0 0 60px;">椭圆基准</span>
<div class="datalist_left"></div>
</div>
<div style="display: flex;margin-bottom: 12px;align-items: center;">
<span class="label" style="flex: 0 0 60px;">经度(x)</span>
<input class="input left-x" type="number" title="">
</div>
<div style="display: flex;margin-bottom: 10px;align-items: center;">
<span class="label" style="flex: 0 0 60px;">纬度(y)</span>
<input class="input left-y" type="number" title="">
</div>
</div>
</div>
<div style="display: flex;flex-direction: column;justify-content: center;margin: 28px 15px 0 15px;">
<button class="btn convert">坐标转换<i style="margin-top: 2px;margin-left: 5px;" class="el-icon-right"></i></button>
</div>
<div class="row right" style="flex: 1;margin-bottom: 0;">
<div style="margin: 10px 0;height: 32px; display: flex;align-items: center;flex: 1;justify-content: space-between;">
<span class="lable-left-line">目标坐标</span>
<button class="btn copy" data-clipboard-action="copy" data-clipboard-target=".input" style="margin-left: 20px;"><svg class="icon-copy"><use xlink:href="#yj-icon-copy"></use></svg>复制</button>
</div>
<div>
<div style="display: flex;margin-bottom: 12px;align-items: center;">
<span class="label" style="flex: 0 0 60px;">椭圆基准</span>
<div class="datalist_right"></div>
</div>
<div style="display: flex;margin-bottom: 12px;align-items: center;">
<span class="label" style="flex: 0 0 60px;">经度(x)</span>
<input class="input right-x" readonly="readonly">
</div>
<div style="display: flex;margin-bottom: 10px;align-items: center;">
<span class="label" style="flex: 0 0 60px;">纬度(y)</span>
<input class="input right-y" readonly="readonly">
</div>
</div>
</div>
</div>
<span class="custom-divider"></span>
`
let contentElm = document.createElement('div');
contentElm.innerHTML = html
_DialogObject.contentAppChild(contentElm)
// legp(contentElm, ".datalist").legp_search(tagData)
let tagData = []
let i = 0
proj.epsg_map.forEach((value, key) => {
i++
tagData.push(
{
name: `${i}.&nbsp;&nbsp;${key}(${value.name})`,
value: key
}
)
})
let legpObjectLeft = legp(contentElm.getElementsByClassName('left')[0], ".datalist_left")
legpObjectLeft.legp_search(tagData, true)
let legpObjectRight = legp(contentElm.getElementsByClassName('right')[0], ".datalist_right")
legpObjectRight.legp_search(tagData, true)
let pickElm = contentElm.getElementsByClassName('pick')[0]
let copyElm = contentElm.getElementsByClassName('copy')[0]
let datalistLeftInput = contentElm.getElementsByClassName('datalist_left')[0].getElementsByTagName('input')[0]
datalistLeftInput.value = tagData[0].value
legpObjectLeft.legp_searchActive(tagData[0].value)
let datalistRightInput = contentElm.getElementsByClassName('datalist_right')[0].getElementsByTagName('input')[0]
datalistRightInput.value = tagData[0].value
legpObjectRight.legp_searchActive(tagData[0].value)
let convertElm = contentElm.getElementsByClassName('convert')[0]
let leftXElm = contentElm.getElementsByClassName('left-x')[0]
let leftYElm = contentElm.getElementsByClassName('left-y')[0]
let rightXElm = contentElm.getElementsByClassName('right-x')[0]
let rightYElm = contentElm.getElementsByClassName('right-y')[0]
pickElm.addEventListener('click', () => {
tip && tip.destroy()
event && event.destroy()
tip = new MouseTip('左键选择起点坐标,右键取消', sdk)
event = new MouseEvent(sdk)
event.mouse_move((movement, cartesian) => {
tip.setPosition(
cartesian,
movement.endPosition.x,
movement.endPosition.y
)
})
event.mouse_left((movement, cartesian) => {
let pos84 = topls.cartesian3Towgs84(cartesian, sdk.viewer)
tip && tip.destroy()
event && event.destroy()
let result = proj.convert([{ x: Number(pos84.lng), y: Number(pos84.lat) }], 'EPSG:4326', datalistLeftInput.value)
if (result.code === 0) {
leftXElm.value = result.points[0].x
leftYElm.value = result.points[0].y
}
})
event.mouse_right((movement, cartesian) => {
tip && tip.destroy()
event && event.destroy()
})
})
convertElm.addEventListener('click', () => {
if (!leftXElm.value || !leftYElm.value) {
rightXElm.value = ''
rightYElm.value = ''
window.ELEMENT && window.ELEMENT.Message({
message: '请输入源坐标',
type: 'warning',
duration: 1500
});
return
}
let result = proj.convert([{ x: Number(leftXElm.value), y: Number(leftYElm.value) }], datalistLeftInput.value, datalistRightInput.value)
if (result.code === 0) {
rightXElm.value = result.points[0].x
rightYElm.value = result.points[0].y
}
else {
window.ELEMENT && window.ELEMENT.Message({
message: result.message,
type: 'warning',
duration: 1500
});
}
})
// 复制目标坐标
let clipboard = new ClipboardJS(copyElm, {
text: (trigger) => {
if (!rightXElm.value || !rightYElm.value) {
rightXElm.value = ''
rightYElm.value = ''
window.ELEMENT && window.ELEMENT.Message({
message: '复制失败,目标坐标为空!',
type: 'warning',
duration: 1500
});
}
else {
let text = `${rightXElm.value},${rightYElm.value}`
return text;
}
}
});
clipboard.on('success', function (e) {
window.ELEMENT &&
window.ELEMENT.Message({
message: '已复制到剪切板',
type: 'success',
duration: 1500
})
});
}
const close = () => {
if (_DialogObject && _DialogObject.close) {
_DialogObject.close()
_DialogObject = null
}
}
export { open, close }