af-mobile-client-vue3 1.3.30 → 1.3.31

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 (283) 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 +68 -66
  10. package/CLAUDE.md +218 -189
  11. package/README.md +182 -182
  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 +31 -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 +95 -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/auth/index.ts +77 -0
  33. package/src/api/auth/types.ts +200 -0
  34. package/src/api/mock/index.ts +30 -30
  35. package/src/api/user/index.ts +40 -40
  36. package/src/assets/img/user/login/background-shadow-1.svg +20 -20
  37. package/src/assets/img/user/login/logo-background.svg +20 -20
  38. package/src/bootstrap.ts +26 -26
  39. package/src/components/core/BeautifulLoading/index.vue +52 -52
  40. package/src/components/core/ImageUploader/index.vue +251 -251
  41. package/src/components/core/NavBar/index.vue +53 -53
  42. package/src/components/core/Tabbar/index.vue +32 -32
  43. package/src/components/core/Uploader/index.vue +124 -124
  44. package/src/components/core/XGridDropOption/index.vue +154 -154
  45. package/src/components/core/XMultiSelect/index.vue +183 -183
  46. package/src/components/core/XSelect/index.vue +149 -149
  47. package/src/components/data/CardContainer/CardContainer.vue +118 -118
  48. package/src/components/data/CardContainer/CardHeader.vue +99 -99
  49. package/src/components/data/InfoDisplay/index.vue +132 -132
  50. package/src/components/data/UserDetail/api.ts +24 -24
  51. package/src/components/data/UserDetail/index.vue +620 -620
  52. package/src/components/data/UserDetail/recordEntries.ts +159 -159
  53. package/src/components/data/UserDetail/types.ts +26 -26
  54. package/src/components/data/XBadge/index.vue +82 -82
  55. package/src/components/data/XCellDetail/index.vue +105 -105
  56. package/src/components/data/XCellList/XCellList.md +432 -432
  57. package/src/components/data/XCellList/index.vue +1436 -1436
  58. package/src/components/data/XCellListFilter/QrScanner/index.vue +207 -207
  59. package/src/components/data/XCellListFilter/QrScanner/startScanAnimation.ts +53 -53
  60. package/src/components/data/XCellListFilter/VpnRecognition/index.vue +119 -119
  61. package/src/components/data/XCellListFilter/index.vue +705 -705
  62. package/src/components/data/XForm/index.vue +659 -659
  63. package/src/components/data/XFormGroup/doc/DeviceForm.vue +122 -122
  64. package/src/components/data/XFormGroup/doc/FormGroupDemo.vue +56 -56
  65. package/src/components/data/XFormGroup/doc/README.md +286 -286
  66. package/src/components/data/XFormGroup/doc/UserForm.vue +102 -102
  67. package/src/components/data/XFormGroup/index.vue +240 -240
  68. package/src/components/data/XFormItem/index.vue +1310 -1310
  69. package/src/components/data/XOlMap/README.md +227 -227
  70. package/src/components/data/XOlMap/XLocationPicker/index.vue +226 -226
  71. package/src/components/data/XOlMap/index.vue +1490 -1490
  72. package/src/components/data/XOlMap/types.ts +149 -149
  73. package/src/components/data/XOlMap/utils/{wgs84ToGcj02.js → wgs84ToGcj02.ts} +171 -154
  74. package/src/components/data/XReportForm/DateTimeSecondsPicker.vue +208 -208
  75. package/src/components/data/XReportForm/XReportFormJsonRender.vue +220 -220
  76. package/src/components/data/XReportForm/index.vue +1393 -1393
  77. package/src/components/data/XReportGrid/XAddReport/XAddReport.vue +198 -198
  78. package/src/components/data/XReportGrid/XAddReport/index.js +3 -3
  79. package/src/components/data/XReportGrid/XAddReport/index.md +53 -53
  80. package/src/components/data/XReportGrid/XAddReport/index.ts +10 -10
  81. package/src/components/data/XReportGrid/XReport.vue +960 -960
  82. package/src/components/data/XReportGrid/XReportDemo.vue +33 -33
  83. package/src/components/data/XReportGrid/XReportDesign.vue +597 -597
  84. package/src/components/data/XReportGrid/XReportDrawer/XReportDrawer.vue +148 -148
  85. package/src/components/data/XReportGrid/XReportDrawer/index.js +3 -3
  86. package/src/components/data/XReportGrid/XReportDrawer/index.ts +10 -10
  87. package/src/components/data/XReportGrid/XReportJsonRender.vue +399 -399
  88. package/src/components/data/XReportGrid/XReportTrGroup.vue +592 -592
  89. package/src/components/data/XReportGrid/index.md +46 -46
  90. package/src/components/data/XReportGrid/print.js +184 -184
  91. package/src/components/data/XSignature/index.vue +284 -284
  92. package/src/components/data/XTag/index.vue +10 -10
  93. package/src/components/layout/NormalDataLayout/index.vue +69 -69
  94. package/src/components/layout/TabBarLayout/index.vue +40 -40
  95. package/src/composables/dark.ts +5 -5
  96. package/src/config/routes.ts +9 -9
  97. package/src/constants/index.ts +2 -2
  98. package/src/enums/requestEnum.ts +25 -25
  99. package/src/expression/ExpressionRunner.ts +28 -28
  100. package/src/expression/TestExpression.ts +510 -510
  101. package/src/expression/core/Delegate.ts +116 -116
  102. package/src/expression/core/Expression.ts +1359 -1359
  103. package/src/expression/core/Program.ts +985 -985
  104. package/src/expression/core/Token.ts +29 -29
  105. package/src/expression/enums/ExpressionType.ts +81 -81
  106. package/src/expression/enums/TokenType.ts +11 -11
  107. package/src/expression/exception/BreakWayException.ts +2 -2
  108. package/src/expression/exception/ContinueWayException.ts +2 -2
  109. package/src/expression/exception/ExpressionException.ts +29 -29
  110. package/src/expression/exception/ReturnWayException.ts +14 -14
  111. package/src/expression/exception/ServiceException.ts +22 -22
  112. package/src/expression/instances/JSONArray.ts +52 -52
  113. package/src/expression/instances/JSONObject.ts +118 -118
  114. package/src/expression/instances/LogicConsole.ts +31 -31
  115. package/src/font-style/font.css +4 -4
  116. package/src/hooks/useBoolean.ts +26 -26
  117. package/src/hooks/useCommon.ts +9 -9
  118. package/src/hooks/useLoading.ts +16 -16
  119. package/src/hooks/useLogin.ts +97 -97
  120. package/src/icons/svg/check-in.svg +32 -32
  121. package/src/icons/svg/dark.svg +4 -4
  122. package/src/icons/svg/github.svg +4 -4
  123. package/src/icons/svg/light.svg +4 -4
  124. package/src/icons/svg/link.svg +4 -4
  125. package/src/icons/svgo.yml +22 -22
  126. package/src/layout/GridView/index.vue +16 -16
  127. package/src/layout/PageLayout.vue +9 -9
  128. package/src/layout/SingleLayout.vue +9 -9
  129. package/src/locales/en-US.json +128 -128
  130. package/src/locales/zh-CN.json +128 -128
  131. package/src/logic/LogicRunner.ts +67 -67
  132. package/src/logic/TestLogic.ts +13 -13
  133. package/src/logic/plugins/common/DateTools.ts +35 -35
  134. package/src/logic/plugins/common/VueTools.ts +30 -30
  135. package/src/logic/plugins/index.ts +7 -7
  136. package/src/main.ts +44 -44
  137. package/src/plugins/AppData.ts +38 -38
  138. package/src/plugins/GetLoginInfoService.ts +10 -10
  139. package/src/plugins/collectIcons.ts +10 -10
  140. package/src/plugins/index.ts +11 -11
  141. package/src/router/README.md +8 -8
  142. package/src/router/external-routes.ts +60 -0
  143. package/src/router/guards.ts +131 -59
  144. package/src/router/index.ts +35 -35
  145. package/src/router/invoiceRoutes.ts +33 -33
  146. package/src/router/routes.ts +426 -347
  147. package/src/services/api/Login.ts +6 -6
  148. package/src/services/api/common.ts +109 -109
  149. package/src/services/api/index.ts +7 -7
  150. package/src/services/api/manage.ts +8 -8
  151. package/src/services/api/search.ts +16 -16
  152. package/src/services/api/user.ts +17 -17
  153. package/src/services/restTools.ts +56 -56
  154. package/src/services/v3Api.ts +147 -147
  155. package/src/stores/index.ts +13 -13
  156. package/src/stores/modules/counter.ts +19 -19
  157. package/src/stores/modules/homeApp.ts +55 -55
  158. package/src/stores/modules/routeCache.ts +22 -23
  159. package/src/stores/modules/setting.ts +87 -87
  160. package/src/stores/modules/user.ts +326 -235
  161. package/src/stores/mutation-type.ts +12 -7
  162. package/src/styles/app.less +36 -36
  163. package/src/styles/login.less +109 -109
  164. package/src/styles/var.less +25 -25
  165. package/src/types/auth.ts +85 -0
  166. package/src/types/env.d.ts +16 -16
  167. package/src/types/platform.ts +194 -0
  168. package/src/types/settings.ts +1 -1
  169. package/src/types/vue-router.d.ts +13 -9
  170. package/src/utils/Storage.ts +124 -124
  171. package/src/utils/authority-utils.ts +84 -84
  172. package/src/utils/common.ts +41 -41
  173. package/src/utils/crypto.ts +39 -39
  174. package/src/utils/dataUtil.ts +42 -42
  175. package/src/utils/dictUtil.ts +52 -52
  176. package/src/utils/http/index.ts +201 -199
  177. package/src/utils/i18n.ts +72 -72
  178. package/src/utils/indexedDB.ts +195 -195
  179. package/src/utils/inline-px-to-vw.ts +28 -28
  180. package/src/utils/mobileUtil.ts +33 -34
  181. package/src/utils/platform-auth.ts +134 -0
  182. package/src/utils/progress.ts +19 -19
  183. package/src/utils/routerUtil.ts +271 -271
  184. package/src/utils/runEvalFunction.ts +13 -13
  185. package/src/utils/secureStorage.ts +70 -71
  186. package/src/utils/set-page-title.ts +5 -5
  187. package/src/utils/validate.ts +6 -6
  188. package/src/views/chat/index.vue +153 -153
  189. package/src/views/common/Forbidden.vue +97 -0
  190. package/src/views/common/LoadError.vue +63 -63
  191. package/src/views/common/NotFound.vue +67 -67
  192. package/src/views/component/EvaluateRecordView/index.vue +40 -40
  193. package/src/views/component/IconifyView/index.vue +504 -504
  194. package/src/views/component/UserDetailView/UserDetailPage.vue +77 -77
  195. package/src/views/component/UserDetailView/index.vue +234 -234
  196. package/src/views/component/XCellDetailView/index.vue +217 -217
  197. package/src/views/component/XCellListView/index.vue +108 -129
  198. package/src/views/component/XFormAppraiseView/index.vue +174 -174
  199. package/src/views/component/XFormGroupView/index.vue +78 -82
  200. package/src/views/component/XFormView/index.vue +27 -27
  201. package/src/views/component/XOlMapView/XLocationPicker/index.vue +118 -118
  202. package/src/views/component/XOlMapView/index.vue +434 -434
  203. package/src/views/component/XOlMapView/testData.ts +64 -64
  204. package/src/views/component/XReportFormIframeView/index.vue +47 -47
  205. package/src/views/component/XReportFormView/index.vue +13 -13
  206. package/src/views/component/XReportGridView/index.vue +17 -17
  207. package/src/views/component/XRequestView/index.vue +234 -234
  208. package/src/views/component/XSignatureView/index.vue +50 -50
  209. package/src/views/component/index.vue +181 -181
  210. package/src/views/component/menu.vue +117 -117
  211. package/src/views/component/notice.vue +46 -46
  212. package/src/views/component/topNav.vue +36 -36
  213. package/src/views/external/index.vue +152 -0
  214. package/src/views/invoiceShow/index.vue +61 -61
  215. package/src/views/loading/AuthLoading.vue +345 -0
  216. package/src/views/user/login/ForgetPasswordForm.vue +94 -94
  217. package/src/views/user/login/LoginForm.vue +350 -347
  218. package/src/views/user/login/LoginTitle.vue +76 -76
  219. package/src/views/user/login/LoginWave.vue +109 -109
  220. package/src/views/user/login/index.vue +22 -22
  221. package/src/views/user/my/comm/ModifyPassword.vue +346 -346
  222. package/src/views/user/my/index.vue +507 -507
  223. package/src/views/user/register/index.vue +952 -952
  224. package/src/views/userRecords/AbnormalAlarmRecords.vue +21 -21
  225. package/src/views/userRecords/CardReplacementRecords.vue +21 -21
  226. package/src/views/userRecords/ChangeRecords.vue +19 -19
  227. package/src/views/userRecords/CommandViewRecords.vue +20 -20
  228. package/src/views/userRecords/GasCompensationRecords.vue +20 -20
  229. package/src/views/userRecords/InstrumentCollectionRecords.vue +21 -21
  230. package/src/views/userRecords/MeterRecords.vue +20 -20
  231. package/src/views/userRecords/OperateRecords.vue +51 -51
  232. package/src/views/userRecords/OtherChargeRecords.vue +19 -19
  233. package/src/views/userRecords/PaymentRecords.vue +28 -28
  234. package/src/views/userRecords/PriceAdjustmentRecords.vue +19 -19
  235. package/src/views/userRecords/ReplacementRecords.vue +19 -19
  236. package/src/views/userRecords/SafetyRecords.vue +19 -19
  237. package/src/views/userRecords/TransactionRecords.vue +21 -21
  238. package/src/views/userRecords/TransferRecords.vue +19 -19
  239. package/src/views/userRecords/operateRecordDetail/index.vue +316 -316
  240. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/AddUserDetail.vue +124 -124
  241. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/AdvanceDeliveryDetail.vue +88 -88
  242. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/AutoAccountsCancelDetail.vue +205 -205
  243. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/AutoAccountsDetail.vue +192 -192
  244. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/BankDkDetail.vue +192 -192
  245. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/BankPayDetail.vue +192 -192
  246. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/BlacklistDetail.vue +153 -153
  247. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/CancellationDetail.vue +101 -101
  248. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/CardMeterCenterCancelDetail.vue +127 -127
  249. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/CardMeterCenterDetail.vue +153 -153
  250. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/CardOverUserDetail.vue +153 -153
  251. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/ChangeMeterCancelDetail.vue +166 -166
  252. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/ChangeMeterDetail.vue +205 -205
  253. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/DisableManageDetail.vue +127 -127
  254. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/EnableManageDetail.vue +114 -114
  255. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/FaZheChangeDetail.vue +124 -124
  256. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/FeeDeductionDetail.vue +153 -153
  257. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/GasPriceChangeDetail.vue +126 -126
  258. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/InputtorChangeDetail.vue +126 -126
  259. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/IotMeterCenterCancelDetail.vue +114 -114
  260. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/IotMeterCenterDetail.vue +127 -127
  261. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/IotOpenDetail.vue +88 -88
  262. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/MachineCardDetail.vue +101 -101
  263. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/MachineMeterCenterCancelDetail.vue +218 -218
  264. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/MachineMeterCenterDetail.vue +153 -153
  265. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/OffGasAddGasDetail.vue +140 -140
  266. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/OtherChargeCancelDetail.vue +127 -127
  267. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/OtherChargeDetail.vue +114 -114
  268. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/OverUserChangeDetail.vue +127 -127
  269. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/ReBillDetail.vue +127 -127
  270. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/RefundDetail.vue +114 -114
  271. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/ReplaceCardManageCancelDetail.vue +127 -127
  272. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/ReplaceCardManageDetail.vue +114 -114
  273. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/SaleCardGasDetail.vue +140 -140
  274. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/TransferManageCancelDetail.vue +152 -152
  275. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/TransferManageDetail.vue +178 -178
  276. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/UserChangeDetail.vue +123 -123
  277. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/WechatPayDetail.vue +192 -192
  278. package/src/views/userRecords/types.ts +66 -66
  279. package/tsconfig.json +39 -39
  280. package/uno.config.ts +82 -82
  281. package/vite.config.ts +119 -118
  282. package/src/router/types.ts +0 -7
  283. package/src/utils/wechatUtil.ts +0 -9
