af-mobile-client-vue3 1.3.12 → 1.3.13

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 (270) hide show
  1. package/.claude/settings.local.json +10 -0
  2. package/.cursorrules +60 -60
  3. package/.editorconfig +9 -9
  4. package/.env +10 -10
  5. package/.env.development +1 -1
  6. package/.env.production +1 -1
  7. package/.node-version +1 -1
  8. package/.vscode/extensions.json +12 -12
  9. package/.vscode/settings.json +66 -66
  10. package/CLAUDE.md +189 -184
  11. package/README.md +182 -181
  12. package/af-example-mobile-vue-web.iml +9 -9
  13. package/build/vite/index.ts +98 -98
  14. package/build/vite/optimize.ts +34 -34
  15. package/build/vite/vconsole.ts +47 -47
  16. package/commitlint.config.ts +32 -32
  17. package/compress.js +36 -36
  18. package/eslint.config.ts +30 -30
  19. package/index.html +23 -23
  20. package/mock/data.ts +20 -20
  21. package/mock/index.ts +7 -7
  22. package/mock/modules/prose.mock.ts +13 -13
  23. package/mock/modules/user.mock.ts +152 -152
  24. package/mock/util.ts +19 -19
  25. package/netlify.toml +12 -12
  26. package/package.json +114 -114
  27. package/postcss.config.ts +27 -27
  28. package/public/favicon.svg +4 -4
  29. package/public/safari-pinned-tab.svg +4 -4
  30. package/scripts/verifyCommit.js +19 -19
  31. package/src/App.vue +79 -79
  32. package/src/api/mock/index.ts +30 -30
  33. package/src/api/user/index.ts +40 -40
  34. package/src/assets/img/user/login/background-shadow-1.svg +20 -20
  35. package/src/assets/img/user/login/logo-background.svg +20 -20
  36. package/src/bootstrap.ts +26 -26
  37. package/src/components/core/BeautifulLoading/index.vue +52 -52
  38. package/src/components/core/ImageUploader/index.vue +244 -244
  39. package/src/components/core/NavBar/index.vue +53 -53
  40. package/src/components/core/Tabbar/index.vue +32 -32
  41. package/src/components/core/Uploader/index.vue +124 -124
  42. package/src/components/core/XGridDropOption/index.vue +154 -156
  43. package/src/components/core/XMultiSelect/index.vue +183 -183
  44. package/src/components/core/XSelect/index.vue +149 -149
  45. package/src/components/data/InfoDisplay/index.vue +132 -0
  46. package/src/components/data/UserDetail/api.ts +24 -0
  47. package/src/components/data/UserDetail/index.vue +539 -0
  48. package/src/components/data/UserDetail/recordEntries.ts +159 -0
  49. package/src/components/data/UserDetail/types.ts +26 -0
  50. package/src/components/data/XBadge/index.vue +82 -82
  51. package/src/components/data/XCellDetail/index.vue +105 -105
  52. package/src/components/data/XCellList/XCellList.md +313 -313
  53. package/src/components/data/XCellList/index.vue +1075 -1075
  54. package/src/components/data/XCellListFilter/QrScanner/index.vue +207 -207
  55. package/src/components/data/XCellListFilter/QrScanner/startScanAnimation.ts +53 -53
  56. package/src/components/data/XCellListFilter/VpnRecognition/index.vue +119 -119
  57. package/src/components/data/XCellListFilter/index.vue +705 -705
  58. package/src/components/data/XForm/index.vue +659 -659
  59. package/src/components/data/XFormGroup/doc/DeviceForm.vue +122 -122
  60. package/src/components/data/XFormGroup/doc/FormGroupDemo.vue +56 -56
  61. package/src/components/data/XFormGroup/doc/README.md +286 -273
  62. package/src/components/data/XFormGroup/doc/UserForm.vue +102 -102
  63. package/src/components/data/XFormGroup/index.vue +240 -240
  64. package/src/components/data/XFormItem/index.vue +1310 -1310
  65. package/src/components/data/XOlMap/README.md +227 -227
  66. package/src/components/data/XOlMap/XLocationPicker/index.vue +226 -225
  67. package/src/components/data/XOlMap/index.vue +1490 -1490
  68. package/src/components/data/XOlMap/types.ts +149 -149
  69. package/src/components/data/XOlMap/utils/wgs84ToGcj02.js +154 -154
  70. package/src/components/data/XReportForm/DateTimeSecondsPicker.vue +208 -208
  71. package/src/components/data/XReportForm/XReportFormJsonRender.vue +220 -220
  72. package/src/components/data/XReportForm/index.vue +1393 -1393
  73. package/src/components/data/XReportGrid/XAddReport/XAddReport.vue +198 -198
  74. package/src/components/data/XReportGrid/XAddReport/index.js +3 -3
  75. package/src/components/data/XReportGrid/XAddReport/index.md +53 -52
  76. package/src/components/data/XReportGrid/XAddReport/index.ts +10 -10
  77. package/src/components/data/XReportGrid/XReport.vue +960 -960
  78. package/src/components/data/XReportGrid/XReportDemo.vue +33 -33
  79. package/src/components/data/XReportGrid/XReportDesign.vue +597 -597
  80. package/src/components/data/XReportGrid/XReportDrawer/XReportDrawer.vue +148 -148
  81. package/src/components/data/XReportGrid/XReportDrawer/index.js +3 -3
  82. package/src/components/data/XReportGrid/XReportDrawer/index.ts +10 -10
  83. package/src/components/data/XReportGrid/XReportJsonRender.vue +399 -399
  84. package/src/components/data/XReportGrid/XReportTrGroup.vue +592 -592
  85. package/src/components/data/XReportGrid/index.md +46 -42
  86. package/src/components/data/XReportGrid/print.js +184 -184
  87. package/src/components/data/XSignature/index.vue +284 -285
  88. package/src/components/data/XTag/index.vue +10 -10
  89. package/src/components/layout/NormalDataLayout/index.vue +69 -69
  90. package/src/components/layout/TabBarLayout/index.vue +40 -40
  91. package/src/composables/dark.ts +5 -5
  92. package/src/config/routes.ts +9 -9
  93. package/src/constants/index.ts +2 -2
  94. package/src/enums/requestEnum.ts +25 -25
  95. package/src/expression/ExpressionRunner.ts +28 -28
  96. package/src/expression/TestExpression.ts +510 -510
  97. package/src/expression/core/Delegate.ts +116 -116
  98. package/src/expression/core/Expression.ts +1359 -1359
  99. package/src/expression/core/Program.ts +985 -985
  100. package/src/expression/core/Token.ts +29 -29
  101. package/src/expression/enums/ExpressionType.ts +81 -81
  102. package/src/expression/enums/TokenType.ts +11 -11
  103. package/src/expression/exception/BreakWayException.ts +2 -2
  104. package/src/expression/exception/ContinueWayException.ts +2 -2
  105. package/src/expression/exception/ExpressionException.ts +29 -29
  106. package/src/expression/exception/ReturnWayException.ts +14 -14
  107. package/src/expression/exception/ServiceException.ts +22 -22
  108. package/src/expression/instances/JSONArray.ts +52 -52
  109. package/src/expression/instances/JSONObject.ts +118 -118
  110. package/src/expression/instances/LogicConsole.ts +31 -31
  111. package/src/font-style/font.css +4 -4
  112. package/src/hooks/useBoolean.ts +26 -0
  113. package/src/hooks/useCommon.ts +9 -9
  114. package/src/hooks/useLogin.ts +97 -97
  115. package/src/icons/svg/check-in.svg +32 -32
  116. package/src/icons/svg/dark.svg +4 -4
  117. package/src/icons/svg/github.svg +4 -4
  118. package/src/icons/svg/light.svg +4 -4
  119. package/src/icons/svg/link.svg +4 -4
  120. package/src/icons/svgo.yml +22 -22
  121. package/src/layout/GridView/index.vue +16 -16
  122. package/src/layout/PageLayout.vue +9 -9
  123. package/src/layout/SingleLayout.vue +9 -9
  124. package/src/locales/en-US.json +128 -128
  125. package/src/locales/zh-CN.json +128 -128
  126. package/src/logic/LogicRunner.ts +67 -67
  127. package/src/logic/TestLogic.ts +13 -13
  128. package/src/logic/plugins/common/DateTools.ts +35 -35
  129. package/src/logic/plugins/common/VueTools.ts +30 -30
  130. package/src/logic/plugins/index.ts +7 -7
  131. package/src/main.ts +44 -44
  132. package/src/plugins/AppData.ts +38 -38
  133. package/src/plugins/GetLoginInfoService.ts +10 -10
  134. package/src/plugins/collectIcons.ts +10 -0
  135. package/src/plugins/index.ts +11 -11
  136. package/src/router/README.md +8 -8
  137. package/src/router/guards.ts +59 -59
  138. package/src/router/index.ts +35 -35
  139. package/src/router/invoiceRoutes.ts +33 -33
  140. package/src/router/routes.ts +341 -177
  141. package/src/router/types.ts +7 -7
  142. package/src/services/api/Login.ts +6 -6
  143. package/src/services/api/common.ts +109 -109
  144. package/src/services/api/index.ts +7 -7
  145. package/src/services/api/manage.ts +8 -8
  146. package/src/services/api/search.ts +16 -16
  147. package/src/services/api/user.ts +17 -17
  148. package/src/services/restTools.ts +56 -56
  149. package/src/services/v3Api.ts +147 -147
  150. package/src/stores/index.ts +11 -11
  151. package/src/stores/modules/counter.ts +19 -19
  152. package/src/stores/modules/routeCache.ts +23 -23
  153. package/src/stores/modules/setting.ts +76 -76
  154. package/src/stores/modules/user.ts +235 -235
  155. package/src/stores/mutation-type.ts +7 -7
  156. package/src/styles/app.less +36 -36
  157. package/src/styles/login.less +109 -109
  158. package/src/styles/var.less +16 -16
  159. package/src/types/env.d.ts +16 -16
  160. package/src/types/settings.ts +1 -1
  161. package/src/types/vue-router.d.ts +9 -9
  162. package/src/utils/Storage.ts +124 -124
  163. package/src/utils/authority-utils.ts +84 -84
  164. package/src/utils/common.ts +41 -41
  165. package/src/utils/crypto.ts +39 -39
  166. package/src/utils/dataUtil.ts +42 -42
  167. package/src/utils/dictUtil.ts +52 -52
  168. package/src/utils/http/index.ts +199 -199
  169. package/src/utils/i18n.ts +72 -72
  170. package/src/utils/indexedDB.ts +195 -195
  171. package/src/utils/inline-px-to-vw.ts +28 -28
  172. package/src/utils/mobileUtil.ts +34 -34
  173. package/src/utils/progress.ts +19 -19
  174. package/src/utils/routerUtil.ts +271 -271
  175. package/src/utils/runEvalFunction.ts +13 -13
  176. package/src/utils/secureStorage.ts +71 -71
  177. package/src/utils/set-page-title.ts +5 -5
  178. package/src/utils/validate.ts +6 -6
  179. package/src/utils/wechatUtil.ts +9 -9
  180. package/src/views/chat/index.vue +153 -153
  181. package/src/views/common/LoadError.vue +63 -63
  182. package/src/views/common/NotFound.vue +67 -67
  183. package/src/views/component/EvaluateRecordView/index.vue +40 -40
  184. package/src/views/component/IconifyView/index.vue +504 -507
  185. package/src/views/component/UserDetailView/UserDetailPage.vue +77 -0
  186. package/src/views/component/UserDetailView/index.vue +224 -0
  187. package/src/views/component/XCellDetailView/index.vue +217 -217
  188. package/src/views/component/XCellListView/index.vue +108 -157
  189. package/src/views/component/XFormAppraiseView/index.vue +174 -174
  190. package/src/views/component/XFormGroupView/index.vue +78 -82
  191. package/src/views/component/XFormView/index.vue +27 -27
  192. package/src/views/component/XOlMapView/XLocationPicker/index.vue +118 -118
  193. package/src/views/component/XOlMapView/index.vue +434 -434
  194. package/src/views/component/XOlMapView/testData.ts +64 -64
  195. package/src/views/component/XReportFormIframeView/index.vue +47 -47
  196. package/src/views/component/XReportFormView/index.vue +13 -13
  197. package/src/views/component/XReportGridView/index.vue +17 -17
  198. package/src/views/component/XRequestView/index.vue +234 -234
  199. package/src/views/component/XSignatureView/index.vue +50 -50
  200. package/src/views/component/index.vue +181 -177
  201. package/src/views/component/menu.vue +117 -117
  202. package/src/views/component/notice.vue +46 -46
  203. package/src/views/component/topNav.vue +36 -36
  204. package/src/views/invoiceShow/index.vue +61 -61
  205. package/src/views/user/login/ForgetPasswordForm.vue +94 -94
  206. package/src/views/user/login/LoginForm.vue +346 -346
  207. package/src/views/user/login/LoginTitle.vue +76 -76
  208. package/src/views/user/login/LoginWave.vue +109 -109
  209. package/src/views/user/login/index.vue +22 -22
  210. package/src/views/user/my/comm/ModifyPassword.vue +346 -346
  211. package/src/views/user/my/index.vue +340 -340
  212. package/src/views/userRecords/AbnormalAlarmRecords.vue +21 -0
  213. package/src/views/userRecords/CardReplacementRecords.vue +21 -0
  214. package/src/views/userRecords/ChangeRecords.vue +19 -0
  215. package/src/views/userRecords/CommandViewRecords.vue +20 -0
  216. package/src/views/userRecords/GasCompensationRecords.vue +20 -0
  217. package/src/views/userRecords/InstrumentCollectionRecords.vue +21 -0
  218. package/src/views/userRecords/MeterRecords.vue +20 -0
  219. package/src/views/userRecords/OperateRecords.vue +51 -0
  220. package/src/views/userRecords/OtherChargeRecords.vue +19 -0
  221. package/src/views/userRecords/PaymentRecords.vue +28 -0
  222. package/src/views/userRecords/PriceAdjustmentRecords.vue +19 -0
  223. package/src/views/userRecords/ReplacementRecords.vue +19 -0
  224. package/src/views/userRecords/SafetyRecords.vue +19 -0
  225. package/src/views/userRecords/TransactionRecords.vue +21 -0
  226. package/src/views/userRecords/TransferRecords.vue +19 -0
  227. package/src/views/userRecords/operateRecordDetail/index.vue +316 -0
  228. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/AddUserDetail.vue +124 -0
  229. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/AdvanceDeliveryDetail.vue +88 -0
  230. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/AutoAccountsCancelDetail.vue +205 -0
  231. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/AutoAccountsDetail.vue +192 -0
  232. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/BankDkDetail.vue +192 -0
  233. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/BankPayDetail.vue +192 -0
  234. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/BlacklistDetail.vue +153 -0
  235. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/CancellationDetail.vue +101 -0
  236. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/CardMeterCenterCancelDetail.vue +127 -0
  237. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/CardMeterCenterDetail.vue +153 -0
  238. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/CardOverUserDetail.vue +153 -0
  239. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/ChangeMeterCancelDetail.vue +166 -0
  240. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/ChangeMeterDetail.vue +205 -0
  241. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/DisableManageDetail.vue +127 -0
  242. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/EnableManageDetail.vue +114 -0
  243. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/FaZheChangeDetail.vue +124 -0
  244. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/FeeDeductionDetail.vue +153 -0
  245. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/GasPriceChangeDetail.vue +126 -0
  246. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/InputtorChangeDetail.vue +126 -0
  247. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/IotMeterCenterCancelDetail.vue +114 -0
  248. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/IotMeterCenterDetail.vue +127 -0
  249. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/IotOpenDetail.vue +88 -0
  250. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/MachineCardDetail.vue +101 -0
  251. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/MachineMeterCenterCancelDetail.vue +218 -0
  252. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/MachineMeterCenterDetail.vue +153 -0
  253. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/OffGasAddGasDetail.vue +140 -0
  254. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/OtherChargeCancelDetail.vue +127 -0
  255. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/OtherChargeDetail.vue +114 -0
  256. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/OverUserChangeDetail.vue +127 -0
  257. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/ReBillDetail.vue +127 -0
  258. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/RefundDetail.vue +114 -0
  259. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/ReplaceCardManageCancelDetail.vue +127 -0
  260. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/ReplaceCardManageDetail.vue +114 -0
  261. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/SaleCardGasDetail.vue +140 -0
  262. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/TransferManageCancelDetail.vue +152 -0
  263. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/TransferManageDetail.vue +178 -0
  264. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/UserChangeDetail.vue +123 -0
  265. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/WechatPayDetail.vue +192 -0
  266. package/src/views/userRecords/types.ts +66 -0
  267. package/tsconfig.json +39 -39
  268. package/uno.config.ts +82 -78
  269. package/vite.config.ts +118 -118
  270. package/src/views/component/XFormGroupView/xformgroup222.vue +0 -97
