af-mobile-client-vue3 1.1.8 → 1.1.9

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.
Files changed (80) hide show
  1. package/.env +6 -6
  2. package/.env.development +4 -4
  3. package/.env.envoiceShow +6 -6
  4. package/.env.production +6 -6
  5. package/.husky/commit-msg +1 -1
  6. package/.husky/pre-commit +1 -1
  7. package/.vscode/settings.json +61 -61
  8. package/mock/modules/user.mock.ts +152 -152
  9. package/package.json +1 -1
  10. package/public/favicon.svg +4 -4
  11. package/public/safari-pinned-tab.svg +32 -32
  12. package/scripts/verifyCommit.js +19 -19
  13. package/src/App.vue +43 -43
  14. package/src/api/user/index.ts +40 -40
  15. package/src/bootstrap.ts +18 -18
  16. package/src/components/core/NavBar/index.vue +12 -12
  17. package/src/components/core/Tabbar/index.vue +38 -38
  18. package/src/components/core/XGridDropOption/index.vue +151 -151
  19. package/src/components/core/XMultiSelect/index.vue +183 -183
  20. package/src/components/data/XCellDetail/index.vue +106 -106
  21. package/src/components/data/XFormItem/index.vue +26 -7
  22. package/src/components/data/XOlMap/XLocationPicker/index.vue +7 -9
  23. package/src/components/data/XOlMap/index.vue +103 -96
  24. package/src/components/data/XOlMap/utils/wgs84ToGcj02.js +154 -154
  25. package/src/components/data/XReportForm/XReportFormJsonRender.vue +220 -220
  26. package/src/components/data/XReportForm/index.vue +1079 -1079
  27. package/src/components/data/XReportGrid/XAddReport/index.ts +1 -1
  28. package/src/components/data/XReportGrid/XReportDrawer/index.ts +1 -1
  29. package/src/components/data/XSignature/index.vue +285 -285
  30. package/src/components/data/XTag/index.vue +10 -10
  31. package/src/components/layout/NormalDataLayout/index.vue +70 -70
  32. package/src/components/layout/TabBarLayout/index.vue +40 -40
  33. package/src/components.d.ts +53 -53
  34. package/src/env.d.ts +16 -16
  35. package/src/font-style/font.css +3 -3
  36. package/src/hooks/useCommon.ts +9 -9
  37. package/src/locales/en-US.json +25 -25
  38. package/src/locales/zh-CN.json +25 -25
  39. package/src/plugins/AppData.ts +38 -38
  40. package/src/router/guards.ts +59 -59
  41. package/src/router/index.ts +61 -61
  42. package/src/router/invoiceRoutes.ts +33 -33
  43. package/src/services/api/common.ts +109 -109
  44. package/src/services/api/manage.ts +8 -8
  45. package/src/services/api/search.ts +16 -16
  46. package/src/services/restTools.ts +56 -56
  47. package/src/services/v3Api.ts +11 -11
  48. package/src/stores/modules/setting.ts +52 -52
  49. package/src/stores/mutation-type.ts +7 -7
  50. package/src/utils/authority-utils.ts +84 -84
  51. package/src/utils/crypto.ts +39 -39
  52. package/src/utils/i18n.ts +41 -41
  53. package/src/utils/indexedDB.ts +180 -180
  54. package/src/utils/mobileUtil.ts +26 -26
  55. package/src/utils/routerUtil.ts +271 -271
  56. package/src/utils/runEvalFunction.ts +13 -13
  57. package/src/utils/wechatUtil.ts +9 -9
  58. package/src/views/common/LoadError.vue +64 -64
  59. package/src/views/common/NotFound.vue +68 -68
  60. package/src/views/component/EvaluateRecordView/index.vue +40 -40
  61. package/src/views/component/XCellDetailView/index.vue +217 -217
  62. package/src/views/component/XCellListView/index.vue +3 -88
  63. package/src/views/component/XFormGroupView/index.vue +0 -37
  64. package/src/views/component/XFormView/index.vue +30 -119
  65. package/src/views/component/XFormView/oldindex.vue +50 -0
  66. package/src/views/component/XOlMapView/XLocationPicker/index.vue +118 -120
  67. package/src/views/component/XOlMapView/index.vue +3 -5
  68. package/src/views/component/XReportFormIframeView/index.vue +47 -47
  69. package/src/views/component/XReportFormView/index.vue +13 -13
  70. package/src/views/component/XSignatureView/index.vue +50 -50
  71. package/src/views/component/menu.vue +117 -117
  72. package/src/views/component/notice.vue +46 -46
  73. package/src/views/component/topNav.vue +36 -36
  74. package/src/views/invoiceShow/index.vue +61 -61
  75. package/src/views/user/login/ForgetPasswordForm.vue +94 -94
  76. package/src/views/user/login/LoginTitle.vue +68 -68
  77. package/src/views/user/login/index.vue +22 -22
  78. package/src/views/user/my/index.vue +230 -230
  79. package/src/vue-router.d.ts +9 -9
  80. package/tsconfig.json +43 -43
