raintee-maputils 1.0.22 → 1.0.24
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +219 -97
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -5754,74 +5754,74 @@ var RainteeGISUtil = /*#__PURE__*/Object.freeze({
|
|
|
5754
5754
|
});
|
|
5755
5755
|
|
|
5756
5756
|
const treeDataAdapter = (data) => {
|
|
5757
|
-
|
|
5758
|
-
|
|
5759
|
-
|
|
5760
|
-
|
|
5761
|
-
|
|
5762
|
-
|
|
5763
|
-
|
|
5764
|
-
|
|
5765
|
-
|
|
5766
|
-
|
|
5767
|
-
|
|
5768
|
-
|
|
5769
|
-
|
|
5770
|
-
|
|
5771
|
-
|
|
5772
|
-
|
|
5773
|
-
});
|
|
5774
|
-
i++;
|
|
5775
|
-
currentNode.push({
|
|
5776
|
-
id: i,
|
|
5777
|
-
label: layerName,
|
|
5778
|
-
fullLayerName: groups.length === 0 ? layerName : groups.join('-') + '-' + layerName,
|
|
5779
|
-
layerId: item.id,
|
|
5780
|
-
opacity: '1.0',
|
|
5781
|
-
});
|
|
5782
|
-
if (item.layout && item.layout.visibility == 'visible') {
|
|
5783
|
-
checkedKeys.push(i);
|
|
5784
|
-
}
|
|
5757
|
+
let i = 0;
|
|
5758
|
+
let treeData = [];
|
|
5759
|
+
let checkedKeys = [];
|
|
5760
|
+
data.forEach((item) => {
|
|
5761
|
+
let kvs = item.id.split(';').map(kvstr => kvstr.split('='));
|
|
5762
|
+
let groups = kvs.find(item => item[0] === 'Main')[1].split('/');
|
|
5763
|
+
let layerName = kvs.find(item => item[0] === 'CN')[1];
|
|
5764
|
+
let currentNode = treeData;
|
|
5765
|
+
groups.forEach((group, index) => {
|
|
5766
|
+
currentNode.find(item => item.label === group) || i++;
|
|
5767
|
+
currentNode.find(item => item.label === group) || currentNode.push({
|
|
5768
|
+
id: i,
|
|
5769
|
+
label: group,
|
|
5770
|
+
children: []
|
|
5771
|
+
});
|
|
5772
|
+
currentNode = currentNode.find(item => item.label === group).children;
|
|
5785
5773
|
});
|
|
5786
|
-
|
|
5774
|
+
i++;
|
|
5775
|
+
currentNode.push({
|
|
5776
|
+
id: i,
|
|
5777
|
+
label: layerName,
|
|
5778
|
+
fullLayerName: groups.length === 0 ? layerName : groups.join('-') + '-' + layerName,
|
|
5779
|
+
layerId: item.id,
|
|
5780
|
+
opacity: '1.0',
|
|
5781
|
+
});
|
|
5782
|
+
if (item.layout && item.layout.visibility == 'visible') {
|
|
5783
|
+
checkedKeys.push(i);
|
|
5784
|
+
}
|
|
5785
|
+
});
|
|
5786
|
+
return { treeData, checkedKeys }
|
|
5787
5787
|
};
|
|
5788
5788
|
const treeDataAdapterNext = (data) => {
|
|
5789
|
-
|
|
5790
|
-
|
|
5791
|
-
|
|
5792
|
-
|
|
5793
|
-
|
|
5794
|
-
|
|
5795
|
-
|
|
5796
|
-
|
|
5797
|
-
|
|
5798
|
-
|
|
5799
|
-
|
|
5800
|
-
|
|
5801
|
-
|
|
5802
|
-
|
|
5803
|
-
|
|
5804
|
-
|
|
5805
|
-
|
|
5806
|
-
});
|
|
5807
|
-
i++;
|
|
5808
|
-
currentNode.push({
|
|
5809
|
-
id: item.id,
|
|
5810
|
-
label: layerName,
|
|
5811
|
-
fullLayerName: getLayerIdFidld(item.id, 'Main') + '-' + getLayerIdFidld(item.id, 'CN'),
|
|
5812
|
-
layerId: item.id,
|
|
5813
|
-
opacity: '1.0',
|
|
5814
|
-
});
|
|
5815
|
-
if (item.layout && item.layout.visibility == 'visible') {
|
|
5816
|
-
checkedKeys.push(i);
|
|
5817
|
-
}
|
|
5789
|
+
let i = 0;
|
|
5790
|
+
let treeData = [];
|
|
5791
|
+
let checkedKeys = [];
|
|
5792
|
+
data.forEach((item) => {
|
|
5793
|
+
let kvs = item.id.split(';').map(kvstr => kvstr.split('='));
|
|
5794
|
+
let groups = kvs.find(item => item[0] === 'Main')[1].split('/');
|
|
5795
|
+
let layerName = kvs.find(item => item[0] === 'CN')[1];
|
|
5796
|
+
let currentNode = treeData;
|
|
5797
|
+
groups.length === 0 ? layerName : groups.join('-') + '-' + layerName;
|
|
5798
|
+
groups.forEach((group, index) => {
|
|
5799
|
+
currentNode.find(item => item.label === group) || i++;
|
|
5800
|
+
currentNode.find(item => item.label === group) || currentNode.push({
|
|
5801
|
+
id: `TreeId=${i};`,
|
|
5802
|
+
label: group,
|
|
5803
|
+
children: []
|
|
5804
|
+
});
|
|
5805
|
+
currentNode = currentNode.find(item => item.label === group).children;
|
|
5818
5806
|
});
|
|
5819
|
-
|
|
5807
|
+
i++;
|
|
5808
|
+
currentNode.push({
|
|
5809
|
+
id: item.id,
|
|
5810
|
+
label: layerName,
|
|
5811
|
+
fullLayerName: getLayerIdFidld(item.id, 'Main') + '-' + getLayerIdFidld(item.id, 'CN'),
|
|
5812
|
+
layerId: item.id,
|
|
5813
|
+
opacity: '1.0',
|
|
5814
|
+
});
|
|
5815
|
+
if (item.layout && item.layout.visibility == 'visible') {
|
|
5816
|
+
checkedKeys.push(i);
|
|
5817
|
+
}
|
|
5818
|
+
});
|
|
5819
|
+
return { treeData, checkedKeys }
|
|
5820
5820
|
};
|
|
5821
5821
|
const getLayerIdFidld = (str, field) => {
|
|
5822
|
-
|
|
5823
|
-
|
|
5824
|
-
|
|
5822
|
+
const kvs = str.split(';').map(kvstr => kvstr.split('='));
|
|
5823
|
+
const val = kvs.find(item => item[0] === field)[1];
|
|
5824
|
+
return val
|
|
5825
5825
|
};
|
|
5826
5826
|
/**
|
|
5827
5827
|
* 生成唯一ID字符串
|
|
@@ -5832,30 +5832,30 @@ const getLayerIdFidld = (str, field) => {
|
|
|
5832
5832
|
* @returns {string} 唯一ID字符串
|
|
5833
5833
|
*/
|
|
5834
5834
|
const GenerateUniqueId = (
|
|
5835
|
-
|
|
5836
|
-
|
|
5837
|
-
|
|
5838
|
-
|
|
5835
|
+
projectId,
|
|
5836
|
+
objectTypeId,
|
|
5837
|
+
groupId,
|
|
5838
|
+
objectId
|
|
5839
5839
|
) => {
|
|
5840
|
-
|
|
5841
|
-
|
|
5842
|
-
|
|
5843
|
-
|
|
5844
|
-
|
|
5845
|
-
|
|
5846
|
-
|
|
5847
|
-
|
|
5848
|
-
|
|
5849
|
-
|
|
5840
|
+
// 将参数组合成一个字符串
|
|
5841
|
+
const combinedString = `${projectId}|${objectTypeId}|${groupId}|${objectId}`;
|
|
5842
|
+
|
|
5843
|
+
// 使用简单的哈希函数生成固定长度的字符串
|
|
5844
|
+
let hash = 0;
|
|
5845
|
+
for (let i = 0; i < combinedString.length; i++) {
|
|
5846
|
+
const char = combinedString.charCodeAt(i);
|
|
5847
|
+
hash = (hash << 5) - hash + char;
|
|
5848
|
+
hash = hash & hash; // Convert to 32bit integer
|
|
5849
|
+
}
|
|
5850
5850
|
|
|
5851
|
-
|
|
5852
|
-
|
|
5851
|
+
// 转换为16进制字符串并补零到8位
|
|
5852
|
+
const hexHash = (hash >>> 0).toString(16).padStart(8, "0");
|
|
5853
5853
|
|
|
5854
|
-
|
|
5855
|
-
|
|
5856
|
-
|
|
5857
|
-
|
|
5858
|
-
|
|
5854
|
+
// 添加前缀和分隔符增强可读性
|
|
5855
|
+
return `UID-${projectId.slice(0, 2)}-${objectTypeId.slice(
|
|
5856
|
+
0,
|
|
5857
|
+
2
|
|
5858
|
+
)}-${groupId.slice(0, 2)}-${hexHash}`;
|
|
5859
5859
|
};
|
|
5860
5860
|
/**
|
|
5861
5861
|
* 生成一个带斑马纹、固定宽高、支持滚动条的键值对表格 HTML 字符串
|
|
@@ -5866,10 +5866,10 @@ const GenerateUniqueId = (
|
|
|
5866
5866
|
* @returns {string} - 返回一个完整的 HTML 字符串,可直接插入到 innerHTML 中
|
|
5867
5867
|
*/
|
|
5868
5868
|
function generateKeyValueTableHTML(data, options = {}) {
|
|
5869
|
-
|
|
5869
|
+
const { width = 600, height = 400 } = options;
|
|
5870
5870
|
|
|
5871
|
-
|
|
5872
|
-
|
|
5871
|
+
// 开始拼接 HTML 字符串
|
|
5872
|
+
let html = `
|
|
5873
5873
|
<div style="
|
|
5874
5874
|
width: ${width}px;
|
|
5875
5875
|
height: ${height}px;
|
|
@@ -5884,15 +5884,28 @@ function generateKeyValueTableHTML(data, options = {}) {
|
|
|
5884
5884
|
font-size: 14px;
|
|
5885
5885
|
">
|
|
5886
5886
|
<tbody>
|
|
5887
|
+
<tr style="background-color: '#f9f9f9';">
|
|
5888
|
+
<td style="
|
|
5889
|
+
padding: 8px 12px;
|
|
5890
|
+
border: 1px solid #f9f9f9;
|
|
5891
|
+
font-weight: bold;
|
|
5892
|
+
min-width: 100px;
|
|
5893
|
+
">属性</td>
|
|
5894
|
+
<td style="
|
|
5895
|
+
padding: 8px 12px;
|
|
5896
|
+
border: 1px solid #f9f9f9;
|
|
5897
|
+
word-break: break-word;
|
|
5898
|
+
">值</td>
|
|
5899
|
+
</tr>
|
|
5887
5900
|
`;
|
|
5888
5901
|
|
|
5889
|
-
|
|
5890
|
-
|
|
5891
|
-
|
|
5892
|
-
|
|
5893
|
-
|
|
5902
|
+
// 遍历键值对,生成行
|
|
5903
|
+
data.forEach((item, index) => {
|
|
5904
|
+
const bgColor = index % 2 === 0 ? '#ffffff' : '#f9f9f9'; // 斑马纹背景色
|
|
5905
|
+
const label = item.label || '';
|
|
5906
|
+
const value = item.value || '';
|
|
5894
5907
|
|
|
5895
|
-
|
|
5908
|
+
html += `
|
|
5896
5909
|
<tr style="background-color: ${bgColor};">
|
|
5897
5910
|
<td style="
|
|
5898
5911
|
padding: 8px 12px;
|
|
@@ -5907,24 +5920,133 @@ function generateKeyValueTableHTML(data, options = {}) {
|
|
|
5907
5920
|
">${value}</td>
|
|
5908
5921
|
</tr>
|
|
5909
5922
|
`;
|
|
5910
|
-
|
|
5923
|
+
});
|
|
5911
5924
|
|
|
5912
|
-
|
|
5913
|
-
|
|
5925
|
+
// 闭合标签
|
|
5926
|
+
html += `
|
|
5914
5927
|
</tbody>
|
|
5915
5928
|
</table>
|
|
5916
5929
|
</div>
|
|
5917
5930
|
`;
|
|
5918
5931
|
|
|
5919
|
-
|
|
5920
|
-
|
|
5932
|
+
// 返回拼接好的 HTML 字符串
|
|
5933
|
+
return html;
|
|
5934
|
+
}
|
|
5935
|
+
|
|
5936
|
+
function downloadByUrl(url, filename = '') {
|
|
5937
|
+
const a = document.createElement('a');
|
|
5938
|
+
a.href = url;
|
|
5939
|
+
a.download = filename || ''; // 为空则使用服务器返回的默认文件名
|
|
5940
|
+
document.body.appendChild(a);
|
|
5941
|
+
a.click();
|
|
5942
|
+
document.body.removeChild(a);
|
|
5943
|
+
}
|
|
5944
|
+
/**
|
|
5945
|
+
* 合并字符串键值对和对象,重复键的值覆盖,新键添加到末尾
|
|
5946
|
+
* @param {string} str - 用';'分隔的key=value格式字符串
|
|
5947
|
+
* @param {Object} obj - 要合并的对象
|
|
5948
|
+
* @returns {string} - 合并后的key=value;key=value格式字符串
|
|
5949
|
+
*/
|
|
5950
|
+
function mergeStringAndObject(str, obj) {
|
|
5951
|
+
// 1. 解析字符串为键值对数组
|
|
5952
|
+
const parseStringToPairs = (inputStr) => {
|
|
5953
|
+
if (!inputStr || typeof inputStr !== 'string') {
|
|
5954
|
+
return [];
|
|
5955
|
+
}
|
|
5956
|
+
|
|
5957
|
+
const pairs = [];
|
|
5958
|
+
const segments = inputStr.split(';');
|
|
5959
|
+
|
|
5960
|
+
for (const segment of segments) {
|
|
5961
|
+
const trimmedSegment = segment.trim();
|
|
5962
|
+
if (!trimmedSegment) continue; // 跳过空字符串
|
|
5963
|
+
|
|
5964
|
+
const equalIndex = trimmedSegment.indexOf('=');
|
|
5965
|
+
if (equalIndex === -1) {
|
|
5966
|
+
// 如果没有等号,当作键,值为空字符串
|
|
5967
|
+
pairs.push([trimmedSegment, '']);
|
|
5968
|
+
} else {
|
|
5969
|
+
const key = trimmedSegment.substring(0, equalIndex).trim();
|
|
5970
|
+
const value = trimmedSegment.substring(equalIndex + 1).trim();
|
|
5971
|
+
pairs.push([key, value]);
|
|
5972
|
+
}
|
|
5973
|
+
}
|
|
5974
|
+
|
|
5975
|
+
return pairs;
|
|
5976
|
+
};
|
|
5977
|
+
|
|
5978
|
+
// 2. 解析对象为键值对数组
|
|
5979
|
+
const parseObjectToPairs = (inputObj) => {
|
|
5980
|
+
if (!inputObj || typeof inputObj !== 'object' || Array.isArray(inputObj)) {
|
|
5981
|
+
return [];
|
|
5982
|
+
}
|
|
5983
|
+
|
|
5984
|
+
const pairs = [];
|
|
5985
|
+
for (const [key, value] of Object.entries(inputObj)) {
|
|
5986
|
+
// 处理值的类型转换
|
|
5987
|
+
let stringValue = '';
|
|
5988
|
+
if (value === null || value === undefined) {
|
|
5989
|
+
stringValue = '';
|
|
5990
|
+
} else if (typeof value === 'string') {
|
|
5991
|
+
stringValue = value;
|
|
5992
|
+
} else if (typeof value === 'number' || typeof value === 'boolean') {
|
|
5993
|
+
stringValue = value.toString();
|
|
5994
|
+
} else {
|
|
5995
|
+
// 对象、数组等复杂类型转为JSON字符串
|
|
5996
|
+
stringValue = JSON.stringify(value);
|
|
5997
|
+
}
|
|
5998
|
+
pairs.push([key, stringValue]);
|
|
5999
|
+
}
|
|
6000
|
+
|
|
6001
|
+
return pairs;
|
|
6002
|
+
};
|
|
6003
|
+
|
|
6004
|
+
// 3. 合并键值对数组(重复键覆盖,新键追加)
|
|
6005
|
+
const mergePairs = (strPairs, objPairs) => {
|
|
6006
|
+
const mergedMap = new Map(); // 用于存储合并后的键值对,便于覆盖
|
|
6007
|
+
|
|
6008
|
+
// 先添加字符串中的键值对
|
|
6009
|
+
for (const [key, value] of strPairs) {
|
|
6010
|
+
mergedMap.set(key, value);
|
|
6011
|
+
}
|
|
6012
|
+
|
|
6013
|
+
// 再添加对象中的键值对(重复键会覆盖)
|
|
6014
|
+
for (const [key, value] of objPairs) {
|
|
6015
|
+
mergedMap.set(key, value); // Map.set() 会自动覆盖重复键
|
|
6016
|
+
}
|
|
6017
|
+
|
|
6018
|
+
// 转换为数组(Map 会保持插入顺序,新键自然在末尾)
|
|
6019
|
+
return Array.from(mergedMap.entries());
|
|
6020
|
+
};
|
|
6021
|
+
|
|
6022
|
+
// 4. 将键值对数组合并为字符串
|
|
6023
|
+
const pairsToString = (pairs) => {
|
|
6024
|
+
return pairs
|
|
6025
|
+
.map(([key, value]) => `${key}=${value}`)
|
|
6026
|
+
.join(';');
|
|
6027
|
+
};
|
|
6028
|
+
|
|
6029
|
+
// 主流程
|
|
6030
|
+
try {
|
|
6031
|
+
const strPairs = parseStringToPairs(str);
|
|
6032
|
+
const objPairs = parseObjectToPairs(obj);
|
|
6033
|
+
const mergedPairs = mergePairs(strPairs, objPairs);
|
|
6034
|
+
const result = pairsToString(mergedPairs);
|
|
6035
|
+
|
|
6036
|
+
return result;
|
|
6037
|
+
} catch (error) {
|
|
6038
|
+
console.error('合并过程中发生错误:', error);
|
|
6039
|
+
return str; // 出错时返回原字符串
|
|
6040
|
+
}
|
|
5921
6041
|
}
|
|
5922
6042
|
|
|
5923
6043
|
var RainteeSourceMapTool = /*#__PURE__*/Object.freeze({
|
|
5924
6044
|
__proto__: null,
|
|
5925
6045
|
GenerateUniqueId: GenerateUniqueId,
|
|
6046
|
+
downloadByUrl: downloadByUrl,
|
|
5926
6047
|
generateKeyValueTableHTML: generateKeyValueTableHTML,
|
|
5927
6048
|
getLayerIdFidld: getLayerIdFidld,
|
|
6049
|
+
mergeStringAndObject: mergeStringAndObject,
|
|
5928
6050
|
treeDataAdapter: treeDataAdapter,
|
|
5929
6051
|
treeDataAdapterNext: treeDataAdapterNext
|
|
5930
6052
|
});
|