af-mobile-client-vue3 1.3.11 → 1.3.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (268) hide show
  1. package/.claude/settings.local.json +10 -0
  2. package/.cursorrules +60 -60
  3. package/.editorconfig +9 -9
  4. package/.env +10 -10
  5. package/.env.development +1 -1
  6. package/.env.production +1 -1
  7. package/.node-version +1 -1
  8. package/.vscode/extensions.json +12 -12
  9. package/.vscode/settings.json +66 -66
  10. package/CLAUDE.md +189 -184
  11. package/README.md +182 -181
  12. package/af-example-mobile-vue-web.iml +9 -9
  13. package/build/vite/index.ts +98 -98
  14. package/build/vite/optimize.ts +34 -34
  15. package/build/vite/vconsole.ts +47 -47
  16. package/commitlint.config.ts +32 -32
  17. package/compress.js +36 -36
  18. package/eslint.config.ts +30 -30
  19. package/index.html +23 -23
  20. package/mock/data.ts +20 -20
  21. package/mock/index.ts +7 -7
  22. package/mock/modules/prose.mock.ts +13 -13
  23. package/mock/modules/user.mock.ts +152 -152
  24. package/mock/util.ts +19 -19
  25. package/netlify.toml +12 -12
  26. package/package.json +114 -114
  27. package/postcss.config.ts +27 -27
  28. package/public/favicon.svg +4 -4
  29. package/public/safari-pinned-tab.svg +4 -4
  30. package/scripts/verifyCommit.js +19 -19
  31. package/src/App.vue +79 -79
  32. package/src/api/mock/index.ts +30 -30
  33. package/src/api/user/index.ts +40 -40
  34. package/src/assets/img/user/login/background-shadow-1.svg +20 -20
  35. package/src/assets/img/user/login/logo-background.svg +20 -20
  36. package/src/bootstrap.ts +26 -26
  37. package/src/components/core/BeautifulLoading/index.vue +52 -52
  38. package/src/components/core/ImageUploader/index.vue +244 -244
  39. package/src/components/core/NavBar/index.vue +53 -53
  40. package/src/components/core/Tabbar/index.vue +32 -32
  41. package/src/components/core/Uploader/index.vue +124 -124
  42. package/src/components/core/XGridDropOption/index.vue +154 -156
  43. package/src/components/core/XMultiSelect/index.vue +183 -183
  44. package/src/components/core/XSelect/index.vue +149 -149
  45. package/src/components/data/InfoDisplay/index.vue +132 -0
  46. package/src/components/data/UserDetail/api.ts +24 -0
  47. package/src/components/data/UserDetail/index.vue +539 -0
  48. package/src/components/data/UserDetail/recordEntries.ts +159 -0
  49. package/src/components/data/UserDetail/types.ts +26 -0
  50. package/src/components/data/XBadge/index.vue +82 -82
  51. package/src/components/data/XCellDetail/index.vue +105 -105
  52. package/src/components/data/XCellList/XCellList.md +313 -313
  53. package/src/components/data/XCellList/index.vue +1075 -1075
  54. package/src/components/data/XCellListFilter/QrScanner/index.vue +207 -207
  55. package/src/components/data/XCellListFilter/QrScanner/startScanAnimation.ts +53 -53
  56. package/src/components/data/XCellListFilter/VpnRecognition/index.vue +119 -119
  57. package/src/components/data/XCellListFilter/index.vue +705 -705
  58. package/src/components/data/XForm/index.vue +659 -659
  59. package/src/components/data/XFormGroup/doc/DeviceForm.vue +121 -121
  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 +101 -101
  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/XReportDesign.vue +597 -597
  79. package/src/components/data/XReportGrid/XReportDrawer/XReportDrawer.vue +148 -148
  80. package/src/components/data/XReportGrid/XReportDrawer/index.js +3 -3
  81. package/src/components/data/XReportGrid/XReportDrawer/index.ts +10 -10
  82. package/src/components/data/XReportGrid/XReportJsonRender.vue +399 -399
  83. package/src/components/data/XReportGrid/XReportTrGroup.vue +592 -592
  84. package/src/components/data/XReportGrid/index.md +46 -42
  85. package/src/components/data/XSignature/index.vue +284 -285
  86. package/src/components/data/XTag/index.vue +10 -10
  87. package/src/components/layout/NormalDataLayout/index.vue +69 -69
  88. package/src/components/layout/TabBarLayout/index.vue +40 -40
  89. package/src/composables/dark.ts +5 -5
  90. package/src/config/routes.ts +9 -9
  91. package/src/constants/index.ts +2 -2
  92. package/src/enums/requestEnum.ts +25 -25
  93. package/src/expression/ExpressionRunner.ts +28 -28
  94. package/src/expression/TestExpression.ts +510 -510
  95. package/src/expression/core/Delegate.ts +116 -116
  96. package/src/expression/core/Expression.ts +1359 -1359
  97. package/src/expression/core/Program.ts +985 -985
  98. package/src/expression/core/Token.ts +29 -29
  99. package/src/expression/enums/ExpressionType.ts +81 -81
  100. package/src/expression/enums/TokenType.ts +11 -11
  101. package/src/expression/exception/BreakWayException.ts +2 -2
  102. package/src/expression/exception/ContinueWayException.ts +2 -2
  103. package/src/expression/exception/ExpressionException.ts +29 -29
  104. package/src/expression/exception/ReturnWayException.ts +14 -14
  105. package/src/expression/exception/ServiceException.ts +22 -22
  106. package/src/expression/instances/JSONArray.ts +52 -52
  107. package/src/expression/instances/JSONObject.ts +118 -118
  108. package/src/expression/instances/LogicConsole.ts +31 -31
  109. package/src/font-style/font.css +4 -4
  110. package/src/hooks/useBoolean.ts +26 -0
  111. package/src/hooks/useCommon.ts +9 -9
  112. package/src/hooks/useLogin.ts +97 -97
  113. package/src/icons/svg/check-in.svg +32 -32
  114. package/src/icons/svg/dark.svg +4 -4
  115. package/src/icons/svg/github.svg +4 -4
  116. package/src/icons/svg/light.svg +4 -4
  117. package/src/icons/svg/link.svg +4 -4
  118. package/src/icons/svgo.yml +22 -22
  119. package/src/layout/GridView/index.vue +16 -16
  120. package/src/layout/PageLayout.vue +9 -9
  121. package/src/layout/SingleLayout.vue +9 -9
  122. package/src/locales/en-US.json +128 -128
  123. package/src/locales/zh-CN.json +128 -128
  124. package/src/logic/LogicRunner.ts +67 -67
  125. package/src/logic/TestLogic.ts +13 -13
  126. package/src/logic/plugins/common/DateTools.ts +35 -35
  127. package/src/logic/plugins/common/VueTools.ts +30 -30
  128. package/src/logic/plugins/index.ts +7 -7
  129. package/src/main.ts +44 -44
  130. package/src/plugins/AppData.ts +38 -38
  131. package/src/plugins/GetLoginInfoService.ts +10 -10
  132. package/src/plugins/collectIcons.ts +10 -0
  133. package/src/plugins/index.ts +11 -11
  134. package/src/router/README.md +8 -8
  135. package/src/router/guards.ts +59 -59
  136. package/src/router/index.ts +35 -35
  137. package/src/router/invoiceRoutes.ts +33 -33
  138. package/src/router/routes.ts +341 -171
  139. package/src/router/types.ts +7 -7
  140. package/src/services/api/Login.ts +6 -6
  141. package/src/services/api/common.ts +109 -109
  142. package/src/services/api/index.ts +7 -7
  143. package/src/services/api/manage.ts +8 -8
  144. package/src/services/api/search.ts +16 -16
  145. package/src/services/api/user.ts +17 -17
  146. package/src/services/restTools.ts +56 -56
  147. package/src/services/v3Api.ts +147 -147
  148. package/src/stores/index.ts +11 -11
  149. package/src/stores/modules/counter.ts +19 -19
  150. package/src/stores/modules/routeCache.ts +23 -23
  151. package/src/stores/modules/setting.ts +76 -76
  152. package/src/stores/modules/user.ts +235 -235
  153. package/src/stores/mutation-type.ts +7 -7
  154. package/src/styles/app.less +36 -36
  155. package/src/styles/login.less +109 -109
  156. package/src/styles/var.less +16 -16
  157. package/src/types/env.d.ts +16 -16
  158. package/src/types/settings.ts +1 -1
  159. package/src/types/vue-router.d.ts +9 -9
  160. package/src/utils/Storage.ts +124 -124
  161. package/src/utils/authority-utils.ts +84 -84
  162. package/src/utils/common.ts +41 -41
  163. package/src/utils/crypto.ts +39 -39
  164. package/src/utils/dataUtil.ts +42 -42
  165. package/src/utils/dictUtil.ts +52 -52
  166. package/src/utils/http/index.ts +199 -199
  167. package/src/utils/i18n.ts +72 -72
  168. package/src/utils/indexedDB.ts +195 -195
  169. package/src/utils/inline-px-to-vw.ts +28 -28
  170. package/src/utils/mobileUtil.ts +34 -34
  171. package/src/utils/progress.ts +19 -19
  172. package/src/utils/queryFormDefaultRangePicker.ts +57 -57
  173. package/src/utils/routerUtil.ts +271 -271
  174. package/src/utils/runEvalFunction.ts +13 -13
  175. package/src/utils/secureStorage.ts +71 -71
  176. package/src/utils/set-page-title.ts +5 -5
  177. package/src/utils/validate.ts +6 -6
  178. package/src/utils/wechatUtil.ts +9 -9
  179. package/src/views/chat/index.vue +153 -153
  180. package/src/views/common/LoadError.vue +63 -63
  181. package/src/views/common/NotFound.vue +67 -67
  182. package/src/views/component/EvaluateRecordView/index.vue +40 -40
  183. package/src/views/component/IconifyView/index.vue +504 -507
  184. package/src/views/component/UserDetailView/UserDetailPage.vue +77 -0
  185. package/src/views/component/UserDetailView/index.vue +224 -0
  186. package/src/views/component/XCellDetailView/index.vue +217 -217
  187. package/src/views/component/XCellListView/index.vue +108 -147
  188. package/src/views/component/XFormAppraiseView/index.vue +174 -174
  189. package/src/views/component/XFormGroupView/index.vue +78 -91
  190. package/src/views/component/XFormView/index.vue +27 -107
  191. package/src/views/component/XOlMapView/XLocationPicker/index.vue +118 -118
  192. package/src/views/component/XOlMapView/index.vue +434 -434
  193. package/src/views/component/XOlMapView/testData.ts +64 -64
  194. package/src/views/component/XReportFormIframeView/index.vue +47 -47
  195. package/src/views/component/XReportFormView/index.vue +13 -13
  196. package/src/views/component/XReportGridView/index.vue +17 -17
  197. package/src/views/component/XRequestView/index.vue +234 -234
  198. package/src/views/component/XSignatureView/index.vue +50 -50
  199. package/src/views/component/index.vue +181 -177
  200. package/src/views/component/menu.vue +117 -117
  201. package/src/views/component/notice.vue +46 -46
  202. package/src/views/component/topNav.vue +36 -36
  203. package/src/views/invoiceShow/index.vue +61 -61
  204. package/src/views/user/login/ForgetPasswordForm.vue +94 -94
  205. package/src/views/user/login/LoginForm.vue +346 -346
  206. package/src/views/user/login/LoginTitle.vue +76 -76
  207. package/src/views/user/login/LoginWave.vue +109 -109
  208. package/src/views/user/login/index.vue +22 -22
  209. package/src/views/user/my/comm/ModifyPassword.vue +346 -346
  210. package/src/views/user/my/index.vue +340 -340
  211. package/src/views/userRecords/AbnormalAlarmRecords.vue +21 -0
  212. package/src/views/userRecords/CardReplacementRecords.vue +21 -0
  213. package/src/views/userRecords/ChangeRecords.vue +19 -0
  214. package/src/views/userRecords/CommandViewRecords.vue +20 -0
  215. package/src/views/userRecords/GasCompensationRecords.vue +20 -0
  216. package/src/views/userRecords/InstrumentCollectionRecords.vue +21 -0
  217. package/src/views/userRecords/MeterRecords.vue +20 -0
  218. package/src/views/userRecords/OperateRecords.vue +51 -0
  219. package/src/views/userRecords/OtherChargeRecords.vue +19 -0
  220. package/src/views/userRecords/PaymentRecords.vue +28 -0
  221. package/src/views/userRecords/PriceAdjustmentRecords.vue +19 -0
  222. package/src/views/userRecords/ReplacementRecords.vue +19 -0
  223. package/src/views/userRecords/SafetyRecords.vue +19 -0
  224. package/src/views/userRecords/TransactionRecords.vue +21 -0
  225. package/src/views/userRecords/TransferRecords.vue +19 -0
  226. package/src/views/userRecords/operateRecordDetail/index.vue +316 -0
  227. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/AddUserDetail.vue +124 -0
  228. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/AdvanceDeliveryDetail.vue +88 -0
  229. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/AutoAccountsCancelDetail.vue +205 -0
  230. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/AutoAccountsDetail.vue +192 -0
  231. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/BankDkDetail.vue +192 -0
  232. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/BankPayDetail.vue +192 -0
  233. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/BlacklistDetail.vue +153 -0
  234. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/CancellationDetail.vue +101 -0
  235. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/CardMeterCenterCancelDetail.vue +127 -0
  236. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/CardMeterCenterDetail.vue +153 -0
  237. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/CardOverUserDetail.vue +153 -0
  238. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/ChangeMeterCancelDetail.vue +166 -0
  239. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/ChangeMeterDetail.vue +205 -0
  240. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/DisableManageDetail.vue +127 -0
  241. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/EnableManageDetail.vue +114 -0
  242. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/FaZheChangeDetail.vue +124 -0
  243. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/FeeDeductionDetail.vue +153 -0
  244. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/GasPriceChangeDetail.vue +126 -0
  245. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/InputtorChangeDetail.vue +126 -0
  246. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/IotMeterCenterCancelDetail.vue +114 -0
  247. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/IotMeterCenterDetail.vue +127 -0
  248. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/IotOpenDetail.vue +88 -0
  249. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/MachineCardDetail.vue +101 -0
  250. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/MachineMeterCenterCancelDetail.vue +218 -0
  251. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/MachineMeterCenterDetail.vue +153 -0
  252. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/OffGasAddGasDetail.vue +140 -0
  253. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/OtherChargeCancelDetail.vue +127 -0
  254. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/OtherChargeDetail.vue +114 -0
  255. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/OverUserChangeDetail.vue +127 -0
  256. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/ReBillDetail.vue +127 -0
  257. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/RefundDetail.vue +114 -0
  258. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/ReplaceCardManageCancelDetail.vue +127 -0
  259. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/ReplaceCardManageDetail.vue +114 -0
  260. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/SaleCardGasDetail.vue +140 -0
  261. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/TransferManageCancelDetail.vue +152 -0
  262. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/TransferManageDetail.vue +178 -0
  263. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/UserChangeDetail.vue +123 -0
  264. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/WechatPayDetail.vue +192 -0
  265. package/src/views/userRecords/types.ts +66 -0
  266. package/tsconfig.json +39 -39
  267. package/uno.config.ts +82 -78
  268. package/vite.config.ts +118 -118