@@ -308,109 +308,115 @@ async function handleMoveEnd() {
308
308
  * 初始化地图
309
309
  * @param params - 初始化参数
310
310
  */
311
- function init(params: InitParams = {}): void {
312
- if (!mapRef.value) {
313
- return
314
- }
315
-
316
- // 保存初始化参数
317
- mapParams.value = params
318
-
319
- // 设置默认参数
320
- const {
321
- center = [116.404, 39.915],
322
- zoom = 10,
323
- maxZoom = 18,
324
- minZoom = 4,
325
- } = params
311
+ function init(params: InitParams = {}): Promise<void> {
312
+ return new Promise((resolve) => {
313
+ if (!mapRef.value) {
314
+ resolve()
315
+ return
316
+ }
326
317
 
327
- try {
328
- getConfigByName('webConfig', (res) => {
329
- const tianDiTuKey = res.tianDiTuKey || 'c16876b28898637c0a1a68b3fa410504'
330
- const amapKey = res.amapKey || '5ebabc4536d4b42e0dd1e20175cca8ab'
331
-
332
- tiandityKey.value = tianDiTuKey
333
- gaodeKey.value = amapKey
334
- // 初始化所有底图图层
335
- initializeLayers(tianDiTuKey)
336
-
337
- // 创建地图实例 - 加载所有底图图层,但默认只显示高德地图
338
- map = new Map({
339
- target: mapRef.value,
340
- layers: Object.values(baseMaps), // 加载所有底图图层
341
- view: new View({
342
- center: fromLonLat(center),
343
- zoom,
344
- projection: 'EPSG:3857',
345
- maxZoom,
346
- minZoom,
347
- }),
348
- controls: defaultControls({
349
- zoom: false,
350
- rotate: false,
351
- attribution: false,
352
- }).extend([
353
- new ScaleLine({
354
- units: 'metric',
355
- className: 'ol-scale-line',
318
+ // 保存初始化参数
319
+ mapParams.value = params
320
+
321
+ // 设置默认参数
322
+ const {
323
+ center = [116.404, 39.915],
324
+ zoom = 10,
325
+ maxZoom = 18,
326
+ minZoom = 4,
327
+ } = params
328
+
329
+ try {
330
+ getConfigByName('webConfig', (res) => {
331
+ const tianDiTuKey = res.tianDiTuKey || 'c16876b28898637c0a1a68b3fa410504'
332
+ const amapKey = res.amapKey || '5ebabc4536d4b42e0dd1e20175cca8ab'
333
+
334
+ tiandityKey.value = tianDiTuKey
335
+ gaodeKey.value = amapKey
336
+ // 初始化所有底图图层
337
+ initializeLayers(tianDiTuKey)
338
+
339
+ // 创建地图实例 - 加载所有底图图层,但默认只显示高德地图
340
+ map = new Map({
341
+ target: mapRef.value,
342
+ layers: Object.values(baseMaps), // 加载所有底图图层
343
+ view: new View({
344
+ center: fromLonLat(center),
345
+ zoom,
346
+ projection: 'EPSG:3857',
347
+ maxZoom,
348
+ minZoom,
349
+ }),
350
+ controls: defaultControls({
351
+ zoom: false,
352
+ rotate: false,
353
+ attribution: false,
354
+ }).extend([
355
+ new ScaleLine({
356
+ units: 'metric',
357
+ className: 'ol-scale-line',
358
+ }),
359
+ ]),
360
+ interactions: defaultInteractions({
361
+ altShiftDragRotate: false,
362
+ pinchRotate: false,
356
363
  }),
357
- ]),
358
- interactions: defaultInteractions({
359
- altShiftDragRotate: false,
360
- pinchRotate: false,
361
- }),
362
- })
363
-
364
- // 更新地图大小,确保地图正确渲染
365
- setTimeout(() => {
366
- if (map) {
367
- map.updateSize()
368
- // 确保默认图层正确显示
369
- handleMapChange('tianditu')
370
- }
371
- }, 200)
372
-
373
- // 监听地图移动结束事件
374
- map.on('moveend', handleMoveEnd)
375
-
376
- // 设置鼠标样式
377
- if (mapRef.value) {
378
- mapRef.value.style.cursor = 'grab'
379
- // 监听地图事件
380
- const mapElement = mapRef.value
381
-
382
- // 鼠标按下时
383
- mapElement.addEventListener('mousedown', () => {
384
- mapElement.style.cursor = 'grabbing'
385
- // 用户开始拖动地图,取消跟随定位
386
- if (locationTimer) {
387
- isFollowingLocation.value = false
388
- }
389
364
  })
390
365
 
391
- // 触摸开始时
392
- mapElement.addEventListener('touchstart', () => {
393
- // 用户开始拖动地图,取消跟随定位
394
- if (locationTimer) {
395
- isFollowingLocation.value = false
366
+ // 更新地图大小,确保地图正确渲染
367
+ setTimeout(() => {
368
+ if (map) {
369
+ map.updateSize()
370
+ // 确保默认图层正确显示
371
+ handleMapChange('tianditu')
372
+ // 地图初始化完成后解析 Promise
373
+ resolve()
396
374
  }
397
- })
375
+ }, 200)
376
+
377
+ // 监听地图移动结束事件
378
+ map.on('moveend', handleMoveEnd)
379
+
380
+ // 设置鼠标样式
381
+ if (mapRef.value) {
382
+ mapRef.value.style.cursor = 'grab'
383
+ // 监听地图事件
384
+ const mapElement = mapRef.value
385
+
386
+ // 鼠标按下时
387
+ mapElement.addEventListener('mousedown', () => {
388
+ mapElement.style.cursor = 'grabbing'
389
+ // 用户开始拖动地图,取消跟随定位
390
+ if (locationTimer) {
391
+ isFollowingLocation.value = false
392
+ }
393
+ })
398
394
 
399
- // 鼠标释放时
400
- mapElement.addEventListener('mouseup', () => {
401
- mapElement.style.cursor = 'grab'
402
- })
395
+ // 触摸开始时
396
+ mapElement.addEventListener('touchstart', () => {
397
+ // 用户开始拖动地图,取消跟随定位
398
+ if (locationTimer) {
399
+ isFollowingLocation.value = false
400
+ }
401
+ })
403
402
 
404
- // 鼠标离开地图时
405
- mapElement.addEventListener('mouseleave', () => {
406
- mapElement.style.cursor = 'grab'
407
- })
408
- }
409
- })
410
- }
411
- catch (error) {
412
- console.error('地图初始化失败:', error)
413
- }
403
+ // 鼠标释放时
404
+ mapElement.addEventListener('mouseup', () => {
405
+ mapElement.style.cursor = 'grab'
406
+ })
407
+
408
+ // 鼠标离开地图时
409
+ mapElement.addEventListener('mouseleave', () => {
410
+ mapElement.style.cursor = 'grab'
411
+ })
412
+ }
413
+ })
414
+ }
415
+ catch (error) {
416
+ console.error('地图初始化失败:', error)
417
+ resolve()
418
+ }
419
+ })
414
420
  }
415
421
 
416
422
  /**
@@ -905,6 +911,7 @@ defineExpose({
905
911
  // 组件卸载时清理地图实例
906
912
  onUnmounted(() => {
907
913
  if (map) {
914
+ stopNavigation()
908
915
  map.setTarget(undefined)
909
916
  map = null
910
917
  }
@@ -1,154 +1,154 @@
1
- // 导入proj控件
2
- import * as proj from 'ol/proj'
3
-
4
- function forEachPoint(func) {
5
- return function (input, opt_output, opt_dimension) {
6
- const len = input.length
7
-
8
- const dimension = opt_dimension || 2
9
- let output
10
-
11
- if (opt_output) {
12
- output = opt_output
13
- }
14
- else {
15
- if (dimension !== 2) {
16
- output = input.slice()
17
- }
18
- else {
19
- output = [len]
20
- }
21
- }
22
- for (let offset = 0; offset < len; offset += dimension) {
23
- func(input, output, offset)
24
- }
25
- return output
26
- }
27
- }
28
-
29
- const gcj02 = {}
30
- const PI = Math.PI
31
- const AXIS = 6378245.0
32
- // eslint-disable-next-line no-loss-of-precision
33
- const OFFSET = 0.00669342162296594323 // (a^2 - b^2) / a^2
34
-
35
- function delta(wgLon, wgLat) {
36
- let dLat = transformLat(wgLon - 105.0, wgLat - 35.0)
37
- let dLon = transformLon(wgLon - 105.0, wgLat - 35.0)
38
- const radLat = (wgLat / 180.0) * PI
39
- let magic = Math.sin(radLat)
40
- magic = 1 - OFFSET * magic * magic
41
- const sqrtMagic = Math.sqrt(magic)
42
- dLat = (dLat * 180.0) / (((AXIS * (1 - OFFSET)) / (magic * sqrtMagic)) * PI)
43
- dLon = (dLon * 180.0) / ((AXIS / sqrtMagic) * Math.cos(radLat) * PI)
44
- return [dLon, dLat]
45
- }
46
-
47
- function outOfChina(lon, lat) {
48
- if (lon < 72.004 || lon > 137.8347) {
49
- return true
50
- }
51
- return lat < 0.8293 || lat > 55.8271
52
- }
53
-
54
- function transformLat(x, y) {
55
- let ret = -100.0 + 2.0 * x + 3.0 * y + 0.2 * y * y + 0.1 * x * y + 0.2 * Math.sqrt(Math.abs(x))
56
- ret += ((20.0 * Math.sin(6.0 * x * PI) + 20.0 * Math.sin(2.0 * x * PI)) * 2.0) / 3.0
57
- ret += ((20.0 * Math.sin(y * PI) + 40.0 * Math.sin((y / 3.0) * PI)) * 2.0) / 3.0
58
- ret += ((160.0 * Math.sin((y / 12.0) * PI) + 320 * Math.sin((y * PI) / 30.0)) * 2.0) / 3.0
59
- return ret
60
- }
61
-
62
- function transformLon(x, y) {
63
- let ret = 300.0 + x + 2.0 * y + 0.1 * x * x + 0.1 * x * y + 0.1 * Math.sqrt(Math.abs(x))
64
- ret += ((20.0 * Math.sin(6.0 * x * PI) + 20.0 * Math.sin(2.0 * x * PI)) * 2.0) / 3.0
65
- ret += ((20.0 * Math.sin(x * PI) + 40.0 * Math.sin((x / 3.0) * PI)) * 2.0) / 3.0
66
- ret += ((150.0 * Math.sin((x / 12.0) * PI) + 300.0 * Math.sin((x / 30.0) * PI)) * 2.0) / 3.0
67
- return ret
68
- }
69
-
70
- gcj02.toWGS84 = forEachPoint((input, output, offset) => {
71
- let lng = input[offset]
72
- let lat = input[offset + 1]
73
- if (!outOfChina(lng, lat)) {
74
- const deltaD = delta(lng, lat)
75
- lng = lng - deltaD[0] // 改回减法
76
- lat = lat - deltaD[1] // 改回减法
77
- }
78
- output[offset] = lng
79
- output[offset + 1] = lat
80
- })
81
-
82
- gcj02.fromWGS84 = forEachPoint((input, output, offset) => {
83
- let lng = input[offset]
84
- let lat = input[offset + 1]
85
- if (!outOfChina(lng, lat)) {
86
- const deltaD = delta(lng, lat)
87
- lng = lng + deltaD[0] // 改回加法
88
- lat = lat + deltaD[1] // 改回加法
89
- }
90
- output[offset] = lng
91
- output[offset + 1] = lat
92
- })
93
-
94
- const sphericalMercator = {}
95
- const RADIUS = 6378137
96
- const MAX_LATITUDE = 85.0511287798
97
- const RAD_PER_DEG = Math.PI / 180
98
-
99
- sphericalMercator.forward = forEachPoint((input, output, offset) => {
100
- const lat = Math.max(Math.min(MAX_LATITUDE, input[offset + 1]), -MAX_LATITUDE)
101
- const sin = Math.sin(lat * RAD_PER_DEG)
102
- output[offset] = RADIUS * input[offset] * RAD_PER_DEG
103
- output[offset + 1] = (RADIUS * Math.log((1 + sin) / (1 - sin))) / 2
104
- })
105
-
106
- sphericalMercator.inverse = forEachPoint((input, output, offset) => {
107
- output[offset] = input[offset] / RADIUS / RAD_PER_DEG
108
- output[offset + 1] = (2 * Math.atan(Math.exp(input[offset + 1] / RADIUS)) - Math.PI / 2) / RAD_PER_DEG
109
- })
110
-
111
- const projzh = {}
112
-
113
- projzh.ll2gmerc = function (input, opt_output, opt_dimension) {
114
- const output = gcj02.toWGS84(input, opt_output, opt_dimension) // 改用 toWGS84
115
- return projzh.ll2smerc(output, output, opt_dimension)
116
- }
117
-
118
- projzh.gmerc2ll = function (input, opt_output, opt_dimension) {
119
- const output = projzh.smerc2ll(input, input, opt_dimension)
120
- return gcj02.fromWGS84(output, opt_output, opt_dimension) // 改用 fromWGS84
121
- }
122
-
123
- // smerc2gmerc 需要修改
124
-
125
- projzh.smerc2gmerc = function (input, opt_output, opt_dimension) {
126
- let output = projzh.smerc2ll(input, input, opt_dimension)
127
- output = gcj02.toWGS84(output, output, opt_dimension) // 这里应该用 toWGS84
128
- return projzh.ll2smerc(output, output, opt_dimension)
129
- }
130
-
131
- // gmerc2smerc 需要修改
132
-
133
- projzh.gmerc2smerc = function (input, opt_output, opt_dimension) {
134
- let output = projzh.smerc2ll(input, input, opt_dimension)
135
- output = gcj02.fromWGS84(output, output, opt_dimension) // 这里应该用 fromWGS84
136
- return projzh.ll2smerc(output, output, opt_dimension)
137
- }
138
-
139
- projzh.ll2smerc = sphericalMercator.forward
140
- projzh.smerc2ll = sphericalMercator.inverse
141
-
142
- // 定义WGS84转GCJ02的投影
143
- const extent = [-20037508.342789244, -20037508.342789244, 20037508.342789244, 20037508.342789244]
144
- export const wgs84ToGcj02Projection = new proj.Projection({
145
- code: 'WGS84-TO-GCJ02',
146
- extent,
147
- units: 'm',
148
- })
149
-
150
- // 添加投影和转换方法
151
- proj.addProjection(wgs84ToGcj02Projection)
152
- // 注意这里转换方法的顺序与原来相反
153
- proj.addCoordinateTransforms('EPSG:4326', wgs84ToGcj02Projection, projzh.ll2gmerc, projzh.gmerc2ll)
154
- proj.addCoordinateTransforms('EPSG:3857', wgs84ToGcj02Projection, projzh.smerc2gmerc, projzh.gmerc2smerc)
1
+ // 导入proj控件
2
+ import * as proj from 'ol/proj'
3
+
4
+ function forEachPoint(func) {
5
+ return function (input, opt_output, opt_dimension) {
6
+ const len = input.length
7
+
8
+ const dimension = opt_dimension || 2
9
+ let output
10
+
11
+ if (opt_output) {
12
+ output = opt_output
13
+ }
14
+ else {
15
+ if (dimension !== 2) {
16
+ output = input.slice()
17
+ }
18
+ else {
19
+ output = [len]
20
+ }
21
+ }
22
+ for (let offset = 0; offset < len; offset += dimension) {
23
+ func(input, output, offset)
24
+ }
25
+ return output
26
+ }
27
+ }
28
+
29
+ const gcj02 = {}
30
+ const PI = Math.PI
31
+ const AXIS = 6378245.0
32
+ // eslint-disable-next-line no-loss-of-precision
33
+ const OFFSET = 0.00669342162296594323 // (a^2 - b^2) / a^2
34
+
35
+ function delta(wgLon, wgLat) {
36
+ let dLat = transformLat(wgLon - 105.0, wgLat - 35.0)
37
+ let dLon = transformLon(wgLon - 105.0, wgLat - 35.0)
38
+ const radLat = (wgLat / 180.0) * PI
39
+ let magic = Math.sin(radLat)
40
+ magic = 1 - OFFSET * magic * magic
41
+ const sqrtMagic = Math.sqrt(magic)
42
+ dLat = (dLat * 180.0) / (((AXIS * (1 - OFFSET)) / (magic * sqrtMagic)) * PI)
43
+ dLon = (dLon * 180.0) / ((AXIS / sqrtMagic) * Math.cos(radLat) * PI)
44
+ return [dLon, dLat]
45
+ }
46
+
47
+ function outOfChina(lon, lat) {
48
+ if (lon < 72.004 || lon > 137.8347) {
49
+ return true
50
+ }
51
+ return lat < 0.8293 || lat > 55.8271
52
+ }
53
+
54
+ function transformLat(x, y) {
55
+ let ret = -100.0 + 2.0 * x + 3.0 * y + 0.2 * y * y + 0.1 * x * y + 0.2 * Math.sqrt(Math.abs(x))
56
+ ret += ((20.0 * Math.sin(6.0 * x * PI) + 20.0 * Math.sin(2.0 * x * PI)) * 2.0) / 3.0
57
+ ret += ((20.0 * Math.sin(y * PI) + 40.0 * Math.sin((y / 3.0) * PI)) * 2.0) / 3.0
58
+ ret += ((160.0 * Math.sin((y / 12.0) * PI) + 320 * Math.sin((y * PI) / 30.0)) * 2.0) / 3.0
59
+ return ret
60
+ }
61
+
62
+ function transformLon(x, y) {
63
+ let ret = 300.0 + x + 2.0 * y + 0.1 * x * x + 0.1 * x * y + 0.1 * Math.sqrt(Math.abs(x))
64
+ ret += ((20.0 * Math.sin(6.0 * x * PI) + 20.0 * Math.sin(2.0 * x * PI)) * 2.0) / 3.0
65
+ ret += ((20.0 * Math.sin(x * PI) + 40.0 * Math.sin((x / 3.0) * PI)) * 2.0) / 3.0
66
+ ret += ((150.0 * Math.sin((x / 12.0) * PI) + 300.0 * Math.sin((x / 30.0) * PI)) * 2.0) / 3.0
67
+ return ret
68
+ }
69
+
70
+ gcj02.toWGS84 = forEachPoint((input, output, offset) => {
71
+ let lng = input[offset]
72
+ let lat = input[offset + 1]
73
+ if (!outOfChina(lng, lat)) {
74
+ const deltaD = delta(lng, lat)
75
+ lng = lng - deltaD[0] // 改回减法
76
+ lat = lat - deltaD[1] // 改回减法
77
+ }
78
+ output[offset] = lng
79
+ output[offset + 1] = lat
80
+ })
81
+
82
+ gcj02.fromWGS84 = forEachPoint((input, output, offset) => {
83
+ let lng = input[offset]
84
+ let lat = input[offset + 1]
85
+ if (!outOfChina(lng, lat)) {
86
+ const deltaD = delta(lng, lat)
87
+ lng = lng + deltaD[0] // 改回加法
88
+ lat = lat + deltaD[1] // 改回加法
89
+ }
90
+ output[offset] = lng
91
+ output[offset + 1] = lat
92
+ })
93
+
94
+ const sphericalMercator = {}
95
+ const RADIUS = 6378137
96
+ const MAX_LATITUDE = 85.0511287798
97
+ const RAD_PER_DEG = Math.PI / 180
98
+
99
+ sphericalMercator.forward = forEachPoint((input, output, offset) => {
100
+ const lat = Math.max(Math.min(MAX_LATITUDE, input[offset + 1]), -MAX_LATITUDE)
101
+ const sin = Math.sin(lat * RAD_PER_DEG)
102
+ output[offset] = RADIUS * input[offset] * RAD_PER_DEG
103
+ output[offset + 1] = (RADIUS * Math.log((1 + sin) / (1 - sin))) / 2
104
+ })
105
+
106
+ sphericalMercator.inverse = forEachPoint((input, output, offset) => {
107
+ output[offset] = input[offset] / RADIUS / RAD_PER_DEG
108
+ output[offset + 1] = (2 * Math.atan(Math.exp(input[offset + 1] / RADIUS)) - Math.PI / 2) / RAD_PER_DEG
109
+ })
110
+
111
+ const projzh = {}
112
+
113
+ projzh.ll2gmerc = function (input, opt_output, opt_dimension) {
114
+ const output = gcj02.toWGS84(input, opt_output, opt_dimension) // 改用 toWGS84
115
+ return projzh.ll2smerc(output, output, opt_dimension)
116
+ }
117
+
118
+ projzh.gmerc2ll = function (input, opt_output, opt_dimension) {
119
+ const output = projzh.smerc2ll(input, input, opt_dimension)
120
+ return gcj02.fromWGS84(output, opt_output, opt_dimension) // 改用 fromWGS84
121
+ }
122
+
123
+ // smerc2gmerc 需要修改
124
+
125
+ projzh.smerc2gmerc = function (input, opt_output, opt_dimension) {
126
+ let output = projzh.smerc2ll(input, input, opt_dimension)
127
+ output = gcj02.toWGS84(output, output, opt_dimension) // 这里应该用 toWGS84
128
+ return projzh.ll2smerc(output, output, opt_dimension)
129
+ }
130
+
131
+ // gmerc2smerc 需要修改
132
+
133
+ projzh.gmerc2smerc = function (input, opt_output, opt_dimension) {
134
+ let output = projzh.smerc2ll(input, input, opt_dimension)
135
+ output = gcj02.fromWGS84(output, output, opt_dimension) // 这里应该用 fromWGS84
136
+ return projzh.ll2smerc(output, output, opt_dimension)
137
+ }
138
+
139
+ projzh.ll2smerc = sphericalMercator.forward
140
+ projzh.smerc2ll = sphericalMercator.inverse
141
+
142
+ // 定义WGS84转GCJ02的投影
143
+ const extent = [-20037508.342789244, -20037508.342789244, 20037508.342789244, 20037508.342789244]
144
+ export const wgs84ToGcj02Projection = new proj.Projection({
145
+ code: 'WGS84-TO-GCJ02',
146
+ extent,
147
+ units: 'm',
148
+ })
149
+
150
+ // 添加投影和转换方法
151
+ proj.addProjection(wgs84ToGcj02Projection)
152
+ // 注意这里转换方法的顺序与原来相反
153
+ proj.addCoordinateTransforms('EPSG:4326', wgs84ToGcj02Projection, projzh.ll2gmerc, projzh.gmerc2ll)
154
+ proj.addCoordinateTransforms('EPSG:3857', wgs84ToGcj02Projection, projzh.smerc2gmerc, projzh.gmerc2smerc)