af-mobile-client-vue3 1.3.12 → 1.3.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (270) hide show
  1. package/.claude/settings.local.json +10 -0
  2. package/.cursorrules +60 -60
  3. package/.editorconfig +9 -9
  4. package/.env +10 -10
  5. package/.env.development +1 -1
  6. package/.env.production +1 -1
  7. package/.node-version +1 -1
  8. package/.vscode/extensions.json +12 -12
  9. package/.vscode/settings.json +66 -66
  10. package/CLAUDE.md +189 -184
  11. package/README.md +182 -181
  12. package/af-example-mobile-vue-web.iml +9 -9
  13. package/build/vite/index.ts +98 -98
  14. package/build/vite/optimize.ts +34 -34
  15. package/build/vite/vconsole.ts +47 -47
  16. package/commitlint.config.ts +32 -32
  17. package/compress.js +36 -36
  18. package/eslint.config.ts +30 -30
  19. package/index.html +23 -23
  20. package/mock/data.ts +20 -20
  21. package/mock/index.ts +7 -7
  22. package/mock/modules/prose.mock.ts +13 -13
  23. package/mock/modules/user.mock.ts +152 -152
  24. package/mock/util.ts +19 -19
  25. package/netlify.toml +12 -12
  26. package/package.json +114 -114
  27. package/postcss.config.ts +27 -27
  28. package/public/favicon.svg +4 -4
  29. package/public/safari-pinned-tab.svg +4 -4
  30. package/scripts/verifyCommit.js +19 -19
  31. package/src/App.vue +79 -79
  32. package/src/api/mock/index.ts +30 -30
  33. package/src/api/user/index.ts +40 -40
  34. package/src/assets/img/user/login/background-shadow-1.svg +20 -20
  35. package/src/assets/img/user/login/logo-background.svg +20 -20
  36. package/src/bootstrap.ts +26 -26
  37. package/src/components/core/BeautifulLoading/index.vue +52 -52
  38. package/src/components/core/ImageUploader/index.vue +244 -244
  39. package/src/components/core/NavBar/index.vue +53 -53
  40. package/src/components/core/Tabbar/index.vue +32 -32
  41. package/src/components/core/Uploader/index.vue +124 -124
  42. package/src/components/core/XGridDropOption/index.vue +154 -156
  43. package/src/components/core/XMultiSelect/index.vue +183 -183
  44. package/src/components/core/XSelect/index.vue +149 -149
  45. package/src/components/data/InfoDisplay/index.vue +132 -0
  46. package/src/components/data/UserDetail/api.ts +24 -0
  47. package/src/components/data/UserDetail/index.vue +539 -0
  48. package/src/components/data/UserDetail/recordEntries.ts +159 -0
  49. package/src/components/data/UserDetail/types.ts +26 -0
  50. package/src/components/data/XBadge/index.vue +82 -82
  51. package/src/components/data/XCellDetail/index.vue +105 -105
  52. package/src/components/data/XCellList/XCellList.md +313 -313
  53. package/src/components/data/XCellList/index.vue +1075 -1075
  54. package/src/components/data/XCellListFilter/QrScanner/index.vue +207 -207
  55. package/src/components/data/XCellListFilter/QrScanner/startScanAnimation.ts +53 -53
  56. package/src/components/data/XCellListFilter/VpnRecognition/index.vue +119 -119
  57. package/src/components/data/XCellListFilter/index.vue +705 -705
  58. package/src/components/data/XForm/index.vue +659 -659
  59. package/src/components/data/XFormGroup/doc/DeviceForm.vue +122 -122
  60. package/src/components/data/XFormGroup/doc/FormGroupDemo.vue +56 -56
  61. package/src/components/data/XFormGroup/doc/README.md +286 -273
  62. package/src/components/data/XFormGroup/doc/UserForm.vue +102 -102
  63. package/src/components/data/XFormGroup/index.vue +240 -240
  64. package/src/components/data/XFormItem/index.vue +1310 -1310
  65. package/src/components/data/XOlMap/README.md +227 -227
  66. package/src/components/data/XOlMap/XLocationPicker/index.vue +226 -225
  67. package/src/components/data/XOlMap/index.vue +1490 -1490
  68. package/src/components/data/XOlMap/types.ts +149 -149
  69. package/src/components/data/XOlMap/utils/wgs84ToGcj02.js +154 -154
  70. package/src/components/data/XReportForm/DateTimeSecondsPicker.vue +208 -208
  71. package/src/components/data/XReportForm/XReportFormJsonRender.vue +220 -220
  72. package/src/components/data/XReportForm/index.vue +1393 -1393
  73. package/src/components/data/XReportGrid/XAddReport/XAddReport.vue +198 -198
  74. package/src/components/data/XReportGrid/XAddReport/index.js +3 -3
  75. package/src/components/data/XReportGrid/XAddReport/index.md +53 -52
  76. package/src/components/data/XReportGrid/XAddReport/index.ts +10 -10
  77. package/src/components/data/XReportGrid/XReport.vue +960 -960
  78. package/src/components/data/XReportGrid/XReportDemo.vue +33 -33
  79. package/src/components/data/XReportGrid/XReportDesign.vue +597 -597
  80. package/src/components/data/XReportGrid/XReportDrawer/XReportDrawer.vue +148 -148
  81. package/src/components/data/XReportGrid/XReportDrawer/index.js +3 -3
  82. package/src/components/data/XReportGrid/XReportDrawer/index.ts +10 -10
  83. package/src/components/data/XReportGrid/XReportJsonRender.vue +399 -399
  84. package/src/components/data/XReportGrid/XReportTrGroup.vue +592 -592
  85. package/src/components/data/XReportGrid/index.md +46 -42
  86. package/src/components/data/XReportGrid/print.js +184 -184
  87. package/src/components/data/XSignature/index.vue +284 -285
  88. package/src/components/data/XTag/index.vue +10 -10
  89. package/src/components/layout/NormalDataLayout/index.vue +69 -69
  90. package/src/components/layout/TabBarLayout/index.vue +40 -40
  91. package/src/composables/dark.ts +5 -5
  92. package/src/config/routes.ts +9 -9
  93. package/src/constants/index.ts +2 -2
  94. package/src/enums/requestEnum.ts +25 -25
  95. package/src/expression/ExpressionRunner.ts +28 -28
  96. package/src/expression/TestExpression.ts +510 -510
  97. package/src/expression/core/Delegate.ts +116 -116
  98. package/src/expression/core/Expression.ts +1359 -1359
  99. package/src/expression/core/Program.ts +985 -985
  100. package/src/expression/core/Token.ts +29 -29
  101. package/src/expression/enums/ExpressionType.ts +81 -81
  102. package/src/expression/enums/TokenType.ts +11 -11
  103. package/src/expression/exception/BreakWayException.ts +2 -2
  104. package/src/expression/exception/ContinueWayException.ts +2 -2
  105. package/src/expression/exception/ExpressionException.ts +29 -29
  106. package/src/expression/exception/ReturnWayException.ts +14 -14
  107. package/src/expression/exception/ServiceException.ts +22 -22
  108. package/src/expression/instances/JSONArray.ts +52 -52
  109. package/src/expression/instances/JSONObject.ts +118 -118
  110. package/src/expression/instances/LogicConsole.ts +31 -31
  111. package/src/font-style/font.css +4 -4
  112. package/src/hooks/useBoolean.ts +26 -0
  113. package/src/hooks/useCommon.ts +9 -9
  114. package/src/hooks/useLogin.ts +97 -97
  115. package/src/icons/svg/check-in.svg +32 -32
  116. package/src/icons/svg/dark.svg +4 -4
  117. package/src/icons/svg/github.svg +4 -4
  118. package/src/icons/svg/light.svg +4 -4
  119. package/src/icons/svg/link.svg +4 -4
  120. package/src/icons/svgo.yml +22 -22
  121. package/src/layout/GridView/index.vue +16 -16
  122. package/src/layout/PageLayout.vue +9 -9
  123. package/src/layout/SingleLayout.vue +9 -9
  124. package/src/locales/en-US.json +128 -128
  125. package/src/locales/zh-CN.json +128 -128
  126. package/src/logic/LogicRunner.ts +67 -67
  127. package/src/logic/TestLogic.ts +13 -13
  128. package/src/logic/plugins/common/DateTools.ts +35 -35
  129. package/src/logic/plugins/common/VueTools.ts +30 -30
  130. package/src/logic/plugins/index.ts +7 -7
  131. package/src/main.ts +44 -44
  132. package/src/plugins/AppData.ts +38 -38
  133. package/src/plugins/GetLoginInfoService.ts +10 -10
  134. package/src/plugins/collectIcons.ts +10 -0
  135. package/src/plugins/index.ts +11 -11
  136. package/src/router/README.md +8 -8
  137. package/src/router/guards.ts +59 -59
  138. package/src/router/index.ts +35 -35
  139. package/src/router/invoiceRoutes.ts +33 -33
  140. package/src/router/routes.ts +341 -177
  141. package/src/router/types.ts +7 -7
  142. package/src/services/api/Login.ts +6 -6
  143. package/src/services/api/common.ts +109 -109
  144. package/src/services/api/index.ts +7 -7
  145. package/src/services/api/manage.ts +8 -8
  146. package/src/services/api/search.ts +16 -16
  147. package/src/services/api/user.ts +17 -17
  148. package/src/services/restTools.ts +56 -56
  149. package/src/services/v3Api.ts +147 -147
  150. package/src/stores/index.ts +11 -11
  151. package/src/stores/modules/counter.ts +19 -19
  152. package/src/stores/modules/routeCache.ts +23 -23
  153. package/src/stores/modules/setting.ts +76 -76
  154. package/src/stores/modules/user.ts +235 -235
  155. package/src/stores/mutation-type.ts +7 -7
  156. package/src/styles/app.less +36 -36
  157. package/src/styles/login.less +109 -109
  158. package/src/styles/var.less +16 -16
  159. package/src/types/env.d.ts +16 -16
  160. package/src/types/settings.ts +1 -1
  161. package/src/types/vue-router.d.ts +9 -9
  162. package/src/utils/Storage.ts +124 -124
  163. package/src/utils/authority-utils.ts +84 -84
  164. package/src/utils/common.ts +41 -41
  165. package/src/utils/crypto.ts +39 -39
  166. package/src/utils/dataUtil.ts +42 -42
  167. package/src/utils/dictUtil.ts +52 -52
  168. package/src/utils/http/index.ts +199 -199
  169. package/src/utils/i18n.ts +72 -72
  170. package/src/utils/indexedDB.ts +195 -195
  171. package/src/utils/inline-px-to-vw.ts +28 -28
  172. package/src/utils/mobileUtil.ts +34 -34
  173. package/src/utils/progress.ts +19 -19
  174. package/src/utils/routerUtil.ts +271 -271
  175. package/src/utils/runEvalFunction.ts +13 -13
  176. package/src/utils/secureStorage.ts +71 -71
  177. package/src/utils/set-page-title.ts +5 -5
  178. package/src/utils/validate.ts +6 -6
  179. package/src/utils/wechatUtil.ts +9 -9
  180. package/src/views/chat/index.vue +153 -153
  181. package/src/views/common/LoadError.vue +63 -63
  182. package/src/views/common/NotFound.vue +67 -67
  183. package/src/views/component/EvaluateRecordView/index.vue +40 -40
  184. package/src/views/component/IconifyView/index.vue +504 -507
  185. package/src/views/component/UserDetailView/UserDetailPage.vue +77 -0
  186. package/src/views/component/UserDetailView/index.vue +224 -0
  187. package/src/views/component/XCellDetailView/index.vue +217 -217
  188. package/src/views/component/XCellListView/index.vue +108 -157
  189. package/src/views/component/XFormAppraiseView/index.vue +174 -174
  190. package/src/views/component/XFormGroupView/index.vue +78 -82
  191. package/src/views/component/XFormView/index.vue +27 -27
  192. package/src/views/component/XOlMapView/XLocationPicker/index.vue +118 -118
  193. package/src/views/component/XOlMapView/index.vue +434 -434
  194. package/src/views/component/XOlMapView/testData.ts +64 -64
  195. package/src/views/component/XReportFormIframeView/index.vue +47 -47
  196. package/src/views/component/XReportFormView/index.vue +13 -13
  197. package/src/views/component/XReportGridView/index.vue +17 -17
  198. package/src/views/component/XRequestView/index.vue +234 -234
  199. package/src/views/component/XSignatureView/index.vue +50 -50
  200. package/src/views/component/index.vue +181 -177
  201. package/src/views/component/menu.vue +117 -117
  202. package/src/views/component/notice.vue +46 -46
  203. package/src/views/component/topNav.vue +36 -36
  204. package/src/views/invoiceShow/index.vue +61 -61
  205. package/src/views/user/login/ForgetPasswordForm.vue +94 -94
  206. package/src/views/user/login/LoginForm.vue +346 -346
  207. package/src/views/user/login/LoginTitle.vue +76 -76
  208. package/src/views/user/login/LoginWave.vue +109 -109
  209. package/src/views/user/login/index.vue +22 -22
  210. package/src/views/user/my/comm/ModifyPassword.vue +346 -346
  211. package/src/views/user/my/index.vue +340 -340
  212. package/src/views/userRecords/AbnormalAlarmRecords.vue +21 -0
  213. package/src/views/userRecords/CardReplacementRecords.vue +21 -0
  214. package/src/views/userRecords/ChangeRecords.vue +19 -0
  215. package/src/views/userRecords/CommandViewRecords.vue +20 -0
  216. package/src/views/userRecords/GasCompensationRecords.vue +20 -0
  217. package/src/views/userRecords/InstrumentCollectionRecords.vue +21 -0
  218. package/src/views/userRecords/MeterRecords.vue +20 -0
  219. package/src/views/userRecords/OperateRecords.vue +51 -0
  220. package/src/views/userRecords/OtherChargeRecords.vue +19 -0
  221. package/src/views/userRecords/PaymentRecords.vue +28 -0
  222. package/src/views/userRecords/PriceAdjustmentRecords.vue +19 -0
  223. package/src/views/userRecords/ReplacementRecords.vue +19 -0
  224. package/src/views/userRecords/SafetyRecords.vue +19 -0
  225. package/src/views/userRecords/TransactionRecords.vue +21 -0
  226. package/src/views/userRecords/TransferRecords.vue +19 -0
  227. package/src/views/userRecords/operateRecordDetail/index.vue +316 -0
  228. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/AddUserDetail.vue +124 -0
  229. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/AdvanceDeliveryDetail.vue +88 -0
  230. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/AutoAccountsCancelDetail.vue +205 -0
  231. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/AutoAccountsDetail.vue +192 -0
  232. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/BankDkDetail.vue +192 -0
  233. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/BankPayDetail.vue +192 -0
  234. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/BlacklistDetail.vue +153 -0
  235. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/CancellationDetail.vue +101 -0
  236. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/CardMeterCenterCancelDetail.vue +127 -0
  237. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/CardMeterCenterDetail.vue +153 -0
  238. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/CardOverUserDetail.vue +153 -0
  239. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/ChangeMeterCancelDetail.vue +166 -0
  240. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/ChangeMeterDetail.vue +205 -0
  241. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/DisableManageDetail.vue +127 -0
  242. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/EnableManageDetail.vue +114 -0
  243. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/FaZheChangeDetail.vue +124 -0
  244. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/FeeDeductionDetail.vue +153 -0
  245. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/GasPriceChangeDetail.vue +126 -0
  246. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/InputtorChangeDetail.vue +126 -0
  247. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/IotMeterCenterCancelDetail.vue +114 -0
  248. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/IotMeterCenterDetail.vue +127 -0
  249. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/IotOpenDetail.vue +88 -0
  250. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/MachineCardDetail.vue +101 -0
  251. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/MachineMeterCenterCancelDetail.vue +218 -0
  252. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/MachineMeterCenterDetail.vue +153 -0
  253. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/OffGasAddGasDetail.vue +140 -0
  254. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/OtherChargeCancelDetail.vue +127 -0
  255. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/OtherChargeDetail.vue +114 -0
  256. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/OverUserChangeDetail.vue +127 -0
  257. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/ReBillDetail.vue +127 -0
  258. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/RefundDetail.vue +114 -0
  259. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/ReplaceCardManageCancelDetail.vue +127 -0
  260. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/ReplaceCardManageDetail.vue +114 -0
  261. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/SaleCardGasDetail.vue +140 -0
  262. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/TransferManageCancelDetail.vue +152 -0
  263. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/TransferManageDetail.vue +178 -0
  264. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/UserChangeDetail.vue +123 -0
  265. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/WechatPayDetail.vue +192 -0
  266. package/src/views/userRecords/types.ts +66 -0
  267. package/tsconfig.json +39 -39
  268. package/uno.config.ts +82 -78
  269. package/vite.config.ts +118 -118
  270. package/src/views/component/XFormGroupView/xformgroup222.vue +0 -97
