af-mobile-client-vue3 1.2.59 → 1.3.2-2.1

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 (149) hide show
  1. package/.editorconfig +5 -34
  2. package/.env +1 -1
  3. package/.env.development +0 -3
  4. package/.env.production +1 -7
  5. package/CLAUDE.md +5 -0
  6. package/README.md +2 -1
  7. package/build/vite/index.ts +2 -12
  8. package/build/vite/optimize.ts +2 -2
  9. package/compress.js +36 -0
  10. package/package.json +37 -37
  11. package/postcss.config.ts +1 -1
  12. package/src/App.vue +4 -6
  13. package/src/assets/img/banner/appraise-banner-1.png +0 -0
  14. package/src/assets/img/banner/appraise-banner-2.png +0 -0
  15. package/src/components/core/BeautifulLoading/index.vue +1 -2
  16. package/src/components/core/ImageUploader/index.vue +3 -2
  17. package/src/components/core/NavBar/index.vue +24 -14
  18. package/src/components/core/Tabbar/index.vue +5 -3
  19. package/src/components/core/XGridDropOption/index.vue +7 -9
  20. package/src/components/core/XMultiSelect/index.vue +1 -1
  21. package/src/components/data/CardContainer/CardContainer.vue +118 -0
  22. package/src/components/data/CardContainer/CardHeader.vue +99 -0
  23. package/src/components/data/InfoDisplay/index.vue +132 -0
  24. package/src/components/data/UserDetail/api.ts +24 -0
  25. package/src/components/data/UserDetail/index.vue +620 -0
  26. package/src/components/data/UserDetail/recordEntries.ts +159 -0
  27. package/src/components/data/UserDetail/types.ts +26 -0
  28. package/src/components/data/XBadge/index.vue +2 -2
  29. package/src/components/data/XCellList/index.vue +76 -30
  30. package/src/components/data/XForm/index.vue +1 -1
  31. package/src/components/data/XFormGroup/doc/FormGroupDemo.vue +4 -4
  32. package/src/components/data/XFormGroup/doc/README.md +33 -20
  33. package/src/components/data/XFormGroup/index.vue +51 -35
  34. package/src/components/data/XFormItem/index.vue +13 -33
  35. package/src/components/data/XOlMap/README.md +61 -61
  36. package/src/components/data/XOlMap/XLocationPicker/index.vue +2 -1
  37. package/src/components/data/XReportForm/XReportFormJsonRender.vue +22 -22
  38. package/src/components/data/XReportForm/index.vue +23 -14
  39. package/src/components/data/XReportGrid/XAddReport/XAddReport.vue +1 -2
  40. package/src/components/data/XReportGrid/XAddReport/index.md +17 -16
  41. package/src/components/data/XReportGrid/XReport.vue +3 -3
  42. package/src/components/data/XReportGrid/XReportDesign.vue +13 -13
  43. package/src/components/data/XReportGrid/XReportDrawer/XReportDrawer.vue +1 -1
  44. package/src/components/data/XReportGrid/XReportJsonRender.vue +11 -11
  45. package/src/components/data/XReportGrid/XReportTrGroup.vue +3 -3
  46. package/src/components/data/XReportGrid/index.md +14 -10
  47. package/src/components/data/XSignature/index.vue +1 -2
  48. package/src/components/layout/NormalDataLayout/index.vue +2 -3
  49. package/src/config/routes.ts +6 -2
  50. package/src/constants/index.ts +2 -0
  51. package/src/font-style/font.css +1 -1
  52. package/src/hooks/useBoolean.ts +26 -0
  53. package/src/hooks/useLoading.ts +16 -0
  54. package/src/locales/en-US.json +52 -28
  55. package/src/locales/zh-CN.json +57 -33
  56. package/src/main.ts +0 -2
  57. package/src/plugins/collectIcons.ts +10 -0
  58. package/src/router/README.md +1 -1
  59. package/src/router/guards.ts +1 -1
  60. package/src/router/index.ts +1 -1
  61. package/src/router/routes.ts +176 -6
  62. package/src/router/types.ts +0 -2
  63. package/src/services/api/user.ts +17 -0
  64. package/src/stores/modules/setting.ts +2 -1
  65. package/src/styles/var.less +9 -0
  66. package/src/types/vue-router.d.ts +0 -2
  67. package/src/utils/mobileUtil.ts +2 -2
  68. package/src/utils/queryFormDefaultRangePicker.ts +57 -57
  69. package/src/utils/set-page-title.ts +3 -5
  70. package/src/views/common/LoadError.vue +1 -2
  71. package/src/views/common/NotFound.vue +2 -3
  72. package/src/views/component/IconifyView/index.vue +0 -3
  73. package/src/views/component/UserDetailView/UserDetailPage.vue +77 -0
  74. package/src/views/component/UserDetailView/index.vue +234 -0
  75. package/src/views/component/XCellListView/index.vue +24 -73
  76. package/src/views/component/XFormGroupView/index.vue +7 -11
  77. package/src/views/component/XFormView/index.vue +2 -2
  78. package/src/views/component/XOlMapView/testData.ts +1 -1
  79. package/src/views/component/index.vue +4 -0
  80. package/src/views/component/menu.vue +1 -1
  81. package/src/views/user/login/ForgetPasswordForm.vue +1 -1
  82. package/src/views/user/login/LoginForm.vue +4 -3
  83. package/src/views/user/login/LoginWave.vue +1 -1
  84. package/src/views/user/my/comm/ModifyPassword.vue +346 -0
  85. package/src/views/user/my/index.vue +440 -183
  86. package/src/views/user/register/index.vue +952 -0
  87. package/src/views/userRecords/AbnormalAlarmRecords.vue +21 -0
  88. package/src/views/userRecords/CardReplacementRecords.vue +21 -0
  89. package/src/views/userRecords/ChangeRecords.vue +19 -0
  90. package/src/views/userRecords/CommandViewRecords.vue +20 -0
  91. package/src/views/userRecords/GasCompensationRecords.vue +20 -0
  92. package/src/views/userRecords/InstrumentCollectionRecords.vue +21 -0
  93. package/src/views/userRecords/MeterRecords.vue +20 -0
  94. package/src/views/userRecords/OperateRecords.vue +51 -0
  95. package/src/views/userRecords/OtherChargeRecords.vue +19 -0
  96. package/src/views/userRecords/PaymentRecords.vue +28 -0
  97. package/src/views/userRecords/PriceAdjustmentRecords.vue +19 -0
  98. package/src/views/userRecords/ReplacementRecords.vue +19 -0
  99. package/src/views/userRecords/SafetyRecords.vue +19 -0
  100. package/src/views/userRecords/TransactionRecords.vue +21 -0
  101. package/src/views/userRecords/TransferRecords.vue +19 -0
  102. package/src/views/userRecords/operateRecordDetail/index.vue +316 -0
  103. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/AddUserDetail.vue +124 -0
  104. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/AdvanceDeliveryDetail.vue +88 -0
  105. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/AutoAccountsCancelDetail.vue +205 -0
  106. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/AutoAccountsDetail.vue +192 -0
  107. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/BankDkDetail.vue +192 -0
  108. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/BankPayDetail.vue +192 -0
  109. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/BlacklistDetail.vue +153 -0
  110. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/CancellationDetail.vue +101 -0
  111. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/CardMeterCenterCancelDetail.vue +127 -0
  112. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/CardMeterCenterDetail.vue +153 -0
  113. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/CardOverUserDetail.vue +153 -0
  114. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/ChangeMeterCancelDetail.vue +166 -0
  115. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/ChangeMeterDetail.vue +205 -0
  116. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/DisableManageDetail.vue +127 -0
  117. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/EnableManageDetail.vue +114 -0
  118. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/FaZheChangeDetail.vue +124 -0
  119. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/FeeDeductionDetail.vue +153 -0
  120. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/GasPriceChangeDetail.vue +126 -0
  121. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/InputtorChangeDetail.vue +126 -0
  122. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/IotMeterCenterCancelDetail.vue +114 -0
  123. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/IotMeterCenterDetail.vue +127 -0
  124. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/IotOpenDetail.vue +88 -0
  125. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/MachineCardDetail.vue +101 -0
  126. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/MachineMeterCenterCancelDetail.vue +218 -0
  127. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/MachineMeterCenterDetail.vue +153 -0
  128. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/OffGasAddGasDetail.vue +140 -0
  129. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/OtherChargeCancelDetail.vue +127 -0
  130. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/OtherChargeDetail.vue +114 -0
  131. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/OverUserChangeDetail.vue +127 -0
  132. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/ReBillDetail.vue +127 -0
  133. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/RefundDetail.vue +114 -0
  134. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/ReplaceCardManageCancelDetail.vue +127 -0
  135. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/ReplaceCardManageDetail.vue +114 -0
  136. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/SaleCardGasDetail.vue +140 -0
  137. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/TransferManageCancelDetail.vue +152 -0
  138. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/TransferManageDetail.vue +178 -0
  139. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/UserChangeDetail.vue +123 -0
  140. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/WechatPayDetail.vue +192 -0
  141. package/src/views/userRecords/types.ts +66 -0
  142. package/tsconfig.json +5 -8
  143. package/uno.config.ts +36 -1
  144. package/vite.config.ts +10 -3
  145. package/.env.envoiceShow +0 -7
  146. package/src/components/core/App/MicroAppView.vue +0 -59
  147. package/src/components/core/SvgIcon/index.vue +0 -61
  148. package/src/utils/local-storage.ts +0 -9
  149. package/src/views/component/XFormGroupView/xformgroup222.vue +0 -97
