af-mobile-client-vue3 1.3.15 → 1.3.17
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.
- package/.cursorrules +60 -60
- package/.editorconfig +9 -9
- package/.env +10 -10
- package/.env.development +1 -1
- package/.env.production +1 -1
- package/.node-version +1 -1
- package/.vscode/extensions.json +12 -12
- package/.vscode/settings.json +66 -66
- package/CLAUDE.md +189 -189
- package/README.md +182 -182
- package/af-example-mobile-vue-web.iml +9 -9
- package/build/vite/index.ts +98 -98
- package/build/vite/optimize.ts +34 -34
- package/build/vite/vconsole.ts +47 -47
- package/commitlint.config.ts +32 -32
- package/compress.js +36 -36
- package/eslint.config.ts +30 -30
- package/index.html +23 -23
- package/mock/data.ts +20 -20
- package/mock/index.ts +7 -7
- package/mock/modules/prose.mock.ts +13 -13
- package/mock/modules/user.mock.ts +152 -152
- package/mock/util.ts +19 -19
- package/netlify.toml +12 -12
- package/package.json +114 -114
- package/postcss.config.ts +27 -27
- package/public/favicon.svg +4 -4
- package/public/safari-pinned-tab.svg +4 -4
- package/scripts/verifyCommit.js +19 -19
- package/src/App.vue +79 -79
- package/src/api/mock/index.ts +30 -30
- package/src/api/user/index.ts +40 -40
- package/src/assets/img/user/login/background-shadow-1.svg +20 -20
- package/src/assets/img/user/login/logo-background.svg +20 -20
- package/src/bootstrap.ts +26 -26
- package/src/components/core/BeautifulLoading/index.vue +52 -52
- package/src/components/core/ImageUploader/index.vue +244 -244
- package/src/components/core/NavBar/index.vue +53 -53
- package/src/components/core/Tabbar/index.vue +32 -32
- package/src/components/core/Uploader/index.vue +124 -124
- package/src/components/core/XGridDropOption/index.vue +154 -154
- package/src/components/core/XMultiSelect/index.vue +183 -183
- package/src/components/core/XSelect/index.vue +149 -149
- package/src/components/data/{CardHeader → CardContainer}/CardContainer.vue +118 -118
- package/src/components/data/{CardHeader → CardContainer}/CardHeader.vue +99 -99
- package/src/components/data/InfoDisplay/index.vue +132 -132
- package/src/components/data/UserDetail/api.ts +24 -24
- package/src/components/data/UserDetail/index.vue +620 -620
- package/src/components/data/UserDetail/recordEntries.ts +159 -159
- package/src/components/data/UserDetail/types.ts +26 -26
- package/src/components/data/XBadge/index.vue +82 -82
- package/src/components/data/XCellDetail/index.vue +105 -105
- package/src/components/data/XCellList/XCellList.md +313 -313
- package/src/components/data/XCellList/index.vue +1110 -1075
- package/src/components/data/XCellListFilter/QrScanner/index.vue +207 -207
- package/src/components/data/XCellListFilter/QrScanner/startScanAnimation.ts +53 -53
- package/src/components/data/XCellListFilter/VpnRecognition/index.vue +119 -119
- package/src/components/data/XCellListFilter/index.vue +705 -705
- package/src/components/data/XForm/index.vue +659 -659
- package/src/components/data/XFormGroup/doc/DeviceForm.vue +122 -122
- package/src/components/data/XFormGroup/doc/FormGroupDemo.vue +56 -56
- package/src/components/data/XFormGroup/doc/README.md +286 -286
- package/src/components/data/XFormGroup/doc/UserForm.vue +102 -102
- package/src/components/data/XFormGroup/index.vue +240 -240
- package/src/components/data/XFormItem/index.vue +1310 -1310
- package/src/components/data/XOlMap/README.md +227 -227
- package/src/components/data/XOlMap/XLocationPicker/index.vue +226 -226
- package/src/components/data/XOlMap/index.vue +1490 -1490
- package/src/components/data/XOlMap/types.ts +149 -149
- package/src/components/data/XOlMap/utils/wgs84ToGcj02.js +154 -154
- package/src/components/data/XReportForm/DateTimeSecondsPicker.vue +208 -208
- package/src/components/data/XReportForm/XReportFormJsonRender.vue +220 -220
- package/src/components/data/XReportForm/index.vue +1393 -1393
- package/src/components/data/XReportGrid/XAddReport/XAddReport.vue +198 -198
- package/src/components/data/XReportGrid/XAddReport/index.js +3 -3
- package/src/components/data/XReportGrid/XAddReport/index.md +53 -53
- package/src/components/data/XReportGrid/XAddReport/index.ts +10 -10
- package/src/components/data/XReportGrid/XReport.vue +960 -960
- package/src/components/data/XReportGrid/XReportDemo.vue +33 -33
- package/src/components/data/XReportGrid/XReportDesign.vue +597 -597
- package/src/components/data/XReportGrid/XReportDrawer/XReportDrawer.vue +148 -148
- package/src/components/data/XReportGrid/XReportDrawer/index.js +3 -3
- package/src/components/data/XReportGrid/XReportDrawer/index.ts +10 -10
- package/src/components/data/XReportGrid/XReportJsonRender.vue +399 -399
- package/src/components/data/XReportGrid/XReportTrGroup.vue +592 -592
- package/src/components/data/XReportGrid/index.md +46 -46
- package/src/components/data/XReportGrid/print.js +184 -184
- package/src/components/data/XSignature/index.vue +284 -284
- package/src/components/data/XTag/index.vue +10 -10
- package/src/components/layout/NormalDataLayout/index.vue +69 -69
- package/src/components/layout/TabBarLayout/index.vue +40 -40
- package/src/composables/dark.ts +5 -5
- package/src/config/routes.ts +9 -9
- package/src/constants/index.ts +2 -2
- package/src/enums/requestEnum.ts +25 -25
- package/src/expression/ExpressionRunner.ts +28 -28
- package/src/expression/TestExpression.ts +510 -510
- package/src/expression/core/Delegate.ts +116 -116
- package/src/expression/core/Expression.ts +1359 -1359
- package/src/expression/core/Program.ts +985 -985
- package/src/expression/core/Token.ts +29 -29
- package/src/expression/enums/ExpressionType.ts +81 -81
- package/src/expression/enums/TokenType.ts +11 -11
- package/src/expression/exception/BreakWayException.ts +2 -2
- package/src/expression/exception/ContinueWayException.ts +2 -2
- package/src/expression/exception/ExpressionException.ts +29 -29
- package/src/expression/exception/ReturnWayException.ts +14 -14
- package/src/expression/exception/ServiceException.ts +22 -22
- package/src/expression/instances/JSONArray.ts +52 -52
- package/src/expression/instances/JSONObject.ts +118 -118
- package/src/expression/instances/LogicConsole.ts +31 -31
- package/src/font-style/font.css +4 -4
- package/src/hooks/useBoolean.ts +26 -26
- package/src/hooks/useCommon.ts +9 -9
- package/src/hooks/useLoading.ts +16 -16
- package/src/hooks/useLogin.ts +97 -97
- package/src/icons/svg/check-in.svg +32 -32
- package/src/icons/svg/dark.svg +4 -4
- package/src/icons/svg/github.svg +4 -4
- package/src/icons/svg/light.svg +4 -4
- package/src/icons/svg/link.svg +4 -4
- package/src/icons/svgo.yml +22 -22
- package/src/layout/GridView/index.vue +16 -16
- package/src/layout/PageLayout.vue +9 -9
- package/src/layout/SingleLayout.vue +9 -9
- package/src/locales/en-US.json +128 -128
- package/src/locales/zh-CN.json +128 -128
- package/src/logic/LogicRunner.ts +67 -67
- package/src/logic/TestLogic.ts +13 -13
- package/src/logic/plugins/common/DateTools.ts +35 -35
- package/src/logic/plugins/common/VueTools.ts +30 -30
- package/src/logic/plugins/index.ts +7 -7
- package/src/main.ts +44 -44
- package/src/plugins/AppData.ts +38 -38
- package/src/plugins/GetLoginInfoService.ts +10 -10
- package/src/plugins/collectIcons.ts +10 -10
- package/src/plugins/index.ts +11 -11
- package/src/router/README.md +8 -8
- package/src/router/guards.ts +59 -59
- package/src/router/index.ts +35 -35
- package/src/router/invoiceRoutes.ts +33 -33
- package/src/router/routes.ts +347 -341
- package/src/router/types.ts +7 -7
- package/src/services/api/Login.ts +6 -6
- package/src/services/api/common.ts +109 -109
- package/src/services/api/index.ts +7 -7
- package/src/services/api/manage.ts +8 -8
- package/src/services/api/search.ts +16 -16
- package/src/services/api/user.ts +17 -17
- package/src/services/restTools.ts +56 -56
- package/src/services/v3Api.ts +147 -147
- package/src/stores/index.ts +11 -11
- package/src/stores/modules/counter.ts +19 -19
- package/src/stores/modules/routeCache.ts +23 -23
- package/src/stores/modules/setting.ts +76 -76
- package/src/stores/modules/user.ts +235 -235
- package/src/stores/mutation-type.ts +7 -7
- package/src/styles/app.less +36 -36
- package/src/styles/login.less +109 -109
- package/src/styles/var.less +25 -16
- package/src/types/env.d.ts +16 -16
- package/src/types/settings.ts +1 -1
- package/src/types/vue-router.d.ts +9 -9
- package/src/utils/Storage.ts +124 -124
- package/src/utils/authority-utils.ts +84 -84
- package/src/utils/common.ts +41 -41
- package/src/utils/crypto.ts +39 -39
- package/src/utils/dataUtil.ts +42 -42
- package/src/utils/dictUtil.ts +52 -52
- package/src/utils/http/index.ts +199 -199
- package/src/utils/i18n.ts +72 -72
- package/src/utils/indexedDB.ts +195 -195
- package/src/utils/inline-px-to-vw.ts +28 -28
- package/src/utils/mobileUtil.ts +34 -34
- package/src/utils/progress.ts +19 -19
- package/src/utils/routerUtil.ts +271 -271
- package/src/utils/runEvalFunction.ts +13 -13
- package/src/utils/secureStorage.ts +71 -71
- package/src/utils/set-page-title.ts +5 -5
- package/src/utils/validate.ts +6 -6
- package/src/utils/wechatUtil.ts +9 -9
- package/src/views/chat/index.vue +153 -153
- package/src/views/common/LoadError.vue +63 -63
- package/src/views/common/NotFound.vue +67 -67
- package/src/views/component/EvaluateRecordView/index.vue +40 -40
- package/src/views/component/IconifyView/index.vue +504 -504
- package/src/views/component/UserDetailView/UserDetailPage.vue +77 -77
- package/src/views/component/UserDetailView/index.vue +234 -234
- package/src/views/component/XCellDetailView/index.vue +217 -217
- package/src/views/component/XCellListView/index.vue +157 -108
- package/src/views/component/XFormAppraiseView/index.vue +174 -174
- package/src/views/component/XFormGroupView/index.vue +82 -78
- package/src/views/component/XFormGroupView/xformgroup222.vue +97 -0
- package/src/views/component/XFormView/index.vue +27 -27
- package/src/views/component/XOlMapView/XLocationPicker/index.vue +118 -118
- package/src/views/component/XOlMapView/index.vue +434 -434
- package/src/views/component/XOlMapView/testData.ts +64 -64
- package/src/views/component/XReportFormIframeView/index.vue +47 -47
- package/src/views/component/XReportFormView/index.vue +13 -13
- package/src/views/component/XReportGridView/index.vue +17 -17
- package/src/views/component/XRequestView/index.vue +234 -234
- package/src/views/component/XSignatureView/index.vue +50 -50
- package/src/views/component/index.vue +181 -181
- package/src/views/component/menu.vue +117 -117
- package/src/views/component/notice.vue +46 -46
- package/src/views/component/topNav.vue +36 -36
- package/src/views/invoiceShow/index.vue +61 -61
- package/src/views/user/login/ForgetPasswordForm.vue +94 -94
- package/src/views/user/login/LoginForm.vue +346 -346
- package/src/views/user/login/LoginTitle.vue +76 -76
- package/src/views/user/login/LoginWave.vue +109 -109
- package/src/views/user/login/index.vue +22 -22
- package/src/views/user/my/comm/ModifyPassword.vue +346 -346
- package/src/views/user/my/index.vue +340 -340
- package/src/views/userRecords/AbnormalAlarmRecords.vue +21 -21
- package/src/views/userRecords/CardReplacementRecords.vue +21 -21
- package/src/views/userRecords/ChangeRecords.vue +19 -19
- package/src/views/userRecords/CommandViewRecords.vue +20 -20
- package/src/views/userRecords/GasCompensationRecords.vue +20 -20
- package/src/views/userRecords/InstrumentCollectionRecords.vue +21 -21
- package/src/views/userRecords/MeterRecords.vue +20 -20
- package/src/views/userRecords/OperateRecords.vue +51 -51
- package/src/views/userRecords/OtherChargeRecords.vue +19 -19
- package/src/views/userRecords/PaymentRecords.vue +28 -28
- package/src/views/userRecords/PriceAdjustmentRecords.vue +19 -19
- package/src/views/userRecords/ReplacementRecords.vue +19 -19
- package/src/views/userRecords/SafetyRecords.vue +19 -19
- package/src/views/userRecords/TransactionRecords.vue +21 -21
- package/src/views/userRecords/TransferRecords.vue +19 -19
- package/src/views/userRecords/operateRecordDetail/index.vue +316 -316
- package/src/views/userRecords/operateRecordDetail/operateRecordDetails/AddUserDetail.vue +124 -124
- package/src/views/userRecords/operateRecordDetail/operateRecordDetails/AdvanceDeliveryDetail.vue +88 -88
- package/src/views/userRecords/operateRecordDetail/operateRecordDetails/AutoAccountsCancelDetail.vue +205 -205
- package/src/views/userRecords/operateRecordDetail/operateRecordDetails/AutoAccountsDetail.vue +192 -192
- package/src/views/userRecords/operateRecordDetail/operateRecordDetails/BankDkDetail.vue +192 -192
- package/src/views/userRecords/operateRecordDetail/operateRecordDetails/BankPayDetail.vue +192 -192
- package/src/views/userRecords/operateRecordDetail/operateRecordDetails/BlacklistDetail.vue +153 -153
- package/src/views/userRecords/operateRecordDetail/operateRecordDetails/CancellationDetail.vue +101 -101
- package/src/views/userRecords/operateRecordDetail/operateRecordDetails/CardMeterCenterCancelDetail.vue +127 -127
- package/src/views/userRecords/operateRecordDetail/operateRecordDetails/CardMeterCenterDetail.vue +153 -153
- package/src/views/userRecords/operateRecordDetail/operateRecordDetails/CardOverUserDetail.vue +153 -153
- package/src/views/userRecords/operateRecordDetail/operateRecordDetails/ChangeMeterCancelDetail.vue +166 -166
- package/src/views/userRecords/operateRecordDetail/operateRecordDetails/ChangeMeterDetail.vue +205 -205
- package/src/views/userRecords/operateRecordDetail/operateRecordDetails/DisableManageDetail.vue +127 -127
- package/src/views/userRecords/operateRecordDetail/operateRecordDetails/EnableManageDetail.vue +114 -114
- package/src/views/userRecords/operateRecordDetail/operateRecordDetails/FaZheChangeDetail.vue +124 -124
- package/src/views/userRecords/operateRecordDetail/operateRecordDetails/FeeDeductionDetail.vue +153 -153
- package/src/views/userRecords/operateRecordDetail/operateRecordDetails/GasPriceChangeDetail.vue +126 -126
- package/src/views/userRecords/operateRecordDetail/operateRecordDetails/InputtorChangeDetail.vue +126 -126
- package/src/views/userRecords/operateRecordDetail/operateRecordDetails/IotMeterCenterCancelDetail.vue +114 -114
- package/src/views/userRecords/operateRecordDetail/operateRecordDetails/IotMeterCenterDetail.vue +127 -127
- package/src/views/userRecords/operateRecordDetail/operateRecordDetails/IotOpenDetail.vue +88 -88
- package/src/views/userRecords/operateRecordDetail/operateRecordDetails/MachineCardDetail.vue +101 -101
- package/src/views/userRecords/operateRecordDetail/operateRecordDetails/MachineMeterCenterCancelDetail.vue +218 -218
- package/src/views/userRecords/operateRecordDetail/operateRecordDetails/MachineMeterCenterDetail.vue +153 -153
- package/src/views/userRecords/operateRecordDetail/operateRecordDetails/OffGasAddGasDetail.vue +140 -140
- package/src/views/userRecords/operateRecordDetail/operateRecordDetails/OtherChargeCancelDetail.vue +127 -127
- package/src/views/userRecords/operateRecordDetail/operateRecordDetails/OtherChargeDetail.vue +114 -114
- package/src/views/userRecords/operateRecordDetail/operateRecordDetails/OverUserChangeDetail.vue +127 -127
- package/src/views/userRecords/operateRecordDetail/operateRecordDetails/ReBillDetail.vue +127 -127
- package/src/views/userRecords/operateRecordDetail/operateRecordDetails/RefundDetail.vue +114 -114
- package/src/views/userRecords/operateRecordDetail/operateRecordDetails/ReplaceCardManageCancelDetail.vue +127 -127
- package/src/views/userRecords/operateRecordDetail/operateRecordDetails/ReplaceCardManageDetail.vue +114 -114
- package/src/views/userRecords/operateRecordDetail/operateRecordDetails/SaleCardGasDetail.vue +140 -140
- package/src/views/userRecords/operateRecordDetail/operateRecordDetails/TransferManageCancelDetail.vue +152 -152
- package/src/views/userRecords/operateRecordDetail/operateRecordDetails/TransferManageDetail.vue +178 -178
- package/src/views/userRecords/operateRecordDetail/operateRecordDetails/UserChangeDetail.vue +123 -123
- package/src/views/userRecords/operateRecordDetail/operateRecordDetails/WechatPayDetail.vue +192 -192
- package/src/views/userRecords/types.ts +66 -66
- package/tsconfig.json +39 -39
- package/uno.config.ts +82 -82
- package/vite.config.ts +118 -118
- package/.claude/settings.local.json +0 -8
package/CLAUDE.md
CHANGED
|
@@ -1,189 +1,189 @@
|
|
|
1
|
-
# CLAUDE.md
|
|
2
|
-
|
|
3
|
-
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
|
|
4
|
-
|
|
5
|
-
## Project Overview
|
|
6
|
-
|
|
7
|
-
This is a Vue 3 mobile client application (`af-mobile-client-vue3`) built as a smart gas system (智慧燃气) mobile application. It serves as a micro-frontend main application with comprehensive business components and dynamic form capabilities.
|
|
8
|
-
|
|
9
|
-
## Development Commands
|
|
10
|
-
|
|
11
|
-
```bash
|
|
12
|
-
# Install dependencies
|
|
13
|
-
pnpm install
|
|
14
|
-
|
|
15
|
-
# Development server (with mock server on port 8086)
|
|
16
|
-
pnpm dev
|
|
17
|
-
|
|
18
|
-
# Build for production
|
|
19
|
-
pnpm build
|
|
20
|
-
|
|
21
|
-
# Build for development environment
|
|
22
|
-
pnpm build:dev
|
|
23
|
-
|
|
24
|
-
# Lint and type checking
|
|
25
|
-
pnpm lint
|
|
26
|
-
|
|
27
|
-
# Auto-fix linting issues
|
|
28
|
-
pnpm lint:fix
|
|
29
|
-
|
|
30
|
-
# Type checking only
|
|
31
|
-
pnpm typecheck
|
|
32
|
-
|
|
33
|
-
# Version release
|
|
34
|
-
pnpm release
|
|
35
|
-
```
|
|
36
|
-
|
|
37
|
-
## Technology Stack
|
|
38
|
-
|
|
39
|
-
- **Vue 3** with Composition API and `<script setup>` syntax
|
|
40
|
-
- **TypeScript** for type safety
|
|
41
|
-
- **Vite** as build tool (port 7190)
|
|
42
|
-
- **Vant 4** as primary UI component library
|
|
43
|
-
- **Pinia** for state management with persistence
|
|
44
|
-
- **pnpm** as package manager (requires Node.js >=20.19.0)
|
|
45
|
-
- **UnoCSS** for atomic CSS utilities
|
|
46
|
-
- **@micro-zoe/micro-app** for micro-frontend architecture
|
|
47
|
-
|
|
48
|
-
## Code Style & Standards
|
|
49
|
-
|
|
50
|
-
From `.cursorrules`:
|
|
51
|
-
|
|
52
|
-
- Use Composition API and `<script setup>` syntax
|
|
53
|
-
- Component names: PascalCase (e.g., `UserProfile`)
|
|
54
|
-
- Variables: camelCase (e.g., `userName`)
|
|
55
|
-
- Boolean variables: use `is/has/should` prefix (e.g., `isLoading`)
|
|
56
|
-
- Event handlers: use `handle` prefix (e.g., `handleSubmit`)
|
|
57
|
-
- CSS classes: kebab-case (e.g., `user-profile`)
|
|
58
|
-
- **Must explicitly import Vant components** - auto-import is disabled for this component library project
|
|
59
|
-
- Use `interface` for type definitions, `type` for unions/intersections
|
|
60
|
-
- Props must specify types
|
|
61
|
-
|
|
62
|
-
## Architecture
|
|
63
|
-
|
|
64
|
-
### Directory Structure
|
|
65
|
-
|
|
66
|
-
```
|
|
67
|
-
src/
|
|
68
|
-
├── components/
|
|
69
|
-
│ ├── core/ # Core UI components (NavBar, Tabbar, Uploader)
|
|
70
|
-
│ ├── data/ # Business data components
|
|
71
|
-
│ │ ├── XReportForm/ # Dynamic form with JSON configuration
|
|
72
|
-
│ │ ├── XReportGrid/ # Data grid with reporting
|
|
73
|
-
│ │ ├── XForm/ # General form components
|
|
74
|
-
│ │ └── XOlMap/ # OpenLayers map integration
|
|
75
|
-
│ └── layout/ # Layout components
|
|
76
|
-
├── stores/ # Pinia state management
|
|
77
|
-
├── utils/ # Utility functions
|
|
78
|
-
├── views/ # Page components
|
|
79
|
-
├── router/ # Vue Router configuration
|
|
80
|
-
└── api/ # API layer
|
|
81
|
-
```
|
|
82
|
-
|
|
83
|
-
### Key Business Components
|
|
84
|
-
|
|
85
|
-
**XReportForm Component** (`src/components/data/XReportForm/index.vue`):
|
|
86
|
-
|
|
87
|
-
- Dynamic form generation from JSON configuration
|
|
88
|
-
- Supports field types: `input`, `datePicker`, `timePicker`, `dateTimeSecondsPicker`, `curDateInput`, `signature`, `images`, `inputs`, `inputColumns`
|
|
89
|
-
- Built-in validation with custom error messages
|
|
90
|
-
- Slot-based extensibility for complex layouts
|
|
91
|
-
- Integration with file upload and signature capture
|
|
92
|
-
|
|
93
|
-
**XReportGrid Component**:
|
|
94
|
-
|
|
95
|
-
- Data grid with reporting capabilities
|
|
96
|
-
- Print functionality integration
|
|
97
|
-
- Design mode for form configuration
|
|
98
|
-
|
|
99
|
-
**XOlMap Component**:
|
|
100
|
-
|
|
101
|
-
- OpenLayers integration for GIS functionality
|
|
102
|
-
- Location picker with coordinate transformation
|
|
103
|
-
|
|
104
|
-
### State Management
|
|
105
|
-
|
|
106
|
-
- **Pinia stores** with persistence via `pinia-plugin-persistedstate`
|
|
107
|
-
- **User store**: Authentication, permissions, user data
|
|
108
|
-
- **Settings store**: Application configuration
|
|
109
|
-
- **Route cache store**: Performance optimization
|
|
110
|
-
|
|
111
|
-
### API Layer
|
|
112
|
-
|
|
113
|
-
- **Axios-based HTTP client** with interceptors
|
|
114
|
-
- **Request/Response transformers** for v3/v4 API compatibility
|
|
115
|
-
- **Automatic token management** and error handling
|
|
116
|
-
- **Mock server integration** for development
|
|
117
|
-
|
|
118
|
-
## Development Workflow
|
|
119
|
-
|
|
120
|
-
### Server Configuration
|
|
121
|
-
|
|
122
|
-
- Development server runs on port 7190
|
|
123
|
-
- Mock server runs on port 8086
|
|
124
|
-
- Multiple API proxy endpoints configured in `vite.config.ts`
|
|
125
|
-
|
|
126
|
-
### Build Process
|
|
127
|
-
|
|
128
|
-
- Code splitting: `third` (node_modules), `views` (business pages)
|
|
129
|
-
- Assets organized in `static/` directory with hashing
|
|
130
|
-
- CSS code splitting disabled for mobile optimization
|
|
131
|
-
- Legacy browser support via `@vitejs/plugin-legacy`
|
|
132
|
-
|
|
133
|
-
### Git Hooks
|
|
134
|
-
|
|
135
|
-
- Pre-commit: `pnpm lint-staged` (ESLint auto-fix)
|
|
136
|
-
- Commit message: `pnpm commitlint` (conventional commits)
|
|
137
|
-
|
|
138
|
-
## Micro-Frontend Integration
|
|
139
|
-
|
|
140
|
-
This is a main application for micro-frontend architecture:
|
|
141
|
-
|
|
142
|
-
- Uses `@micro-zoe/micro-app` for micro-app management
|
|
143
|
-
- Child apps register in `microApps.ts`
|
|
144
|
-
- Supports dynamic loading and routing
|
|
145
|
-
- Unmount function available at `window.unmount`
|
|
146
|
-
|
|
147
|
-
## Mobile-Specific Features
|
|
148
|
-
|
|
149
|
-
- **@vant/touch-emulator** for desktop development
|
|
150
|
-
- **postcss-mobile-forever** for viewport handling
|
|
151
|
-
- **vite-plugin-pwa** for PWA capabilities
|
|
152
|
-
- **VConsole** for mobile debugging
|
|
153
|
-
- Dark mode support throughout the application
|
|
154
|
-
|
|
155
|
-
## Common Patterns
|
|
156
|
-
|
|
157
|
-
### Adding New Field Types to XReportForm
|
|
158
|
-
|
|
159
|
-
1. Add type to `generateDefaultRequiredMessage()` function
|
|
160
|
-
2. Add case in `formatConfigToForm()` switch statement
|
|
161
|
-
3. Add template section in the component template
|
|
162
|
-
4. Follow existing patterns for validation and data binding
|
|
163
|
-
|
|
164
|
-
### Component Development
|
|
165
|
-
|
|
166
|
-
- Use `<script setup lang="ts">` syntax
|
|
167
|
-
- Explicitly import Vant components
|
|
168
|
-
- Define props with TypeScript interfaces
|
|
169
|
-
- Use `defineEmits` for events
|
|
170
|
-
- Follow existing component structure patterns
|
|
171
|
-
|
|
172
|
-
### API Integration
|
|
173
|
-
|
|
174
|
-
- Use the existing HTTP client in `src/utils/http/`
|
|
175
|
-
- Follow v3/v4 API patterns established in the codebase
|
|
176
|
-
- Handle errors consistently with existing patterns
|
|
177
|
-
|
|
178
|
-
## Testing & Quality
|
|
179
|
-
|
|
180
|
-
- **ESLint** with `@antfu/eslint-config`
|
|
181
|
-
- **TypeScript** strict mode
|
|
182
|
-
- **Vue TSC** for type checking
|
|
183
|
-
- **Commitlint** for commit message standards
|
|
184
|
-
- **Lint-staged** for pre-commit hooks
|
|
185
|
-
|
|
186
|
-
## 注意事项
|
|
187
|
-
|
|
188
|
-
- 此项目作为组件库项目 所以没有开启自动引入 不能自动引入 vue 中的 ref/compute 等
|
|
189
|
-
- 此项目为了统一业务项目使用,所以 使用 @af-mobile-client-vue3/ 表示 src 而不是 @/
|
|
1
|
+
# CLAUDE.md
|
|
2
|
+
|
|
3
|
+
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
|
|
4
|
+
|
|
5
|
+
## Project Overview
|
|
6
|
+
|
|
7
|
+
This is a Vue 3 mobile client application (`af-mobile-client-vue3`) built as a smart gas system (智慧燃气) mobile application. It serves as a micro-frontend main application with comprehensive business components and dynamic form capabilities.
|
|
8
|
+
|
|
9
|
+
## Development Commands
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
# Install dependencies
|
|
13
|
+
pnpm install
|
|
14
|
+
|
|
15
|
+
# Development server (with mock server on port 8086)
|
|
16
|
+
pnpm dev
|
|
17
|
+
|
|
18
|
+
# Build for production
|
|
19
|
+
pnpm build
|
|
20
|
+
|
|
21
|
+
# Build for development environment
|
|
22
|
+
pnpm build:dev
|
|
23
|
+
|
|
24
|
+
# Lint and type checking
|
|
25
|
+
pnpm lint
|
|
26
|
+
|
|
27
|
+
# Auto-fix linting issues
|
|
28
|
+
pnpm lint:fix
|
|
29
|
+
|
|
30
|
+
# Type checking only
|
|
31
|
+
pnpm typecheck
|
|
32
|
+
|
|
33
|
+
# Version release
|
|
34
|
+
pnpm release
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
## Technology Stack
|
|
38
|
+
|
|
39
|
+
- **Vue 3** with Composition API and `<script setup>` syntax
|
|
40
|
+
- **TypeScript** for type safety
|
|
41
|
+
- **Vite** as build tool (port 7190)
|
|
42
|
+
- **Vant 4** as primary UI component library
|
|
43
|
+
- **Pinia** for state management with persistence
|
|
44
|
+
- **pnpm** as package manager (requires Node.js >=20.19.0)
|
|
45
|
+
- **UnoCSS** for atomic CSS utilities
|
|
46
|
+
- **@micro-zoe/micro-app** for micro-frontend architecture
|
|
47
|
+
|
|
48
|
+
## Code Style & Standards
|
|
49
|
+
|
|
50
|
+
From `.cursorrules`:
|
|
51
|
+
|
|
52
|
+
- Use Composition API and `<script setup>` syntax
|
|
53
|
+
- Component names: PascalCase (e.g., `UserProfile`)
|
|
54
|
+
- Variables: camelCase (e.g., `userName`)
|
|
55
|
+
- Boolean variables: use `is/has/should` prefix (e.g., `isLoading`)
|
|
56
|
+
- Event handlers: use `handle` prefix (e.g., `handleSubmit`)
|
|
57
|
+
- CSS classes: kebab-case (e.g., `user-profile`)
|
|
58
|
+
- **Must explicitly import Vant components** - auto-import is disabled for this component library project
|
|
59
|
+
- Use `interface` for type definitions, `type` for unions/intersections
|
|
60
|
+
- Props must specify types
|
|
61
|
+
|
|
62
|
+
## Architecture
|
|
63
|
+
|
|
64
|
+
### Directory Structure
|
|
65
|
+
|
|
66
|
+
```
|
|
67
|
+
src/
|
|
68
|
+
├── components/
|
|
69
|
+
│ ├── core/ # Core UI components (NavBar, Tabbar, Uploader)
|
|
70
|
+
│ ├── data/ # Business data components
|
|
71
|
+
│ │ ├── XReportForm/ # Dynamic form with JSON configuration
|
|
72
|
+
│ │ ├── XReportGrid/ # Data grid with reporting
|
|
73
|
+
│ │ ├── XForm/ # General form components
|
|
74
|
+
│ │ └── XOlMap/ # OpenLayers map integration
|
|
75
|
+
│ └── layout/ # Layout components
|
|
76
|
+
├── stores/ # Pinia state management
|
|
77
|
+
├── utils/ # Utility functions
|
|
78
|
+
├── views/ # Page components
|
|
79
|
+
├── router/ # Vue Router configuration
|
|
80
|
+
└── api/ # API layer
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
### Key Business Components
|
|
84
|
+
|
|
85
|
+
**XReportForm Component** (`src/components/data/XReportForm/index.vue`):
|
|
86
|
+
|
|
87
|
+
- Dynamic form generation from JSON configuration
|
|
88
|
+
- Supports field types: `input`, `datePicker`, `timePicker`, `dateTimeSecondsPicker`, `curDateInput`, `signature`, `images`, `inputs`, `inputColumns`
|
|
89
|
+
- Built-in validation with custom error messages
|
|
90
|
+
- Slot-based extensibility for complex layouts
|
|
91
|
+
- Integration with file upload and signature capture
|
|
92
|
+
|
|
93
|
+
**XReportGrid Component**:
|
|
94
|
+
|
|
95
|
+
- Data grid with reporting capabilities
|
|
96
|
+
- Print functionality integration
|
|
97
|
+
- Design mode for form configuration
|
|
98
|
+
|
|
99
|
+
**XOlMap Component**:
|
|
100
|
+
|
|
101
|
+
- OpenLayers integration for GIS functionality
|
|
102
|
+
- Location picker with coordinate transformation
|
|
103
|
+
|
|
104
|
+
### State Management
|
|
105
|
+
|
|
106
|
+
- **Pinia stores** with persistence via `pinia-plugin-persistedstate`
|
|
107
|
+
- **User store**: Authentication, permissions, user data
|
|
108
|
+
- **Settings store**: Application configuration
|
|
109
|
+
- **Route cache store**: Performance optimization
|
|
110
|
+
|
|
111
|
+
### API Layer
|
|
112
|
+
|
|
113
|
+
- **Axios-based HTTP client** with interceptors
|
|
114
|
+
- **Request/Response transformers** for v3/v4 API compatibility
|
|
115
|
+
- **Automatic token management** and error handling
|
|
116
|
+
- **Mock server integration** for development
|
|
117
|
+
|
|
118
|
+
## Development Workflow
|
|
119
|
+
|
|
120
|
+
### Server Configuration
|
|
121
|
+
|
|
122
|
+
- Development server runs on port 7190
|
|
123
|
+
- Mock server runs on port 8086
|
|
124
|
+
- Multiple API proxy endpoints configured in `vite.config.ts`
|
|
125
|
+
|
|
126
|
+
### Build Process
|
|
127
|
+
|
|
128
|
+
- Code splitting: `third` (node_modules), `views` (business pages)
|
|
129
|
+
- Assets organized in `static/` directory with hashing
|
|
130
|
+
- CSS code splitting disabled for mobile optimization
|
|
131
|
+
- Legacy browser support via `@vitejs/plugin-legacy`
|
|
132
|
+
|
|
133
|
+
### Git Hooks
|
|
134
|
+
|
|
135
|
+
- Pre-commit: `pnpm lint-staged` (ESLint auto-fix)
|
|
136
|
+
- Commit message: `pnpm commitlint` (conventional commits)
|
|
137
|
+
|
|
138
|
+
## Micro-Frontend Integration
|
|
139
|
+
|
|
140
|
+
This is a main application for micro-frontend architecture:
|
|
141
|
+
|
|
142
|
+
- Uses `@micro-zoe/micro-app` for micro-app management
|
|
143
|
+
- Child apps register in `microApps.ts`
|
|
144
|
+
- Supports dynamic loading and routing
|
|
145
|
+
- Unmount function available at `window.unmount`
|
|
146
|
+
|
|
147
|
+
## Mobile-Specific Features
|
|
148
|
+
|
|
149
|
+
- **@vant/touch-emulator** for desktop development
|
|
150
|
+
- **postcss-mobile-forever** for viewport handling
|
|
151
|
+
- **vite-plugin-pwa** for PWA capabilities
|
|
152
|
+
- **VConsole** for mobile debugging
|
|
153
|
+
- Dark mode support throughout the application
|
|
154
|
+
|
|
155
|
+
## Common Patterns
|
|
156
|
+
|
|
157
|
+
### Adding New Field Types to XReportForm
|
|
158
|
+
|
|
159
|
+
1. Add type to `generateDefaultRequiredMessage()` function
|
|
160
|
+
2. Add case in `formatConfigToForm()` switch statement
|
|
161
|
+
3. Add template section in the component template
|
|
162
|
+
4. Follow existing patterns for validation and data binding
|
|
163
|
+
|
|
164
|
+
### Component Development
|
|
165
|
+
|
|
166
|
+
- Use `<script setup lang="ts">` syntax
|
|
167
|
+
- Explicitly import Vant components
|
|
168
|
+
- Define props with TypeScript interfaces
|
|
169
|
+
- Use `defineEmits` for events
|
|
170
|
+
- Follow existing component structure patterns
|
|
171
|
+
|
|
172
|
+
### API Integration
|
|
173
|
+
|
|
174
|
+
- Use the existing HTTP client in `src/utils/http/`
|
|
175
|
+
- Follow v3/v4 API patterns established in the codebase
|
|
176
|
+
- Handle errors consistently with existing patterns
|
|
177
|
+
|
|
178
|
+
## Testing & Quality
|
|
179
|
+
|
|
180
|
+
- **ESLint** with `@antfu/eslint-config`
|
|
181
|
+
- **TypeScript** strict mode
|
|
182
|
+
- **Vue TSC** for type checking
|
|
183
|
+
- **Commitlint** for commit message standards
|
|
184
|
+
- **Lint-staged** for pre-commit hooks
|
|
185
|
+
|
|
186
|
+
## 注意事项
|
|
187
|
+
|
|
188
|
+
- 此项目作为组件库项目 所以没有开启自动引入 不能自动引入 vue 中的 ref/compute 等
|
|
189
|
+
- 此项目为了统一业务项目使用,所以 使用 @af-mobile-client-vue3/ 表示 src 而不是 @/
|