@@ -1,434 +1,434 @@
1
- <script setup lang="ts">
2
- import NormalDataLayout from '@af-mobile-client-vue3/components/layout/NormalDataLayout/index.vue'
3
- import { showNotify } from 'vant'
4
- import { onMounted, ref } from 'vue'
5
- import XOlMap from '../../../components/data/XOlMap/index.vue'
6
- import { trackTestData } from './testData'
7
- import 'vant/lib/index.css'
8
-
9
- const mapRef = ref()
10
-
11
- // WMS 配置
12
- const wmsConfig = {
13
- layers: [
14
- {
15
- phoneShow: false,
16
- show: false,
17
- id: 1,
18
- layerName: 'gis:lp',
19
- value: '低压管线',
20
- },
21
- {
22
- phoneShow: true,
23
- show: true,
24
- id: 2,
25
- layerName: 'gis:mp',
26
- value: '中压管线',
27
- },
28
- {
29
- phoneShow: false,
30
- show: false,
31
- id: 3,
32
- layerName: 'gis:surface_valve',
33
- value: '地面阀门',
34
- },
35
- {
36
- phoneShow: false,
37
- show: false,
38
- id: 4,
39
- layerName: 'gis:valve_chamber',
40
- value: '阀门井',
41
- },
42
- {
43
- phoneShow: false,
44
- show: false,
45
- id: 6,
46
- layerName: 'gis:hp',
47
- value: '高压管线',
48
- },
49
- {
50
- phoneShow: false,
51
- show: false,
52
- id: 5,
53
- layerName: 'gis:pressure_regulating_box',
54
- value: '调压箱',
55
- },
56
- ],
57
- wms: {
58
- workspace: 'gis',
59
- srs: 'EPSG:3857',
60
- format: 'image/png',
61
- version: '1.1.0',
62
- url: '/linepatrol/geoserver/gis/wms',
63
- },
64
- }
65
-
66
- // 初始化地图
67
- onMounted(async () => {
68
- await mapRef.value.init({
69
- center: [108.948024, 34.263161], // 西安坐标
70
- zoom: 12,
71
- })
72
- await mapRef.value.addWMSLayers(wmsConfig)
73
- })
74
-
75
- // 地图控制函数
76
- const handleSetCenter = () => mapRef.value.setCenter([116.404, 39.915]) // 切换到北京
77
- const handleSetZoom = () => mapRef.value.setZoom(14) // 设置缩放级别为14
78
- const handleGetZoom = () => showNotify({ type: 'primary', message: `当前缩放级别:${mapRef.value.getZoom()}` })
79
- const handleSetCenterAndZoom = () => mapRef.value.setCenterAndZoom([120.153576, 30.287459], 15) // 切换到杭州
80
-
81
- // 点位数据
82
- const poiPoints = [
83
- {
84
- longitude: 108.988024,
85
- latitude: 34.283161,
86
- title: '大雁塔',
87
- extData: { type: 'poi' },
88
- },
89
- {
90
- longitude: 108.948024,
91
- latitude: 34.263161,
92
- title: '钟楼',
93
- extData: { type: 'poi' },
94
- },
95
- {
96
- longitude: 108.968024,
97
- latitude: 34.273161,
98
- title: '小寨',
99
- extData: { type: 'poi' },
100
- },
101
- ]
102
-
103
- const schoolPoints = [
104
- {
105
- longitude: 108.968024,
106
- latitude: 34.273161,
107
- title: '西安电子科技大学',
108
- extData: {
109
- type: 'school',
110
- level: '985',
111
- studentCount: 25000,
112
- departments: ['通信学院', '计算机学院', '电子工程学院'],
113
- },
114
- },
115
- ]
116
-
117
- const hospitalPoints = [
118
- {
119
- longitude: 108.948024,
120
- latitude: 34.263161,
121
- title: '西安市第一医院',
122
- extData: {
123
- type: 'hospital',
124
- level: '三甲',
125
- departments: ['急诊科', '内科', '外科'],
126
- contact: '029-12345678',
127
- address: '西安市雁塔区',
128
- },
129
- },
130
- {
131
- longitude: 108.978024,
132
- latitude: 34.278161,
133
- title: '西安市中心医院',
134
- extData: {
135
- type: 'hospital',
136
- level: '三甲',
137
- departments: ['急诊科', '内科', '外科'],
138
- contact: '029-87654321',
139
- address: '西安市新城区',
140
- },
141
- },
142
- ]
143
-
144
- // 点位处理函数
145
- function handlePointClick(point: any) {
146
- showNotify({
147
- type: 'primary',
148
- message: `点击了: ${point.title}\n类型: ${point.extData.type}`,
149
- })
150
- }
151
-
152
- // 添加点位示例
153
- function handleAddPoints() {
154
- mapRef.value.addPointLayer({
155
- id: 1,
156
- value: '学校啊啊啊',
157
- show: true,
158
- showInControl: false, // 不添加图层控制按钮
159
- icon: 'https://a.amap.com/jsapi_demos/static/demo-center/icons/poi-marker-red.png',
160
- iconAnchor: [0.5, 1],
161
- onClick: handlePointClick,
162
- dataProvider: async () => {
163
- // 模拟从API获取学校数据
164
- return new Promise((resolve) => {
165
- setTimeout(() => {
166
- resolve([
167
- {
168
- longitude: 108.968024,
169
- latitude: 34.273161,
170
- title: '普通点位',
171
- extData: {
172
- type: 'school',
173
- level: '985',
174
- studentCount: 25000,
175
- },
176
- },
177
- ])
178
- }, 1000)
179
- })
180
- },
181
- })
182
- }
183
-
184
- // 添加分类点位示例
185
- function handleAddPointLayer() {
186
- // 添加学校点位图层
187
- mapRef.value.addPointLayer({
188
- id: 1,
189
- value: '学校',
190
- show: true,
191
- icon: 'https://a.amap.com/jsapi_demos/static/demo-center/icons/poi-marker-default.png',
192
- iconAnchor: [0.5, 1],
193
- onClick: handlePointClick,
194
- dataProvider: async () => {
195
- // 模拟从API获取学校数据
196
- return new Promise((resolve) => {
197
- setTimeout(() => {
198
- resolve([
199
- {
200
- longitude: 108.958024,
201
- latitude: 34.283161,
202
- title: '西安交通大学',
203
- extData: {
204
- type: 'school',
205
- level: '985',
206
- studentCount: 30000,
207
- departments: ['机械学院', '电气学院', '管理学院'],
208
- },
209
- },
210
- ])
211
- }, 1000)
212
- })
213
- },
214
- })
215
-
216
- // 添加医院点位图层
217
- mapRef.value.addPointLayer({
218
- id: 2,
219
- value: '医院',
220
- show: true,
221
- icon: 'https://a.amap.com/jsapi_demos/static/demo-center/icons/poi-marker-default.png',
222
- iconAnchor: [0.5, 1],
223
- onClick: handlePointClick,
224
- dataProvider: async () => {
225
- // 模拟从API获取医院数据
226
- return new Promise((resolve) => {
227
- setTimeout(() => {
228
- resolve([
229
- {
230
- longitude: 108.978024,
231
- latitude: 34.278161,
232
- title: '西安市中心医院',
233
- extData: {
234
- type: 'hospital',
235
- level: '三甲',
236
- departments: ['急诊科', '内科', '外科'],
237
- contact: '029-87654321',
238
- address: '西安市新城区',
239
- },
240
- },
241
- ])
242
- }, 1000)
243
- })
244
- },
245
- })
246
- }
247
-
248
- // 添加海量点示例
249
- function handleAddMassPoints() {
250
- mapRef.value.addWebGLPoints({
251
- id: 3,
252
- value: '海量点',
253
- show: true,
254
- icon: 'https://a.amap.com/jsapi_demos/static/demo-center/icons/poi-marker-red.png',
255
- iconSize: [6, 6],
256
- onClick: handlePointClick,
257
- dataProvider: () => {
258
- // 生成10000个随机点
259
- return Array.from({ length: 10000 }, (_, index) => ({
260
- longitude: 108.948024 + (Math.random() - 0.5) * 0.1,
261
- latitude: 34.263161 + (Math.random() - 0.5) * 0.1,
262
- title: `点位${index + 1}`,
263
- extData: { type: 'mass' },
264
- }))
265
- },
266
- })
267
- }
268
-
269
- // 添加轨迹测试
270
- function handleAddTrack() {
271
- trackTestData.forEach((track) => {
272
- mapRef.value.addTrackLayer(track)
273
- })
274
- }
275
-
276
- // 导航模式相关
277
- const isNavigationMode = ref(false)
278
-
279
- // 开启导航模式
280
- function startNavigation() {
281
- isNavigationMode.value = true
282
- mapRef.value?.startNavigation()
283
- }
284
-
285
- // 停止导航模式
286
- function stopNavigation() {
287
- isNavigationMode.value = false
288
- mapRef.value?.stopNavigation()
289
- }
290
- </script>
291
-
292
- <template>
293
- <NormalDataLayout id="XOlMapView" title="XOlMap地图组件">
294
- <template #layout_content>
295
- <div class="demo-container">
296
- <div class="map-container">
297
- <XOlMap ref="mapRef" />
298
- </div>
299
- <div class="control-panel">
300
- <div class="control-group">
301
- <div class="group-title">
302
- 地图控制
303
- </div>
304
- <van-button type="primary" size="small" @click="handleSetCenter">
305
- 切换到北京
306
- </van-button>
307
- <van-button type="primary" size="small" @click="handleSetZoom">
308
- 设置缩放级别14
309
- </van-button>
310
- <van-button type="primary" size="small" @click="handleGetZoom">
311
- 获取当前缩放级别
312
- </van-button>
313
- <van-button type="primary" size="small" @click="handleSetCenterAndZoom">
314
- 切换到杭州(级别15)
315
- </van-button>
316
- </div>
317
-
318
- <div class="control-group">
319
- <div class="group-title">
320
- 点位示例
321
- </div>
322
- <van-button type="success" size="small" @click="handleAddPoints">
323
- 添加普通点位
324
- </van-button>
325
- <van-button type="success" size="small" @click="handleAddPointLayer">
326
- 添加分类点位
327
- </van-button>
328
- <van-button type="warning" size="small" @click="handleAddMassPoints">
329
- 添加海量点(1万)
330
- </van-button>
331
- </div>
332
-
333
- <div class="control-group">
334
- <div class="group-title">
335
- 轨迹示例
336
- </div>
337
- <van-button type="primary" size="small" @click="handleAddTrack">
338
- 添加测试轨迹
339
- </van-button>
340
- </div>
341
-
342
- <div class="control-group">
343
- <div class="group-title">
344
- 导航模式测试
345
- </div>
346
- <van-button
347
- :type="isNavigationMode ? 'danger' : 'primary'"
348
- size="small"
349
- @click="isNavigationMode ? stopNavigation() : startNavigation()"
350
- >
351
- {{ isNavigationMode ? '停止导航' : '开始导航' }}
352
- </van-button>
353
- </div>
354
- </div>
355
- </div>
356
- </template>
357
- </NormalDataLayout>
358
- </template>
359
-
360
- <style scoped lang="less">
361
- .demo-container {
362
- width: 100%;
363
- height: 100%;
364
- position: relative;
365
- }
366
-
367
- .map-container {
368
- width: 100%;
369
- height: 100%;
370
- }
371
-
372
- .control-panel {
373
- position: absolute;
374
- left: 10px;
375
- top: 10px;
376
- z-index: 1000;
377
- background: white;
378
- padding: 10px;
379
- border-radius: 4px;
380
- box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);
381
- display: flex;
382
- flex-direction: column;
383
- gap: 16px;
384
-
385
- .control-group {
386
- display: flex;
387
- flex-direction: column;
388
- gap: 8px;
389
-
390
- .group-title {
391
- font-size: 14px;
392
- font-weight: 500;
393
- color: #333;
394
- padding-left: 4px;
395
- border-left: 3px solid #1989fa;
396
- }
397
-
398
- :deep(.van-button) {
399
- margin-bottom: 8px;
400
-
401
- &:last-child {
402
- margin-bottom: 0;
403
- }
404
- }
405
- }
406
-
407
- :deep(.van-button) {
408
- width: 140px;
409
- }
410
- }
411
-
412
- // 移动端适配
413
- @media screen and (max-width: 768px) {
414
- .control-panel {
415
- left: 8px;
416
- top: 8px;
417
- padding: 8px;
418
- gap: 12px;
419
-
420
- .control-group {
421
- gap: 6px;
422
-
423
- .group-title {
424
- font-size: 12px;
425
- }
426
- }
427
-
428
- :deep(.van-button) {
429
- width: 120px;
430
- font-size: 12px;
431
- }
432
- }
433
- }
434
- </style>
1
+ <script setup lang="ts">
2
+ import NormalDataLayout from '@af-mobile-client-vue3/components/layout/NormalDataLayout/index.vue'
3
+ import { showNotify } from 'vant'
4
+ import { onMounted, ref } from 'vue'
5
+ import XOlMap from '../../../components/data/XOlMap/index.vue'
6
+ import { trackTestData } from './testData'
7
+ import 'vant/lib/index.css'
8
+
9
+ const mapRef = ref()
10
+
11
+ // WMS 配置
12
+ const wmsConfig = {
13
+ layers: [
14
+ {
15
+ phoneShow: false,
16
+ show: false,
17
+ id: 1,
18
+ layerName: 'gis:lp',
19
+ value: '低压管线',
20
+ },
21
+ {
22
+ phoneShow: true,
23
+ show: true,
24
+ id: 2,
25
+ layerName: 'gis:mp',
26
+ value: '中压管线',
27
+ },
28
+ {
29
+ phoneShow: false,
30
+ show: false,
31
+ id: 3,
32
+ layerName: 'gis:surface_valve',
33
+ value: '地面阀门',
34
+ },
35
+ {
36
+ phoneShow: false,
37
+ show: false,
38
+ id: 4,
39
+ layerName: 'gis:valve_chamber',
40
+ value: '阀门井',
41
+ },
42
+ {
43
+ phoneShow: false,
44
+ show: false,
45
+ id: 6,
46
+ layerName: 'gis:hp',
47
+ value: '高压管线',
48
+ },
49
+ {
50
+ phoneShow: false,
51
+ show: false,
52
+ id: 5,
53
+ layerName: 'gis:pressure_regulating_box',
54
+ value: '调压箱',
55
+ },
56
+ ],
57
+ wms: {
58
+ workspace: 'gis',
59
+ srs: 'EPSG:3857',
60
+ format: 'image/png',
61
+ version: '1.1.0',
62
+ url: '/linepatrol/geoserver/gis/wms',
63
+ },
64
+ }
65
+
66
+ // 初始化地图
67
+ onMounted(async () => {
68
+ await mapRef.value.init({
69
+ center: [108.948024, 34.263161], // 西安坐标
70
+ zoom: 12,
71
+ })
72
+ await mapRef.value.addWMSLayers(wmsConfig)
73
+ })
74
+
75
+ // 地图控制函数
76
+ const handleSetCenter = () => mapRef.value.setCenter([116.404, 39.915]) // 切换到北京
77
+ const handleSetZoom = () => mapRef.value.setZoom(14) // 设置缩放级别为14
78
+ const handleGetZoom = () => showNotify({ type: 'primary', message: `当前缩放级别:${mapRef.value.getZoom()}` })
79
+ const handleSetCenterAndZoom = () => mapRef.value.setCenterAndZoom([120.153576, 30.287459], 15) // 切换到杭州
80
+
81
+ // 点位数据
82
+ const poiPoints = [
83
+ {
84
+ longitude: 108.988024,
85
+ latitude: 34.283161,
86
+ title: '大雁塔',
87
+ extData: { type: 'poi' },
88
+ },
89
+ {
90
+ longitude: 108.948024,
91
+ latitude: 34.263161,
92
+ title: '钟楼',
93
+ extData: { type: 'poi' },
94
+ },
95
+ {
96
+ longitude: 108.968024,
97
+ latitude: 34.273161,
98
+ title: '小寨',
99
+ extData: { type: 'poi' },
100
+ },
101
+ ]
102
+
103
+ const schoolPoints = [
104
+ {
105
+ longitude: 108.968024,
106
+ latitude: 34.273161,
107
+ title: '西安电子科技大学',
108
+ extData: {
109
+ type: 'school',
110
+ level: '985',
111
+ studentCount: 25000,
112
+ departments: ['通信学院', '计算机学院', '电子工程学院'],
113
+ },
114
+ },
115
+ ]
116
+
117
+ const hospitalPoints = [
118
+ {
119
+ longitude: 108.948024,
120
+ latitude: 34.263161,
121
+ title: '西安市第一医院',
122
+ extData: {
123
+ type: 'hospital',
124
+ level: '三甲',
125
+ departments: ['急诊科', '内科', '外科'],
126
+ contact: '029-12345678',
127
+ address: '西安市雁塔区',
128
+ },
129
+ },
130
+ {
131
+ longitude: 108.978024,
132
+ latitude: 34.278161,
133
+ title: '西安市中心医院',
134
+ extData: {
135
+ type: 'hospital',
136
+ level: '三甲',
137
+ departments: ['急诊科', '内科', '外科'],
138
+ contact: '029-87654321',
139
+ address: '西安市新城区',
140
+ },
141
+ },
142
+ ]
143
+
144
+ // 点位处理函数
145
+ function handlePointClick(point: any) {
146
+ showNotify({
147
+ type: 'primary',
148
+ message: `点击了: ${point.title}\n类型: ${point.extData.type}`,
149
+ })
150
+ }
151
+
152
+ // 添加点位示例
153
+ function handleAddPoints() {
154
+ mapRef.value.addPointLayer({
155
+ id: 1,
156
+ value: '学校啊啊啊',
157
+ show: true,
158
+ showInControl: false, // 不添加图层控制按钮
159
+ icon: 'https://a.amap.com/jsapi_demos/static/demo-center/icons/poi-marker-red.png',
160
+ iconAnchor: [0.5, 1],
161
+ onClick: handlePointClick,
162
+ dataProvider: async () => {
163
+ // 模拟从API获取学校数据
164
+ return new Promise((resolve) => {
165
+ setTimeout(() => {
166
+ resolve([
167
+ {
168
+ longitude: 108.968024,
169
+ latitude: 34.273161,
170
+ title: '普通点位',
171
+ extData: {
172
+ type: 'school',
173
+ level: '985',
174
+ studentCount: 25000,
175
+ },
176
+ },
177
+ ])
178
+ }, 1000)
179
+ })
180
+ },
181
+ })
182
+ }
183
+
184
+ // 添加分类点位示例
185
+ function handleAddPointLayer() {
186
+ // 添加学校点位图层
187
+ mapRef.value.addPointLayer({
188
+ id: 1,
189
+ value: '学校',
190
+ show: true,
191
+ icon: 'https://a.amap.com/jsapi_demos/static/demo-center/icons/poi-marker-default.png',
192
+ iconAnchor: [0.5, 1],
193
+ onClick: handlePointClick,
194
+ dataProvider: async () => {
195
+ // 模拟从API获取学校数据
196
+ return new Promise((resolve) => {
197
+ setTimeout(() => {
198
+ resolve([
199
+ {
200
+ longitude: 108.958024,
201
+ latitude: 34.283161,
202
+ title: '西安交通大学',
203
+ extData: {
204
+ type: 'school',
205
+ level: '985',
206
+ studentCount: 30000,
207
+ departments: ['机械学院', '电气学院', '管理学院'],
208
+ },
209
+ },
210
+ ])
211
+ }, 1000)
212
+ })
213
+ },
214
+ })
215
+
216
+ // 添加医院点位图层
217
+ mapRef.value.addPointLayer({
218
+ id: 2,
219
+ value: '医院',
220
+ show: true,
221
+ icon: 'https://a.amap.com/jsapi_demos/static/demo-center/icons/poi-marker-default.png',
222
+ iconAnchor: [0.5, 1],
223
+ onClick: handlePointClick,
224
+ dataProvider: async () => {
225
+ // 模拟从API获取医院数据
226
+ return new Promise((resolve) => {
227
+ setTimeout(() => {
228
+ resolve([
229
+ {
230
+ longitude: 108.978024,
231
+ latitude: 34.278161,
232
+ title: '西安市中心医院',
233
+ extData: {
234
+ type: 'hospital',
235
+ level: '三甲',
236
+ departments: ['急诊科', '内科', '外科'],
237
+ contact: '029-87654321',
238
+ address: '西安市新城区',
239
+ },
240
+ },
241
+ ])
242
+ }, 1000)
243
+ })
244
+ },
245
+ })
246
+ }
247
+
248
+ // 添加海量点示例
249
+ function handleAddMassPoints() {
250
+ mapRef.value.addWebGLPoints({
251
+ id: 3,
252
+ value: '海量点',
253
+ show: true,
254
+ icon: 'https://a.amap.com/jsapi_demos/static/demo-center/icons/poi-marker-red.png',
255
+ iconSize: [6, 6],
256
+ onClick: handlePointClick,
257
+ dataProvider: () => {
258
+ // 生成10000个随机点
259
+ return Array.from({ length: 10000 }, (_, index) => ({
260
+ longitude: 108.948024 + (Math.random() - 0.5) * 0.1,
261
+ latitude: 34.263161 + (Math.random() - 0.5) * 0.1,
262
+ title: `点位${index + 1}`,
263
+ extData: { type: 'mass' },
264
+ }))
265
+ },
266
+ })
267
+ }
268
+
269
+ // 添加轨迹测试
270
+ function handleAddTrack() {
271
+ trackTestData.forEach((track) => {
272
+ mapRef.value.addTrackLayer(track)
273
+ })
274
+ }
275
+
276
+ // 导航模式相关
277
+ const isNavigationMode = ref(false)
278
+
279
+ // 开启导航模式
280
+ function startNavigation() {
281
+ isNavigationMode.value = true
282
+ mapRef.value?.startNavigation()
283
+ }
284
+
285
+ // 停止导航模式
286
+ function stopNavigation() {
287
+ isNavigationMode.value = false
288
+ mapRef.value?.stopNavigation()
289
+ }
290
+ </script>
291
+
292
+ <template>
293
+ <NormalDataLayout id="XOlMapView" title="XOlMap地图组件">
294
+ <template #layout_content>
295
+ <div class="demo-container">
296
+ <div class="map-container">
297
+ <XOlMap ref="mapRef" />
298
+ </div>
299
+ <div class="control-panel">
300
+ <div class="control-group">
301
+ <div class="group-title">
302
+ 地图控制
303
+ </div>
304
+ <van-button type="primary" size="small" @click="handleSetCenter">
305
+ 切换到北京
306
+ </van-button>
307
+ <van-button type="primary" size="small" @click="handleSetZoom">
308
+ 设置缩放级别14
309
+ </van-button>
310
+ <van-button type="primary" size="small" @click="handleGetZoom">
311
+ 获取当前缩放级别
312
+ </van-button>
313
+ <van-button type="primary" size="small" @click="handleSetCenterAndZoom">
314
+ 切换到杭州(级别15)
315
+ </van-button>
316
+ </div>
317
+
318
+ <div class="control-group">
319
+ <div class="group-title">
320
+ 点位示例
321
+ </div>
322
+ <van-button type="success" size="small" @click="handleAddPoints">
323
+ 添加普通点位
324
+ </van-button>
325
+ <van-button type="success" size="small" @click="handleAddPointLayer">
326
+ 添加分类点位
327
+ </van-button>
328
+ <van-button type="warning" size="small" @click="handleAddMassPoints">
329
+ 添加海量点(1万)
330
+ </van-button>
331
+ </div>
332
+
333
+ <div class="control-group">
334
+ <div class="group-title">
335
+ 轨迹示例
336
+ </div>
337
+ <van-button type="primary" size="small" @click="handleAddTrack">
338
+ 添加测试轨迹
339
+ </van-button>
340
+ </div>
341
+
342
+ <div class="control-group">
343
+ <div class="group-title">
344
+ 导航模式测试
345
+ </div>
346
+ <van-button
347
+ :type="isNavigationMode ? 'danger' : 'primary'"
348
+ size="small"
349
+ @click="isNavigationMode ? stopNavigation() : startNavigation()"
350
+ >
351
+ {{ isNavigationMode ? '停止导航' : '开始导航' }}
352
+ </van-button>
353
+ </div>
354
+ </div>
355
+ </div>
356
+ </template>
357
+ </NormalDataLayout>
358
+ </template>
359
+
360
+ <style scoped lang="less">
361
+ .demo-container {
362
+ width: 100%;
363
+ height: 100%;
364
+ position: relative;
365
+ }
366
+
367
+ .map-container {
368
+ width: 100%;
369
+ height: 100%;
370
+ }
371
+
372
+ .control-panel {
373
+ position: absolute;
374
+ left: 10px;
375
+ top: 10px;
376
+ z-index: 1000;
377
+ background: white;
378
+ padding: 10px;
379
+ border-radius: 4px;
380
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);
381
+ display: flex;
382
+ flex-direction: column;
383
+ gap: 16px;
384
+
385
+ .control-group {
386
+ display: flex;
387
+ flex-direction: column;
388
+ gap: 8px;
389
+
390
+ .group-title {
391
+ font-size: 14px;
392
+ font-weight: 500;
393
+ color: #333;
394
+ padding-left: 4px;
395
+ border-left: 3px solid #1989fa;
396
+ }
397
+
398
+ :deep(.van-button) {
399
+ margin-bottom: 8px;
400
+
401
+ &:last-child {
402
+ margin-bottom: 0;
403
+ }
404
+ }
405
+ }
406
+
407
+ :deep(.van-button) {
408
+ width: 140px;
409
+ }
410
+ }
411
+
412
+ // 移动端适配
413
+ @media screen and (max-width: 768px) {
414
+ .control-panel {
415
+ left: 8px;
416
+ top: 8px;
417
+ padding: 8px;
418
+ gap: 12px;
419
+
420
+ .control-group {
421
+ gap: 6px;
422
+
423
+ .group-title {
424
+ font-size: 12px;
425
+ }
426
+ }
427
+
428
+ :deep(.van-button) {
429
+ width: 120px;
430
+ font-size: 12px;
431
+ }
432
+ }
433
+ }
434
+ </style>