@@ -0,0 +1,346 @@
1
+ <script setup lang="ts">
2
+ import { modifyPassword } from '@af-mobile-client-vue3/services/api/user'
3
+ import { useUserStore } from '@af-mobile-client-vue3/stores/modules/user'
4
+ import { showDialog, showToast, Button as vanButton, Field as vanField, Form as vanForm, Icon as vanIcon, Popup as vanPopup } from 'vant'
5
+ import { reactive, ref, watch } from 'vue'
6
+ import { useRouter } from 'vue-router'
7
+
8
+ // 定义 props 和 emits
9
+ const props = defineProps<{
10
+ visible: boolean
11
+ }>()
12
+
13
+ const emit = defineEmits<{
14
+ (event: 'update:visible', value: boolean): void
15
+ }>()
16
+
17
+ const router = useRouter()
18
+ const userStore = useUserStore()
19
+
20
+ // 表单引用
21
+ const formRef = ref()
22
+
23
+ // 表单数据
24
+ const formData = reactive({
25
+ oldPassword: '',
26
+ newPassword: '',
27
+ confirmPassword: '',
28
+ })
29
+
30
+ // 密码显示状态
31
+ const showOldPassword = ref(false)
32
+ const showNewPassword = ref(false)
33
+ const showConfirmPassword = ref(false)
34
+
35
+ // 加载状态
36
+ const loading = ref(false)
37
+
38
+ // 密码强度验证正则
39
+ const strongPasswordRegex = /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,}$/
40
+
41
+ // 验证密码强度
42
+ function validatePasswordStrength(password: string): boolean {
43
+ return strongPasswordRegex.test(password)
44
+ }
45
+
46
+ // 验证确认密码
47
+ function validateConfirmPassword(value: string): boolean {
48
+ return value === formData.newPassword
49
+ }
50
+
51
+ // 表单验证规则
52
+ const rules = {
53
+ oldPassword: [
54
+ { required: true, message: '请输入旧密码' },
55
+ ],
56
+ newPassword: [
57
+ { required: true, message: '请输入新密码' },
58
+ {
59
+ validator: (value: string) => {
60
+ if (value && !validatePasswordStrength(value)) {
61
+ return '新密码必须包含大小写字母、数字和特殊字符,且长度不少于8位'
62
+ }
63
+ return true
64
+ },
65
+ },
66
+ ],
67
+ confirmPassword: [
68
+ { required: true, message: '请再次输入新密码' },
69
+ {
70
+ validator: (value: string) => {
71
+ if (value && !validateConfirmPassword(value)) {
72
+ return '两次密码输入不一致'
73
+ }
74
+ return true
75
+ },
76
+ },
77
+ ],
78
+ }
79
+
80
+ // 提交表单
81
+ async function handleSubmit() {
82
+ try {
83
+ loading.value = true
84
+
85
+ // 验证表单
86
+ await formRef.value?.validate()
87
+
88
+ // 调用修改密码API
89
+ const result = await handleModifyPassword({ data: {
90
+ ename: userStore.getUserInfo().username,
91
+ password: formData.oldPassword,
92
+ newpassword: formData.newPassword,
93
+ affirmpassword: formData.confirmPassword,
94
+ } })
95
+ if (result.success) {
96
+ showDialog({
97
+ title: '成功',
98
+ message: '修改密码成功,请重新登录',
99
+ confirmButtonText: '立即重新登录',
100
+ }).then(() => {
101
+ // 退出登录
102
+ userStore.logout()
103
+ // 跳转到登录页
104
+ router.push('/login')
105
+ })
106
+ }
107
+ else {
108
+ showToast(result.message || '修改密码失败')
109
+ }
110
+ }
111
+ catch (error) {
112
+ console.error('修改密码失败:', error)
113
+ showToast('修改密码失败,请检查输入信息')
114
+ }
115
+ finally {
116
+ loading.value = false
117
+ }
118
+ }
119
+
120
+ // 关闭弹窗
121
+ function closeModal() {
122
+ emit('update:visible', false)
123
+ }
124
+
125
+ // 修改密码API调用
126
+ async function handleModifyPassword(data: any) {
127
+ try {
128
+ const res = await modifyPassword(data)
129
+ if (res && res === 'true') {
130
+ return {
131
+ success: true,
132
+ message: '修改成功',
133
+ }
134
+ }
135
+ else {
136
+ return {
137
+ success: false,
138
+ message: '修改密码失败,请检查原始密码是否正确!',
139
+ }
140
+ }
141
+ }
142
+ catch (error: any) {
143
+ return {
144
+ success: false,
145
+ message: error?.message || '修改密码失败',
146
+ }
147
+ }
148
+ }
149
+
150
+ // 监听visible变化,重置表单
151
+ watch(() => props.visible, (newVal) => {
152
+ if (!newVal) {
153
+ // 弹窗关闭时重置表单
154
+ formData.oldPassword = ''
155
+ formData.newPassword = ''
156
+ formData.confirmPassword = ''
157
+ showOldPassword.value = false
158
+ showNewPassword.value = false
159
+ showConfirmPassword.value = false
160
+ }
161
+ })
162
+ </script>
163
+
164
+ <template>
165
+ <van-popup
166
+ :show="props.visible"
167
+ position="center"
168
+ :close-on-click-overlay="false"
169
+ round
170
+ class="modify-password-popup"
171
+ @update:show="emit('update:visible', $event)"
172
+ >
173
+ <div class="popup-content">
174
+ <!-- 标题 -->
175
+ <div class="popup-header">
176
+ <h3 class="popup-title">
177
+ 修改密码
178
+ </h3>
179
+ <van-icon name="cross" class="close-icon" @click="closeModal" />
180
+ </div>
181
+
182
+ <!-- 表单 -->
183
+ <van-form ref="formRef" class="password-form" @submit="handleSubmit">
184
+ <!-- 旧密码 -->
185
+ <van-field
186
+ v-model="formData.oldPassword"
187
+ name="oldPassword"
188
+ label="旧密码"
189
+ placeholder="请输入旧密码"
190
+ :type="showOldPassword ? 'text' : 'password'"
191
+ :rules="rules.oldPassword"
192
+ @click-right-icon="showOldPassword = !showOldPassword"
193
+ >
194
+ <template #right-icon>
195
+ <van-icon
196
+ :name="showOldPassword ? 'eye-o' : 'closed-eye'"
197
+ color="#666"
198
+ />
199
+ </template>
200
+ </van-field>
201
+
202
+ <!-- 新密码 -->
203
+ <van-field
204
+ v-model="formData.newPassword"
205
+ name="newPassword"
206
+ label="新密码"
207
+ placeholder="请输入新密码"
208
+ :type="showNewPassword ? 'text' : 'password'"
209
+ :rules="rules.newPassword"
210
+ @click-right-icon="showNewPassword = !showNewPassword"
211
+ >
212
+ <template #right-icon>
213
+ <van-icon
214
+ :name="showNewPassword ? 'eye-o' : 'closed-eye'"
215
+ color="#666"
216
+ />
217
+ </template>
218
+ </van-field>
219
+
220
+ <!-- 确认新密码 -->
221
+ <van-field
222
+ v-model="formData.confirmPassword"
223
+ name="confirmPassword"
224
+ label="确认新密码"
225
+ placeholder="请再次输入新密码"
226
+ :type="showConfirmPassword ? 'text' : 'password'"
227
+ :rules="rules.confirmPassword"
228
+ @click-right-icon="showConfirmPassword = !showConfirmPassword"
229
+ >
230
+ <template #right-icon>
231
+ <van-icon
232
+ :name="showConfirmPassword ? 'eye-o' : 'closed-eye'"
233
+ color="#666"
234
+ />
235
+ </template>
236
+ </van-field>
237
+
238
+ <!-- 按钮组 -->
239
+ <div class="form-buttons">
240
+ <van-button
241
+ plain
242
+ type="default"
243
+ size="large"
244
+ class="cancel-btn"
245
+ @click="closeModal"
246
+ >
247
+ 取消
248
+ </van-button>
249
+ <van-button
250
+ type="primary"
251
+ size="large"
252
+ native-type="submit"
253
+ :loading="loading"
254
+ class="submit-btn"
255
+ >
256
+ 确认修改
257
+ </van-button>
258
+ </div>
259
+ </van-form>
260
+ </div>
261
+ </van-popup>
262
+ </template>
263
+
264
+ <style scoped lang="less">
265
+ .modify-password-popup {
266
+ width: 90%;
267
+ max-width: 400px;
268
+
269
+ .popup-content {
270
+ padding: 20px;
271
+
272
+ .popup-header {
273
+ display: flex;
274
+ justify-content: space-between;
275
+ align-items: center;
276
+ margin-bottom: 20px;
277
+
278
+ .popup-title {
279
+ font-size: 18px;
280
+ font-weight: 600;
281
+ color: #333;
282
+ margin: 0;
283
+ }
284
+
285
+ .close-icon {
286
+ font-size: 20px;
287
+ color: #999;
288
+ cursor: pointer;
289
+ padding: 4px;
290
+
291
+ &:hover {
292
+ color: #666;
293
+ }
294
+ }
295
+ }
296
+
297
+ .password-form {
298
+ .form-buttons {
299
+ display: flex;
300
+ gap: 12px;
301
+ margin-top: 24px;
302
+
303
+ .cancel-btn,
304
+ .submit-btn {
305
+ flex: 1;
306
+ height: 44px;
307
+ border-radius: 8px;
308
+ font-size: 16px;
309
+ }
310
+
311
+ .cancel-btn {
312
+ border-color: #ddd;
313
+ color: #666;
314
+ }
315
+
316
+ .submit-btn {
317
+ background-color: #3b82f6;
318
+ border-color: #3b82f6;
319
+ }
320
+ }
321
+ }
322
+ }
323
+ }
324
+
325
+ // 覆盖vant默认样式
326
+ :deep(.van-field) {
327
+ padding: 12px 0;
328
+
329
+ .van-field__label {
330
+ color: #333;
331
+ font-weight: 500;
332
+ }
333
+
334
+ .van-field__control {
335
+ color: #333;
336
+ }
337
+
338
+ .van-field__right-icon {
339
+ padding: 4px;
340
+ }
341
+ }
342
+
343
+ :deep(.van-popup) {
344
+ border-radius: 12px;
345
+ }
346
+ </style>