af-mobile-client-vue3 1.3.12 → 1.3.14

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 (271) 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 +620 -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/useLoading.ts +16 -0
  115. package/src/hooks/useLogin.ts +97 -97
  116. package/src/icons/svg/check-in.svg +32 -32
  117. package/src/icons/svg/dark.svg +4 -4
  118. package/src/icons/svg/github.svg +4 -4
  119. package/src/icons/svg/light.svg +4 -4
  120. package/src/icons/svg/link.svg +4 -4
  121. package/src/icons/svgo.yml +22 -22
  122. package/src/layout/GridView/index.vue +16 -16
  123. package/src/layout/PageLayout.vue +9 -9
  124. package/src/layout/SingleLayout.vue +9 -9
  125. package/src/locales/en-US.json +128 -128
  126. package/src/locales/zh-CN.json +128 -128
  127. package/src/logic/LogicRunner.ts +67 -67
  128. package/src/logic/TestLogic.ts +13 -13
  129. package/src/logic/plugins/common/DateTools.ts +35 -35
  130. package/src/logic/plugins/common/VueTools.ts +30 -30
  131. package/src/logic/plugins/index.ts +7 -7
  132. package/src/main.ts +44 -44
  133. package/src/plugins/AppData.ts +38 -38
  134. package/src/plugins/GetLoginInfoService.ts +10 -10
  135. package/src/plugins/collectIcons.ts +10 -0
  136. package/src/plugins/index.ts +11 -11
  137. package/src/router/README.md +8 -8
  138. package/src/router/guards.ts +59 -59
  139. package/src/router/index.ts +35 -35
  140. package/src/router/invoiceRoutes.ts +33 -33
  141. package/src/router/routes.ts +341 -177
  142. package/src/router/types.ts +7 -7
  143. package/src/services/api/Login.ts +6 -6
  144. package/src/services/api/common.ts +109 -109
  145. package/src/services/api/index.ts +7 -7
  146. package/src/services/api/manage.ts +8 -8
  147. package/src/services/api/search.ts +16 -16
  148. package/src/services/api/user.ts +17 -17
  149. package/src/services/restTools.ts +56 -56
  150. package/src/services/v3Api.ts +147 -147
  151. package/src/stores/index.ts +11 -11
  152. package/src/stores/modules/counter.ts +19 -19
  153. package/src/stores/modules/routeCache.ts +23 -23
  154. package/src/stores/modules/setting.ts +76 -76
  155. package/src/stores/modules/user.ts +235 -235
  156. package/src/stores/mutation-type.ts +7 -7
  157. package/src/styles/app.less +36 -36
  158. package/src/styles/login.less +109 -109
  159. package/src/styles/var.less +16 -16
  160. package/src/types/env.d.ts +16 -16
  161. package/src/types/settings.ts +1 -1
  162. package/src/types/vue-router.d.ts +9 -9
  163. package/src/utils/Storage.ts +124 -124
  164. package/src/utils/authority-utils.ts +84 -84
  165. package/src/utils/common.ts +41 -41
  166. package/src/utils/crypto.ts +39 -39
  167. package/src/utils/dataUtil.ts +42 -42
  168. package/src/utils/dictUtil.ts +52 -52
  169. package/src/utils/http/index.ts +199 -199
  170. package/src/utils/i18n.ts +72 -72
  171. package/src/utils/indexedDB.ts +195 -195
  172. package/src/utils/inline-px-to-vw.ts +28 -28
  173. package/src/utils/mobileUtil.ts +34 -34
  174. package/src/utils/progress.ts +19 -19
  175. package/src/utils/routerUtil.ts +271 -271
  176. package/src/utils/runEvalFunction.ts +13 -13
  177. package/src/utils/secureStorage.ts +71 -71
  178. package/src/utils/set-page-title.ts +5 -5
  179. package/src/utils/validate.ts +6 -6
  180. package/src/utils/wechatUtil.ts +9 -9
  181. package/src/views/chat/index.vue +153 -153
  182. package/src/views/common/LoadError.vue +63 -63
  183. package/src/views/common/NotFound.vue +67 -67
  184. package/src/views/component/EvaluateRecordView/index.vue +40 -40
  185. package/src/views/component/IconifyView/index.vue +504 -507
  186. package/src/views/component/UserDetailView/UserDetailPage.vue +77 -0
  187. package/src/views/component/UserDetailView/index.vue +234 -0
  188. package/src/views/component/XCellDetailView/index.vue +217 -217
  189. package/src/views/component/XCellListView/index.vue +108 -157
  190. package/src/views/component/XFormAppraiseView/index.vue +174 -174
  191. package/src/views/component/XFormGroupView/index.vue +78 -82
  192. package/src/views/component/XFormView/index.vue +27 -27
  193. package/src/views/component/XOlMapView/XLocationPicker/index.vue +118 -118
  194. package/src/views/component/XOlMapView/index.vue +434 -434
  195. package/src/views/component/XOlMapView/testData.ts +64 -64
  196. package/src/views/component/XReportFormIframeView/index.vue +47 -47
  197. package/src/views/component/XReportFormView/index.vue +13 -13
  198. package/src/views/component/XReportGridView/index.vue +17 -17
  199. package/src/views/component/XRequestView/index.vue +234 -234
  200. package/src/views/component/XSignatureView/index.vue +50 -50
  201. package/src/views/component/index.vue +181 -177
  202. package/src/views/component/menu.vue +117 -117
  203. package/src/views/component/notice.vue +46 -46
  204. package/src/views/component/topNav.vue +36 -36
  205. package/src/views/invoiceShow/index.vue +61 -61
  206. package/src/views/user/login/ForgetPasswordForm.vue +94 -94
  207. package/src/views/user/login/LoginForm.vue +346 -346
  208. package/src/views/user/login/LoginTitle.vue +76 -76
  209. package/src/views/user/login/LoginWave.vue +109 -109
  210. package/src/views/user/login/index.vue +22 -22
  211. package/src/views/user/my/comm/ModifyPassword.vue +346 -346
  212. package/src/views/user/my/index.vue +340 -340
  213. package/src/views/userRecords/AbnormalAlarmRecords.vue +21 -0
  214. package/src/views/userRecords/CardReplacementRecords.vue +21 -0
  215. package/src/views/userRecords/ChangeRecords.vue +19 -0
  216. package/src/views/userRecords/CommandViewRecords.vue +20 -0
  217. package/src/views/userRecords/GasCompensationRecords.vue +20 -0
  218. package/src/views/userRecords/InstrumentCollectionRecords.vue +21 -0
  219. package/src/views/userRecords/MeterRecords.vue +20 -0
  220. package/src/views/userRecords/OperateRecords.vue +51 -0
  221. package/src/views/userRecords/OtherChargeRecords.vue +19 -0
  222. package/src/views/userRecords/PaymentRecords.vue +28 -0
  223. package/src/views/userRecords/PriceAdjustmentRecords.vue +19 -0
  224. package/src/views/userRecords/ReplacementRecords.vue +19 -0
  225. package/src/views/userRecords/SafetyRecords.vue +19 -0
  226. package/src/views/userRecords/TransactionRecords.vue +21 -0
  227. package/src/views/userRecords/TransferRecords.vue +19 -0
  228. package/src/views/userRecords/operateRecordDetail/index.vue +316 -0
  229. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/AddUserDetail.vue +124 -0
  230. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/AdvanceDeliveryDetail.vue +88 -0
  231. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/AutoAccountsCancelDetail.vue +205 -0
  232. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/AutoAccountsDetail.vue +192 -0
  233. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/BankDkDetail.vue +192 -0
  234. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/BankPayDetail.vue +192 -0
  235. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/BlacklistDetail.vue +153 -0
  236. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/CancellationDetail.vue +101 -0
  237. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/CardMeterCenterCancelDetail.vue +127 -0
  238. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/CardMeterCenterDetail.vue +153 -0
  239. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/CardOverUserDetail.vue +153 -0
  240. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/ChangeMeterCancelDetail.vue +166 -0
  241. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/ChangeMeterDetail.vue +205 -0
  242. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/DisableManageDetail.vue +127 -0
  243. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/EnableManageDetail.vue +114 -0
  244. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/FaZheChangeDetail.vue +124 -0
  245. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/FeeDeductionDetail.vue +153 -0
  246. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/GasPriceChangeDetail.vue +126 -0
  247. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/InputtorChangeDetail.vue +126 -0
  248. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/IotMeterCenterCancelDetail.vue +114 -0
  249. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/IotMeterCenterDetail.vue +127 -0
  250. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/IotOpenDetail.vue +88 -0
  251. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/MachineCardDetail.vue +101 -0
  252. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/MachineMeterCenterCancelDetail.vue +218 -0
  253. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/MachineMeterCenterDetail.vue +153 -0
  254. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/OffGasAddGasDetail.vue +140 -0
  255. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/OtherChargeCancelDetail.vue +127 -0
  256. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/OtherChargeDetail.vue +114 -0
  257. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/OverUserChangeDetail.vue +127 -0
  258. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/ReBillDetail.vue +127 -0
  259. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/RefundDetail.vue +114 -0
  260. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/ReplaceCardManageCancelDetail.vue +127 -0
  261. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/ReplaceCardManageDetail.vue +114 -0
  262. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/SaleCardGasDetail.vue +140 -0
  263. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/TransferManageCancelDetail.vue +152 -0
  264. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/TransferManageDetail.vue +178 -0
  265. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/UserChangeDetail.vue +123 -0
  266. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/WechatPayDetail.vue +192 -0
  267. package/src/views/userRecords/types.ts +66 -0
  268. package/tsconfig.json +39 -39
  269. package/uno.config.ts +82 -78
  270. package/vite.config.ts +118 -118
  271. package/src/views/component/XFormGroupView/xformgroup222.vue +0 -97
