af-mobile-client-vue3 1.3.30 → 1.3.32

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 (284) 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 +135 -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/index.ts +4 -0
  127. package/src/layout/GridView/index.vue +16 -16
  128. package/src/layout/PageLayout.vue +9 -9
  129. package/src/layout/SingleLayout.vue +9 -9
  130. package/src/locales/en-US.json +128 -128
  131. package/src/locales/zh-CN.json +128 -128
  132. package/src/logic/LogicRunner.ts +67 -67
  133. package/src/logic/TestLogic.ts +13 -13
  134. package/src/logic/plugins/common/DateTools.ts +35 -35
  135. package/src/logic/plugins/common/VueTools.ts +30 -30
  136. package/src/logic/plugins/index.ts +7 -7
  137. package/src/main.ts +44 -44
  138. package/src/plugins/AppData.ts +38 -38
  139. package/src/plugins/GetLoginInfoService.ts +10 -10
  140. package/src/plugins/collectIcons.ts +10 -10
  141. package/src/plugins/index.ts +11 -11
  142. package/src/router/README.md +8 -8
  143. package/src/router/external-routes.ts +60 -0
  144. package/src/router/guards.ts +131 -59
  145. package/src/router/index.ts +35 -35
  146. package/src/router/invoiceRoutes.ts +33 -33
  147. package/src/router/routes.ts +426 -347
  148. package/src/services/api/Login.ts +6 -6
  149. package/src/services/api/common.ts +109 -109
  150. package/src/services/api/index.ts +7 -7
  151. package/src/services/api/manage.ts +8 -8
  152. package/src/services/api/search.ts +16 -16
  153. package/src/services/api/user.ts +17 -17
  154. package/src/services/restTools.ts +56 -56
  155. package/src/services/v3Api.ts +147 -147
  156. package/src/stores/index.ts +13 -13
  157. package/src/stores/modules/counter.ts +19 -19
  158. package/src/stores/modules/homeApp.ts +55 -55
  159. package/src/stores/modules/routeCache.ts +22 -23
  160. package/src/stores/modules/setting.ts +87 -87
  161. package/src/stores/modules/user.ts +326 -235
  162. package/src/stores/mutation-type.ts +12 -7
  163. package/src/styles/app.less +36 -36
  164. package/src/styles/login.less +109 -109
  165. package/src/styles/var.less +25 -25
  166. package/src/types/auth.ts +85 -0
  167. package/src/types/env.d.ts +16 -16
  168. package/src/types/platform.ts +194 -0
  169. package/src/types/settings.ts +1 -1
  170. package/src/types/vue-router.d.ts +13 -9
  171. package/src/utils/Storage.ts +124 -124
  172. package/src/utils/authority-utils.ts +84 -84
  173. package/src/utils/common.ts +41 -41
  174. package/src/utils/crypto.ts +39 -39
  175. package/src/utils/dataUtil.ts +42 -42
  176. package/src/utils/dictUtil.ts +52 -52
  177. package/src/utils/http/index.ts +201 -199
  178. package/src/utils/i18n.ts +72 -72
  179. package/src/utils/indexedDB.ts +195 -195
  180. package/src/utils/inline-px-to-vw.ts +28 -28
  181. package/src/utils/mobileUtil.ts +33 -34
  182. package/src/utils/platform-auth.ts +134 -0
  183. package/src/utils/progress.ts +19 -19
  184. package/src/utils/routerUtil.ts +271 -271
  185. package/src/utils/runEvalFunction.ts +13 -13
  186. package/src/utils/secureStorage.ts +70 -71
  187. package/src/utils/set-page-title.ts +5 -5
  188. package/src/utils/validate.ts +6 -6
  189. package/src/views/chat/index.vue +153 -153
  190. package/src/views/common/Forbidden.vue +97 -0
  191. package/src/views/common/LoadError.vue +63 -63
  192. package/src/views/common/NotFound.vue +67 -67
  193. package/src/views/component/EvaluateRecordView/index.vue +40 -40
  194. package/src/views/component/IconifyView/index.vue +504 -504
  195. package/src/views/component/UserDetailView/UserDetailPage.vue +77 -77
  196. package/src/views/component/UserDetailView/index.vue +234 -234
  197. package/src/views/component/XCellDetailView/index.vue +217 -217
  198. package/src/views/component/XCellListView/index.vue +108 -129
  199. package/src/views/component/XFormAppraiseView/index.vue +174 -174
  200. package/src/views/component/XFormGroupView/index.vue +78 -82
  201. package/src/views/component/XFormView/index.vue +27 -27
  202. package/src/views/component/XOlMapView/XLocationPicker/index.vue +118 -118
  203. package/src/views/component/XOlMapView/index.vue +434 -434
  204. package/src/views/component/XOlMapView/testData.ts +64 -64
  205. package/src/views/component/XReportFormIframeView/index.vue +47 -47
  206. package/src/views/component/XReportFormView/index.vue +13 -13
  207. package/src/views/component/XReportGridView/index.vue +17 -17
  208. package/src/views/component/XRequestView/index.vue +234 -234
  209. package/src/views/component/XSignatureView/index.vue +50 -50
  210. package/src/views/component/index.vue +181 -181
  211. package/src/views/component/menu.vue +117 -117
  212. package/src/views/component/notice.vue +46 -46
  213. package/src/views/component/topNav.vue +36 -36
  214. package/src/views/external/index.vue +152 -0
  215. package/src/views/invoiceShow/index.vue +61 -61
  216. package/src/views/loading/AuthLoading.vue +345 -0
  217. package/src/views/user/login/ForgetPasswordForm.vue +94 -94
  218. package/src/views/user/login/LoginForm.vue +350 -347
  219. package/src/views/user/login/LoginTitle.vue +76 -76
  220. package/src/views/user/login/LoginWave.vue +109 -109
  221. package/src/views/user/login/index.vue +22 -22
  222. package/src/views/user/my/comm/ModifyPassword.vue +346 -346
  223. package/src/views/user/my/index.vue +507 -507
  224. package/src/views/user/register/index.vue +952 -952
  225. package/src/views/userRecords/AbnormalAlarmRecords.vue +21 -21
  226. package/src/views/userRecords/CardReplacementRecords.vue +21 -21
  227. package/src/views/userRecords/ChangeRecords.vue +19 -19
  228. package/src/views/userRecords/CommandViewRecords.vue +20 -20
  229. package/src/views/userRecords/GasCompensationRecords.vue +20 -20
  230. package/src/views/userRecords/InstrumentCollectionRecords.vue +21 -21
  231. package/src/views/userRecords/MeterRecords.vue +20 -20
  232. package/src/views/userRecords/OperateRecords.vue +51 -51
  233. package/src/views/userRecords/OtherChargeRecords.vue +19 -19
  234. package/src/views/userRecords/PaymentRecords.vue +28 -28
  235. package/src/views/userRecords/PriceAdjustmentRecords.vue +19 -19
  236. package/src/views/userRecords/ReplacementRecords.vue +19 -19
  237. package/src/views/userRecords/SafetyRecords.vue +19 -19
  238. package/src/views/userRecords/TransactionRecords.vue +21 -21
  239. package/src/views/userRecords/TransferRecords.vue +19 -19
  240. package/src/views/userRecords/operateRecordDetail/index.vue +316 -316
  241. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/AddUserDetail.vue +124 -124
  242. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/AdvanceDeliveryDetail.vue +88 -88
  243. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/AutoAccountsCancelDetail.vue +205 -205
  244. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/AutoAccountsDetail.vue +192 -192
  245. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/BankDkDetail.vue +192 -192
  246. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/BankPayDetail.vue +192 -192
  247. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/BlacklistDetail.vue +153 -153
  248. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/CancellationDetail.vue +101 -101
  249. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/CardMeterCenterCancelDetail.vue +127 -127
  250. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/CardMeterCenterDetail.vue +153 -153
  251. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/CardOverUserDetail.vue +153 -153
  252. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/ChangeMeterCancelDetail.vue +166 -166
  253. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/ChangeMeterDetail.vue +205 -205
  254. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/DisableManageDetail.vue +127 -127
  255. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/EnableManageDetail.vue +114 -114
  256. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/FaZheChangeDetail.vue +124 -124
  257. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/FeeDeductionDetail.vue +153 -153
  258. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/GasPriceChangeDetail.vue +126 -126
  259. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/InputtorChangeDetail.vue +126 -126
  260. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/IotMeterCenterCancelDetail.vue +114 -114
  261. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/IotMeterCenterDetail.vue +127 -127
  262. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/IotOpenDetail.vue +88 -88
  263. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/MachineCardDetail.vue +101 -101
  264. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/MachineMeterCenterCancelDetail.vue +218 -218
  265. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/MachineMeterCenterDetail.vue +153 -153
  266. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/OffGasAddGasDetail.vue +140 -140
  267. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/OtherChargeCancelDetail.vue +127 -127
  268. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/OtherChargeDetail.vue +114 -114
  269. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/OverUserChangeDetail.vue +127 -127
  270. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/ReBillDetail.vue +127 -127
  271. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/RefundDetail.vue +114 -114
  272. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/ReplaceCardManageCancelDetail.vue +127 -127
  273. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/ReplaceCardManageDetail.vue +114 -114
  274. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/SaleCardGasDetail.vue +140 -140
  275. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/TransferManageCancelDetail.vue +152 -152
  276. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/TransferManageDetail.vue +178 -178
  277. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/UserChangeDetail.vue +123 -123
  278. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/WechatPayDetail.vue +192 -192
  279. package/src/views/userRecords/types.ts +66 -66
  280. package/tsconfig.json +39 -39
  281. package/uno.config.ts +82 -82
  282. package/vite.config.ts +119 -118
  283. package/src/router/types.ts +0 -7
  284. package/src/utils/wechatUtil.ts +0 -9