@@ -1,234 +1,234 @@
1
- <script setup lang="ts">
2
- import { queryProse } from '@af-mobile-client-vue3/api/mock'
3
- import { getUserPermissions } from '@af-mobile-client-vue3/services/api/search'
4
- import { post } from '@af-mobile-client-vue3/services/restTools'
5
- import useUserStore from '@af-mobile-client-vue3/stores/modules/user'
6
- import { showToast, Button as VanButton, Cell as VanCell, CellGroup as VanCellGroup } from 'vant'
7
- import { reactive, ref } from 'vue'
8
- import { useRouter } from 'vue-router'
9
-
10
- // 路由
11
- const router = useRouter()
12
- // 用户store
13
- const userStore = useUserStore()
14
-
15
- // 数据定义
16
- const requestTypes = ref('GET, POST, DELETE')
17
- const getResult = ref('')
18
- const postResult = ref('')
19
- const permissionsResult = ref('')
20
- const storePermissionsResult = ref('')
21
- const postData = reactive({
22
- name: '',
23
- value: '',
24
- })
25
-
26
- // 返回上一页
27
- function onClickLeft() {
28
- router.back()
29
- }
30
-
31
- // 发送GET请求示例
32
- async function handleGetRequest() {
33
- try {
34
- // 这里使用项目中的模拟API
35
- const result = await queryProse()
36
- getResult.value = JSON.stringify(result, null, 2)
37
- showToast('请求成功')
38
- }
39
- catch (error) {
40
- console.error('GET请求失败:', error)
41
- showToast('请求失败')
42
- }
43
- }
44
-
45
- // 获取用户权限
46
- async function handleGetPermissions() {
47
- try {
48
- const userInfo = userStore.getUserInfo()
49
- if (!userInfo || !userInfo.id) {
50
- showToast('请先登录')
51
- return
52
- }
53
-
54
- // 从API获取权限
55
- const permissions = await getUserPermissions(userInfo.id.toString())
56
- permissionsResult.value = JSON.stringify(permissions, null, 2)
57
-
58
- // 从Store获取权限
59
- const storePermissions = userStore.getPermissions()
60
- storePermissionsResult.value = JSON.stringify(storePermissions, null, 2)
61
-
62
- showToast('获取权限成功')
63
- }
64
- catch (error) {
65
- console.error('获取权限失败:', error)
66
- showToast('获取权限失败')
67
- }
68
- }
69
-
70
- // 定义请求数据类型
71
- interface RequestData {
72
- name: string
73
- value: string
74
- }
75
-
76
- // 定义返回结果类型
77
- interface ResponseData {
78
- code: number
79
- msg: string
80
- data: any
81
- }
82
-
83
- // 发送POST请求示例
84
- async function handlePostRequest() {
85
- try {
86
- // 这里演示使用通用post方法发送请求
87
- // 使用泛型指定返回类型
88
- const result = await post<ResponseData>('/api/demo/post', {
89
- name: '测试',
90
- value: '测试',
91
- })
92
- postResult.value = JSON.stringify(result, null, 2)
93
- showToast('请求成功')
94
- }
95
- catch (error) {
96
- console.error('POST请求失败:', error)
97
- showToast('请求失败')
98
- }
99
- }
100
-
101
- // 类型定义展示
102
- const typeDefinitions = `
103
-
104
- // 使用泛型扩展特定业务数据类型
105
- import { get } from '@af-mobile-client-vue3/services/restTools'
106
-
107
- interface UserInfo {
108
- id: string
109
- name: string
110
- roles: string[]
111
- }
112
-
113
- // 调用示例
114
- const userInfo = await get<UserInfo>('/api/user/info')
115
- // userInfo 类型为 UserInfo,而非 BasicResponseModel<UserInfo>
116
- // 不用使用 userInfo.data 获取数据
117
- // 直接使用 userInfo 即可
118
- `.trim()
119
- </script>
120
-
121
- <template>
122
- <div class="request-view">
123
- <div class="container">
124
- <VanCellGroup title="API请求演示">
125
- <VanCell title="基本请求类型" :value="requestTypes" />
126
-
127
- <!-- GET请求部分 -->
128
- <div class="request-section">
129
- <h3>GET请求示例</h3>
130
- <VanButton type="primary" size="small" @click="handleGetRequest">
131
- 发送GET请求
132
- </VanButton>
133
- <div v-if="getResult" class="result-box">
134
- <h4>响应结果:</h4>
135
- <pre>{{ getResult }}</pre>
136
- </div>
137
- </div>
138
-
139
- <!-- POST请求部分 -->
140
- <div class="request-section">
141
- <h3>POST请求示例</h3>
142
-
143
- <VanButton type="primary" size="small" @click="handlePostRequest">
144
- 发送POST请求
145
- </VanButton>
146
- <div v-if="postResult" class="result-box">
147
- <h4>响应结果:</h4>
148
- <pre>{{ postResult }}</pre>
149
- </div>
150
- </div>
151
-
152
- <!-- 用户权限部分 -->
153
- <div class="request-section">
154
- <h3>用户权限获取</h3>
155
- <VanButton type="primary" size="small" @click="handleGetPermissions">
156
- 获取用户权限
157
- </VanButton>
158
-
159
- <div v-if="permissionsResult" class="result-box">
160
- <h4>API请求权限结果:</h4>
161
- <pre>{{ permissionsResult }}</pre>
162
- </div>
163
-
164
- <div v-if="storePermissionsResult" class="result-box">
165
- <h4>Store缓存权限结果:</h4>
166
- <pre>{{ storePermissionsResult }}</pre>
167
- </div>
168
- </div>
169
-
170
- <!-- 类型定义说明 -->
171
- <div class="code-section">
172
- <h3>类型定义</h3>
173
- <pre>{{ typeDefinitions }}</pre>
174
- </div>
175
- </VanCellGroup>
176
- </div>
177
- </div>
178
- </template>
179
-
180
- <style scoped>
181
- .request-view {
182
- height: 100%;
183
- display: flex;
184
- flex-direction: column;
185
- }
186
-
187
- .container {
188
- flex: 1;
189
- padding: 16px;
190
- overflow-y: auto;
191
- }
192
-
193
- .request-section {
194
- margin: 16px 0;
195
- padding: 16px;
196
- background-color: #f7f8fa;
197
- border-radius: 8px;
198
- }
199
-
200
- .result-box {
201
- margin-top: 16px;
202
- padding: 12px;
203
- background-color: #ffffff;
204
- border-radius: 4px;
205
- border: 1px solid #ebedf0;
206
- }
207
-
208
- pre {
209
- white-space: pre-wrap;
210
- word-break: break-all;
211
- font-size: 12px;
212
- font-family: Consolas, Monaco, monospace;
213
- background-color: #f5f7fa;
214
- padding: 8px;
215
- border-radius: 4px;
216
- overflow-x: auto;
217
- }
218
-
219
- .code-section {
220
- margin: 16px 0;
221
- }
222
-
223
- h3 {
224
- margin: 0 0 12px;
225
- font-size: 15px;
226
- color: #323233;
227
- }
228
-
229
- h4 {
230
- margin: 0 0 8px;
231
- font-size: 14px;
232
- color: #323233;
233
- }
234
- </style>
1
+ <script setup lang="ts">
2
+ import { queryProse } from '@af-mobile-client-vue3/api/mock'
3
+ import { getUserPermissions } from '@af-mobile-client-vue3/services/api/search'
4
+ import { post } from '@af-mobile-client-vue3/services/restTools'
5
+ import useUserStore from '@af-mobile-client-vue3/stores/modules/user'
6
+ import { showToast, Button as VanButton, Cell as VanCell, CellGroup as VanCellGroup } from 'vant'
7
+ import { reactive, ref } from 'vue'
8
+ import { useRouter } from 'vue-router'
9
+
10
+ // 路由
11
+ const router = useRouter()
12
+ // 用户store
13
+ const userStore = useUserStore()
14
+
15
+ // 数据定义
16
+ const requestTypes = ref('GET, POST, DELETE')
17
+ const getResult = ref('')
18
+ const postResult = ref('')
19
+ const permissionsResult = ref('')
20
+ const storePermissionsResult = ref('')
21
+ const postData = reactive({
22
+ name: '',
23
+ value: '',
24
+ })
25
+
26
+ // 返回上一页
27
+ function onClickLeft() {
28
+ router.back()
29
+ }
30
+
31
+ // 发送GET请求示例
32
+ async function handleGetRequest() {
33
+ try {
34
+ // 这里使用项目中的模拟API
35
+ const result = await queryProse()
36
+ getResult.value = JSON.stringify(result, null, 2)
37
+ showToast('请求成功')
38
+ }
39
+ catch (error) {
40
+ console.error('GET请求失败:', error)
41
+ showToast('请求失败')
42
+ }
43
+ }
44
+
45
+ // 获取用户权限
46
+ async function handleGetPermissions() {
47
+ try {
48
+ const userInfo = userStore.getUserInfo()
49
+ if (!userInfo || !userInfo.id) {
50
+ showToast('请先登录')
51
+ return
52
+ }
53
+
54
+ // 从API获取权限
55
+ const permissions = await getUserPermissions(userInfo.id.toString())
56
+ permissionsResult.value = JSON.stringify(permissions, null, 2)
57
+
58
+ // 从Store获取权限
59
+ const storePermissions = userStore.getPermissions()
60
+ storePermissionsResult.value = JSON.stringify(storePermissions, null, 2)
61
+
62
+ showToast('获取权限成功')
63
+ }
64
+ catch (error) {
65
+ console.error('获取权限失败:', error)
66
+ showToast('获取权限失败')
67
+ }
68
+ }
69
+
70
+ // 定义请求数据类型
71
+ interface RequestData {
72
+ name: string
73
+ value: string
74
+ }
75
+
76
+ // 定义返回结果类型
77
+ interface ResponseData {
78
+ code: number
79
+ msg: string
80
+ data: any
81
+ }
82
+
83
+ // 发送POST请求示例
84
+ async function handlePostRequest() {
85
+ try {
86
+ // 这里演示使用通用post方法发送请求
87
+ // 使用泛型指定返回类型
88
+ const result = await post<ResponseData>('/api/demo/post', {
89
+ name: '测试',
90
+ value: '测试',
91
+ })
92
+ postResult.value = JSON.stringify(result, null, 2)
93
+ showToast('请求成功')
94
+ }
95
+ catch (error) {
96
+ console.error('POST请求失败:', error)
97
+ showToast('请求失败')
98
+ }
99
+ }
100
+
101
+ // 类型定义展示
102
+ const typeDefinitions = `
103
+
104
+ // 使用泛型扩展特定业务数据类型
105
+ import { get } from '@af-mobile-client-vue3/services/restTools'
106
+
107
+ interface UserInfo {
108
+ id: string
109
+ name: string
110
+ roles: string[]
111
+ }
112
+
113
+ // 调用示例
114
+ const userInfo = await get<UserInfo>('/api/user/info')
115
+ // userInfo 类型为 UserInfo,而非 BasicResponseModel<UserInfo>
116
+ // 不用使用 userInfo.data 获取数据
117
+ // 直接使用 userInfo 即可
118
+ `.trim()
119
+ </script>
120
+
121
+ <template>
122
+ <div class="request-view">
123
+ <div class="container">
124
+ <VanCellGroup title="API请求演示">
125
+ <VanCell title="基本请求类型" :value="requestTypes" />
126
+
127
+ <!-- GET请求部分 -->
128
+ <div class="request-section">
129
+ <h3>GET请求示例</h3>
130
+ <VanButton type="primary" size="small" @click="handleGetRequest">
131
+ 发送GET请求
132
+ </VanButton>
133
+ <div v-if="getResult" class="result-box">
134
+ <h4>响应结果:</h4>
135
+ <pre>{{ getResult }}</pre>
136
+ </div>
137
+ </div>
138
+
139
+ <!-- POST请求部分 -->
140
+ <div class="request-section">
141
+ <h3>POST请求示例</h3>
142
+
143
+ <VanButton type="primary" size="small" @click="handlePostRequest">
144
+ 发送POST请求
145
+ </VanButton>
146
+ <div v-if="postResult" class="result-box">
147
+ <h4>响应结果:</h4>
148
+ <pre>{{ postResult }}</pre>
149
+ </div>
150
+ </div>
151
+
152
+ <!-- 用户权限部分 -->
153
+ <div class="request-section">
154
+ <h3>用户权限获取</h3>
155
+ <VanButton type="primary" size="small" @click="handleGetPermissions">
156
+ 获取用户权限
157
+ </VanButton>
158
+
159
+ <div v-if="permissionsResult" class="result-box">
160
+ <h4>API请求权限结果:</h4>
161
+ <pre>{{ permissionsResult }}</pre>
162
+ </div>
163
+
164
+ <div v-if="storePermissionsResult" class="result-box">
165
+ <h4>Store缓存权限结果:</h4>
166
+ <pre>{{ storePermissionsResult }}</pre>
167
+ </div>
168
+ </div>
169
+
170
+ <!-- 类型定义说明 -->
171
+ <div class="code-section">
172
+ <h3>类型定义</h3>
173
+ <pre>{{ typeDefinitions }}</pre>
174
+ </div>
175
+ </VanCellGroup>
176
+ </div>
177
+ </div>
178
+ </template>
179
+
180
+ <style scoped>
181
+ .request-view {
182
+ height: 100%;
183
+ display: flex;
184
+ flex-direction: column;
185
+ }
186
+
187
+ .container {
188
+ flex: 1;
189
+ padding: 16px;
190
+ overflow-y: auto;
191
+ }
192
+
193
+ .request-section {
194
+ margin: 16px 0;
195
+ padding: 16px;
196
+ background-color: #f7f8fa;
197
+ border-radius: 8px;
198
+ }
199
+
200
+ .result-box {
201
+ margin-top: 16px;
202
+ padding: 12px;
203
+ background-color: #ffffff;
204
+ border-radius: 4px;
205
+ border: 1px solid #ebedf0;
206
+ }
207
+
208
+ pre {
209
+ white-space: pre-wrap;
210
+ word-break: break-all;
211
+ font-size: 12px;
212
+ font-family: Consolas, Monaco, monospace;
213
+ background-color: #f5f7fa;
214
+ padding: 8px;
215
+ border-radius: 4px;
216
+ overflow-x: auto;
217
+ }
218
+
219
+ .code-section {
220
+ margin: 16px 0;
221
+ }
222
+
223
+ h3 {
224
+ margin: 0 0 12px;
225
+ font-size: 15px;
226
+ color: #323233;
227
+ }
228
+
229
+ h4 {
230
+ margin: 0 0 8px;
231
+ font-size: 14px;
232
+ color: #323233;
233
+ }
234
+ </style>
@@ -1,50 +1,50 @@
1
- <script setup lang="ts">
2
- import XSignature from '@af-mobile-client-vue3/components/data/XSignature/index.vue'
3
- import NormalDataLayout from '@af-mobile-client-vue3/components/layout/NormalDataLayout/index.vue'
4
- import { showToast, Image as VanImage } from 'vant'
5
- import { ref } from 'vue'
6
-
7
- const signatureImage = ref('')
8
-
9
- function handleSave() {
10
- showToast('签名已保存')
11
- }
12
-
13
- function handleClear() {
14
- showToast('签名已清除')
15
- }
16
- </script>
17
-
18
- <template>
19
- <NormalDataLayout title="签名组件">
20
- <template #layout_content>
21
- 基础使用
22
- <div class="signature-demo">
23
- <XSignature v-model="signatureImage" @save="handleSave" @clear="handleClear" />
24
- <div v-if="signatureImage" class="preview">
25
- <h3>预览签名</h3>
26
- <VanImage v-if="signatureImage" :src="signatureImage" />
27
- </div>
28
- </div>
29
- </template>
30
- </NormalDataLayout>
31
- </template>
32
-
33
- <style scoped lang="less">
34
- .signature-demo {
35
- padding: 16px;
36
- .preview {
37
- margin-top: 20px;
38
- h3 {
39
- margin: 0 0 10px;
40
- font-size: 16px;
41
- color: #323233;
42
- }
43
- img {
44
- max-width: 100%;
45
- border: 1px solid #ebedf0;
46
- border-radius: 8px;
47
- }
48
- }
49
- }
50
- </style>
1
+ <script setup lang="ts">
2
+ import XSignature from '@af-mobile-client-vue3/components/data/XSignature/index.vue'
3
+ import NormalDataLayout from '@af-mobile-client-vue3/components/layout/NormalDataLayout/index.vue'
4
+ import { showToast, Image as VanImage } from 'vant'
5
+ import { ref } from 'vue'
6
+
7
+ const signatureImage = ref('')
8
+
9
+ function handleSave() {
10
+ showToast('签名已保存')
11
+ }
12
+
13
+ function handleClear() {
14
+ showToast('签名已清除')
15
+ }
16
+ </script>
17
+
18
+ <template>
19
+ <NormalDataLayout title="签名组件">
20
+ <template #layout_content>
21
+ 基础使用
22
+ <div class="signature-demo">
23
+ <XSignature v-model="signatureImage" @save="handleSave" @clear="handleClear" />
24
+ <div v-if="signatureImage" class="preview">
25
+ <h3>预览签名</h3>
26
+ <VanImage v-if="signatureImage" :src="signatureImage" />
27
+ </div>
28
+ </div>
29
+ </template>
30
+ </NormalDataLayout>
31
+ </template>
32
+
33
+ <style scoped lang="less">
34
+ .signature-demo {
35
+ padding: 16px;
36
+ .preview {
37
+ margin-top: 20px;
38
+ h3 {
39
+ margin: 0 0 10px;
40
+ font-size: 16px;
41
+ color: #323233;
42
+ }
43
+ img {
44
+ max-width: 100%;
45
+ border: 1px solid #ebedf0;
46
+ border-radius: 8px;
47
+ }
48
+ }
49
+ }
50
+ </style>