@@ -1,220 +1,220 @@
1
- <script setup lang="ts">
2
- import {
3
- Cell as vanCell,
4
- CellGroup as vanCellGroup,
5
- Field as vanField,
6
- Form as vanForm,
7
- Image as vanImage,
8
- } from 'vant'
9
- import { reactive, ref } from 'vue'
10
-
11
- const props = defineProps({
12
- jsonConfig: Object,
13
- })
14
-
15
- const receivedFunction = reactive([])
16
- const contentForMobile = ref([])
17
-
18
- function formatConfig() {
19
- for (let i = 0; i < props.jsonConfig.content.length; i++) {
20
- let tempObj = {
21
- label: undefined,
22
- value: undefined,
23
- valueType: 'str',
24
- }
25
- const item = props.jsonConfig.content[i]
26
- if (item.type === 'jsonKey') {
27
- if (receivedFunction[i].labelFunction(props.jsonConfig).type === 'key')
28
- tempObj.label = props.jsonConfig.data[receivedFunction[i].labelFunction(props.jsonConfig).content]
29
- else if (receivedFunction[i].labelFunction(props.jsonConfig).type === 'value')
30
- tempObj.label = receivedFunction[i].labelFunction(props.jsonConfig).content
31
-
32
- if (receivedFunction[i].valueFunction(props.jsonConfig).type === 'key') {
33
- tempObj.value = props.jsonConfig.data[receivedFunction[i].valueFunction(props.jsonConfig).content]
34
- }
35
- else if (receivedFunction[i].valueFunction(props.jsonConfig).type === 'value') {
36
- tempObj.value = receivedFunction[i].valueFunction(props.jsonConfig).content
37
- }
38
- else if (receivedFunction[i].valueFunction(props.jsonConfig).type === 'img') {
39
- tempObj.valueType = 'img'
40
- tempObj.value = receivedFunction[i].valueFunction(props.jsonConfig).content
41
- }
42
- contentForMobile.value.push(tempObj)
43
- tempObj = {
44
- label: undefined,
45
- value: undefined,
46
- valueType: 'str',
47
- }
48
- }
49
- else if (item.type === 'jsonArray') {
50
- for (let j = 0; j < props.jsonConfig.data[item.jsonArrayDataIndex].length; j++) {
51
- const jsonArrayItem = props.jsonConfig.data[item.jsonArrayDataIndex][j]
52
- if (receivedFunction[i].labelFunction(props.jsonConfig, jsonArrayItem).type === 'key')
53
- tempObj.label = jsonArrayItem[receivedFunction[i].labelFunction(props.jsonConfig, jsonArrayItem).content]
54
- else if (receivedFunction[i].labelFunction(props.jsonConfig, jsonArrayItem).type === 'value')
55
- tempObj.label = receivedFunction[i].labelFunction(props.jsonConfig, jsonArrayItem).content
56
-
57
- if (receivedFunction[i].valueFunction(props.jsonConfig, jsonArrayItem).type === 'key') {
58
- tempObj.value = jsonArrayItem[receivedFunction[i].valueFunction(props.jsonConfig, jsonArrayItem).content]
59
- }
60
- else if (receivedFunction[i].valueFunction(props.jsonConfig, jsonArrayItem).type === 'value') {
61
- tempObj.value = receivedFunction[i].valueFunction(props.jsonConfig, jsonArrayItem).content
62
- }
63
- else if (receivedFunction[i].valueFunction(props.jsonConfig, jsonArrayItem).type === 'img') {
64
- tempObj.valueType = 'img'
65
- tempObj.value = receivedFunction[i].valueFunction(props.jsonConfig, jsonArrayItem).content
66
- }
67
-
68
- contentForMobile.value.push(tempObj)
69
- tempObj = {
70
- label: undefined,
71
- value: undefined,
72
- valueType: 'str',
73
- }
74
- }
75
- }
76
- }
77
- }
78
- // ------------------------- 初始化 -------------------------
79
- initComponent()
80
-
81
- function initComponent() {
82
- for (let i = 0; i < props.jsonConfig.content.length; i++) {
83
- receivedFunction.push({
84
- // eslint-disable-next-line no-new-func
85
- labelFunction: new Function(`return ${props.jsonConfig.content[i].customFunctionForLabel}`)(),
86
- // eslint-disable-next-line no-new-func
87
- valueFunction: new Function(`return ${props.jsonConfig.content[i].customFunctionForValue}`)(),
88
- })
89
- }
90
- formatConfig()
91
- }
92
- </script>
93
-
94
- <template>
95
- <div class="main">
96
- <!-- 标题 -->
97
- <template v-if="jsonConfig.title">
98
- <template v-if="jsonConfig.title.type === 'titleKey'">
99
- <h2 class="title" v-html="jsonConfig.data[jsonConfig.title.value]" />
100
- </template>
101
- <template v-else-if="jsonConfig.title.type === 'titleValue'">
102
- <h2 class="title" v-html="jsonConfig.title.value" />
103
- </template>
104
- </template>
105
- <!-- 内容 -->
106
- <van-form>
107
- <van-cell-group inset class="cell_group">
108
- <template v-for="(row, rowIndex) in contentForMobile" :key="rowIndex">
109
- <template v-if="row.valueType === 'str'">
110
- <van-cell center :title="row.label" :value="row.value ? row.value : '无'" />
111
- </template>
112
- <template v-else-if="row.valueType === 'img'">
113
- <template v-for="(img, imgIndex) in row.value" :key="imgIndex">
114
- <van-field :name="row.label" :label="row.label">
115
- <template #input>
116
- <div style="width: 100%;text-align: right">
117
- <van-image :src="img" width="100" height="100" fit="cover" />
118
- </div>
119
- </template>
120
- </van-field>
121
- </template>
122
- </template>
123
- </template>
124
- </van-cell-group>
125
- </van-form>
126
- </div>
127
- </template>
128
-
129
- <style scoped lang="less">
130
- .main {
131
- padding-top: 4vh;
132
- width: 100vw;
133
- height: 100vh;
134
- background-color: #eff2f5;
135
-
136
- .title {
137
- padding-bottom: 2vh;
138
- color: rgb(50, 50, 51);
139
- text-align: center;
140
- margin: 0 0 3vh;
141
- }
142
-
143
- .text_box {
144
- margin-top: 2vh;
145
- margin-bottom: 2vh;
146
- }
147
-
148
- .main_text {
149
- padding-left: 16px;
150
- font-weight: 400;
151
- line-height: 1.6;
152
- margin: 0 0 40px;
153
- color: #969799;
154
- font-size: 14px;
155
- }
156
-
157
- .show_value_item {
158
- text-align: center;
159
- font-size: 1.2em;
160
- }
161
-
162
- .cell_group {
163
- margin-top: 2vh;
164
- margin-bottom: 2vh;
165
- }
166
-
167
- .form_item {
168
- margin-top: 2vh;
169
- }
170
-
171
- .button_group {
172
- text-align: center;
173
- margin-top: 3vh;
174
- margin-bottom: 3vh;
175
- }
176
-
177
- .button_group > :first-child {
178
- margin-right: 3vw;
179
- }
180
-
181
- .divider {
182
- color: #1989fa;
183
- border-color: #1989fa;
184
- padding: 0 16px;
185
- }
186
-
187
- .submit_button {
188
- background-color: #eff2f5;
189
- padding: 5vh;
190
- }
191
- }
192
-
193
- .skeleton {
194
- margin-top: 5vh;
195
- }
196
- .my-cell-group {
197
- margin: 0 0 10px 0;
198
- }
199
- :deep(.van-collapse-item__content) {
200
- background-color: #eff2f5;
201
- padding: 10px 0;
202
- }
203
- :deep(.van-cell-group__title) {
204
- padding-top: 10px;
205
- padding-bottom: 10px;
206
- }
207
- :deep(.van-field__label) {
208
- font-weight: 600;
209
- }
210
- :deep(.van-cell__title) {
211
- font-weight: 600;
212
- }
213
- :deep(.van-uploader__wrapper) {
214
- padding: 10px;
215
- display: flex;
216
- flex-wrap: wrap;
217
- justify-content: space-between; /* 水平方向上左右分散对齐 */
218
- align-items: center; /* 垂直方向上上下中心对齐 */
219
- }
220
- </style>
1
+ <script setup lang="ts">
2
+ import {
3
+ Cell as vanCell,
4
+ CellGroup as vanCellGroup,
5
+ Field as vanField,
6
+ Form as vanForm,
7
+ Image as vanImage,
8
+ } from 'vant'
9
+ import { reactive, ref } from 'vue'
10
+
11
+ const props = defineProps({
12
+ jsonConfig: Object,
13
+ })
14
+
15
+ const receivedFunction = reactive([])
16
+ const contentForMobile = ref([])
17
+
18
+ function formatConfig() {
19
+ for (let i = 0; i < props.jsonConfig.content.length; i++) {
20
+ let tempObj = {
21
+ label: undefined,
22
+ value: undefined,
23
+ valueType: 'str',
24
+ }
25
+ const item = props.jsonConfig.content[i]
26
+ if (item.type === 'jsonKey') {
27
+ if (receivedFunction[i].labelFunction(props.jsonConfig).type === 'key')
28
+ tempObj.label = props.jsonConfig.data[receivedFunction[i].labelFunction(props.jsonConfig).content]
29
+ else if (receivedFunction[i].labelFunction(props.jsonConfig).type === 'value')
30
+ tempObj.label = receivedFunction[i].labelFunction(props.jsonConfig).content
31
+
32
+ if (receivedFunction[i].valueFunction(props.jsonConfig).type === 'key') {
33
+ tempObj.value = props.jsonConfig.data[receivedFunction[i].valueFunction(props.jsonConfig).content]
34
+ }
35
+ else if (receivedFunction[i].valueFunction(props.jsonConfig).type === 'value') {
36
+ tempObj.value = receivedFunction[i].valueFunction(props.jsonConfig).content
37
+ }
38
+ else if (receivedFunction[i].valueFunction(props.jsonConfig).type === 'img') {
39
+ tempObj.valueType = 'img'
40
+ tempObj.value = receivedFunction[i].valueFunction(props.jsonConfig).content
41
+ }
42
+ contentForMobile.value.push(tempObj)
43
+ tempObj = {
44
+ label: undefined,
45
+ value: undefined,
46
+ valueType: 'str',
47
+ }
48
+ }
49
+ else if (item.type === 'jsonArray') {
50
+ for (let j = 0; j < props.jsonConfig.data[item.jsonArrayDataIndex].length; j++) {
51
+ const jsonArrayItem = props.jsonConfig.data[item.jsonArrayDataIndex][j]
52
+ if (receivedFunction[i].labelFunction(props.jsonConfig, jsonArrayItem).type === 'key')
53
+ tempObj.label = jsonArrayItem[receivedFunction[i].labelFunction(props.jsonConfig, jsonArrayItem).content]
54
+ else if (receivedFunction[i].labelFunction(props.jsonConfig, jsonArrayItem).type === 'value')
55
+ tempObj.label = receivedFunction[i].labelFunction(props.jsonConfig, jsonArrayItem).content
56
+
57
+ if (receivedFunction[i].valueFunction(props.jsonConfig, jsonArrayItem).type === 'key') {
58
+ tempObj.value = jsonArrayItem[receivedFunction[i].valueFunction(props.jsonConfig, jsonArrayItem).content]
59
+ }
60
+ else if (receivedFunction[i].valueFunction(props.jsonConfig, jsonArrayItem).type === 'value') {
61
+ tempObj.value = receivedFunction[i].valueFunction(props.jsonConfig, jsonArrayItem).content
62
+ }
63
+ else if (receivedFunction[i].valueFunction(props.jsonConfig, jsonArrayItem).type === 'img') {
64
+ tempObj.valueType = 'img'
65
+ tempObj.value = receivedFunction[i].valueFunction(props.jsonConfig, jsonArrayItem).content
66
+ }
67
+
68
+ contentForMobile.value.push(tempObj)
69
+ tempObj = {
70
+ label: undefined,
71
+ value: undefined,
72
+ valueType: 'str',
73
+ }
74
+ }
75
+ }
76
+ }
77
+ }
78
+ // ------------------------- 初始化 -------------------------
79
+ initComponent()
80
+
81
+ function initComponent() {
82
+ for (let i = 0; i < props.jsonConfig.content.length; i++) {
83
+ receivedFunction.push({
84
+ // eslint-disable-next-line no-new-func
85
+ labelFunction: new Function(`return ${props.jsonConfig.content[i].customFunctionForLabel}`)(),
86
+ // eslint-disable-next-line no-new-func
87
+ valueFunction: new Function(`return ${props.jsonConfig.content[i].customFunctionForValue}`)(),
88
+ })
89
+ }
90
+ formatConfig()
91
+ }
92
+ </script>
93
+
94
+ <template>
95
+ <div class="main">
96
+ <!-- 标题 -->
97
+ <template v-if="jsonConfig.title">
98
+ <template v-if="jsonConfig.title.type === 'titleKey'">
99
+ <h2 class="title" v-html="jsonConfig.data[jsonConfig.title.value]" />
100
+ </template>
101
+ <template v-else-if="jsonConfig.title.type === 'titleValue'">
102
+ <h2 class="title" v-html="jsonConfig.title.value" />
103
+ </template>
104
+ </template>
105
+ <!-- 内容 -->
106
+ <van-form>
107
+ <van-cell-group inset class="cell_group">
108
+ <template v-for="(row, rowIndex) in contentForMobile" :key="rowIndex">
109
+ <template v-if="row.valueType === 'str'">
110
+ <van-cell center :title="row.label" :value="row.value ? row.value : '无'" />
111
+ </template>
112
+ <template v-else-if="row.valueType === 'img'">
113
+ <template v-for="(img, imgIndex) in row.value" :key="imgIndex">
114
+ <van-field :name="row.label" :label="row.label">
115
+ <template #input>
116
+ <div style="width: 100%;text-align: right">
117
+ <van-image :src="img" width="100" height="100" fit="cover" />
118
+ </div>
119
+ </template>
120
+ </van-field>
121
+ </template>
122
+ </template>
123
+ </template>
124
+ </van-cell-group>
125
+ </van-form>
126
+ </div>
127
+ </template>
128
+
129
+ <style scoped lang="less">
130
+ .main {
131
+ padding-top: 4vh;
132
+ width: 100vw;
133
+ height: 100vh;
134
+ background-color: #eff2f5;
135
+
136
+ .title {
137
+ padding-bottom: 2vh;
138
+ color: rgb(50, 50, 51);
139
+ text-align: center;
140
+ margin: 0 0 3vh;
141
+ }
142
+
143
+ .text_box {
144
+ margin-top: 2vh;
145
+ margin-bottom: 2vh;
146
+ }
147
+
148
+ .main_text {
149
+ padding-left: 16px;
150
+ font-weight: 400;
151
+ line-height: 1.6;
152
+ margin: 0 0 40px;
153
+ color: #969799;
154
+ font-size: 14px;
155
+ }
156
+
157
+ .show_value_item {
158
+ text-align: center;
159
+ font-size: 1.2em;
160
+ }
161
+
162
+ .cell_group {
163
+ margin-top: 2vh;
164
+ margin-bottom: 2vh;
165
+ }
166
+
167
+ .form_item {
168
+ margin-top: 2vh;
169
+ }
170
+
171
+ .button_group {
172
+ text-align: center;
173
+ margin-top: 3vh;
174
+ margin-bottom: 3vh;
175
+ }
176
+
177
+ .button_group > :first-child {
178
+ margin-right: 3vw;
179
+ }
180
+
181
+ .divider {
182
+ color: #1989fa;
183
+ border-color: #1989fa;
184
+ padding: 0 16px;
185
+ }
186
+
187
+ .submit_button {
188
+ background-color: #eff2f5;
189
+ padding: 5vh;
190
+ }
191
+ }
192
+
193
+ .skeleton {
194
+ margin-top: 5vh;
195
+ }
196
+ .my-cell-group {
197
+ margin: 0 0 10px 0;
198
+ }
199
+ :deep(.van-collapse-item__content) {
200
+ background-color: #eff2f5;
201
+ padding: 10px 0;
202
+ }
203
+ :deep(.van-cell-group__title) {
204
+ padding-top: 10px;
205
+ padding-bottom: 10px;
206
+ }
207
+ :deep(.van-field__label) {
208
+ font-weight: 600;
209
+ }
210
+ :deep(.van-cell__title) {
211
+ font-weight: 600;
212
+ }
213
+ :deep(.van-uploader__wrapper) {
214
+ padding: 10px;
215
+ display: flex;
216
+ flex-wrap: wrap;
217
+ justify-content: space-between; /* 水平方向上左右分散对齐 */
218
+ align-items: center; /* 垂直方向上上下中心对齐 */
219
+ }
220
+ </style>