@@ -1,340 +1,340 @@
1
- <script setup lang="ts">
2
- import useSettingStore from '@af-mobile-client-vue3/stores/modules/setting'
3
- import useUserStore from '@af-mobile-client-vue3/stores/modules/user'
4
- import { Dialog as vanDialog, Icon as vanIcon } from 'vant'
5
- import { ref } from 'vue'
6
- import { useRouter } from 'vue-router'
7
- import ModifyPassword from './comm/ModifyPassword.vue'
8
-
9
- const router = useRouter()
10
- const username = useUserStore().getUserInfo().name
11
- const fullnames = useUserStore().getLogin().f.resources.fullnames
12
-
13
- // 修改密码弹窗显示状态
14
- const showModifyPassword = ref(false)
15
- // 退出登录确认弹窗显示状态
16
- const showLogoutConfirm = ref(false)
17
-
18
- function exit_login() {
19
- showLogoutConfirm.value = true
20
- }
21
-
22
- function confirmLogout() {
23
- useUserStore().logout()
24
- showLogoutConfirm.value = false
25
- }
26
-
27
- function cancelLogout() {
28
- showLogoutConfirm.value = false
29
- }
30
-
31
- function goToAttendance() {
32
- router.push('/user/attendance')
33
- }
34
-
35
- function openModifyPassword() {
36
- showModifyPassword.value = true
37
- }
38
-
39
- const webMobileConfig = useSettingStore().getSetting()
40
- </script>
41
-
42
- <template>
43
- <main class="my_main">
44
- <!-- 顶部导航栏 -->
45
- <nav class="header_nav">
46
- <div class="header_content">
47
- <h1 class="main_title">
48
- 我的
49
- </h1>
50
- <!-- <div class="setting_section"> -->
51
- <!-- <van-icon name="setting-o" class="setting-icon" /> -->
52
- <!-- </div> -->
53
- </div>
54
- </nav>
55
-
56
- <!-- 主要内容区域 -->
57
- <div class="content">
58
- <!-- 用户信息卡片 -->
59
- <div class="user-card">
60
- <div class="user-info">
61
- <div class="avatar-wrap">
62
- <img alt="default-user-profile" class="avatar" src="../../../assets/common/default-user-profile.png">
63
- <div class="status-dot" />
64
- </div>
65
- <div class="user-detail">
66
- <h2 class="username">
67
- {{ username }}
68
- </h2>
69
- <p class="user-role">
70
- {{ fullnames }}
71
- </p>
72
- </div>
73
- </div>
74
- </div>
75
-
76
- <!-- 工作统计 -->
77
- <div class="stats-card">
78
- <div class="stats-grid">
79
- <div class="stat-item">
80
- <div class="stat-value">
81
- 0
82
- </div>
83
- <div class="stat-label">
84
- 待办任务
85
- </div>
86
- </div>
87
- <div class="stat-item">
88
- <div class="stat-value">
89
- 0
90
- </div>
91
- <div class="stat-label">
92
- 待办流程
93
- </div>
94
- </div>
95
- <div class="stat-item">
96
- <div class="stat-value">
97
- 0
98
- </div>
99
- <div class="stat-label">
100
- 新消息
101
- </div>
102
- </div>
103
- </div>
104
- </div>
105
-
106
- <!-- 功能列表 -->
107
- <div class="menu-card">
108
- <div class="menu-section">
109
- <h3 class="menu-title">
110
- 系统功能
111
- </h3>
112
- <div class="menu-list">
113
- <div v-if="webMobileConfig?.isAttendance" class="menu-item" @click="goToAttendance">
114
- <div class="menu-item-content">
115
- <van-icon name="user-o" class="menu-icon" />
116
- <span class="menu-text">考勤管理</span>
117
- </div>
118
- <van-icon name="arrow" class="menu-arrow" />
119
- </div>
120
- <div class="menu-item" @click="openModifyPassword">
121
- <div class="menu-item-content">
122
- <van-icon name="lock" class="menu-icon" />
123
- <span class="menu-text">修改密码</span>
124
- </div>
125
- <van-icon name="arrow" class="menu-arrow" />
126
- </div>
127
- <div class="menu-item" @click="exit_login">
128
- <div class="menu-item-content">
129
- <van-icon name="sign" class="menu-icon logout-icon" />
130
- <span class="menu-text">退出登录</span>
131
- </div>
132
- <van-icon name="arrow" class="menu-arrow" />
133
- </div>
134
- </div>
135
- </div>
136
- </div>
137
- </div>
138
-
139
- <!-- 修改密码弹窗 -->
140
- <ModifyPassword
141
- v-model:visible="showModifyPassword"
142
- />
143
-
144
- <!-- 退出登录确认弹窗 -->
145
- <van-dialog
146
- v-model:show="showLogoutConfirm"
147
- title="确认退出"
148
- message="确定要退出登录吗?"
149
- show-cancel-button
150
- confirm-button-text="确认退出"
151
- cancel-button-text="取消"
152
- @confirm="confirmLogout"
153
- @cancel="cancelLogout"
154
- />
155
- </main>
156
- </template>
157
-
158
- <style scoped lang="less">
159
- .my_main {
160
- min-height: 100vh;
161
- background-color: #f7f8fa;
162
-
163
- // 顶部导航栏
164
- .header_nav {
165
- background-color: #fff;
166
- padding: 0 16px;
167
- box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
168
- position: relative;
169
- z-index: 50;
170
-
171
- .header_content {
172
- display: flex;
173
- justify-content: space-between;
174
- align-items: center;
175
- height: 56px;
176
-
177
- .main_title {
178
- font-size: 1.25rem;
179
- font-weight: 600;
180
- color: #333;
181
- margin: 0;
182
- }
183
-
184
- .setting_section {
185
- padding: 8px;
186
- cursor: pointer;
187
-
188
- .setting-icon {
189
- font-size: 20px;
190
- color: #666;
191
- }
192
- }
193
- }
194
- }
195
-
196
- .content {
197
- padding: 16px;
198
-
199
- // 用户信息卡片
200
- .user-card {
201
- background-color: #fff;
202
- border-radius: 8px;
203
- padding: 16px;
204
- margin-bottom: 16px;
205
-
206
- .user-info {
207
- display: flex;
208
- align-items: center;
209
-
210
- .avatar-wrap {
211
- position: relative;
212
- margin-right: 16px;
213
-
214
- .avatar {
215
- width: 80px;
216
- height: 80px;
217
- border-radius: 50%;
218
- object-fit: cover;
219
- }
220
-
221
- .status-dot {
222
- position: absolute;
223
- bottom: 2px;
224
- right: 2px;
225
- width: 16px;
226
- height: 16px;
227
- border-radius: 50%;
228
- background-color: #10b981;
229
- border: 2px solid #fff;
230
- }
231
- }
232
-
233
- .user-detail {
234
- .username {
235
- font-size: 20px;
236
- font-weight: 600;
237
- color: #333;
238
- margin: 0 0 4px 0;
239
- }
240
-
241
- .user-role {
242
- font-size: 14px;
243
- color: #666;
244
- margin: 0;
245
- }
246
- }
247
- }
248
- }
249
-
250
- // 工作统计卡片
251
- .stats-card {
252
- background-color: #fff;
253
- border-radius: 8px;
254
- padding: 16px;
255
- margin-bottom: 16px;
256
-
257
- .stats-grid {
258
- display: grid;
259
- grid-template-columns: repeat(3, 1fr);
260
- gap: 16px;
261
- text-align: center;
262
-
263
- .stat-item {
264
- .stat-value {
265
- font-size: 24px;
266
- font-weight: 600;
267
- color: #3b82f6;
268
- margin-bottom: 4px;
269
- }
270
-
271
- .stat-label {
272
- font-size: 14px;
273
- color: #666;
274
- }
275
- }
276
- }
277
- }
278
-
279
- // 功能列表卡片
280
- .menu-card {
281
- background-color: #fff;
282
- border-radius: 8px;
283
- overflow: hidden;
284
-
285
- .menu-section {
286
- padding: 16px;
287
-
288
- .menu-title {
289
- font-size: 14px;
290
- font-weight: 500;
291
- color: #666;
292
- margin-bottom: 12px;
293
- }
294
-
295
- .menu-list {
296
- .menu-item {
297
- display: flex;
298
- align-items: center;
299
- justify-content: space-between;
300
- padding: 12px;
301
- background-color: #f7f8fa;
302
- border-radius: 8px;
303
- margin-bottom: 8px;
304
- cursor: pointer;
305
-
306
- &:last-child {
307
- margin-bottom: 0;
308
- }
309
-
310
- .menu-item-content {
311
- display: flex;
312
- align-items: center;
313
- gap: 12px;
314
-
315
- .menu-icon {
316
- font-size: 24px;
317
- color: #3b82f6;
318
-
319
- &.logout-icon {
320
- color: #ef4444;
321
- }
322
- }
323
-
324
- .menu-text {
325
- font-size: 16px;
326
- color: #333;
327
- }
328
- }
329
-
330
- .menu-arrow {
331
- color: #999;
332
- font-size: 16px;
333
- }
334
- }
335
- }
336
- }
337
- }
338
- }
339
- }
340
- </style>
1
+ <script setup lang="ts">
2
+ import useSettingStore from '@af-mobile-client-vue3/stores/modules/setting'
3
+ import useUserStore from '@af-mobile-client-vue3/stores/modules/user'
4
+ import { Dialog as vanDialog, Icon as vanIcon } from 'vant'
5
+ import { ref } from 'vue'
6
+ import { useRouter } from 'vue-router'
7
+ import ModifyPassword from './comm/ModifyPassword.vue'
8
+
9
+ const router = useRouter()
10
+ const username = useUserStore().getUserInfo().name
11
+ const fullnames = useUserStore().getLogin().f.resources.fullnames
12
+
13
+ // 修改密码弹窗显示状态
14
+ const showModifyPassword = ref(false)
15
+ // 退出登录确认弹窗显示状态
16
+ const showLogoutConfirm = ref(false)
17
+
18
+ function exit_login() {
19
+ showLogoutConfirm.value = true
20
+ }
21
+
22
+ function confirmLogout() {
23
+ useUserStore().logout()
24
+ showLogoutConfirm.value = false
25
+ }
26
+
27
+ function cancelLogout() {
28
+ showLogoutConfirm.value = false
29
+ }
30
+
31
+ function goToAttendance() {
32
+ router.push('/user/attendance')
33
+ }
34
+
35
+ function openModifyPassword() {
36
+ showModifyPassword.value = true
37
+ }
38
+
39
+ const webMobileConfig = useSettingStore().getSetting()
40
+ </script>
41
+
42
+ <template>
43
+ <main class="my_main">
44
+ <!-- 顶部导航栏 -->
45
+ <nav class="header_nav">
46
+ <div class="header_content">
47
+ <h1 class="main_title">
48
+ 我的
49
+ </h1>
50
+ <!-- <div class="setting_section"> -->
51
+ <!-- <van-icon name="setting-o" class="setting-icon" /> -->
52
+ <!-- </div> -->
53
+ </div>
54
+ </nav>
55
+
56
+ <!-- 主要内容区域 -->
57
+ <div class="content">
58
+ <!-- 用户信息卡片 -->
59
+ <div class="user-card">
60
+ <div class="user-info">
61
+ <div class="avatar-wrap">
62
+ <img alt="default-user-profile" class="avatar" src="../../../assets/common/default-user-profile.png">
63
+ <div class="status-dot" />
64
+ </div>
65
+ <div class="user-detail">
66
+ <h2 class="username">
67
+ {{ username }}
68
+ </h2>
69
+ <p class="user-role">
70
+ {{ fullnames }}
71
+ </p>
72
+ </div>
73
+ </div>
74
+ </div>
75
+
76
+ <!-- 工作统计 -->
77
+ <div class="stats-card">
78
+ <div class="stats-grid">
79
+ <div class="stat-item">
80
+ <div class="stat-value">
81
+ 0
82
+ </div>
83
+ <div class="stat-label">
84
+ 待办任务
85
+ </div>
86
+ </div>
87
+ <div class="stat-item">
88
+ <div class="stat-value">
89
+ 0
90
+ </div>
91
+ <div class="stat-label">
92
+ 待办流程
93
+ </div>
94
+ </div>
95
+ <div class="stat-item">
96
+ <div class="stat-value">
97
+ 0
98
+ </div>
99
+ <div class="stat-label">
100
+ 新消息
101
+ </div>
102
+ </div>
103
+ </div>
104
+ </div>
105
+
106
+ <!-- 功能列表 -->
107
+ <div class="menu-card">
108
+ <div class="menu-section">
109
+ <h3 class="menu-title">
110
+ 系统功能
111
+ </h3>
112
+ <div class="menu-list">
113
+ <div v-if="webMobileConfig?.isAttendance" class="menu-item" @click="goToAttendance">
114
+ <div class="menu-item-content">
115
+ <van-icon name="user-o" class="menu-icon" />
116
+ <span class="menu-text">考勤管理</span>
117
+ </div>
118
+ <van-icon name="arrow" class="menu-arrow" />
119
+ </div>
120
+ <div class="menu-item" @click="openModifyPassword">
121
+ <div class="menu-item-content">
122
+ <van-icon name="lock" class="menu-icon" />
123
+ <span class="menu-text">修改密码</span>
124
+ </div>
125
+ <van-icon name="arrow" class="menu-arrow" />
126
+ </div>
127
+ <div class="menu-item" @click="exit_login">
128
+ <div class="menu-item-content">
129
+ <van-icon name="sign" class="menu-icon logout-icon" />
130
+ <span class="menu-text">退出登录</span>
131
+ </div>
132
+ <van-icon name="arrow" class="menu-arrow" />
133
+ </div>
134
+ </div>
135
+ </div>
136
+ </div>
137
+ </div>
138
+
139
+ <!-- 修改密码弹窗 -->
140
+ <ModifyPassword
141
+ v-model:visible="showModifyPassword"
142
+ />
143
+
144
+ <!-- 退出登录确认弹窗 -->
145
+ <van-dialog
146
+ v-model:show="showLogoutConfirm"
147
+ title="确认退出"
148
+ message="确定要退出登录吗?"
149
+ show-cancel-button
150
+ confirm-button-text="确认退出"
151
+ cancel-button-text="取消"
152
+ @confirm="confirmLogout"
153
+ @cancel="cancelLogout"
154
+ />
155
+ </main>
156
+ </template>
157
+
158
+ <style scoped lang="less">
159
+ .my_main {
160
+ min-height: 100vh;
161
+ background-color: #f7f8fa;
162
+
163
+ // 顶部导航栏
164
+ .header_nav {
165
+ background-color: #fff;
166
+ padding: 0 16px;
167
+ box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
168
+ position: relative;
169
+ z-index: 50;
170
+
171
+ .header_content {
172
+ display: flex;
173
+ justify-content: space-between;
174
+ align-items: center;
175
+ height: 56px;
176
+
177
+ .main_title {
178
+ font-size: 1.25rem;
179
+ font-weight: 600;
180
+ color: #333;
181
+ margin: 0;
182
+ }
183
+
184
+ .setting_section {
185
+ padding: 8px;
186
+ cursor: pointer;
187
+
188
+ .setting-icon {
189
+ font-size: 20px;
190
+ color: #666;
191
+ }
192
+ }
193
+ }
194
+ }
195
+
196
+ .content {
197
+ padding: 16px;
198
+
199
+ // 用户信息卡片
200
+ .user-card {
201
+ background-color: #fff;
202
+ border-radius: 8px;
203
+ padding: 16px;
204
+ margin-bottom: 16px;
205
+
206
+ .user-info {
207
+ display: flex;
208
+ align-items: center;
209
+
210
+ .avatar-wrap {
211
+ position: relative;
212
+ margin-right: 16px;
213
+
214
+ .avatar {
215
+ width: 80px;
216
+ height: 80px;
217
+ border-radius: 50%;
218
+ object-fit: cover;
219
+ }
220
+
221
+ .status-dot {
222
+ position: absolute;
223
+ bottom: 2px;
224
+ right: 2px;
225
+ width: 16px;
226
+ height: 16px;
227
+ border-radius: 50%;
228
+ background-color: #10b981;
229
+ border: 2px solid #fff;
230
+ }
231
+ }
232
+
233
+ .user-detail {
234
+ .username {
235
+ font-size: 20px;
236
+ font-weight: 600;
237
+ color: #333;
238
+ margin: 0 0 4px 0;
239
+ }
240
+
241
+ .user-role {
242
+ font-size: 14px;
243
+ color: #666;
244
+ margin: 0;
245
+ }
246
+ }
247
+ }
248
+ }
249
+
250
+ // 工作统计卡片
251
+ .stats-card {
252
+ background-color: #fff;
253
+ border-radius: 8px;
254
+ padding: 16px;
255
+ margin-bottom: 16px;
256
+
257
+ .stats-grid {
258
+ display: grid;
259
+ grid-template-columns: repeat(3, 1fr);
260
+ gap: 16px;
261
+ text-align: center;
262
+
263
+ .stat-item {
264
+ .stat-value {
265
+ font-size: 24px;
266
+ font-weight: 600;
267
+ color: #3b82f6;
268
+ margin-bottom: 4px;
269
+ }
270
+
271
+ .stat-label {
272
+ font-size: 14px;
273
+ color: #666;
274
+ }
275
+ }
276
+ }
277
+ }
278
+
279
+ // 功能列表卡片
280
+ .menu-card {
281
+ background-color: #fff;
282
+ border-radius: 8px;
283
+ overflow: hidden;
284
+
285
+ .menu-section {
286
+ padding: 16px;
287
+
288
+ .menu-title {
289
+ font-size: 14px;
290
+ font-weight: 500;
291
+ color: #666;
292
+ margin-bottom: 12px;
293
+ }
294
+
295
+ .menu-list {
296
+ .menu-item {
297
+ display: flex;
298
+ align-items: center;
299
+ justify-content: space-between;
300
+ padding: 12px;
301
+ background-color: #f7f8fa;
302
+ border-radius: 8px;
303
+ margin-bottom: 8px;
304
+ cursor: pointer;
305
+
306
+ &:last-child {
307
+ margin-bottom: 0;
308
+ }
309
+
310
+ .menu-item-content {
311
+ display: flex;
312
+ align-items: center;
313
+ gap: 12px;
314
+
315
+ .menu-icon {
316
+ font-size: 24px;
317
+ color: #3b82f6;
318
+
319
+ &.logout-icon {
320
+ color: #ef4444;
321
+ }
322
+ }
323
+
324
+ .menu-text {
325
+ font-size: 16px;
326
+ color: #333;
327
+ }
328
+ }
329
+
330
+ .menu-arrow {
331
+ color: #999;
332
+ font-size: 16px;
333
+ }
334
+ }
335
+ }
336
+ }
337
+ }
338
+ }
339
+ }
340
+ </style>