feat: Add TokenRecords finance management system

- Created new finance application based on Vue Vben Admin
- Implemented transaction management, category management, and loan tracking
- Added person management for tracking financial relationships
- Integrated budget management and financial analytics
- Added data import/export functionality
- Implemented responsive design for mobile support
- Added comprehensive testing with Playwright

🤖 Generated with Claude Code

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
你的用户名
2025-08-06 20:09:48 +08:00
parent b93e22c45a
commit 4b4616de1e
193 changed files with 17756 additions and 16 deletions

135
pnpm-lock.yaml generated
View File

@@ -217,7 +217,7 @@ catalogs:
specifier: ^16.6.1
version: 16.6.1
echarts:
specifier: ^5.6.0
specifier: 5.6.0
version: 5.6.0
element-plus:
specifier: ^2.10.2
@@ -781,6 +781,84 @@ importers:
specifier: 'catalog:'
version: 0.10.0
apps/web-finance:
dependencies:
'@ant-design/icons-vue':
specifier: ^7.0.1
version: 7.0.1(vue@3.5.17(typescript@5.8.3))
'@types/uuid':
specifier: ^10.0.0
version: 10.0.0
'@vben/access':
specifier: workspace:*
version: link:../../packages/effects/access
'@vben/common-ui':
specifier: workspace:*
version: link:../../packages/effects/common-ui
'@vben/constants':
specifier: workspace:*
version: link:../../packages/constants
'@vben/hooks':
specifier: workspace:*
version: link:../../packages/effects/hooks
'@vben/icons':
specifier: workspace:*
version: link:../../packages/icons
'@vben/layouts':
specifier: workspace:*
version: link:../../packages/effects/layouts
'@vben/locales':
specifier: workspace:*
version: link:../../packages/locales
'@vben/plugins':
specifier: workspace:*
version: link:../../packages/effects/plugins
'@vben/preferences':
specifier: workspace:*
version: link:../../packages/preferences
'@vben/request':
specifier: workspace:*
version: link:../../packages/effects/request
'@vben/stores':
specifier: workspace:*
version: link:../../packages/stores
'@vben/styles':
specifier: workspace:*
version: link:../../packages/styles
'@vben/types':
specifier: workspace:*
version: link:../../packages/types
'@vben/utils':
specifier: workspace:*
version: link:../../packages/utils
'@vueuse/core':
specifier: 'catalog:'
version: 13.4.0(vue@3.5.17(typescript@5.8.3))
ant-design-vue:
specifier: 'catalog:'
version: 4.2.6(vue@3.5.17(typescript@5.8.3))
dayjs:
specifier: 'catalog:'
version: 1.11.13
echarts:
specifier: 'catalog:'
version: 5.6.0
pinia:
specifier: ^3.0.3
version: 3.0.3(typescript@5.8.3)(vue@3.5.17(typescript@5.8.3))
uuid:
specifier: ^11.1.0
version: 11.1.0
vue:
specifier: ^3.5.17
version: 3.5.17(typescript@5.8.3)
vue-echarts:
specifier: ^7.0.3
version: 7.0.3(@vue/runtime-core@3.5.17)(echarts@5.6.0)(vue@3.5.17(typescript@5.8.3))
vue-router:
specifier: 'catalog:'
version: 4.5.1(vue@3.5.17(typescript@5.8.3))
apps/web-naive:
dependencies:
'@vben/access':
@@ -2722,10 +2800,6 @@ packages:
peerDependencies:
'@babel/core': ^7.0.0-0
'@babel/runtime@7.27.0':
resolution: {integrity: sha512-VtPOkrdPHZsKc/clNqyi9WUA8TINkZ4cGk63UUE3u4pmB2k+ZMQRDuIOagv8UVd6j7k0T3+RRIb7beKTebNbcw==}
engines: {node: '>=6.9.0'}
'@babel/runtime@7.27.6':
resolution: {integrity: sha512-vbavdySgbTTrmFE+EsiqUTzlOr5bzlnJtUv9PynGCAKvfQqjIXbvFdumPM/GxMDfyuGMJaJAU6TO4zc1Jf1i8Q==}
engines: {node: '>=6.9.0'}
@@ -4758,6 +4832,9 @@ packages:
'@types/unist@3.0.3':
resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==}
'@types/uuid@10.0.0':
resolution: {integrity: sha512-7gqG38EyHgyP1S+7+xomFtL+ZNHcKv6DwNaCZmJmo1vgMugyF3TCnXVg4t1uk89mLNwnLtnY3TpOpCOyp1/xHQ==}
'@types/web-bluetooth@0.0.16':
resolution: {integrity: sha512-oh8q2Zc32S6gd/j50GowEjKLoOVOwHP/bWVjKJInBwQqdOYMdPrf1oVlelTlyfFK3CKxL1uahMDAr+vy8T7yMQ==}
@@ -9828,9 +9905,6 @@ packages:
regenerate@1.4.2:
resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==}
regenerator-runtime@0.14.1:
resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==}
regex-recursion@6.0.2:
resolution: {integrity: sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg==}
@@ -11257,6 +11331,17 @@ packages:
vue-component-type-helpers@2.2.12:
resolution: {integrity: sha512-YbGqHZ5/eW4SnkPNR44mKVc6ZKQoRs/Rux1sxC6rdwXb4qpbOSYfDr9DsTHolOTGmIKgM9j141mZbBeg05R1pw==}
vue-demi@0.13.11:
resolution: {integrity: sha512-IR8HoEEGM65YY3ZJYAjMlKygDQn25D5ajNFNoKh9RSDMQtlzCxtfQjdQgv9jjK+m3377SsJXY8ysq8kLCZL25A==}
engines: {node: '>=12'}
hasBin: true
peerDependencies:
'@vue/composition-api': ^1.0.0-rc.1
vue: ^3.5.17
peerDependenciesMeta:
'@vue/composition-api':
optional: true
vue-demi@0.14.10:
resolution: {integrity: sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==}
engines: {node: '>=12'}
@@ -11268,6 +11353,16 @@ packages:
'@vue/composition-api':
optional: true
vue-echarts@7.0.3:
resolution: {integrity: sha512-/jSxNwOsw5+dYAUcwSfkLwKPuzTQ0Cepz1LxCOpj2QcHrrmUa/Ql0eQqMmc1rTPQVrh2JQ29n2dhq75ZcHvRDw==}
peerDependencies:
'@vue/runtime-core': ^3.0.0
echarts: ^5.5.1
vue: ^3.5.17
peerDependenciesMeta:
'@vue/runtime-core':
optional: true
vue-eslint-parser@10.2.0:
resolution: {integrity: sha512-CydUvFOQKD928UzZhTp4pr2vWz1L+H99t7Pkln2QSPdvmURT0MoC4wUccfCnuEaihNsu9aYYyk+bep8rlfkUXw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
@@ -12620,10 +12715,6 @@ snapshots:
transitivePeerDependencies:
- supports-color
'@babel/runtime@7.27.0':
dependencies:
regenerator-runtime: 0.14.1
'@babel/runtime@7.27.6': {}
'@babel/template@7.27.0':
@@ -14812,6 +14903,8 @@ snapshots:
'@types/unist@3.0.3': {}
'@types/uuid@10.0.0': {}
'@types/web-bluetooth@0.0.16': {}
'@types/web-bluetooth@0.0.20': {}
@@ -15695,7 +15788,7 @@ snapshots:
dependencies:
'@ant-design/colors': 6.0.0
'@ant-design/icons-vue': 7.0.1(vue@3.5.17(typescript@5.8.3))
'@babel/runtime': 7.27.0
'@babel/runtime': 7.27.6
'@ctrl/tinycolor': 4.1.0
'@emotion/hash': 0.9.2
'@emotion/unitless': 0.8.1
@@ -20401,8 +20494,6 @@ snapshots:
regenerate@1.4.2: {}
regenerator-runtime@0.14.1: {}
regex-recursion@6.0.2:
dependencies:
regex-utilities: 2.3.0
@@ -22092,10 +22183,24 @@ snapshots:
vue-component-type-helpers@2.2.12: {}
vue-demi@0.13.11(vue@3.5.17(typescript@5.8.3)):
dependencies:
vue: 3.5.17(typescript@5.8.3)
vue-demi@0.14.10(vue@3.5.17(typescript@5.8.3)):
dependencies:
vue: 3.5.17(typescript@5.8.3)
vue-echarts@7.0.3(@vue/runtime-core@3.5.17)(echarts@5.6.0)(vue@3.5.17(typescript@5.8.3)):
dependencies:
echarts: 5.6.0
vue: 3.5.17(typescript@5.8.3)
vue-demi: 0.13.11(vue@3.5.17(typescript@5.8.3))
optionalDependencies:
'@vue/runtime-core': 3.5.17
transitivePeerDependencies:
- '@vue/composition-api'
vue-eslint-parser@10.2.0(eslint@9.30.1(jiti@2.4.2)):
dependencies:
debug: 4.4.0