@@ -1,77 +1,77 @@
1
- <script setup lang="ts">
2
- import type { RecordEntry } from '@af-mobile-client-vue3/components/data/UserDetail/recordEntries'
3
- import type { BaseUser } from '@af-mobile-client-vue3/components/data/UserDetail/types'
4
- import UserDetail from '@af-mobile-client-vue3/components/data/UserDetail/index.vue'
5
- import { showToast, Dialog as VanDialog, NavBar as VanNavBar } from 'vant'
6
- import { useRoute, useRouter } from 'vue-router'
7
-
8
- const route = useRoute()
9
- const router = useRouter()
10
-
11
- // 从路由参数获取用户ID
12
- const userInfoId = route.params.userInfoId as string
13
-
14
- // 返回上一页
15
- function handleBack() {
16
- router.back()
17
- }
18
-
19
- // 记录点击处理
20
- function handleRecordClick(entry: RecordEntry, user: BaseUser) {
21
- showToast(`点击了${entry.title},用户:${user.f_user_name}`)
22
- }
23
-
24
- // 业务办理点击处理
25
- function handleBusinessClick(user: BaseUser) {
26
- VanDialog.alert({
27
- title: '业务办理',
28
- message: `为用户 ${user.f_user_name}(${user.f_userinfo_code})办理业务`,
29
- })
30
- }
31
-
32
- // 打印处理
33
- function handlePrint(user: BaseUser) {
34
- showToast(`打印用户 ${user.f_user_name} 的档案`)
35
- }
36
- </script>
37
-
38
- <template>
39
- <div class="user-detail-page">
40
- <!-- 导航栏 -->
41
- <VanNavBar
42
- title="用户详情"
43
- left-text="返回"
44
- left-arrow
45
- @click-left="handleBack"
46
- />
47
-
48
- <!-- 用户详情组件 -->
49
- <UserDetail
50
- :user-info-id="userInfoId"
51
- :show-recent-time="true"
52
- :show-bottom-buttons="true"
53
- business-button-text="立即办理"
54
- @record-click="handleRecordClick"
55
- @business-click="handleBusinessClick"
56
- @print="handlePrint"
57
- />
58
- </div>
59
- </template>
60
-
61
- <style scoped lang="less">
62
- .user-detail-page {
63
- height: 100vh;
64
- display: flex;
65
- flex-direction: column;
66
- background-color: #f5f7fa;
67
-
68
- .van-nav-bar {
69
- flex-shrink: 0;
70
- }
71
-
72
- :deep(.user-detail) {
73
- flex: 1;
74
- overflow-y: auto;
75
- }
76
- }
77
- </style>
1
+ <script setup lang="ts">
2
+ import type { RecordEntry } from '@af-mobile-client-vue3/components/data/UserDetail/recordEntries'
3
+ import type { BaseUser } from '@af-mobile-client-vue3/components/data/UserDetail/types'
4
+ import UserDetail from '@af-mobile-client-vue3/components/data/UserDetail/index.vue'
5
+ import { showToast, Dialog as VanDialog, NavBar as VanNavBar } from 'vant'
6
+ import { useRoute, useRouter } from 'vue-router'
7
+
8
+ const route = useRoute()
9
+ const router = useRouter()
10
+
11
+ // 从路由参数获取用户ID
12
+ const userInfoId = route.params.userInfoId as string
13
+
14
+ // 返回上一页
15
+ function handleBack() {
16
+ router.back()
17
+ }
18
+
19
+ // 记录点击处理
20
+ function handleRecordClick(entry: RecordEntry, user: BaseUser) {
21
+ showToast(`点击了${entry.title},用户:${user.f_user_name}`)
22
+ }
23
+
24
+ // 业务办理点击处理
25
+ function handleBusinessClick(user: BaseUser) {
26
+ VanDialog.alert({
27
+ title: '业务办理',
28
+ message: `为用户 ${user.f_user_name}(${user.f_userinfo_code})办理业务`,
29
+ })
30
+ }
31
+
32
+ // 打印处理
33
+ function handlePrint(user: BaseUser) {
34
+ showToast(`打印用户 ${user.f_user_name} 的档案`)
35
+ }
36
+ </script>
37
+
38
+ <template>
39
+ <div class="user-detail-page">
40
+ <!-- 导航栏 -->
41
+ <VanNavBar
42
+ title="用户详情"
43
+ left-text="返回"
44
+ left-arrow
45
+ @click-left="handleBack"
46
+ />
47
+
48
+ <!-- 用户详情组件 -->
49
+ <UserDetail
50
+ :user-info-id="userInfoId"
51
+ :show-recent-time="true"
52
+ :show-bottom-buttons="true"
53
+ business-button-text="立即办理"
54
+ @record-click="handleRecordClick"
55
+ @business-click="handleBusinessClick"
56
+ @print="handlePrint"
57
+ />
58
+ </div>
59
+ </template>
60
+
61
+ <style scoped lang="less">
62
+ .user-detail-page {
63
+ height: 100vh;
64
+ display: flex;
65
+ flex-direction: column;
66
+ background-color: #f5f7fa;
67
+
68
+ .van-nav-bar {
69
+ flex-shrink: 0;
70
+ }
71
+
72
+ :deep(.user-detail) {
73
+ flex: 1;
74
+ overflow-y: auto;
75
+ }
76
+ }
77
+ </style>
@@ -1,234 +1,234 @@
1
- <script setup lang="ts">
2
- import type { BaseUser } from '@af-mobile-client-vue3/components/data/UserDetail/types'
3
- import NormalDataLayout from '@af-mobile-client-vue3/components/layout/NormalDataLayout/index.vue'
4
- import { Button as VanButton } from 'vant'
5
-
6
- import { reactive } from 'vue'
7
- import { useRouter } from 'vue-router'
8
-
9
- const router = useRouter()
10
-
11
- // 模拟用户数据
12
- const mockUsers = reactive<BaseUser[]>([
13
- {
14
- f_userinfo_id: '65836',
15
- f_userinfo_code: '1166730',
16
- f_user_name: '刘思聪',
17
- f_user_phone: '15199996077',
18
- f_address: '滨河营业厅',
19
- f_user_state: '正常',
20
- f_user_type: '民用',
21
- f_meter_type: '气量卡表',
22
- f_meternumber: '0002353',
23
- f_balance: 1.61,
24
- f_balance_amount: 0,
25
- f_userfiles_id: '71717',
26
- f_times: 11,
27
- f_total_gas: 768,
28
- f_valve_state: '开启',
29
- f_hascard: '是',
30
- f_card_id: '9400002001',
31
- },
32
- ])
33
-
34
- // 切换用户 - 现在跳转到新路由
35
- function switchUser() {
36
- const user = mockUsers[0]
37
- router.push({
38
- name: 'UserDetailRoute',
39
- params: { userInfoId: user.f_userinfo_id },
40
- })
41
- }
42
- </script>
43
-
44
- <template>
45
- <NormalDataLayout title="UserDetail 用户详情组件">
46
- <template #layout_content>
47
- <div class="demo-container">
48
- <!-- 基础使用说明 -->
49
- <div class="demo-section">
50
- <h3>基础使用</h3>
51
- <p>UserDetail 组件用于展示用户的详细信息,支持动态配置记录入口和交互功能。</p>
52
- </div>
53
-
54
- <!-- 用户选择器 -->
55
- <div class="demo-section">
56
- <h3>点击用户查看详情</h3>
57
- <div class="user-selector">
58
- <VanButton
59
- size="small"
60
- @click="switchUser()"
61
- >
62
- {{ mockUsers[0].f_user_name }}
63
- <span class="user-status" :class="`status-${mockUsers[0].f_user_state}`">
64
- {{ mockUsers[0].f_user_state }}
65
- </span>
66
- </VanButton>
67
- </div>
68
- </div>
69
-
70
- <!-- 功能特性说明 -->
71
- <div class="demo-section">
72
- <h3>组件特性</h3>
73
- <ul class="feature-list">
74
- <li>📋 用户基本信息展示与折叠</li>
75
- <li>🔗 可配置的记录入口</li>
76
- <li>⏰ 支持显示最近业务时间</li>
77
- <li>🖨️ 内置打印功能</li>
78
- <li>⚙️ 自定义 API 接口</li>
79
- <li>🎨 多种用户状态样式</li>
80
- </ul>
81
- </div>
82
-
83
- <!-- Props 说明 -->
84
- <div class="demo-section">
85
- <h3>主要 Props</h3>
86
- <div class="props-table">
87
- <div class="props-row">
88
- <span class="prop-name">userInfoId</span>
89
- <span class="prop-type">string</span>
90
- <span class="prop-desc">用户ID(必传)</span>
91
- </div>
92
- <div class="props-row">
93
- <span class="prop-name">showRecentTime</span>
94
- <span class="prop-type">boolean</span>
95
- <span class="prop-desc">是否展示历史时间</span>
96
- </div>
97
- <div class="props-row">
98
- <span class="prop-name">recordEntries</span>
99
- <span class="prop-type">RecordEntry[]</span>
100
- <span class="prop-desc">记录入口配置</span>
101
- </div>
102
- <div class="props-row">
103
- <span class="prop-name">showBottomButtons</span>
104
- <span class="prop-type">boolean</span>
105
- <span class="prop-desc">是否显示底部按钮区域</span>
106
- </div>
107
- <div class="props-row">
108
- <span class="prop-name">showHeader</span>
109
- <span class="prop-type">boolean</span>
110
- <span class="prop-desc">是否显示头部导航栏</span>
111
- </div>
112
- <div class="props-row">
113
- <span class="prop-name">headerTitle</span>
114
- <span class="prop-type">string</span>
115
- <span class="prop-desc">头部标题文本</span>
116
- </div>
117
- <div class="props-row">
118
- <span class="prop-name">#bottom</span>
119
- <span class="prop-type">slot</span>
120
- <span class="prop-desc">底部插槽,可自定义按钮内容</span>
121
- </div>
122
- </div>
123
- </div>
124
- </div>
125
- </template>
126
- </NormalDataLayout>
127
- </template>
128
-
129
- <style scoped lang="less">
130
- .demo-container {
131
- padding: 16px;
132
- }
133
-
134
- .demo-section {
135
- margin-bottom: 24px;
136
-
137
- h3 {
138
- margin: 0 0 12px 0;
139
- font-size: 16px;
140
- font-weight: 600;
141
- color: #323233;
142
- }
143
-
144
- p {
145
- margin: 0 0 12px 0;
146
- font-size: 14px;
147
- color: #646566;
148
- line-height: 1.5;
149
- }
150
- }
151
-
152
- .user-selector {
153
- display: flex;
154
- gap: 8px;
155
- flex-wrap: wrap;
156
-
157
- .van-button {
158
- display: flex;
159
- align-items: center;
160
- gap: 6px;
161
- }
162
-
163
- .user-status {
164
- font-size: 12px;
165
- padding: 1px 6px;
166
- border-radius: 10px;
167
-
168
- &.status-正常 {
169
- background-color: #e6ffed;
170
- color: #52c41a;
171
- }
172
-
173
- &.status-欠费 {
174
- background-color: #fff1f0;
175
- color: #f5222d;
176
- }
177
-
178
- &.status-暂停 {
179
- background-color: #fff7e6;
180
- color: #fa8c16;
181
- }
182
- }
183
- }
184
-
185
- .feature-list {
186
- margin: 0;
187
- padding-left: 20px;
188
-
189
- li {
190
- margin-bottom: 8px;
191
- font-size: 14px;
192
- color: #646566;
193
- line-height: 1.5;
194
- }
195
- }
196
-
197
- .props-table {
198
- background-color: #f8f9fa;
199
- border-radius: 8px;
200
- padding: 12px;
201
-
202
- .props-row {
203
- display: flex;
204
- align-items: center;
205
- padding: 8px 0;
206
- border-bottom: 1px solid #ebedf0;
207
-
208
- &:last-child {
209
- border-bottom: none;
210
- }
211
- }
212
-
213
- .prop-name {
214
- flex: 0 0 120px;
215
- font-size: 13px;
216
- font-weight: 600;
217
- color: #1976d2;
218
- font-family: 'Monaco', 'Consolas', monospace;
219
- }
220
-
221
- .prop-type {
222
- flex: 0 0 80px;
223
- font-size: 12px;
224
- color: #e91e63;
225
- font-family: 'Monaco', 'Consolas', monospace;
226
- }
227
-
228
- .prop-desc {
229
- flex: 1;
230
- font-size: 13px;
231
- color: #646566;
232
- }
233
- }
234
- </style>
1
+ <script setup lang="ts">
2
+ import type { BaseUser } from '@af-mobile-client-vue3/components/data/UserDetail/types'
3
+ import NormalDataLayout from '@af-mobile-client-vue3/components/layout/NormalDataLayout/index.vue'
4
+ import { Button as VanButton } from 'vant'
5
+
6
+ import { reactive } from 'vue'
7
+ import { useRouter } from 'vue-router'
8
+
9
+ const router = useRouter()
10
+
11
+ // 模拟用户数据
12
+ const mockUsers = reactive<BaseUser[]>([
13
+ {
14
+ f_userinfo_id: '65836',
15
+ f_userinfo_code: '1166730',
16
+ f_user_name: '刘思聪',
17
+ f_user_phone: '15199996077',
18
+ f_address: '滨河营业厅',
19
+ f_user_state: '正常',
20
+ f_user_type: '民用',
21
+ f_meter_type: '气量卡表',
22
+ f_meternumber: '0002353',
23
+ f_balance: 1.61,
24
+ f_balance_amount: 0,
25
+ f_userfiles_id: '71717',
26
+ f_times: 11,
27
+ f_total_gas: 768,
28
+ f_valve_state: '开启',
29
+ f_hascard: '是',
30
+ f_card_id: '9400002001',
31
+ },
32
+ ])
33
+
34
+ // 切换用户 - 现在跳转到新路由
35
+ function switchUser() {
36
+ const user = mockUsers[0]
37
+ router.push({
38
+ name: 'UserDetailRoute',
39
+ params: { userInfoId: user.f_userinfo_id },
40
+ })
41
+ }
42
+ </script>
43
+
44
+ <template>
45
+ <NormalDataLayout title="UserDetail 用户详情组件">
46
+ <template #layout_content>
47
+ <div class="demo-container">
48
+ <!-- 基础使用说明 -->
49
+ <div class="demo-section">
50
+ <h3>基础使用</h3>
51
+ <p>UserDetail 组件用于展示用户的详细信息,支持动态配置记录入口和交互功能。</p>
52
+ </div>
53
+
54
+ <!-- 用户选择器 -->
55
+ <div class="demo-section">
56
+ <h3>点击用户查看详情</h3>
57
+ <div class="user-selector">
58
+ <VanButton
59
+ size="small"
60
+ @click="switchUser()"
61
+ >
62
+ {{ mockUsers[0].f_user_name }}
63
+ <span class="user-status" :class="`status-${mockUsers[0].f_user_state}`">
64
+ {{ mockUsers[0].f_user_state }}
65
+ </span>
66
+ </VanButton>
67
+ </div>
68
+ </div>
69
+
70
+ <!-- 功能特性说明 -->
71
+ <div class="demo-section">
72
+ <h3>组件特性</h3>
73
+ <ul class="feature-list">
74
+ <li>📋 用户基本信息展示与折叠</li>
75
+ <li>🔗 可配置的记录入口</li>
76
+ <li>⏰ 支持显示最近业务时间</li>
77
+ <li>🖨️ 内置打印功能</li>
78
+ <li>⚙️ 自定义 API 接口</li>
79
+ <li>🎨 多种用户状态样式</li>
80
+ </ul>
81
+ </div>
82
+
83
+ <!-- Props 说明 -->
84
+ <div class="demo-section">
85
+ <h3>主要 Props</h3>
86
+ <div class="props-table">
87
+ <div class="props-row">
88
+ <span class="prop-name">userInfoId</span>
89
+ <span class="prop-type">string</span>
90
+ <span class="prop-desc">用户ID(必传)</span>
91
+ </div>
92
+ <div class="props-row">
93
+ <span class="prop-name">showRecentTime</span>
94
+ <span class="prop-type">boolean</span>
95
+ <span class="prop-desc">是否展示历史时间</span>
96
+ </div>
97
+ <div class="props-row">
98
+ <span class="prop-name">recordEntries</span>
99
+ <span class="prop-type">RecordEntry[]</span>
100
+ <span class="prop-desc">记录入口配置</span>
101
+ </div>
102
+ <div class="props-row">
103
+ <span class="prop-name">showBottomButtons</span>
104
+ <span class="prop-type">boolean</span>
105
+ <span class="prop-desc">是否显示底部按钮区域</span>
106
+ </div>
107
+ <div class="props-row">
108
+ <span class="prop-name">showHeader</span>
109
+ <span class="prop-type">boolean</span>
110
+ <span class="prop-desc">是否显示头部导航栏</span>
111
+ </div>
112
+ <div class="props-row">
113
+ <span class="prop-name">headerTitle</span>
114
+ <span class="prop-type">string</span>
115
+ <span class="prop-desc">头部标题文本</span>
116
+ </div>
117
+ <div class="props-row">
118
+ <span class="prop-name">#bottom</span>
119
+ <span class="prop-type">slot</span>
120
+ <span class="prop-desc">底部插槽,可自定义按钮内容</span>
121
+ </div>
122
+ </div>
123
+ </div>
124
+ </div>
125
+ </template>
126
+ </NormalDataLayout>
127
+ </template>
128
+
129
+ <style scoped lang="less">
130
+ .demo-container {
131
+ padding: 16px;
132
+ }
133
+
134
+ .demo-section {
135
+ margin-bottom: 24px;
136
+
137
+ h3 {
138
+ margin: 0 0 12px 0;
139
+ font-size: 16px;
140
+ font-weight: 600;
141
+ color: #323233;
142
+ }
143
+
144
+ p {
145
+ margin: 0 0 12px 0;
146
+ font-size: 14px;
147
+ color: #646566;
148
+ line-height: 1.5;
149
+ }
150
+ }
151
+
152
+ .user-selector {
153
+ display: flex;
154
+ gap: 8px;
155
+ flex-wrap: wrap;
156
+
157
+ .van-button {
158
+ display: flex;
159
+ align-items: center;
160
+ gap: 6px;
161
+ }
162
+
163
+ .user-status {
164
+ font-size: 12px;
165
+ padding: 1px 6px;
166
+ border-radius: 10px;
167
+
168
+ &.status-正常 {
169
+ background-color: #e6ffed;
170
+ color: #52c41a;
171
+ }
172
+
173
+ &.status-欠费 {
174
+ background-color: #fff1f0;
175
+ color: #f5222d;
176
+ }
177
+
178
+ &.status-暂停 {
179
+ background-color: #fff7e6;
180
+ color: #fa8c16;
181
+ }
182
+ }
183
+ }
184
+
185
+ .feature-list {
186
+ margin: 0;
187
+ padding-left: 20px;
188
+
189
+ li {
190
+ margin-bottom: 8px;
191
+ font-size: 14px;
192
+ color: #646566;
193
+ line-height: 1.5;
194
+ }
195
+ }
196
+
197
+ .props-table {
198
+ background-color: #f8f9fa;
199
+ border-radius: 8px;
200
+ padding: 12px;
201
+
202
+ .props-row {
203
+ display: flex;
204
+ align-items: center;
205
+ padding: 8px 0;
206
+ border-bottom: 1px solid #ebedf0;
207
+
208
+ &:last-child {
209
+ border-bottom: none;
210
+ }
211
+ }
212
+
213
+ .prop-name {
214
+ flex: 0 0 120px;
215
+ font-size: 13px;
216
+ font-weight: 600;
217
+ color: #1976d2;
218
+ font-family: 'Monaco', 'Consolas', monospace;
219
+ }
220
+
221
+ .prop-type {
222
+ flex: 0 0 80px;
223
+ font-size: 12px;
224
+ color: #e91e63;
225
+ font-family: 'Monaco', 'Consolas', monospace;
226
+ }
227
+
228
+ .prop-desc {
229
+ flex: 1;
230
+ font-size: 13px;
231
+ color: #646566;
232
+ }
233
+ }
234
+ </style>