@@ -1,71 +1,71 @@
1
- import { mobileUtil } from './mobileUtil'
2
-
3
- /**
4
- * 批量安全存储数据到本地
5
- * @param storageItems 要存储的数据项数组,每项格式为 {key: string, value: object}
6
- */
7
- export function secureStorageBatchWrite(storageItems: Array<{ key: string, value: any }>) {
8
- console.log('storageItems===', storageItems)
9
- if (!Array.isArray(storageItems) || storageItems.length === 0)
10
- return
11
-
12
- for (const item of storageItems) {
13
- try {
14
- mobileUtil.execute({
15
- funcName: 'secureStorageWrite',
16
- param: {
17
- key: item.key,
18
- value: typeof item.value === 'string' ? item.value : JSON.stringify(item.value),
19
- },
20
- callbackFunc: () => {},
21
- })
22
- }
23
- catch (e) {
24
- console.error(`写入本地缓存失败 [${item.key}]`, e)
25
- // 单条失败跳过继续处理下一条
26
- }
27
- }
28
- }
29
-
30
- /**
31
- * 安全存储单个数据到本地
32
- * @param key 存储键名
33
- * @param value 存储值
34
- * @param callback 可选回调函数
35
- */
36
- export function secureStorageWrite(key: string, value: any, callback?: () => void) {
37
- try {
38
- mobileUtil.execute({
39
- funcName: 'secureStorageWrite',
40
- param: {
41
- key,
42
- value: typeof value === 'string' ? value : JSON.stringify(value),
43
- },
44
- callbackFunc: callback || (() => {}),
45
- })
46
- }
47
- catch (e) {
48
- console.error(`写入本地缓存失败 [${key}]`, e)
49
- }
50
- }
51
-
52
- /**
53
- * 从安全存储读取数据
54
- * @param key 存储键名
55
- * @param callback 读取结果回调函数
56
- */
57
- export function secureStorageRead(key: string, callback: (result: any) => void) {
58
- try {
59
- mobileUtil.execute({
60
- funcName: 'secureStorageRead',
61
- param: { key },
62
- callbackFunc: (result: any) => {
63
- callback(result)
64
- },
65
- })
66
- }
67
- catch (e) {
68
- console.error(`读取本地缓存失败 [${key}]`, e)
69
- callback({ status: 'error', message: e })
70
- }
71
- }
1
+ import { mobileUtil } from './mobileUtil'
2
+
3
+ /**
4
+ * 批量安全存储数据到本地
5
+ * @param storageItems 要存储的数据项数组,每项格式为 {key: string, value: object}
6
+ */
7
+ export function secureStorageBatchWrite(storageItems: Array<{ key: string, value: any }>) {
8
+ console.log('storageItems===', storageItems)
9
+ if (!Array.isArray(storageItems) || storageItems.length === 0)
10
+ return
11
+
12
+ for (const item of storageItems) {
13
+ try {
14
+ mobileUtil.execute({
15
+ funcName: 'secureStorageWrite',
16
+ param: {
17
+ key: item.key,
18
+ value: typeof item.value === 'string' ? item.value : JSON.stringify(item.value),
19
+ },
20
+ callbackFunc: () => {},
21
+ })
22
+ }
23
+ catch (e) {
24
+ console.error(`写入本地缓存失败 [${item.key}]`, e)
25
+ // 单条失败跳过继续处理下一条
26
+ }
27
+ }
28
+ }
29
+
30
+ /**
31
+ * 安全存储单个数据到本地
32
+ * @param key 存储键名
33
+ * @param value 存储值
34
+ * @param callback 可选回调函数
35
+ */
36
+ export function secureStorageWrite(key: string, value: any, callback?: () => void) {
37
+ try {
38
+ mobileUtil.execute({
39
+ funcName: 'secureStorageWrite',
40
+ param: {
41
+ key,
42
+ value: typeof value === 'string' ? value : JSON.stringify(value),
43
+ },
44
+ callbackFunc: callback || (() => {}),
45
+ })
46
+ }
47
+ catch (e) {
48
+ console.error(`写入本地缓存失败 [${key}]`, e)
49
+ }
50
+ }
51
+
52
+ /**
53
+ * 从安全存储读取数据
54
+ * @param key 存储键名
55
+ * @param callback 读取结果回调函数
56
+ */
57
+ export function secureStorageRead(key: string, callback: (result: any) => void) {
58
+ try {
59
+ mobileUtil.execute({
60
+ funcName: 'secureStorageRead',
61
+ param: { key },
62
+ callbackFunc: (result: any) => {
63
+ callback(result)
64
+ },
65
+ })
66
+ }
67
+ catch (e) {
68
+ console.error(`读取本地缓存失败 [${key}]`, e)
69
+ callback({ status: 'error', message: e })
70
+ }
71
+ }
@@ -1,5 +1,5 @@
1
- import { appName } from '../constants'
2
-
3
- export default function setPageTitle(title?: string): void {
4
- window.document.title = title ? `${title} - ${appName}` : appName
5
- }
1
+ import { appName } from '../constants'
2
+
3
+ export default function setPageTitle(title?: string): void {
4
+ window.document.title = title ? `${title} - ${appName}` : appName
5
+ }
@@ -1,6 +1,6 @@
1
- /**
2
- * @param {string} path
3
- */
4
- export function isExternal(path: string) {
5
- return /^(?:https?:|mailto:|tel:)/.test(path)
6
- }
1
+ /**
2
+ * @param {string} path
3
+ */
4
+ export function isExternal(path: string) {
5
+ return /^(?:https?:|mailto:|tel:)/.test(path)
6
+ }
@@ -1,9 +1,9 @@
1
- /**
2
- * 判断是否是微信环境
3
- */
4
- function isWechat() {
5
- const ua = window.navigator.userAgent.toLowerCase()
6
- return ua.includes('micromessenger')
7
- }
8
-
9
- export { isWechat }
1
+ /**
2
+ * 判断是否是微信环境
3
+ */
4
+ function isWechat() {
5
+ const ua = window.navigator.userAgent.toLowerCase()
6
+ return ua.includes('micromessenger')
7
+ }
8
+
9
+ export { isWechat }
@@ -1,153 +1,153 @@
1
- <script setup lang="ts">
2
- import {
3
- Button as VanButton,
4
- Col as VanCol,
5
- Divider as VanDivider,
6
- List as VanList,
7
- Row as VanRow,
8
- SwipeCell as VanSwipeCell,
9
- Tab as VanTab,
10
- Tabs as VanTabs,
11
- } from 'vant/es'
12
- import { ref } from 'vue'
13
-
14
- const active = ref(0)
15
- const list = ref([])
16
- const loading = ref(false)
17
- const finished = ref(false)
18
-
19
- function onLoad() {
20
- // 异步更新数据
21
- // setTimeout 仅做示例,真实场景中一般为 ajax 请求
22
- setTimeout(() => {
23
- for (let i = 0; i < 10; i++)
24
- list.value.push(list.value.length + 1)
25
-
26
- // 加载状态结束
27
- loading.value = false
28
-
29
- // 数据全部加载完成
30
- if (list.value.length >= 20)
31
- finished.value = true
32
- }, 500)
33
- }
34
- </script>
35
-
36
- <template>
37
- <main class="chat_main h-full w-full">
38
- <div class="header">
39
- <VanRow class="header_row" justify="space-between">
40
- <VanCol class="header_title_col">
41
- <p>消息</p>
42
- </VanCol>
43
- <VanCol>
44
- <van-icon class="header_search_icon" name="search" />
45
- </VanCol>
46
- </VanRow>
47
- </div>
48
- <div class="content">
49
- <VanTabs v-model:active="active">
50
- <VanDivider />
51
- <VanTab title="消息">
52
- <VanList
53
- v-model:loading="loading"
54
- :finished="finished"
55
- finished-text="没有更多了"
56
- @load="onLoad"
57
- >
58
- <VanSwipeCell v-for="item in list" :key="item" :title="item">
59
- <div class="message_card">
60
- <VanRow :gutter="12" class="message_row">
61
- <VanCol>
62
- <img alt="header_img" class="header_img" src="https://fastly.jsdelivr.net/npm/@vant/assets/cat.jpeg">
63
- </VanCol>
64
- <VanCol class="message_card_col">
65
- <div class="message_card_main">
66
- <VanRow justify="space-between">
67
- <VanCol>
68
- <p class="message_sender_name">
69
- 测试人
70
- </p>
71
- </VanCol>
72
- <VanCol>
73
- <span class="message_sender_time">18分钟前</span>
74
- </VanCol>
75
- </VanRow>
76
- <p class="message_content">
77
- <span>轻舟已过万重山</span>
78
- </p>
79
- </div>
80
- <VanDivider class="content_divider" />
81
- </VanCol>
82
- </VanRow>
83
- </div>
84
- <template #right>
85
- <VanButton square text="删除" type="danger" class="delete-button" />
86
- </template>
87
- </VanSwipeCell>
88
- </VanList>
89
- </VanTab>
90
- <VanTab title="同事">
91
- 内容 1
92
- </VanTab>
93
- <VanTab title="部门">
94
- 内容 1
95
- </VanTab>
96
- </VanTabs>
97
- </div>
98
- </main>
99
- </template>
100
-
101
- <style scoped lang="less">
102
- .chat_main {
103
- padding: var(--base-interval-1);
104
- .header {
105
- p {
106
- margin: 0;
107
- font-size: 24px;
108
- font-weight: bold;
109
- }
110
- .header_row {
111
- align-items: center;
112
- .header_title_col {
113
- flex-grow: 1;
114
- }
115
- .header_search_icon {
116
- font-size: 26px;
117
- }
118
- }
119
- }
120
- .content {
121
- .message_card {
122
- .message_row {
123
- .header_img {
124
- width: 40px;
125
- height: 40px;
126
- border-radius: 5px;
127
- vertical-align: middle;
128
- }
129
- .message_card_col {
130
- flex-grow: 1;
131
- .message_sender_name {
132
- margin: 0 0 3px;
133
- font-size: 16px;
134
- font-weight: bold;
135
- }
136
- .message_sender_time {
137
- font-size: 12px;
138
- color: #999;
139
- }
140
- .message_content {
141
- margin: 0;
142
- font-size: 12px;
143
- color: #666;
144
- }
145
- }
146
- }
147
- .content_divider {
148
- margin: 12px 0;
149
- }
150
- }
151
- }
152
- }
153
- </style>
1
+ <script setup lang="ts">
2
+ import {
3
+ Button as VanButton,
4
+ Col as VanCol,
5
+ Divider as VanDivider,
6
+ List as VanList,
7
+ Row as VanRow,
8
+ SwipeCell as VanSwipeCell,
9
+ Tab as VanTab,
10
+ Tabs as VanTabs,
11
+ } from 'vant/es'
12
+ import { ref } from 'vue'
13
+
14
+ const active = ref(0)
15
+ const list = ref([])
16
+ const loading = ref(false)
17
+ const finished = ref(false)
18
+
19
+ function onLoad() {
20
+ // 异步更新数据
21
+ // setTimeout 仅做示例,真实场景中一般为 ajax 请求
22
+ setTimeout(() => {
23
+ for (let i = 0; i < 10; i++)
24
+ list.value.push(list.value.length + 1)
25
+
26
+ // 加载状态结束
27
+ loading.value = false
28
+
29
+ // 数据全部加载完成
30
+ if (list.value.length >= 20)
31
+ finished.value = true
32
+ }, 500)
33
+ }
34
+ </script>
35
+
36
+ <template>
37
+ <main class="chat_main h-full w-full">
38
+ <div class="header">
39
+ <VanRow class="header_row" justify="space-between">
40
+ <VanCol class="header_title_col">
41
+ <p>消息</p>
42
+ </VanCol>
43
+ <VanCol>
44
+ <van-icon class="header_search_icon" name="search" />
45
+ </VanCol>
46
+ </VanRow>
47
+ </div>
48
+ <div class="content">
49
+ <VanTabs v-model:active="active">
50
+ <VanDivider />
51
+ <VanTab title="消息">
52
+ <VanList
53
+ v-model:loading="loading"
54
+ :finished="finished"
55
+ finished-text="没有更多了"
56
+ @load="onLoad"
57
+ >
58
+ <VanSwipeCell v-for="item in list" :key="item" :title="item">
59
+ <div class="message_card">
60
+ <VanRow :gutter="12" class="message_row">
61
+ <VanCol>
62
+ <img alt="header_img" class="header_img" src="https://fastly.jsdelivr.net/npm/@vant/assets/cat.jpeg">
63
+ </VanCol>
64
+ <VanCol class="message_card_col">
65
+ <div class="message_card_main">
66
+ <VanRow justify="space-between">
67
+ <VanCol>
68
+ <p class="message_sender_name">
69
+ 测试人
70
+ </p>
71
+ </VanCol>
72
+ <VanCol>
73
+ <span class="message_sender_time">18分钟前</span>
74
+ </VanCol>
75
+ </VanRow>
76
+ <p class="message_content">
77
+ <span>轻舟已过万重山</span>
78
+ </p>
79
+ </div>
80
+ <VanDivider class="content_divider" />
81
+ </VanCol>
82
+ </VanRow>
83
+ </div>
84
+ <template #right>
85
+ <VanButton square text="删除" type="danger" class="delete-button" />
86
+ </template>
87
+ </VanSwipeCell>
88
+ </VanList>
89
+ </VanTab>
90
+ <VanTab title="同事">
91
+ 内容 1
92
+ </VanTab>
93
+ <VanTab title="部门">
94
+ 内容 1
95
+ </VanTab>
96
+ </VanTabs>
97
+ </div>
98
+ </main>
99
+ </template>
100
+
101
+ <style scoped lang="less">
102
+ .chat_main {
103
+ padding: var(--base-interval-1);
104
+ .header {
105
+ p {
106
+ margin: 0;
107
+ font-size: 24px;
108
+ font-weight: bold;
109
+ }
110
+ .header_row {
111
+ align-items: center;
112
+ .header_title_col {
113
+ flex-grow: 1;
114
+ }
115
+ .header_search_icon {
116
+ font-size: 26px;
117
+ }
118
+ }
119
+ }
120
+ .content {
121
+ .message_card {
122
+ .message_row {
123
+ .header_img {
124
+ width: 40px;
125
+ height: 40px;
126
+ border-radius: 5px;
127
+ vertical-align: middle;
128
+ }
129
+ .message_card_col {
130
+ flex-grow: 1;
131
+ .message_sender_name {
132
+ margin: 0 0 3px;
133
+ font-size: 16px;
134
+ font-weight: bold;
135
+ }
136
+ .message_sender_time {
137
+ font-size: 12px;
138
+ color: #999;
139
+ }
140
+ .message_content {
141
+ margin: 0;
142
+ font-size: 12px;
143
+ color: #666;
144
+ }
145
+ }
146
+ }
147
+ .content_divider {
148
+ margin: 12px 0;
149
+ }
150
+ }
151
+ }
152
+ }
153
+ </style>
@@ -1,63 +1,63 @@
1
- <script setup>
2
- </script>
3
-
4
- <template>
5
- <div class="load_error_main">
6
- <div class="container">
7
- <div class="loadError i-svg:loadError" />
8
- </div>
9
- <div class="text">
10
- 似乎出了点问题,下拉再试试
11
- </div>
12
- </div>
13
- </template>
14
-
15
- <style lang="less" scoped>
16
- @keyframes fadeInUp {
17
- from {
18
- opacity: 0;
19
- transform: translateY(30px);
20
- }
21
- to {
22
- opacity: 1;
23
- transform: translateY(0);
24
- }
25
- }
26
-
27
- @keyframes fadeIn {
28
- from {
29
- opacity: 0;
30
- }
31
- to {
32
- opacity: 1;
33
- }
34
- }
35
-
36
- .load_error_main {
37
- display: flex;
38
- flex-direction: column;
39
- align-items: center;
40
- background-color: var(--van-background-2);
41
- border-radius: var(--van-radius-lg);
42
- padding-top: 20vh;
43
- padding-bottom: 30vh;
44
- }
45
-
46
- .container {
47
- width: 100px;
48
- height: 100px;
49
- animation: fadeIn 0.8s ease-in-out;
50
- .loadError {
51
- width: 100px;
52
- height: 100px;
53
- vertical-align: middle;
54
- }
55
- }
56
-
57
- .text {
58
- margin-top: 25px;
59
- font-size: 14px;
60
- color: #333;
61
- animation: fadeIn 1.2s ease-in-out;
62
- }
63
- </style>
1
+ <script setup>
2
+ </script>
3
+
4
+ <template>
5
+ <div class="load_error_main">
6
+ <div class="container">
7
+ <div class="loadError i-svg:loadError" />
8
+ </div>
9
+ <div class="text">
10
+ 似乎出了点问题,下拉再试试
11
+ </div>
12
+ </div>
13
+ </template>
14
+
15
+ <style lang="less" scoped>
16
+ @keyframes fadeInUp {
17
+ from {
18
+ opacity: 0;
19
+ transform: translateY(30px);
20
+ }
21
+ to {
22
+ opacity: 1;
23
+ transform: translateY(0);
24
+ }
25
+ }
26
+
27
+ @keyframes fadeIn {
28
+ from {
29
+ opacity: 0;
30
+ }
31
+ to {
32
+ opacity: 1;
33
+ }
34
+ }
35
+
36
+ .load_error_main {
37
+ display: flex;
38
+ flex-direction: column;
39
+ align-items: center;
40
+ background-color: var(--van-background-2);
41
+ border-radius: var(--van-radius-lg);
42
+ padding-top: 20vh;
43
+ padding-bottom: 30vh;
44
+ }
45
+
46
+ .container {
47
+ width: 100px;
48
+ height: 100px;
49
+ animation: fadeIn 0.8s ease-in-out;
50
+ .loadError {
51
+ width: 100px;
52
+ height: 100px;
53
+ vertical-align: middle;
54
+ }
55
+ }
56
+
57
+ .text {
58
+ margin-top: 25px;
59
+ font-size: 14px;
60
+ color: #333;
61
+ animation: fadeIn 1.2s ease-in-out;
62
+ }
63
+ </style>