This commit is contained in:
oneao committed 2025-11-16 20:48:56 +08:00
1 parent c2c5cc92af
commit caed43a011
60 files changed
+1710 -1272

No files matched your search

+1 -1
View File
@@ -1,5 +1,5 @@
{
"symbol_url": "//at.alicdn.com/t/c/font_5056764_h6glhbjob2.js",
"symbol_url": "//at.alicdn.com/t/c/font_5056764_r43lrs790nk.js",
"use_typescript": true,
"save_dir": "./src/components/iconfont",
"trim_icon_prefix": "icon",
@@ -5,9 +5,16 @@ const { withNativeWind } = require('nativewind/metro')
/** @type {import('expo/metro-config').MetroConfig} */
const config = getDefaultConfig(__dirname)
config.transformer = {
...config.transformer,
babelTransformerPath: require.resolve('react-native-svg-transformer/expo'),
}
config.resolver = {
...config.resolver,
unstable_enablePackageExports: true,
assetExts: config.resolver.assetExts.filter(ext => ext !== 'svg'),
sourceExts: [...config.resolver.sourceExts, 'svg'],
}
module.exports = withNativeWind(config, { input: './src/styles/global.css' })
+5 -3
View File
@@ -18,6 +18,7 @@
"@react-native-async-storage/async-storage": "2.2.0",
"@react-native-community/datetimepicker": "8.4.4",
"@react-native-segmented-control/segmented-control": "2.5.7",
"@yz1311/react-native-wheel-picker": "^0.4.5",
"alova": "^3.3.4",
"axios": "^1.13.2",
"big.js": "^7.0.1",
@@ -32,22 +33,22 @@
"expo-splash-screen": "~31.0.10",
"expo-status-bar": "~3.0.8",
"lucide-react-native": "^0.510.0",
"moment": "^2.30.1",
"nativewind": "^4.2.1",
"react": "19.1.0",
"react-dom": "19.1.0",
"react-native": "0.81.5",
"react-native-css-interop": "^0.2.1",
"react-native-dates-picker": "^0.2.0",
"react-native-drawer-layout": "^4.2.0",
"react-native-gesture-handler": "~2.28.0",
"react-native-keyboard-controller": "1.18.5",
"react-native-modal-datetime-picker": "^18.0.0",
"react-native-modal": "14.0.0-rc.1",
"react-native-reanimated": "~4.1.3",
"react-native-safe-area-context": "~5.6.1",
"react-native-screens": "~4.16.0",
"react-native-svg": "15.12.1",
"react-native-web": "^0.21.0",
"react-native-worklets": "0.5.1",
"tailwind-merge": "^3.4.0",
"zustand": "^5.0.8"
},
"devDependencies": {
@@ -57,6 +58,7 @@
"babel-plugin-module-resolver": "^5.0.2",
"eslint": "^9.38.0",
"react-native-iconfont-cli": "^2.2.4",
"react-native-svg-transformer": "^1.5.2",
"tailwindcss": "^3.4.17",
"typescript": "~5.9.2"
}
+391 -54
View File
@@ -32,6 +32,9 @@ importers:
'@react-native-segmented-control/segmented-control':
specifier: 2.5.7
version: 2.5.7(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
'@yz1311/react-native-wheel-picker':
specifier: ^0.4.5
version: 0.4.5(deprecated-react-native-prop-types@5.0.0)(moment@2.30.1)(react-native-modal@14.0.0-rc.1(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))
alova:
specifier: ^3.3.4
version: 3.3.4
@@ -74,6 +77,9 @@ importers:
lucide-react-native:
specifier: ^0.510.0
version: 0.510.0(react-native-svg@15.12.1(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
moment:
specifier: ^2.30.1
version: 2.30.1
nativewind:
specifier: ^4.2.1
version: 4.2.1(react-native-reanimated@4.1.5(@babel/core@7.28.5)(react-native-worklets@0.5.1(@babel/core@7.28.5)(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native-safe-area-context@5.6.2(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native-svg@15.12.1(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)(tailwindcss@3.4.18(yaml@2.8.1))
@@ -89,21 +95,15 @@ importers:
react-native-css-interop:
specifier: ^0.2.1
version: 0.2.1(react-native-reanimated@4.1.5(@babel/core@7.28.5)(react-native-worklets@0.5.1(@babel/core@7.28.5)(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native-safe-area-context@5.6.2(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native-svg@15.12.1(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)(tailwindcss@3.4.18(yaml@2.8.1))
react-native-dates-picker:
specifier: ^0.2.0
version: 0.2.0(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
react-native-drawer-layout:
specifier: ^4.2.0
version: 4.2.0(react-native-gesture-handler@2.28.0(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native-reanimated@4.1.5(@babel/core@7.28.5)(react-native-worklets@0.5.1(@babel/core@7.28.5)(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
react-native-gesture-handler:
specifier: ~2.28.0
version: 2.28.0(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
react-native-keyboard-controller:
specifier: 1.18.5
version: 1.18.5(react-native-reanimated@4.1.5(@babel/core@7.28.5)(react-native-worklets@0.5.1(@babel/core@7.28.5)(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
react-native-modal-datetime-picker:
specifier: ^18.0.0
version: 18.0.0(@react-native-community/datetimepicker@8.4.4(expo@54.0.23)(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))
react-native-modal:
specifier: 14.0.0-rc.1
version: 14.0.0-rc.1(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
react-native-reanimated:
specifier: ~4.1.3
version: 4.1.5(@babel/core@7.28.5)(react-native-worklets@0.5.1(@babel/core@7.28.5)(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
@@ -122,6 +122,9 @@ importers:
react-native-worklets:
specifier: 0.5.1
version: 0.5.1(@babel/core@7.28.5)(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
tailwind-merge:
specifier: ^3.4.0
version: 3.4.0
zustand:
specifier: ^5.0.8
version: 5.0.8(@types/react@19.1.17)(react@19.1.0)(use-sync-external-store@1.6.0(react@19.1.0))
@@ -144,6 +147,9 @@ importers:
react-native-iconfont-cli:
specifier: ^2.2.4
version: 2.2.4(react-native-svg@15.12.1(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
react-native-svg-transformer:
specifier: ^1.5.2
version: 1.5.2(react-native-svg@15.12.1(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(typescript@5.9.3)
tailwindcss:
specifier: ^3.4.17
version: 3.4.18(yaml@2.8.1)
@@ -1676,6 +1682,9 @@ packages:
resolution: {integrity: sha512-fB7M1CMOCIUudTRuj7kzxIBTVw2KXnsgbQ6+4cbqSxo8NmRRhA0Ul4ZUzZj3rFd3VznTL4Brmocv1oiN0bWZ8w==}
engines: {node: '>= 20.19.4'}
'@react-native/normalize-colors@0.73.2':
resolution: {integrity: sha512-bRBcb2T+I88aG74LMVHaKms2p/T8aQd8+BZ7LuuzXlRfog1bMWWn/C5i0HVuvW4RPtXQYgIlGiXVDy9Ir1So/w==}
'@react-native/normalize-colors@0.74.89':
resolution: {integrity: sha512-qoMMXddVKVhZ8PA1AbUCk83trpd6N+1nF2A6k1i6LsQObyS92fELuk8kU/lQs6M7BsMHwqyLCpQJ1uFgNvIQXg==}
@@ -2024,9 +2033,87 @@ packages:
peerDependencies:
eslint: '>=9.0.0'
'@svgr/babel-plugin-add-jsx-attribute@8.0.0':
resolution: {integrity: sha512-b9MIk7yhdS1pMCZM8VeNfUlSKVRhsHZNMl5O9SfaX0l0t5wjdgu4IDzGB8bpnGBBOjGST3rRFVsaaEtI4W6f7g==}
engines: {node: '>=14'}
peerDependencies:
'@babel/core': ^7.0.0-0
'@svgr/babel-plugin-remove-jsx-attribute@8.0.0':
resolution: {integrity: sha512-BcCkm/STipKvbCl6b7QFrMh/vx00vIP63k2eM66MfHJzPr6O2U0jYEViXkHJWqXqQYjdeA9cuCl5KWmlwjDvbA==}
engines: {node: '>=14'}
peerDependencies:
'@babel/core': ^7.0.0-0
'@svgr/babel-plugin-remove-jsx-empty-expression@8.0.0':
resolution: {integrity: sha512-5BcGCBfBxB5+XSDSWnhTThfI9jcO5f0Ai2V24gZpG+wXF14BzwxxdDb4g6trdOux0rhibGs385BeFMSmxtS3uA==}
engines: {node: '>=14'}
peerDependencies:
'@babel/core': ^7.0.0-0
'@svgr/babel-plugin-replace-jsx-attribute-value@8.0.0':
resolution: {integrity: sha512-KVQ+PtIjb1BuYT3ht8M5KbzWBhdAjjUPdlMtpuw/VjT8coTrItWX6Qafl9+ji831JaJcu6PJNKCV0bp01lBNzQ==}
engines: {node: '>=14'}
peerDependencies:
'@babel/core': ^7.0.0-0
'@svgr/babel-plugin-svg-dynamic-title@8.0.0':
resolution: {integrity: sha512-omNiKqwjNmOQJ2v6ge4SErBbkooV2aAWwaPFs2vUY7p7GhVkzRkJ00kILXQvRhA6miHnNpXv7MRnnSjdRjK8og==}
engines: {node: '>=14'}
peerDependencies:
'@babel/core': ^7.0.0-0
'@svgr/babel-plugin-svg-em-dimensions@8.0.0':
resolution: {integrity: sha512-mURHYnu6Iw3UBTbhGwE/vsngtCIbHE43xCRK7kCw4t01xyGqb2Pd+WXekRRoFOBIY29ZoOhUCTEweDMdrjfi9g==}
engines: {node: '>=14'}
peerDependencies:
'@babel/core': ^7.0.0-0
'@svgr/babel-plugin-transform-react-native-svg@8.1.0':
resolution: {integrity: sha512-Tx8T58CHo+7nwJ+EhUwx3LfdNSG9R2OKfaIXXs5soiy5HtgoAEkDay9LIimLOcG8dJQH1wPZp/cnAv6S9CrR1Q==}
engines: {node: '>=14'}
peerDependencies:
'@babel/core': ^7.0.0-0
'@svgr/babel-plugin-transform-svg-component@8.0.0':
resolution: {integrity: sha512-DFx8xa3cZXTdb/k3kfPeaixecQLgKh5NVBMwD0AQxOzcZawK4oo1Jh9LbrcACUivsCA7TLG8eeWgrDXjTMhRmw==}
engines: {node: '>=12'}
peerDependencies:
'@babel/core': ^7.0.0-0
'@svgr/babel-preset@8.1.0':
resolution: {integrity: sha512-7EYDbHE7MxHpv4sxvnVPngw5fuR6pw79SkcrILHJ/iMpuKySNCl5W1qcwPEpU+LgyRXOaAFgH0KhwD18wwg6ug==}
engines: {node: '>=14'}
peerDependencies:
'@babel/core': ^7.0.0-0
'@svgr/core@8.1.0':
resolution: {integrity: sha512-8QqtOQT5ACVlmsvKOJNEaWmRPmcojMOzCz4Hs2BGG/toAp/K38LcsMRyLp349glq5AzJbCEeimEoxaX6v/fLrA==}
engines: {node: '>=14'}
'@svgr/hast-util-to-babel-ast@8.0.0':
resolution: {integrity: sha512-EbDKwO9GpfWP4jN9sGdYwPBU0kdomaPIL2Eu4YwmgP+sJeXT+L7bMwJUBnhzfH8Q2qMBqZ4fJwpCyYsAN3mt2Q==}
engines: {node: '>=14'}
'@svgr/plugin-jsx@8.1.0':
resolution: {integrity: sha512-0xiIyBsLlr8quN+WyuxooNW9RJ0Dpr8uOnH/xrCVO8GLUcwHISwj1AG0k+LFzteTkAA0GbX0kj9q6Dk70PTiPA==}
engines: {node: '>=14'}
peerDependencies:
'@svgr/core': '*'
'@svgr/plugin-svgo@8.1.0':
resolution: {integrity: sha512-Ywtl837OGO9pTLIN/onoWLmDQ4zFUycI1g76vuKGEz6evR/ZTJlJuz3G/fIkb6OVBJ2g0o6CGJzaEjfmEo3AHA==}
engines: {node: '>=14'}
peerDependencies:
'@svgr/core': '*'
'@swc/helpers@0.5.17':
resolution: {integrity: sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A==}
'@trysound/sax@0.2.0':
resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==}
engines: {node: '>=10.13.0'}
'@types/babel__core@7.20.5':
resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==}
@@ -2192,6 +2279,14 @@ packages:
resolution: {integrity: sha512-cQzWCtO6C8TQiYl1ruKNn2U6Ao4o4WBBcbL61yJl84x+j5sOWWFU9X7DpND8XZG3daDppSsigMdfAIl2upQBRw==}
engines: {node: '>=10.0.0'}
'@yz1311/react-native-wheel-picker@0.4.5':
resolution: {integrity: sha512-07ga/fYdgHYI3JTAd+ntaXcJ1D3VxbgaqCPxABjxigehmFYD3VpBbMMVRhxmZC3oVnpedc+SKJXHTNwGtLriCQ==}
peerDependencies:
deprecated-react-native-prop-types: '*'
moment: '*'
react-native: '*'
react-native-modal: '*'
abort-controller@3.0.0:
resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==}
engines: {node: '>=6.5'}
@@ -2620,6 +2715,15 @@ packages:
core-util-is@1.0.3:
resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==}
cosmiconfig@8.3.6:
resolution: {integrity: sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==}
engines: {node: '>=14'}
peerDependencies:
typescript: '>=4.9.5'
peerDependenciesMeta:
typescript:
optional: true
cross-fetch@3.2.0:
resolution: {integrity: sha512-Q+xVJLoGOeIMXZmbUK4HYk+69cQH6LudR0Vu/pRm2YlU/hDV9CiS0gKUMaWY5f2NeUH9C1nV3bsTlCo0FsTV1Q==}
@@ -2641,6 +2745,14 @@ packages:
resolution: {integrity: sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==}
engines: {node: '>=8.0.0'}
css-tree@2.2.1:
resolution: {integrity: sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==}
engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'}
css-tree@2.3.1:
resolution: {integrity: sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==}
engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0}
css-what@6.2.2:
resolution: {integrity: sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==}
engines: {node: '>= 6'}
@@ -2650,6 +2762,10 @@ packages:
engines: {node: '>=4'}
hasBin: true
csso@5.0.5:
resolution: {integrity: sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==}
engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'}
csstype@3.2.0:
resolution: {integrity: sha512-si++xzRAY9iPp60roQiFta7OFbhrgvcthrhlNAGeQptSY25uJjkfUV8OArC3KLocB8JT8ohz+qgxWCmz8RhjIg==}
@@ -2725,6 +2841,10 @@ packages:
resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==}
engines: {node: '>= 0.8'}
deprecated-react-native-prop-types@5.0.0:
resolution: {integrity: sha512-cIK8KYiiGVOFsKdPMmm1L3tA/Gl+JopXL6F5+C7x39MyPsQYnP57Im/D6bNUzcborD7fcMwiwZqcBdBXXZucYQ==}
engines: {node: '>=18'}
dequal@2.0.3:
resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==}
engines: {node: '>=6'}
@@ -2774,6 +2894,9 @@ packages:
domutils@3.2.2:
resolution: {integrity: sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==}
dot-case@3.0.4:
resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==}
dotenv-expand@11.0.7:
resolution: {integrity: sha512-zIHwmZPRshsCdpMDyVsqGmgyP0yT8GAgXUnkdAoJisxvf33k7yO6OuoKmcTGuXPWSsm8Oh88nZicRLA9Y0rUeA==}
engines: {node: '>=12'}
@@ -2825,6 +2948,9 @@ packages:
resolution: {integrity: sha512-ObFo8v4rQJAE59M69QzwloxPZtd33TpYEIjtKD1rrFDcM1Gd7IkDxEBU+HriziN6HSHQnBJi8Dmy+JWkav5HKA==}
engines: {node: '>=8'}
error-ex@1.3.4:
resolution: {integrity: sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==}
error-stack-parser@2.1.4:
resolution: {integrity: sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==}
@@ -3536,6 +3662,9 @@ packages:
invariant@2.2.4:
resolution: {integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==}
is-arrayish@0.2.1:
resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==}
is-arrayish@0.3.4:
resolution: {integrity: sha512-m6UrgzFVUYawGBh1dUsWR5M2Clqic9RVXC/9f8ceNlv2IcO9j9J/z8UoCLPqtsPBFNzEpfR3xftohbfqDx8EQA==}
@@ -3671,6 +3800,9 @@ packages:
json-buffer@3.0.1:
resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==}
json-parse-even-better-errors@2.3.1:
resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==}
json-schema-traverse@0.4.1:
resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==}
@@ -3770,56 +3902,48 @@ packages:
engines: {node: '>= 12.0.0'}
cpu: [arm64]
os: [linux]
libc: [glibc]
lightningcss-linux-arm64-gnu@1.30.2:
resolution: {integrity: sha512-UK65WJAbwIJbiBFXpxrbTNArtfuznvxAJw4Q2ZGlU8kPeDIWEX1dg3rn2veBVUylA2Ezg89ktszWbaQnxD/e3A==}
engines: {node: '>= 12.0.0'}
cpu: [arm64]
os: [linux]
libc: [glibc]
lightningcss-linux-arm64-musl@1.27.0:
resolution: {integrity: sha512-rCGBm2ax7kQ9pBSeITfCW9XSVF69VX+fm5DIpvDZQl4NnQoMQyRwhZQm9pd59m8leZ1IesRqWk2v/DntMo26lg==}
engines: {node: '>= 12.0.0'}
cpu: [arm64]
os: [linux]
libc: [musl]
lightningcss-linux-arm64-musl@1.30.2:
resolution: {integrity: sha512-5Vh9dGeblpTxWHpOx8iauV02popZDsCYMPIgiuw97OJ5uaDsL86cnqSFs5LZkG3ghHoX5isLgWzMs+eD1YzrnA==}
engines: {node: '>= 12.0.0'}
cpu: [arm64]
os: [linux]
libc: [musl]
lightningcss-linux-x64-gnu@1.27.0:
resolution: {integrity: sha512-Dk/jovSI7qqhJDiUibvaikNKI2x6kWPN79AQiD/E/KeQWMjdGe9kw51RAgoWFDi0coP4jinaH14Nrt/J8z3U4A==}
engines: {node: '>= 12.0.0'}
cpu: [x64]
os: [linux]
libc: [glibc]
lightningcss-linux-x64-gnu@1.30.2:
resolution: {integrity: sha512-Cfd46gdmj1vQ+lR6VRTTadNHu6ALuw2pKR9lYq4FnhvgBc4zWY1EtZcAc6EffShbb1MFrIPfLDXD6Xprbnni4w==}
engines: {node: '>= 12.0.0'}
cpu: [x64]
os: [linux]
libc: [glibc]
lightningcss-linux-x64-musl@1.27.0:
resolution: {integrity: sha512-QKjTxXm8A9s6v9Tg3Fk0gscCQA1t/HMoF7Woy1u68wCk5kS4fR+q3vXa1p3++REW784cRAtkYKrPy6JKibrEZA==}
engines: {node: '>= 12.0.0'}
cpu: [x64]
os: [linux]
libc: [musl]
lightningcss-linux-x64-musl@1.30.2:
resolution: {integrity: sha512-XJaLUUFXb6/QG2lGIW6aIk6jKdtjtcffUT0NKvIqhSBY3hh9Ch+1LCeH80dR9q9LBjG3ewbDjnumefsLsP6aiA==}
engines: {node: '>= 12.0.0'}
cpu: [x64]
os: [linux]
libc: [musl]
lightningcss-win32-arm64-msvc@1.27.0:
resolution: {integrity: sha512-/wXegPS1hnhkeG4OXQKEMQeJd48RDC3qdh+OA8pCuOPCyvnm/yEayrJdJVqzBsqpy1aJklRCVxscpFur80o6iQ==}
@@ -3899,6 +4023,9 @@ packages:
resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==}
hasBin: true
lower-case@2.0.2:
resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==}
lru-cache@10.4.3:
resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==}
@@ -3967,6 +4094,12 @@ packages:
mdn-data@2.0.14:
resolution: {integrity: sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==}
mdn-data@2.0.28:
resolution: {integrity: sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==}
mdn-data@2.0.30:
resolution: {integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==}
memoize-one@5.2.1:
resolution: {integrity: sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q==}
@@ -4250,6 +4383,9 @@ packages:
mlly@1.8.0:
resolution: {integrity: sha512-l8D9ODSRWLe2KHJSifWGwBqpTZXIXTeo8mlKjY+E2HAakaTeNpqAyBZ8GSqLzHgw4XmHmC8whvpjJNMbFZN7/g==}
moment@2.30.1:
resolution: {integrity: sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==}
ms@2.0.0:
resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==}
@@ -4288,6 +4424,9 @@ packages:
nested-error-stacks@2.0.1:
resolution: {integrity: sha512-SrQrok4CATudVzBS7coSz26QRSmlK9TzzoFbeKfcPBUFPjcQM9Rqvr/DlJkOrwI/0KcgvMub1n1g5Jt9EgRn4A==}
no-case@3.0.4:
resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==}
node-fetch@2.7.0:
resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==}
engines: {node: 4.x || >=6.0.0}
@@ -4416,6 +4555,10 @@ packages:
parse-imports-exports@0.2.4:
resolution: {integrity: sha512-4s6vd6dx1AotCx/RCI2m7t7GCh5bDRUtGNvRfHSP2wbBQdMi67pPe7mtzmgwcaQ8VKK/6IB7Glfyu3qdZJPybQ==}
parse-json@5.2.0:
resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==}
engines: {node: '>=8'}
parse-png@2.1.0:
resolution: {integrity: sha512-Nt/a5SfCLiTnQAjx3fHlqp8hRgTL3z7kTQZzvIMS9uCAepnCyjpdEc6M/sz69WqMBdaDBw9sF1F1UaHROYzGkQ==}
engines: {node: '>=10'}
@@ -4427,6 +4570,9 @@ packages:
resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==}
engines: {node: '>= 0.8'}
path-dirname@1.0.2:
resolution: {integrity: sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q==}
path-exists@3.0.0:
resolution: {integrity: sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==}
engines: {node: '>=4'}
@@ -4450,6 +4596,10 @@ packages:
resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==}
engines: {node: '>=16 || 14 >=14.18'}
path-type@4.0.0:
resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==}
engines: {node: '>=8'}
pathe@2.0.3:
resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==}
@@ -4652,6 +4802,9 @@ packages:
react-is@19.2.0:
resolution: {integrity: sha512-x3Ax3kNSMIIkyVYhWPyO09bu0uttcAIoecO/um/rKGQ4EltYWVYtyiGkS/3xMynrbVQdS69Jhlv8FXUEZehlzA==}
react-native-animatable@1.4.0:
resolution: {integrity: sha512-DZwaDVWm2NBvBxf7I0wXKXLKb/TxDnkV53sWhCvei1pRyTX3MVFpkvdYBknNBqPrxYuAIlPxEp7gJOidIauUkw==}
react-native-css-interop@0.2.1:
resolution: {integrity: sha512-B88f5rIymJXmy1sNC/MhTkb3xxBej1KkuAt7TiT9iM7oXz3RM8Bn+7GUrfR02TvSgKm4cg2XiSuLEKYfKwNsjA==}
engines: {node: '>=18'}
@@ -4668,21 +4821,6 @@ packages:
react-native-svg:
optional: true
react-native-dates-picker@0.2.0:
resolution: {integrity: sha512-dO7HGami3fhKa/WVtd5jj0xfekbNJZzka++4+0pBUW8br2/t9YzyJ7DYPcZ7vGdRy6bw/qkBG6EASRq8DJP/5Q==}
engines: {node: '>= 16.0.0'}
peerDependencies:
react: '>=17.0.0'
react-native: '*'
react-native-drawer-layout@4.2.0:
resolution: {integrity: sha512-XFGK5RMcVhEqr2F4iH/cTXrcTm1uK3gIBNFPqHNO7rCXuXZTPBbQYA5yc9/Lqgw2KNQ3sAeHKvW6/WoTURo/eA==}
peerDependencies:
react: '>= 18.2.0'
react-native: '*'
react-native-gesture-handler: '>= 2.0.0'
react-native-reanimated: '>= 2.0.0'
react-native-gesture-handler@2.28.0:
resolution: {integrity: sha512-0msfJ1vRxXKVgTgvL+1ZOoYw3/0z1R+Ked0+udoJhyplC2jbVKIJ8Z1bzWdpQRCV3QcQ87Op0zJVE5DhKK2A0A==}
peerDependencies:
@@ -4710,11 +4848,11 @@ packages:
react-native: '*'
react-native-reanimated: '>=3.0.0'
react-native-modal-datetime-picker@18.0.0:
resolution: {integrity: sha512-0jdvhhraZQlRACwr7pM6vmZ2kxgzJ4CpnmV6J3TVA6MrXMXK6Zo/upRBKkRp0+fTOiKuNblzesA2U59rYo6SGA==}
react-native-modal@14.0.0-rc.1:
resolution: {integrity: sha512-v5pvGyx1FlmBzdHyPqBsYQyS2mIJhVmuXyNo5EarIzxicKhuoul6XasXMviGcXboEUT0dTYWs88/VendojPiVw==}
peerDependencies:
'@react-native-community/datetimepicker': '>=6.7.0'
react-native: '>=0.65.0'
react: '*'
react-native: '>=0.70.0'
react-native-reanimated@4.1.5:
resolution: {integrity: sha512-UA6VUbxwhRjEw2gSNrvhkusUq3upfD3Cv+AnB07V+kC8kpvwRVI+ivwY95ePbWNFkFpP+Y2Sdw1WHpHWEV+P2Q==}
@@ -4736,6 +4874,12 @@ packages:
react: '*'
react-native: '*'
react-native-svg-transformer@1.5.2:
resolution: {integrity: sha512-eW4hOtrd30s4SRdN4X1XYxTCu1czsxDGQKmfQ3RFbZMN5yw4ZmiKGGr+lXbQW4uDGZvSoGd9FHL1f+rgGoKg8Q==}
peerDependencies:
react-native: '>=0.59.0'
react-native-svg: '>=12.0.0'
react-native-svg@15.12.1:
resolution: {integrity: sha512-vCuZJDf8a5aNC2dlMovEv4Z0jjEUET53lm/iILFnFewa15b4atjVxU6Wirm6O9y6dEsdjDZVD7Q3QM4T1wlI8g==}
peerDependencies:
@@ -5014,6 +5158,9 @@ packages:
resolution: {integrity: sha512-h+z7HKHYXj6wJU+AnS/+IH8Uh9fdcX1Lrhg1/VMdf9PwoBQXFcXiAdsy2tSK0P6gKwJLXp02r90ahUCqHk9rrw==}
engines: {node: '>=8.0.0'}
snake-case@3.0.4:
resolution: {integrity: sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==}
source-map-js@1.2.1:
resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
engines: {node: '>=0.10.0'}
@@ -5135,6 +5282,14 @@ packages:
resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
engines: {node: '>= 0.4'}
svg-parser@2.0.4:
resolution: {integrity: sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==}
svgo@3.3.2:
resolution: {integrity: sha512-OoohrmuUlBs8B8o6MB2Aevn+pRIH9zDALSR+6hhqVfa6fRwG/Qw9VUMSMW9VNg2CFc/MTIfabtdOVl9ODIJjpw==}
engines: {node: '>=14.0.0'}
hasBin: true
synckit@0.11.11:
resolution: {integrity: sha512-MeQTA1r0litLUf0Rp/iisCaL8761lKAZHaimlbGK4j0HysC4PLfqygQj9srcs0m2RdtDYnF8UuYyKpbjHYp7Jw==}
engines: {node: ^14.18.0 || >=16.0.0}
@@ -5142,6 +5297,9 @@ packages:
tailwind-merge@1.14.0:
resolution: {integrity: sha512-3mFKyCo/MBcgyOTlrY8T7odzZFx+w+qKSMAmdFzRvqBfLlSigU6TZnlFHK0lkMwj9Bj8OYU+9yW9lmGuS0QEnQ==}
tailwind-merge@3.4.0:
resolution: {integrity: sha512-uSaO4gnW+b3Y2aWoWfFpX62vn2sR3skfhbjsEnaBI81WD1wBLlHZe5sWf0AqjksNdYTbGBEd0UasQMT3SNV15g==}
tailwind-variants@0.1.20:
resolution: {integrity: sha512-AMh7x313t/V+eTySKB0Dal08RHY7ggYK0MSn/ad8wKWOrDUIzyiWNayRUm2PIJ4VRkvRnfNuyRuKbLV3EN+ewQ==}
engines: {node: '>=16.x', pnpm: '>=7.x'}
@@ -7770,6 +7928,8 @@ snapshots:
'@react-native/js-polyfills@0.81.5': {}
'@react-native/normalize-colors@0.73.2': {}
'@react-native/normalize-colors@0.74.89': {}
'@react-native/normalize-colors@0.81.5': {}
@@ -8240,10 +8400,91 @@ snapshots:
estraverse: 5.3.0
picomatch: 4.0.3
'@svgr/babel-plugin-add-jsx-attribute@8.0.0(@babel/core@7.28.5)':
dependencies:
'@babel/core': 7.28.5
'@svgr/babel-plugin-remove-jsx-attribute@8.0.0(@babel/core@7.28.5)':
dependencies:
'@babel/core': 7.28.5
'@svgr/babel-plugin-remove-jsx-empty-expression@8.0.0(@babel/core@7.28.5)':
dependencies:
'@babel/core': 7.28.5
'@svgr/babel-plugin-replace-jsx-attribute-value@8.0.0(@babel/core@7.28.5)':
dependencies:
'@babel/core': 7.28.5
'@svgr/babel-plugin-svg-dynamic-title@8.0.0(@babel/core@7.28.5)':
dependencies:
'@babel/core': 7.28.5
'@svgr/babel-plugin-svg-em-dimensions@8.0.0(@babel/core@7.28.5)':
dependencies:
'@babel/core': 7.28.5
'@svgr/babel-plugin-transform-react-native-svg@8.1.0(@babel/core@7.28.5)':
dependencies:
'@babel/core': 7.28.5
'@svgr/babel-plugin-transform-svg-component@8.0.0(@babel/core@7.28.5)':
dependencies:
'@babel/core': 7.28.5
'@svgr/babel-preset@8.1.0(@babel/core@7.28.5)':
dependencies:
'@babel/core': 7.28.5
'@svgr/babel-plugin-add-jsx-attribute': 8.0.0(@babel/core@7.28.5)
'@svgr/babel-plugin-remove-jsx-attribute': 8.0.0(@babel/core@7.28.5)
'@svgr/babel-plugin-remove-jsx-empty-expression': 8.0.0(@babel/core@7.28.5)
'@svgr/babel-plugin-replace-jsx-attribute-value': 8.0.0(@babel/core@7.28.5)
'@svgr/babel-plugin-svg-dynamic-title': 8.0.0(@babel/core@7.28.5)
'@svgr/babel-plugin-svg-em-dimensions': 8.0.0(@babel/core@7.28.5)
'@svgr/babel-plugin-transform-react-native-svg': 8.1.0(@babel/core@7.28.5)
'@svgr/babel-plugin-transform-svg-component': 8.0.0(@babel/core@7.28.5)
'@svgr/core@8.1.0(typescript@5.9.3)':
dependencies:
'@babel/core': 7.28.5
'@svgr/babel-preset': 8.1.0(@babel/core@7.28.5)
camelcase: 6.3.0
cosmiconfig: 8.3.6(typescript@5.9.3)
snake-case: 3.0.4
transitivePeerDependencies:
- supports-color
- typescript
'@svgr/hast-util-to-babel-ast@8.0.0':
dependencies:
'@babel/types': 7.28.5
entities: 4.5.0
'@svgr/plugin-jsx@8.1.0(@svgr/core@8.1.0(typescript@5.9.3))':
dependencies:
'@babel/core': 7.28.5
'@svgr/babel-preset': 8.1.0(@babel/core@7.28.5)
'@svgr/core': 8.1.0(typescript@5.9.3)
'@svgr/hast-util-to-babel-ast': 8.0.0
svg-parser: 2.0.4
transitivePeerDependencies:
- supports-color
'@svgr/plugin-svgo@8.1.0(@svgr/core@8.1.0(typescript@5.9.3))(typescript@5.9.3)':
dependencies:
'@svgr/core': 8.1.0(typescript@5.9.3)
cosmiconfig: 8.3.6(typescript@5.9.3)
deepmerge: 4.3.1
svgo: 3.3.2
transitivePeerDependencies:
- typescript
'@swc/helpers@0.5.17':
dependencies:
tslib: 2.8.1
'@trysound/sax@0.2.0': {}
'@types/babel__core@7.20.5':
dependencies:
'@babel/parser': 7.28.5
@@ -8466,6 +8707,14 @@ snapshots:
'@xmldom/xmldom@0.8.11': {}
'@yz1311/react-native-wheel-picker@0.4.5(deprecated-react-native-prop-types@5.0.0)(moment@2.30.1)(react-native-modal@14.0.0-rc.1(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))':
dependencies:
deprecated-react-native-prop-types: 5.0.0
moment: 2.30.1
prop-types: 15.8.1
react-native: 0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0)
react-native-modal: 14.0.0-rc.1(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
abort-controller@3.0.0:
dependencies:
event-target-shim: 5.0.1
@@ -8944,6 +9193,15 @@ snapshots:
core-util-is@1.0.3: {}
cosmiconfig@8.3.6(typescript@5.9.3):
dependencies:
import-fresh: 3.3.1
js-yaml: 4.1.1
parse-json: 5.2.0
path-type: 4.0.0
optionalDependencies:
typescript: 5.9.3
cross-fetch@3.2.0:
dependencies:
node-fetch: 2.7.0
@@ -8975,10 +9233,24 @@ snapshots:
mdn-data: 2.0.14
source-map: 0.6.1
css-tree@2.2.1:
dependencies:
mdn-data: 2.0.28
source-map-js: 1.2.1
css-tree@2.3.1:
dependencies:
mdn-data: 2.0.30
source-map-js: 1.2.1
css-what@6.2.2: {}
cssesc@3.0.0: {}
csso@5.0.5:
dependencies:
css-tree: 2.2.1
csstype@3.2.0: {}
dayjs@1.11.19: {}
@@ -9023,6 +9295,12 @@ snapshots:
depd@2.0.0: {}
deprecated-react-native-prop-types@5.0.0:
dependencies:
'@react-native/normalize-colors': 0.73.2
invariant: 2.2.4
prop-types: 15.8.1
dequal@2.0.3: {}
destroy@1.2.0: {}
@@ -9066,6 +9344,11 @@ snapshots:
domelementtype: 2.3.0
domhandler: 5.0.3
dot-case@3.0.4:
dependencies:
no-case: 3.0.4
tslib: 2.8.1
dotenv-expand@11.0.7:
dependencies:
dotenv: 16.4.7
@@ -9103,6 +9386,10 @@ snapshots:
env-editor@0.4.2: {}
error-ex@1.3.4:
dependencies:
is-arrayish: 0.2.1
error-stack-parser@2.1.4:
dependencies:
stackframe: 1.3.4
@@ -9924,6 +10211,8 @@ snapshots:
dependencies:
loose-envify: 1.4.0
is-arrayish@0.2.1: {}
is-arrayish@0.3.4: {}
is-binary-path@2.1.0:
@@ -10075,6 +10364,8 @@ snapshots:
json-buffer@3.0.1: {}
json-parse-even-better-errors@2.3.1: {}
json-schema-traverse@0.4.1: {}
json-stable-stringify-without-jsonify@1.0.1: {}
@@ -10251,6 +10542,10 @@ snapshots:
dependencies:
js-tokens: 4.0.0
lower-case@2.0.2:
dependencies:
tslib: 2.8.1
lru-cache@10.4.3: {}
lru-cache@5.1.1:
@@ -10392,6 +10687,10 @@ snapshots:
mdn-data@2.0.14: {}
mdn-data@2.0.28: {}
mdn-data@2.0.30: {}
memoize-one@5.2.1: {}
memoize-one@6.0.0: {}
@@ -11004,6 +11303,8 @@ snapshots:
pkg-types: 1.3.1
ufo: 1.6.1
moment@2.30.1: {}
ms@2.0.0: {}
ms@2.1.3: {}
@@ -11040,6 +11341,11 @@ snapshots:
nested-error-stacks@2.0.1: {}
no-case@3.0.4:
dependencies:
lower-case: 2.0.2
tslib: 2.8.1
node-fetch@2.7.0:
dependencies:
whatwg-url: 5.0.0
@@ -11162,6 +11468,13 @@ snapshots:
dependencies:
parse-statements: 1.0.11
parse-json@5.2.0:
dependencies:
'@babel/code-frame': 7.27.1
error-ex: 1.3.4
json-parse-even-better-errors: 2.3.1
lines-and-columns: 1.2.4
parse-png@2.1.0:
dependencies:
pngjs: 3.4.0
@@ -11170,6 +11483,8 @@ snapshots:
parseurl@1.3.3: {}
path-dirname@1.0.2: {}
path-exists@3.0.0: {}
path-exists@4.0.0: {}
@@ -11185,6 +11500,8 @@ snapshots:
lru-cache: 10.4.3
minipass: 7.1.2
path-type@4.0.0: {}
pathe@2.0.3: {}
picocolors@1.1.1: {}
@@ -11410,6 +11727,10 @@ snapshots:
react-is@19.2.0: {}
react-native-animatable@1.4.0:
dependencies:
prop-types: 15.8.1
react-native-css-interop@0.2.1(react-native-reanimated@4.1.5(@babel/core@7.28.5)(react-native-worklets@0.5.1(@babel/core@7.28.5)(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native-safe-area-context@5.6.2(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native-svg@15.12.1(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)(tailwindcss@3.4.18(yaml@2.8.1)):
dependencies:
'@babel/helper-module-imports': 7.27.1
@@ -11428,21 +11749,6 @@ snapshots:
transitivePeerDependencies:
- supports-color
react-native-dates-picker@0.2.0(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0):
dependencies:
dayjs: 1.11.19
react: 19.1.0
react-native: 0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0)
react-native-drawer-layout@4.2.0(react-native-gesture-handler@2.28.0(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native-reanimated@4.1.5(@babel/core@7.28.5)(react-native-worklets@0.5.1(@babel/core@7.28.5)(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0):
dependencies:
color: 4.2.3
react: 19.1.0
react-native: 0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0)
react-native-gesture-handler: 2.28.0(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
react-native-reanimated: 4.1.5(@babel/core@7.28.5)(react-native-worklets@0.5.1(@babel/core@7.28.5)(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
use-latest-callback: 0.2.6(react@19.1.0)
react-native-gesture-handler@2.28.0(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0):
dependencies:
'@egjs/hammerjs': 2.0.17
@@ -11478,11 +11784,11 @@ snapshots:
react-native-is-edge-to-edge: 1.2.1(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
react-native-reanimated: 4.1.5(@babel/core@7.28.5)(react-native-worklets@0.5.1(@babel/core@7.28.5)(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
react-native-modal-datetime-picker@18.0.0(@react-native-community/datetimepicker@8.4.4(expo@54.0.23)(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0)):
react-native-modal@14.0.0-rc.1(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0):
dependencies:
'@react-native-community/datetimepicker': 8.4.4(expo@54.0.23)(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
prop-types: 15.8.1
react: 19.1.0
react-native: 0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0)
react-native-animatable: 1.4.0
react-native-reanimated@4.1.5(@babel/core@7.28.5)(react-native-worklets@0.5.1(@babel/core@7.28.5)(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0):
dependencies:
@@ -11506,6 +11812,18 @@ snapshots:
react-native-is-edge-to-edge: 1.2.1(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
warn-once: 0.1.1
react-native-svg-transformer@1.5.2(react-native-svg@15.12.1(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(typescript@5.9.3):
dependencies:
'@svgr/core': 8.1.0(typescript@5.9.3)
'@svgr/plugin-jsx': 8.1.0(@svgr/core@8.1.0(typescript@5.9.3))
'@svgr/plugin-svgo': 8.1.0(@svgr/core@8.1.0(typescript@5.9.3))(typescript@5.9.3)
path-dirname: 1.0.2
react-native: 0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0)
react-native-svg: 15.12.1(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
transitivePeerDependencies:
- supports-color
- typescript
react-native-svg@15.12.1(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0):
dependencies:
css-select: 5.2.2
@@ -11856,6 +12174,11 @@ snapshots:
slugify@1.6.6: {}
snake-case@3.0.4:
dependencies:
dot-case: 3.0.4
tslib: 2.8.1
source-map-js@1.2.1: {}
source-map-support@0.5.21:
@@ -11961,12 +12284,26 @@ snapshots:
supports-preserve-symlinks-flag@1.0.0: {}
svg-parser@2.0.4: {}
svgo@3.3.2:
dependencies:
'@trysound/sax': 0.2.0
commander: 7.2.0
css-select: 5.2.2
css-tree: 2.3.1
css-what: 6.2.2
csso: 5.0.5
picocolors: 1.1.1
synckit@0.11.11:
dependencies:
'@pkgr/core': 0.2.9
tailwind-merge@1.14.0: {}
tailwind-merge@3.4.0: {}
tailwind-variants@0.1.20(tailwindcss@3.4.18(yaml@2.8.1)):
dependencies:
tailwind-merge: 1.14.0
@@ -1,48 +1,39 @@
import dayjs from 'dayjs'
// DemoADatePicker.tsx
import React, { useState } from 'react'
import { Button, ScrollView, StyleSheet } from 'react-native'
import { ADateTimeDrawer } from '@/components/common/ao'
import { DatePicker } from '@yz1311/react-native-wheel-picker'
import { useState } from 'react'
import { Button, Text, View } from 'react-native'
import { ADatePicker } from '@/components/common/ao'
export default function DemoADatePicker() {
export default function Chat() {
const [show, setShow] = useState(false)
const [date, setDate] = useState(dayjs())
return (
<ScrollView contentContainerStyle={styles.container}>
<ADateTimeDrawer
isOpen={show}
defaultDate={date}
modeType="year-month"
onConfirm={(val) => {
console.log(val)
}}
onClose={() => {
setShow(false)
}}
/>
<Button
title="测试"
onPress={() => {
setShow(!show)
}}
>
</Button>
</ScrollView>
<>
<View className="mt-12">
<Button
title="测试"
onPress={() => {
setShow(true)
}}
>
</Button>
{/* <DatePicker
isModal={true}
modalVisible={show}
onPickerCancel={() => {
setShow(false)
}}
/> */}
<ADatePicker
show={show}
onConfirm={(val) => {
setShow(false)
}}
onClose={() => {
setShow(false)
}}
/>
</View>
</>
)
}
const styles = StyleSheet.create({
container: {
padding: 20,
},
label: {
marginTop: 20,
fontSize: 16,
fontWeight: 'bold',
},
result: {
marginVertical: 5,
fontSize: 14,
color: '#333',
},
})
@@ -1,10 +1,11 @@
import type { MoneyCategoryResult } from '@/request/api/money'
import type { MoneyCategory, MoneyRecord } from '@/types/money'
import type { MoneyCategoryItem, QueryMoneyCategoryResult } from '@/types/money/category'
import type { InsertMoneyRecordResult, MoneyRecordBase } from '@/types/money/record'
import Big from 'big.js'
import { useEffect, useState } from 'react'
import { ActivityIndicator, Keyboard, Pressable, StyleSheet, Text, TouchableWithoutFeedback, View } from 'react-native'
import { useEffect, useMemo, useState } from 'react'
import { FlatList, Keyboard, Pressable, StyleSheet, Text, TouchableWithoutFeedback, View } from 'react-native'
import { useSafeAreaInsets } from 'react-native-safe-area-context'
import { ADatePicker, ADateTimeDrawer, AInput, LucideIcon } from '@/components/common/ao'
import { AInput, LucideIcon } from '@/components/common/ao'
import { ADatePicker } from '@/components/common/ao/index'
import SegmentedTabs from '@/components/common/ao/SegmentedTabs'
import {
Drawer,
@@ -15,7 +16,8 @@ import {
} from '@/components/ui/drawer'
import { Grid, GridItem } from '@/components/ui/grid'
import { useKeyboardHeight } from '@/hooks/useKeyboardHeight'
import { getMoneyCategoryApi, insertMoneyRecordApi } from '@/request/api/money'
import { queryMoneyCategoryApi } from '@/request/api/money/category'
import { insertMoneyRecordApi } from '@/request/api/money/record'
import { getCurrentDate } from '@/utils/time'
import { toast } from '@/utils/toast'
import MoneyCategoryIcon from './MoneyCategoryIcon'
@@ -23,6 +25,7 @@ import MoneyCategoryIcon from './MoneyCategoryIcon'
interface AddMoneyDrawerProps {
isOpen: boolean
onClose: () => void
onConfirm?: (result: InsertMoneyRecordResult) => void
}
interface KeydownItem {
@@ -60,6 +63,7 @@ const keys: KeydownItem[] = [
export default function AddMoneyDrawer({
isOpen,
onClose,
onConfirm,
}: AddMoneyDrawerProps) {
const insets = useSafeAreaInsets()
// 选择顺序:0 支出 1收入
@@ -73,14 +77,14 @@ export default function AddMoneyDrawer({
// 备注聚焦
const [remarkIsFocused, setRemarkIsFocused] = useState(false)
// 分类
const [categories, setCategories] = useState<MoneyCategoryResult>({
const [categories, setCategories] = useState<QueryMoneyCategoryResult>({
income: [],
expense: [],
})
const keyboardHeight = useKeyboardHeight()
const defaultMoneyRecord: MoneyRecord = {
const defaultMoneyRecord: MoneyRecordBase = {
id: -1,
category_id: -1,
user_id: -1,
@@ -90,9 +94,9 @@ export default function AddMoneyDrawer({
create_time: '',
}
const [moneyRecord, setMoneyRecord] = useState<MoneyRecord>(defaultMoneyRecord)
const [moneyRecord, setMoneyRecord] = useState<MoneyRecordBase>(defaultMoneyRecord)
function selectCategory(item: MoneyCategory) {
function selectCategory(item: MoneyCategoryItem) {
setMoneyRecord({
...moneyRecord,
category_id: item.id,
@@ -101,27 +105,19 @@ export default function AddMoneyDrawer({
setShowKeydown(true)
}
useEffect(() => {
if (isOpen) {
const fetchCategories = async () => {
try {
const res = await getMoneyCategoryApi()
if (res.isSuccess) {
setCategories(res.data)
}
}
catch (err) {
console.error('获取分类失败', err)
}
const fetchCategories = async () => {
try {
const res = await queryMoneyCategoryApi()
if (res.isSuccess) {
setCategories(res.data)
}
fetchCategories()
}
}, [isOpen])
// 关闭整个drawer处理
function onMainDrawerClose() {
onClose()
catch (err) {
console.error('获取分类失败', err)
}
}
function resetData() {
// 清空键盘记录
setKeydownInput('')
// 关闭默认键盘
@@ -134,6 +130,13 @@ export default function AddMoneyDrawer({
setShowDatePicker(false)
}
// 关闭整个drawer处理
function onMainDrawerClose() {
resetData()
onClose()
}
// 计算过程
const handlePress = (key: string | number) => {
setKeydownInput((prev) => {
@@ -330,7 +333,9 @@ export default function AddMoneyDrawer({
...moneyRecord,
}).then((res) => {
if (res.isSuccess) {
onMainDrawerClose()
resetData()
onConfirm?.(res.data)
}
else {
toast.show({
@@ -352,7 +357,13 @@ export default function AddMoneyDrawer({
>
<DrawerBackdrop />
<DrawerContent className="p-0 flex-1">
<DrawerContent
className="p-0 flex-1"
onAnimationComplete={() => {
fetchCategories()
}}
>
<DrawerHeader
className="flex items-center justify-between"
style={{ paddingTop: insets.top + 8, paddingLeft: 16, paddingRight: 16 }}
@@ -369,53 +380,73 @@ export default function AddMoneyDrawer({
<Text className="text-gray-500 font-medium">取消</Text>
</Pressable>
</DrawerHeader>
<DrawerBody
<View
style={{
flex: 1,
paddingLeft: 16,
paddingRight: 16,
marginBottom: 0,
paddingLeft: 8,
paddingRight: 8,
marginTop: 16,
backgroundColor: '#fff',
}}
>
<Grid className="gap-4 mb-8" _extra={{ className: 'grid-cols-4' }}>
{(() => {
const list = selectedIndex === 1 ? categories.income : categories.expense
const items = list.map((item) => {
const isSelected = moneyRecord.category_id === item.id
return (
<GridItem key={item.id} _extra={{ className: 'col-span-1' }}>
<Pressable
className="flex flex-col items-center justify-center rounded"
onPress={() => selectCategory(item)}
>
<View
className={`w-14 h-14 rounded-full flex items-center justify-center ${
isSelected ? 'bg-blue-100' : 'bg-gray-100'
}`}
>
<MoneyCategoryIcon name={item.icon} size={28} />
</View>
<Text className="text-sm mt-1">
{item.name}
</Text>
</Pressable>
</GridItem>
)
})
{(() => {
const list = selectedIndex === 1 ? categories.income : categories.expense
const remainder = list.length % 4
// useMemo 生成补全后的列表
const memoItems = useMemo(() => {
const items = [...list]
const remainder = items.length % 4
if (remainder > 0) {
const emptyCount = 4 - remainder
for (let i = 0; i < emptyCount; i++) {
items.push(<GridItem key={`empty-${i}`} _extra={{ className: 'col-span-1' }} />)
// 补充占位对象
items.push({ id: `empty-${i}` } as any)
}
}
return items
})()}
</Grid>
</DrawerBody>
}, [list])
return (
<FlatList
data={memoItems}
numColumns={4}
keyExtractor={item => item.id.toString()}
showsVerticalScrollIndicator={false}
renderItem={({ item }) => {
if (!('name' in item)) {
return <View style={{ flex: 1 / 4, margin: 4 }} />
}
const isSelected = moneyRecord.category_id === item.id
return (
<Pressable
style={{ flex: 1 / 4, margin: 4, alignItems: 'center' }}
onPress={() => selectCategory(item)}
>
<View
style={{
width: 46,
height: 46,
borderRadius: 28,
marginTop: 4,
justifyContent: 'center',
alignItems: 'center',
backgroundColor: isSelected ? '#BFDBFE' : '#F3F4F6',
}}
>
<MoneyCategoryIcon name={item.icon} size={24} />
</View>
<Text style={{ marginBottom: 4, fontSize: 14, textAlign: 'center' }}>
{item.name}
</Text>
</Pressable>
)
}}
/>
)
})()}
</View>
{showKeydown && (
<View style={{
@@ -498,24 +529,27 @@ export default function AddMoneyDrawer({
})}
</View>
{remarkIsFocused && keyboardHeight > 220 && (
<View style={{ height: keyboardHeight - 220 }} />
<View style={{ height: keyboardHeight + 10 - 220 }} />
)}
</View>
)}
</DrawerContent>
</Drawer>
<ADateTimeDrawer
isOpen={showDatePicker}
defaultDate={moneyRecord.record_time}
onConfirm={(val) => {
setMoneyRecord({
...moneyRecord,
record_time: val,
})
<ADatePicker
pickerTitle="记账时间"
mode="date"
date={moneyRecord.record_time}
show={showDatePicker}
onClose={() => {
setShowDatePicker(false)
}}
onClose={() => {
setShowDatePicker((false))
onConfirm={(date) => {
setMoneyRecord({
...moneyRecord,
record_time: date,
})
setShowDatePicker(false)
}}
/>
</>
@@ -1,53 +0,0 @@
import React from 'react'
import { Text, View } from 'react-native'
function BalanceCard() {
return (
<View className="mt-6 rounded-lg overflow-hidden shadow-lg shadow-gray-300 bg-white">
<View className="p-4 relative">
<View className="absolute top-2 left-2 bg-green-50 rounded-md px-3 py-1.5 flex-row items-center z-10 border border-green-100">
<View className="w-2 h-2 bg-green-500 rounded-full mr-2" />
<Text className="text-green-700 text-xs font-semibold">账单已出</Text>
</View>
{/* 总余额 */}
<View className="items-center mb-4 mt-3">
<Text className="text-gray-500 text-sm font-medium mb-2">总余额</Text>
<Text className="text-2xl font-black text-gray-800 text-center tracking-tight">
12,322.67
</Text>
</View>
{/* 收入 / 支出 */}
<View className="flex-row justify-between rounded-lg pt-4">
{/* 收入 */}
<View className="flex-1 items-center pr-3">
<View className="flex-row justify-center items-center w-full mb-2">
<Text className="text-gray-600 text-sm font-medium">收入</Text>
<Text className="text-green-500 text-xs font-semibold ml-1">↑ +10%</Text>
</View>
<Text className="text-base font-bold text-gray-800 text-center">
12,232.00
</Text>
</View>
{/* 分隔线 */}
<View className="w-px bg-gray-200 mx-1" />
{/* 支出 */}
<View className="flex-1 items-center pl-3">
<View className="flex-row justify-center items-center w-full mb-2">
<Text className="text-gray-600 text-sm font-medium">支出</Text>
<Text className="text-red-500 text-xs font-semibold ml-1">↓ -20%</Text>
</View>
<Text className="text-base font-bold text-gray-800 text-center">
1,980.00
</Text>
</View>
</View>
</View>
</View>
)
}
export default BalanceCard
@@ -1,26 +1,5 @@
import React from 'react'
import {
IconGongzi,
IconJiaotong,
IconLingshi,
IconRiyongpin,
IconShouru,
IconShucai,
IconYule,
IconZhichu,
} from '@/components/iconfont'
const iconMap: Record<string, React.ElementType> = {
jiaotong: IconJiaotong,
lingshi: IconLingshi,
riyongpin: IconRiyongpin,
shucai: IconShucai,
yule: IconYule,
gongzi: IconGongzi,
}
const DefaultIncomeIcon = IconShouru
const DefaultExpenseIcon = IconZhichu
import IconFont from '@/components/iconfont'
interface CategoryIconProps {
name?: string
@@ -36,10 +15,6 @@ export default function MoneyCategoryIcon({
name,
size = 24,
color,
type = 1,
}: CategoryIconProps) {
const IconComponent
= iconMap[name ?? ''] || (type === 0 ? DefaultIncomeIcon : DefaultExpenseIcon)
return <IconComponent size={size} color={color} />
return <IconFont name={name as any} size={size} color={color} />
}
@@ -1,96 +1,93 @@
import type { MoneyRecordGroup } from '@/types/money/record'
import React from 'react'
import { Text, View } from 'react-native'
import IconFont from '@/components/iconfont'
import { SectionList, Text, View } from 'react-native'
import EmptyState from '@/components/common/EmptyStatus'
import MoneyCategoryIcon from './MoneyCategoryIcon'
interface Transaction {
id: string
description: string
title: string
amount: number
type: 'income' | 'expense'
interface StaticTransactionsProps {
records: MoneyRecordGroup[]
}
interface DaySection {
title: string
totalIncome: number
totalExpense: number
data: Transaction[]
}
export default function StaticTransactions({ records }: StaticTransactionsProps) {
if (records.length === 0) {
return (
<EmptyState
type="empty"
title="暂无记账记录"
description="快去添加你的第一笔记账吧 "
/>
)
}
// 模拟数据
const sections: DaySection[] = [
{
title: '2024/11/10',
totalIncome: 3200,
totalExpense: 1980,
data: [
{ id: '1', title: '午餐', description: '公司食堂', amount: 25, type: 'expense' },
{ id: '2', title: '打车', description: '回家', amount: 40, type: 'expense' },
{ id: '3', title: '工资', description: '11月工资', amount: 3200, type: 'income' },
],
},
{
title: '2024/11/09',
totalIncome: 1200,
totalExpense: 560,
data: [
{ id: '4', title: '早餐', description: '面包牛奶面包牛奶面包牛奶面包牛奶面包牛奶面包牛奶面包牛奶面包牛奶面包牛奶面包牛奶面包牛奶面包牛奶', amount: 15, type: 'expense' },
{ id: '5', title: '电影票', description: '周末电影', amount: 45, type: 'expense' },
{ id: '6', title: '兼职收入', description: '家教', amount: 1200, type: 'income' },
],
},
]
const sections = records.map(group => ({
title: group.record_time,
totalIncome: group.income,
totalExpense: group.expense,
data: group.records,
}))
export default function StaticTransactions() {
return (
<View className="mt-2 space-y-6">
{sections.map(section => (
<View key={section.title} className="space-y-4">
<View className="py-2">
<View className="flex-row items-center justify-between">
<View className="flex-row items-center gap-2">
<Text className="text-gray-700 font-semibold text-base">{section.title}</Text>
<Text className="text-gray-400 text-sm">星期日</Text>
</View>
<View className="flex-row items-center gap-4">
<Text className="text-gray-500 text-sm">
收入 ¥
{section.totalIncome}
</Text>
<Text className="text-gray-500 text-sm">
支出 ¥
{section.totalExpense}
</Text>
</View>
<SectionList
sections={sections}
keyExtractor={item => item.id.toString()}
stickySectionHeadersEnabled={true}
showsVerticalScrollIndicator={false}
renderSectionHeader={({ section }) => (
<View className="bg-white py-2 px-1 border-b border-gray-100 mb-2">
<View className="flex-row items-center justify-between">
<Text className="text-gray-700 font-semibold text-base">
{section.title}
</Text>
<View className="flex-row items-center gap-4">
{
section.totalIncome !== '0' && (
<Text className="text-gray-500 text-sm">
收入
{' '}
{section.totalIncome}
</Text>
)
}
{
section.totalExpense !== '0' && (
<Text className="text-gray-500 text-sm">
支出
{' '}
{section.totalExpense}
</Text>
)
}
</View>
</View>
{/* 交易列表 */}
{section.data.map(item => (
<View
key={item.id}
className="flex-row items-center p-2 gap-4"
>
<View className="w-12 h-12 rounded-full bg-white shadow-md items-center justify-center">
<IconFont name="jiaotong" size={28} />
</View>
<View className="flex-1">
<Text className="text-gray-800 font-medium text-base">{item.title}</Text>
<Text className="text-gray-400 text-sm mt-0.5">{item.description}</Text>
</View>
<Text
className="text-sm text-gray-500"
>
{item.type === 'income' ? '+' : '-'}
¥
{item.amount}
</Text>
</View>
))}
</View>
))}
</View>
)}
renderItem={({ item }) => (
<View className="flex-row items-center mb-4 gap-4">
<View className="w-10 h-10 rounded-full bg-gray-100 items-center justify-center">
<MoneyCategoryIcon name={item.category_icon} size={22} color="#000" />
</View>
<View className="flex-1">
<Text className="text-gray-800 font-medium text-base">
{item.category_name}
</Text>
{item.remark && (
<Text className="text-gray-400 text-sm">{item.remark}</Text>
)}
</View>
<View className="flex-row flex">
<Text className="text-sm text-gray-500">
{item.category_type === 0 ? '+' : '-'}
{' '}
{item.amount}
</Text>
</View>
</View>
)}
/>
)
}
@@ -1,129 +1,126 @@
import type { LayoutChangeEvent } from 'react-native'
import { BlurView } from 'expo-blur'
import { LinearGradient } from 'expo-linear-gradient'
import React, { useEffect, useRef, useState } from 'react'
import type { QueryMoneyRecordsResult } from '@/types/money/record'
import React, { useEffect, useState } from 'react'
import { ScrollView, Text, TouchableOpacity, View } from 'react-native'
import { useSafeAreaInsets } from 'react-native-safe-area-context'
import { ADateTimeDrawer, LucideIcon } from '@/components/common/ao'
import { IconJiaotong } from '@/components/iconfont'
import { ADatePicker, LucideIcon } from '@/components/common/ao'
import { Fab, FabIcon } from '@/components/ui/fab'
import { Grid, GridItem } from '@/components/ui/grid'
import { AddIcon } from '@/components/ui/icon'
import { Progress, ProgressFilledTrack } from '@/components/ui/progress'
import { queryMoneyRecordsApi } from '@/request/api/money'
import { queryMoneyRecordsApi } from '@/request/api/money/record'
import { getCurrentYearMonth } from '@/utils/time'
import { toast } from '@/utils/toast'
import AddMoneyDrawer from './components/AddDrawer'
import TransactionsList from './components/TransactionsList'
export default function Money() {
const [showAddDrawer, setShowAddDrawer] = useState(false)
// 安全高度
const insets = useSafeAreaInsets()
const [gradientHeight, setGradientHeight] = useState(200)
const gridLayout = useRef<{ y: number, height: number } | null>(null)
const onGridLayout = (e: LayoutChangeEvent) => {
if (!gridLayout.current) {
const { y, height } = e.nativeEvent.layout
gridLayout.current = { y, height }
setGradientHeight(y + height / 2 + 16 + insets.top)
}
}
// 日期筛选
const [showDatePicker, setShowDatePicker] = useState(false)
const [searchParams, setSearchParams] = useState({
record_time: getCurrentYearMonth(),
})
// 数据
const [moneyRecords, setMoneyRecords] = useState<QueryMoneyRecordsResult>({
total_expense: '0',
total_income: '0',
records: [],
})
useEffect(() => {
queryMoneyRecordsApi({
record_time: searchParams.record_time,
}).then((res) => {
console.log(res.data)
if (res.isSuccess) {
console.log(res.data.records)
setMoneyRecords(res.data)
}
else {
toast.show({
title: res.message || '查询错误,请稍后再试',
})
}
}).catch((err) => {
console.log(err)
})
}, [searchParams])
return (
<View
className="flex-1 relative bg-white"
className="flex-1"
style={{
paddingTop: insets.top,
}}
>
<LinearGradient
colors={['#fef6e4', '#fff8e1', '#ffffff']}
locations={[0, 0.95, 1]}
start={{ x: 0, y: 0 }}
end={{ x: 0, y: 1 }}
style={{
position: 'absolute',
top: 0,
left: 0,
right: 0,
height: gradientHeight,
zIndex: 0,
}}
/>
<View>
<View className="flex flex-row justify-between items-center px-4">
<TouchableOpacity
onPress={() => setShowDatePicker(true)}
className="flex flex-row items-center gap-1"
>
<Text className="font-bold text-lg">{searchParams.record_time}</Text>
<LucideIcon icon="ChevronDown" size={16} color="#666" clickable={false} />
</TouchableOpacity>
<View style={{ zIndex: 10, paddingLeft: 12, paddingRight: 12 }}>
<View className="flex flex-row justify-between items-center py-2">
<BlurView intensity={80} className="px-2 py-1">
<TouchableOpacity
onPress={() => setShowDatePicker(true)}
className="flex flex-row items-center gap-2"
>
<Text className="font-bold text-base">{searchParams.record_time}</Text>
<LucideIcon icon="ArrowBigDownDash" size={16} />
</TouchableOpacity>
</BlurView>
<View className="flex flex-row items-center gap-2">
<LucideIcon icon="SlidersHorizontal" />
</View>
<TouchableOpacity
className="flex flex-row items-center gap-2"
>
<LucideIcon icon="Menu" size={24} clickable={false} />
</TouchableOpacity>
</View>
<View className="mt-2">
{/* 余额区域 */}
<View className="items-center mb-3">
<Text className="text-gray-500 text-xs">
余额
<Text className="text-red-500">↓20%</Text>
</Text>
<Text className="font-bold text-2xl mt-0.5">22,313.00</Text>
</View>
{/* 收入/支出/结余 */}
<View className="flex-row justify-around py-2">
<View className="items-center">
<Text className="text-gray-500 text-xs">
收入
<Text className="text-green-500">↑20%</Text>
<View className="mt-3 border border-gray-200 rounded-lg m-4 p-4 shadow-sm bg-white">
<View
style={{
borderTopLeftRadius: 8,
borderTopRightRadius: 8,
}}
>
<View className="mb-4">
<Text className="text-gray-500 text-sm">
余额
{/* <Text className="text-red-500">↓20%</Text> */}
</Text>
<Text className="text-lg font-semibold mt-0.5">11.0</Text>
<Text className="font-bold text-2xl mt-0.5">22,313.00</Text>
</View>
<View className="items-center">
<Text className="text-gray-500 text-xs">
支出
<Text className="text-green-500">↑20%</Text>
</Text>
<Text className="text-lg font-semibold mt-0.5">11.0</Text>
</View>
<View className="flex-row flex gap-8">
<View>
<Text className="text-gray-500 text-sm">
收入
{/* <Text className="text-green-500">↑20%</Text> */}
</Text>
<Text className="text-lg font-semibold mt-0.5">{moneyRecords.total_income}</Text>
</View>
<View className="items-center">
<Text className="text-gray-500 text-xs">
结余
<Text className="text-green-500">↑20%</Text>
</Text>
<Text className="text-lg font-semibold mt-0.5">11.0</Text>
<View>
<Text className="text-gray-500 text-sm">
支出
{/* <Text className="text-green-500">↑20%</Text> */}
</Text>
<Text className="text-lg font-semibold mt-0.5">{moneyRecords.total_expense}</Text>
</View>
{/*
<View>
<Text className="text-gray-500 text-sm">
结余
<Text className="text-green-500">↑20%</Text>
</Text>
<Text className="text-lg font-semibold mt-0.5">11.0</Text>
</View> */}
</View>
</View>
{/* 预算进度 */}
<View className="flex-row items-center gap-3 mt-3">
<Text className="text-xs text-gray-600 w-8 text-right">预算</Text>
<View
className="flex-row items-center gap-3 mt-2"
style={{
borderBottomLeftRadius: 8,
borderBottomRightRadius: 8,
}}
>
<Text className="text-sm text-gray-600 text-right">预算</Text>
<View className="flex-1">
<Progress size="sm">
<ProgressFilledTrack />
@@ -132,36 +129,10 @@ export default function Money() {
<Text className="text-xs text-blue-500">点击设置</Text>
</View>
</View>
<View
onLayout={onGridLayout}
className="mt-4 pt-2 pb-2 bg-white rounded-md"
>
<Grid
_extra={{ className: 'grid-cols-5' }}
>
{[...Array.from({ length: 5 })].map((_, i) => (
<GridItem
key={i}
className="flex flex-col items-center"
_extra={{ className: 'col-span-1' }}
>
<IconJiaotong size={28} />
<Text className="text-xs mt-1 text-gray-500">账单</Text>
</GridItem>
))}
</Grid>
</View>
</View>
<View style={{ flex: 1, paddingHorizontal: 12 }}>
<ScrollView
contentContainerStyle={{ paddingBottom: 16 }}
showsVerticalScrollIndicator={false}
>
<TransactionsList />
</ScrollView>
<View className="flex-1 px-4 mt-2">
<TransactionsList records={moneyRecords.records} />
</View>
<Fab
@@ -178,11 +149,14 @@ export default function Money() {
onClose={() => {
setShowAddDrawer(false)
}}
onConfirm={(res) => {
setShowAddDrawer(false)
}}
/>
<ADateTimeDrawer
isOpen={showDatePicker}
modeType="year-month"
<ADatePicker
show={showDatePicker}
mode="month"
onConfirm={(val) => {
setSearchParams({
...searchParams,
@@ -44,7 +44,7 @@ export default function User() {
</View>
<AButton onPress={() => {
router.replace('/auth')
router.replace('/abc')
}}
>
跳转到登陆页面
@@ -1,5 +1,5 @@
import { router, Stack } from 'expo-router'
import { ArrowLeft } from 'lucide-react-native'
import { AButton } from '@/components/common/ao'
import EmptyState from '@/components/common/EmptyStatus'
export default function NotFound() {
@@ -7,12 +7,14 @@ export default function NotFound() {
<>
<Stack.Screen options={{ headerShown: false }} />
<EmptyState
image={require('@/static/images/404.png')}
type="404"
title="(´・ω・`) 页面走丢了~"
description="回首页看看吧!"
buttonText="返回应用首页"
buttonIcon={ArrowLeft}
onButtonPress={() => router.replace('/money')}
footer={(
<AButton onPress={() => router.replace('/')} leftIcon={{ icon: 'ArrowLeft', size: 18, color: '#fff' }}>
返回应用首页
</AButton>
)}
/>
</>
)
@@ -4,9 +4,9 @@ import { useFonts } from 'expo-font'
import { Stack, useRouter } from 'expo-router'
import * as SplashScreen from 'expo-splash-screen'
import { StatusBar } from 'expo-status-bar'
import { RefreshCw } from 'lucide-react-native'
import { useEffect } from 'react'
import { KeyboardProvider } from 'react-native-keyboard-controller'
import { AButton } from '@/components/common/ao'
import EmptyState from '@/components/common/EmptyStatus'
import { GluestackUIProvider } from '@/components/ui/gluestack-ui-provider'
import { useUserStore } from '@/store/user'
@@ -18,19 +18,21 @@ import 'react-native-gesture-handler'
SplashScreen.preventAutoHideAsync()
export const unstable_settings = {
initialRouteName: 'money', // 指向你想默认显示的页面
initialRouteName: 'money',
}
export function ErrorBoundary({ error, retry }: ErrorBoundaryProps) {
return (
<GluestackUIProvider>
<EmptyState
image={require('@/static/images/server-error.png')}
type="error"
title="(´・ω・`) 出错啦~"
description={`发生了一点小问题:\n${error?.message || '请稍后再试'}`}
buttonText="重新加载"
buttonIcon={RefreshCw}
onButtonPress={retry}
footer={(
<AButton onPress={retry} leftIcon={{ icon: 'RotateCcw', size: 18, color: '#fff' }}>
再试一下
</AButton>
)}
/>
</GluestackUIProvider>
)
@@ -1,22 +1,28 @@
import { Image, ScrollView, Text } from 'react-native'
import { Button, ButtonIcon, ButtonText } from '@/components/ui/button'
import { ScrollView, Text } from 'react-native'
import Empty from '@/static/images/Empty.svg'
import Error from '@/static/images/Error.svg'
import NotFound from '@/static/images/NotFound.svg'
interface EmptyStateProps {
image: any
title: string
type?: 'empty' | 'error' | '404'
title?: string
description?: string
buttonText: string
buttonIcon?: React.ElementType
onButtonPress: () => void
image?: React.ReactNode
footer?: React.ReactNode
}
const defaultImages = {
empty: <Empty width={224} height={224} />,
error: <Error width={224} height={224} />,
404: <NotFound width={224} height={224} />,
}
export default function EmptyState({
image,
type = 'empty',
title,
description,
buttonText,
buttonIcon,
onButtonPress,
image,
footer,
}: EmptyStateProps) {
return (
<ScrollView
@@ -29,9 +35,12 @@ export default function EmptyState({
}}
showsVerticalScrollIndicator={true}
>
<Image source={image} className="w-56 h-56 mb-4" resizeMode="contain" />
{/* image 插槽优先 */}
{image ?? defaultImages[type]}
<Text className="text-2xl font-semibold text-gray-900 mb-2">{title}</Text>
{title && (
<Text className="text-2xl font-semibold text-gray-900 mb-2">{title}</Text>
)}
{description && (
<Text className="text-base text-gray-600 text-center mb-6 leading-6">
@@ -39,12 +48,7 @@ export default function EmptyState({
</Text>
)}
<Button
onPress={onButtonPress}
>
{buttonIcon && <ButtonIcon as={buttonIcon} />}
<ButtonText>{buttonText}</ButtonText>
</Button>
{footer}
</ScrollView>
)
}
@@ -1,11 +1,15 @@
import type { icons } from 'lucide-react-native'
import type { ViewStyle } from 'react-native'
// components/ui/CustomButton.tsx
import type { LucideIconProps } from './LucideIcon'
import React from 'react'
import {
ButtonSpinner,
ButtonText,
Button as NativeButton,
} from '@/components/ui/button'
import LucideIcon from './LucideIcon'
type IconProp = (LucideIconProps & { icon: keyof typeof icons }) | React.ReactNode
interface CustomButtonProps {
children: React.ReactNode
@@ -17,6 +21,9 @@ interface CustomButtonProps {
action?: 'primary' | 'secondary' | 'positive' | 'negative' | 'default'
variant?: 'solid' | 'outline' | 'link'
size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl'
leftIcon?: IconProp
rightIcon?: IconProp
}
const Button: React.FC<CustomButtonProps> = ({
@@ -29,24 +36,51 @@ const Button: React.FC<CustomButtonProps> = ({
action = 'primary',
variant = 'solid',
size = 'md',
leftIcon,
rightIcon,
}) => {
const isDisabled = disabled || loading
const renderLeftIcon = () => {
if (loading)
return <ButtonSpinner color="#fff" className="mr-2" />
if (!leftIcon)
return null
if (React.isValidElement(leftIcon)) {
return <span className="mr-2">{leftIcon}</span>
}
// 只剩下 LucideIconProps & { icon }
const { icon, ...props } = leftIcon as LucideIconProps & { icon: keyof typeof icons }
return <LucideIcon icon={icon} className="mr-2" {...props} />
}
const renderRightIcon = () => {
if (!rightIcon)
return null
if (React.isValidElement(rightIcon)) {
return <span className="ml-2">{rightIcon}</span>
}
const { icon, ...props } = rightIcon as LucideIconProps & { icon: keyof typeof icons }
return <LucideIcon icon={icon} className="ml-2" {...props} />
}
return (
<NativeButton
onPress={onPress}
isDisabled={isDisabled}
className={className}
style={[
style,
{ opacity: isDisabled ? 0.8 : 1 },
]}
style={[style, { opacity: isDisabled ? 0.8 : 1 }]}
action={action}
variant={variant}
size={size}
>
{loading && <ButtonSpinner color="#fff" className="mr-2" />}
{renderLeftIcon()}
<ButtonText>{children}</ButtonText>
{renderRightIcon()}
</NativeButton>
)
}
@@ -1,81 +1,108 @@
import type { DateTimePickerProps } from 'react-native-modal-datetime-picker'
import type { IDatePickerProps } from '@yz1311/react-native-wheel-picker'
import { DatePicker } from '@yz1311/react-native-wheel-picker'
import dayjs from 'dayjs'
import customParseFormat from 'dayjs/plugin/customParseFormat'
import React, { useMemo } from 'react'
import DateTimePickerModal from 'react-native-modal-datetime-picker'
import React, { useEffect, useRef, useState } from 'react'
import { Animated, Modal, StyleSheet, TouchableOpacity } from 'react-native'
import { toDate } from '@/utils/time'
// 定义 mode 类型
export type DatePickerMode = 'year' | 'month' | 'date' | 'time' | 'datetime'
dayjs.extend(customParseFormat)
// 定义 format 类型
export type DateFormatType = 'YYYY' | 'YYYY-MM' | 'YYYY-MM-DD' | 'HH:mm:ss' | 'YYYY-MM-DD HH:mm:ss'
interface ADatePickerProps extends Omit<DateTimePickerProps, 'onConfirm' | 'onCancel' | 'date'> {
format?: string
onConfirm?: (value: string) => void
interface ADatePickerProps extends Omit<IDatePickerProps, 'date'> {
date?: Date | string
is24Hour?: boolean
onCancel?: () => void
show?: boolean
onClose?: () => void
onConfirm?: (value: string) => void
mode?: DatePickerMode
format?: DateFormatType
}
export default function DatePicker({
const defaultFormatMap: Record<DatePickerMode, DateFormatType> = {
year: 'YYYY',
month: 'YYYY-MM',
date: 'YYYY-MM-DD',
time: 'HH:mm:ss',
datetime: 'YYYY-MM-DD HH:mm:ss',
}
export default function ADatePicker({
date,
show = false,
onClose,
onConfirm,
mode = 'date',
format,
date,
onConfirm,
is24Hour = true,
onCancel,
...restProps
}: ADatePickerProps) {
const parsedDate = useMemo(() => {
if (!date)
return new Date()
const fadeAnim = useRef(new Animated.Value(0)).current
const slideAnim = useRef(new Animated.Value(300)).current
const [visible, setVisible] = useState(show)
if (typeof date === 'string') {
// 支持多种常见日期格式
const formats = ['YYYY-MM-DD', 'YYYY/MM/DD', 'YYYY-MM-DDTHH:mm:ssZ', 'YYYY/MM/DD HH:mm:ss', 'YYYY-MM-DD HH:mm:ss']
for (const fmt of formats) {
const d = dayjs(date, fmt, true)
if (d.isValid())
return d.toDate()
}
// fallback: 尝试直接解析
const d = dayjs(date)
if (d.isValid())
return d.toDate()
// 仍然不合法就返回当前时间
return new Date()
// 使用传入 format 或默认 format
const finalFormat = format || defaultFormatMap[mode]
useEffect(() => {
if (show) {
setVisible(true)
fadeAnim.setValue(0)
slideAnim.setValue(300)
Animated.parallel([
Animated.timing(fadeAnim, { toValue: 1, duration: 250, useNativeDriver: true }),
Animated.timing(slideAnim, { toValue: 0, duration: 250, useNativeDriver: true }),
]).start()
}
else {
Animated.parallel([
Animated.timing(fadeAnim, { toValue: 0, duration: 250, useNativeDriver: true }),
Animated.timing(slideAnim, { toValue: 280, duration: 250, useNativeDriver: true }),
]).start(() => setVisible(false))
}
}, [show])
return date
}, [date])
const handleCancel = () => onClose?.()
const handleConfirm = (selectedDate: Date) => {
const fmt = format || (() => {
switch (mode) {
case 'time':
return 'HH:mm:00'
case 'datetime':
return 'YYYY-MM-DD HH:mm:00'
case 'date':
default:
return 'YYYY-MM-DD'
}
})()
const localTimeStr = dayjs(selectedDate).format(fmt)
onConfirm?.(localTimeStr)
const handleConfirm = (date: Date) => {
const value = dayjs(date).format(finalFormat)
onConfirm?.(value)
}
const handleCancel = () => {
onCancel?.()
}
if (!visible)
return null
return (
<DateTimePickerModal
{...restProps}
mode={mode}
date={parsedDate}
locale="zh-CN"
onConfirm={handleConfirm}
onCancel={handleCancel}
is24Hour={is24Hour}
/>
<Modal transparent visible={visible} animationType="none">
<Animated.View style={[styles.overlay, { opacity: fadeAnim }]}>
<TouchableOpacity style={{ flex: 1 }} activeOpacity={1} onPress={handleCancel} />
</Animated.View>
<Animated.View
style={[styles.pickerContainer, { transform: [{ translateY: slideAnim }] }]}
>
<DatePicker
{...restProps}
date={toDate(date)}
mode={mode}
isModal={false}
onPickerCancel={handleCancel}
onPickerConfirm={handleConfirm}
/>
</Animated.View>
</Modal>
)
}
const styles = StyleSheet.create({
overlay: {
...StyleSheet.absoluteFillObject,
backgroundColor: 'rgba(0,0,0,0.5)',
},
pickerContainer: {
backgroundColor: '#fff',
overflow: 'hidden',
position: 'absolute',
bottom: 0,
width: '100%',
},
})
@@ -1,106 +0,0 @@
import type { DateType, OrderedDateParts } from 'react-native-dates-picker/lib/typescript/types'
import dayjs from 'dayjs'
import { useEffect, useRef, useState } from 'react'
import { View } from 'react-native'
import DateTimePicker from 'react-native-dates-picker'
import { Drawer, DrawerBackdrop, DrawerContent, DrawerFooter, DrawerHeader } from '@/components/ui/drawer'
import AButton from './Button'
type DateWheelMode
= | 'year-month'
| 'year-month-day'
| 'hour-minute-second'
| 'year-month-day-hour-minute-second'
interface DateDrawerProps {
isOpen?: boolean
defaultDate?: DateType
modeType?: DateWheelMode
onClose?: () => void
onConfirm?: (dateStr: string) => void
}
const modeColumnsMap: Record<DateWheelMode, OrderedDateParts[]> = {
'year-month': ['year', 'month'],
'year-month-day': ['year', 'month', 'day'],
'hour-minute-second': ['hour', 'minute', 'second'],
'year-month-day-hour-minute-second': ['year', 'month', 'day', 'hour', 'minute', 'second'],
}
const modeFormatMap: Record<DateWheelMode, string> = {
'year-month': 'YYYY-MM',
'year-month-day': 'YYYY-MM-DD',
'hour-minute-second': 'HH:mm:ss',
'year-month-day-hour-minute-second': 'YYYY-MM-DD HH:mm:ss',
}
export default function DateWheelDrawer({
isOpen,
defaultDate = dayjs(),
onClose,
onConfirm,
modeType = 'year-month-day',
}: DateDrawerProps) {
const columns = modeColumnsMap[modeType]
const format = modeFormatMap[modeType]
// 当前选择的值
const [date, setDate] = useState<DateType>(defaultDate)
// 保存上一次确认的值
const lastConfirmedRef = useRef<DateType>(defaultDate)
// 每次弹窗打开时,把滚轮显示初始化为上一次确认的值
useEffect(() => {
if (isOpen) {
setDate(lastConfirmedRef.current)
}
}, [isOpen])
// 点击取消
const handleCancel = () => {
onClose?.()
}
// 点击确认
const handleConfirm = () => {
console.log("确实")
onClose?.()
lastConfirmedRef.current = date // 保存为上一次确认的值
if (onConfirm) {
const formatted = dayjs(date).format(format)
onConfirm(formatted)
}
}
return (
<Drawer
isOpen={isOpen}
anchor="bottom"
closeOnOverlayClick
onClose={onClose}
size="md"
>
<DrawerBackdrop />
<DrawerContent className="p-0 flex-1">
<DrawerHeader className="flex items-center justify-between p-4">
<AButton action="secondary" onPress={handleCancel}>取消</AButton>
<AButton onPress={handleConfirm}>确认</AButton>
</DrawerHeader>
<View className="flex-1 flex items-center justify-center">
<DateTimePicker
mode="wheel"
date={date}
columns={columns}
wheelPickerSelectedIndicatorStyle={{ backgroundColor: '#eee' }}
onChange={params => setDate(params.date)}
/>
</View>
<DrawerFooter></DrawerFooter>
</DrawerContent>
</Drawer>
)
}
@@ -3,14 +3,15 @@ import { icons } from 'lucide-react-native'
import React from 'react'
import { Pressable } from 'react-native'
interface LucideIconProps {
export interface LucideIconProps {
icon: keyof typeof icons
size?: number
color?: string
strokeWidth?: number
onPress?: (event: GestureResponderEvent) => void
style?: ViewStyle
clickable?: boolean // 新增参数,是否可点击,默认 true
clickable?: boolean
className?: string
}
export default function LucideIcon({
@@ -21,6 +22,7 @@ export default function LucideIcon({
onPress,
style,
clickable = true,
className,
}: LucideIconProps) {
const IconComponent = icons[icon]
@@ -28,12 +30,12 @@ export default function LucideIcon({
return null
if (!clickable) {
return <IconComponent size={size} color={color} strokeWidth={strokeWidth} style={style} />
return <IconComponent size={size} color={color} strokeWidth={strokeWidth} style={style} className={className} />
}
// clickable 为 true,包 Pressable
return (
<Pressable onPress={onPress} style={style}>
<Pressable onPress={onPress} style={style} className={className}>
<IconComponent size={size} color={color} strokeWidth={strokeWidth} />
</Pressable>
)
@@ -1,7 +1,6 @@
import Button from './Button'
import Checkbox from './Checkbox'
import DatePicker from './DatePicker'
import DateTimeDrawer from './DateTimeDrawer'
import Form, { FormRef } from './Form'
import FormItem from './FormItem'
import Input from './Input'
@@ -11,7 +10,6 @@ export {
Button as AButton,
Checkbox as ACheckbox,
DatePicker as ADatePicker,
DateTimeDrawer as ADateTimeDrawer,
Form as AForm,
FormItem as AFormItem,
FormRef as AFormRef,
@@ -0,0 +1,32 @@
/* eslint-disable */
/* tslint:disable */
import React from 'react';
import type { FunctionComponent } from 'react';
import type { ViewProps } from 'react-native';
import { Svg, GProps, Path } from 'react-native-svg';
import { getIconColor } from './helper';
interface Props extends Omit<GProps, 'color'>, ViewProps {
size?: number;
color?: string | string[];
}
const IconCanyin: FunctionComponent<Props> = ({
size = 18,
color,
...rest
}) => {
return (
<Svg viewBox="0 0 1024 1024" width={size} height={size} {...rest}>
<Path
d="M682.709333 652.565333l-2.154666-1.365333c-1.408-0.896-10.005333-6.186667-12.608-7.829333-5.333333-3.349333-9.749333-6.314667-14.08-9.429334-55.701333-40.213333-81.386667-107.477333-77.525334-246.314666 5.461333-196.608 91.52-301.013333 213.141334-302.272L793.301333 85.333333a2882.133333 2882.133333 0 0 1 33.28-0.064l4.586667 0.021334a42.816 42.816 0 0 1 42.794667 42.666666l0.661333 746.624A64.106667 64.106667 0 0 1 810.56 938.666667h-63.722667a63.893333 63.893333 0 0 1-64.128-64V652.586667zM298.666667 128.085333V405.333333a21.333333 21.333333 0 0 1-42.666667 0V128.106667H191.957333l-0.704 341.546666c-0.064 27.52 10.389333 55.125333 27.626667 77.461334 13.888 17.984 30.250667 29.226667 37.056 29.226666a21.333333 21.333333 0 0 1 21.333333 21.248l0.746667 236.565334a62.890667 62.890667 0 0 0 63.744 62.976 65.024 65.024 0 0 0 63.829333-65.024l-0.746666-234.368a21.333333 21.333333 0 0 1 21.333333-21.418667c32 0 62.464-46.378667 62.762667-106.794667L490.624 128 426.666667 128.021333V405.333333a21.333333 21.333333 0 0 1-42.666667 0V128.042667l-85.333333 0.042666zM793.642667 128L789.930667 128c-96.512 1.002667-166.058667 85.397333-170.944 260.778667-3.498667 125.909333 17.002667 179.626667 59.861333 210.56 3.498667 2.517333 7.232 4.992 11.84 7.893333 2.410667 1.536 10.922667 6.784 12.501333 7.786667 5.376 3.370667 9.493333 6.08 13.44 8.96l8.746667 6.4V874.666667c0 11.882667 9.450667 21.333333 21.461333 21.333333h63.722667c11.797333 0 21.418667-9.642667 21.397333-21.376l-0.981333-746.666667h-4.565333c-10.56-0.064-22.016-0.042667-32.768 0.042667z m-558.293334 706.282667l-0.704-219.733334c-42.944-17.301333-86.186667-82.282667-86.058666-144.981333l0.704-341.546667A42.624 42.624 0 0 1 192 85.333333h298.666667c23.701333 0 42.709333 19.2 42.602666 42.858667l-1.706666 341.546667c-0.341333 71.125333-34.88 132.352-84.010667 146.282666L448.256 832c0.192 58.688-47.210667 106.986667-105.877333 107.818667a105.557333 105.557333 0 0 1-107.029334-105.514667z"
fill={getIconColor(color, 0, '#3D3D3D')}
/>
</Svg>
);
};
export default React.memo(IconCanyin);
@@ -0,0 +1,36 @@
/* eslint-disable */
/* tslint:disable */
import React from 'react';
import type { FunctionComponent } from 'react';
import type { ViewProps } from 'react-native';
import { Svg, GProps, Path } from 'react-native-svg';
import { getIconColor } from './helper';
interface Props extends Omit<GProps, 'color'>, ViewProps {
size?: number;
color?: string | string[];
}
const IconFushi: FunctionComponent<Props> = ({
size = 18,
color,
...rest
}) => {
return (
<Svg viewBox="0 0 1024 1024" width={size} height={size} {...rest}>
<Path
d="M928.711111 338.488889l-213.333333-199.111111C699.733333 122.311111 676.977778 113.777778 654.222222 113.777778c-17.066667 0-32.711111 9.955556-39.822222 27.022222-21.333333 51.2-42.666667 86.755556-102.4 86.755556s-81.066667-35.555556-102.4-86.755556C402.488889 123.733333 386.844444 113.777778 369.777778 113.777778c-22.755556 0-45.511111 9.955556-62.577778 25.6L95.288889 337.066667c-28.444444 28.444444-28.444444 72.533333 0 100.977777l81.066667 81.066667c19.911111 19.911111 49.777778 25.6 73.955555 15.644445 4.266667-1.422222 5.688889 1.422222 5.688889 5.688888l-28.444444 284.444445c0 56.888889 28.444444 71.111111 71.111111 71.111111h426.666666c42.666667 0 71.111111-14.222222 71.111111-71.111111l-28.444444-284.444445c0-4.266667 1.422222-5.688889 5.688889-4.266666 25.6 8.533333 54.044444 4.266667 75.377778-15.644445l81.066666-81.066666c27.022222-28.444444 27.022222-73.955556-1.422222-100.977778zM888.888889 398.222222l-81.066667 81.066667c-5.688889 5.688889-14.222222 5.688889-19.911111 0-5.688889-5.688889-14.222222-9.955556-24.177778-9.955556-35.555556 0-52.622222 28.444444-52.622222 71.111111l28.444445 284.444445c1.422222 8.533333-7.111111 14.222222-15.644445 14.222222H300.088889c-8.533333 0-15.644444-7.111111-14.222222-15.644444L312.888889 540.444444c4.266667-36.977778-18.488889-71.111111-55.466667-71.111111-8.533333 0-15.644444 2.844444-21.333333 8.533334-5.688889 5.688889-14.222222 5.688889-19.911111 0l-81.066667-81.066667c-5.688889-5.688889-5.688889-14.222222 0-19.911111l200.533333-186.311111 8.533334-8.533334c7.111111-7.111111 17.066667-5.688889 22.755555 2.844445 34.133333 59.733333 69.688889 99.555556 143.644445 99.555555 73.955556 0 109.511111-39.822222 143.644444-99.555555 4.266667-8.533333 15.644444-9.955556 22.755556-2.844445l8.533333 8.533334 201.955556 187.733333c7.111111 5.688889 7.111111 14.222222 1.422222 19.911111z"
fill={getIconColor(color, 0, '#404042')}
/>
<Path
d="M732.444444 398.222222h-113.777777c-15.644444 0-28.444444-12.8-28.444445-28.444444s12.8-28.444444 28.444445-28.444445h113.777777c15.644444 0 28.444444 12.8 28.444445 28.444445s-12.8 28.444444-28.444445 28.444444z"
fill={getIconColor(color, 1, '#EB1D5F')}
/>
</Svg>
);
};
export default React.memo(IconFushi);
@@ -1,47 +1,44 @@
/* tslint:disable */
/* eslint-disable */
/* tslint:disable */
import React, { FunctionComponent } from 'react';
import { ViewProps } from 'react-native';
import React from 'react';
import type { FunctionComponent } from 'react';
import type { ViewProps } from 'react-native';
import { Svg, GProps, Path } from 'react-native-svg';
import { getIconColor } from './helper';
interface Props extends GProps, ViewProps {
interface Props extends Omit<GProps, 'color'>, ViewProps {
size?: number;
color?: string | string[];
}
let IconGongzi: FunctionComponent<Props> = ({ size, color, ...rest }) => {
const IconGongzi: FunctionComponent<Props> = ({
size = 18,
color,
...rest
}) => {
return (
<Svg viewBox="0 0 1024 1024" width={size} height={size} {...rest}>
<Path
d="M274.285714 56.685714c0-27.428571-3.657143-51.2-36.571428-51.2-3.657143 0-7.314286 0-10.971429 1.828572 25.6 25.6 42.057143 60.342857 45.714286 96.914285V56.685714z m0 0"
fill={getIconColor(color, 0, '#333333')}
d="M606.10103808 406.84844727H429.89042673a19.75732168 19.75732168 0 1 1 0-39.51464255h176.21061136a19.75732168 19.75732168 0 1 1 0 39.51464255zM594.24664475 481.92626984H442.23875247a19.75732168 19.75732168 0 1 1 0-39.02071015h152.00789228a19.75732168 19.75732168 0 1 1 0 39.51464255z"
fill={getIconColor(color, 0, '#2c2c2c')}
/>
<Path
d="M716.8 0H184.685714C160.914286 0 138.971429 5.485714 120.685714 12.8c58.514286 23.771429 96.914286 82.285714 96.914286 144.457143v709.485714c0 78.628571 58.514286 144.457143 137.142857 153.6 85.942857-5.485714 155.428571-84.114286 168.228572-170.057143h352.914285V159.085714c0-42.057143-16.457143-82.285714-45.714285-111.542857C799.085714 16.457143 758.857143 0 716.8 0z m0 0"
fill={getIconColor(color, 1, '#0FCEA0')}
d="M518.05747407 556.13970843a19.75732168 19.75732168 0 0 1-19.7573217-19.75732168V397.95765329a19.75732168 19.75732168 0 1 1 39.51464255 0V536.38238675a19.75732168 19.75732168 0 0 1-19.75732085 19.75732169zM545.7177241 358.44300991a19.75732168 19.75732168 0 0 1-13.95360874-33.71092959l48.28195486-48.28195486a19.75732168 19.75732168 0 0 1 27.90721665 27.90721665l-48.28195487 48.28195486a19.75732168 19.75732168 0 0 1-13.9536079 5.80371294zM489.40935757 358.44300991a19.75732168 19.75732168 0 0 1-13.95360873-5.80371294l-48.28195404-48.28195486a19.75732168 19.75732168 0 1 1 27.41328342-27.90721665l49.39330381 48.28195486a19.75732168 19.75732168 0 0 1-13.95360791 33.71092959z"
fill={getIconColor(color, 1, '#2c2c2c')}
/>
<Path
d="M764.342857 499.2c0 5.485714-1.828571 10.971429-5.485714 14.628571-3.657143 3.657143-9.142857 5.485714-14.628572 5.485715h-115.2V566.857143l115.2-1.828572c5.485714 0 10.971429 1.828571 14.628572 5.485715 3.657143 3.657143 5.485714 9.142857 5.485714 14.628571v25.6c0 10.971429-9.142857 20.114286-20.114286 20.114286l-115.2 3.657143v53.028571c0 5.485714-1.828571 10.971429-5.485714 14.628572-3.657143 3.657143-9.142857 7.314286-16.457143 7.314285l-29.257143 3.657143c-12.8 0-21.942857-9.142857-21.942857-20.114286v-54.857142l-131.657143 5.485714c-12.8 0-25.6-9.142857-25.6-21.942857v-27.428572c0-12.8 10.971429-21.942857 25.6-21.942857l131.657143-1.828571v-49.371429h-131.657143c-12.8 0-25.6-9.142857-25.6-21.942857v-27.428571c0-5.485714 1.828571-10.971429 7.314286-16.457143 5.485714-3.657143 10.971429-5.485714 18.285714-5.485715l106.057143 1.828572-87.771428-85.942857c-3.657143-3.657143-7.314286-9.142857-7.314286-16.457143 0-5.485714 1.828571-10.971429 7.314286-14.628572l21.942857-18.285714c5.485714-3.657143 10.971429-5.485714 16.457143-5.485714 5.485714 0 12.8 3.657143 16.457143 7.314286l80.457142 78.628571c3.657143 3.657143 9.142857 7.314286 16.457143 7.314286 5.485714 0 10.971429-1.828571 16.457143-5.485715l74.971429-67.657142c3.657143-3.657143 9.142857-5.485714 14.628571-5.485715 5.485714 0 10.971429 3.657143 14.628572 7.314286l18.285714 18.285714c7.314286 9.142857 7.314286 21.942857 0 29.257143l-76.8 71.314286 87.771428 1.828571c5.485714 0 10.971429 1.828571 14.628572 5.485715 3.657143 3.657143 5.485714 9.142857 5.485714 14.628571v25.6z m0 0"
fill={getIconColor(color, 2, '#FFFFFF')}
d="M199.34718011 555.1518428a19.75732168 19.75732168 0 0 1-19.75732086-19.75732168V184.70206305a19.75732168 19.75732168 0 0 1 7.40899512-15.43540677l74.83085513-59.76589829a19.75732168 19.75732168 0 0 1 21.48608716-1.97573209l102.98503921 54.33263444L507.19094717 92.95400146a19.75732168 19.75732168 0 0 1 20.3747374 0l107.80088571 67.91579324 90.14277942-53.22128548a19.75732168 19.75732168 0 0 1 20.99215476 0l88.66098055 59.39544836a19.75732168 19.75732168 0 0 1 8.76731067 16.42327322v343.65391205a19.75732168 19.75732168 0 0 1-39.51464255 0V195.19814084L734.77059442 148.64495144l-89.7723295 52.97431888a19.75732168 19.75732168 0 0 1-20.62170483 0l-108.04785233-68.28624316L396.30297961 201.74275363a19.75732168 19.75732168 0 0 1-19.01642184 0l-101.13278961-53.3447688-57.17274967 45.44183963v341.55469666a19.75732168 19.75732168 0 0 1-19.63383837 19.75732168z"
fill={getIconColor(color, 2, '#2c2c2c')}
/>
<Path
d="M215.771429 144.457143v-3.657143c0-5.485714-1.828571-12.8-3.657143-18.285714 0-1.828571-1.828571-3.657143-1.828572-7.314286-1.828571-7.314286-5.485714-14.628571-9.142857-21.942857V91.428571c-3.657143-7.314286-7.314286-14.628571-12.8-21.942857-1.828571-1.828571-1.828571-3.657143-3.657143-5.485714-3.657143-5.485714-7.314286-10.971429-10.971428-14.628571l-1.828572-1.828572C157.257143 32.914286 138.971429 21.942857 120.685714 12.8c-64 27.428571-100.571429 95.085714-100.571428 173.714286h197.485714V159.085714c0-5.485714-1.828571-10.971429-1.828571-14.628571z m0 0"
fill={getIconColor(color, 3, '#0FB58A')}
/>
<Path
d="M874.057143 850.285714H521.142857c-10.971429 87.771429-80.457143 166.4-168.228571 170.057143 5.485714 0 12.8 1.828571 18.285714 1.828572h455.314286c89.6 0 164.571429-80.457143 177.371428-171.885715h-129.828571z m0 0"
fill={getIconColor(color, 4, '#13EAB2')}
d="M911.47513901 933.75151669H112.04451594a19.75732168 19.75732168 0 0 1-19.75732169-19.75732169V535.39452112a19.75732168 19.75732168 0 0 1 19.75732168-19.75732168h192.51040209a19.75732168 19.75732168 0 0 1 19.75732087 19.13990514c1.23483225 45.31835632 80.8815347 93.35334457 197.69669934 93.35334459s196.33838296-48.52892065 197.57321521-93.97076112a19.75732168 19.75732168 0 0 1 19.75732168-19.13990515h172.13566389a19.75732168 19.75732168 0 0 1 19.75732169 19.75732168v379.34057374a19.75732168 19.75732168 0 0 1-19.75732169 19.63383838z m-779.7967847-39.51464337h760.16294632V555.1518428h-135.83158566c-17.9050729 64.8287114-114.96291503 113.11066626-234.61819327 113.11066544s-216.46615457-48.28195486-234.61819327-113.11066544H131.80183762z"
fill={getIconColor(color, 3, '#2c2c2c')}
/>
</Svg>
);
};
IconGongzi.defaultProps = {
size: 18,
};
IconGongzi = React.memo ? React.memo(IconGongzi) : IconGongzi;
export default IconGongzi;
export default React.memo(IconGongzi);
@@ -0,0 +1,44 @@
/* eslint-disable */
/* tslint:disable */
import React from 'react';
import type { FunctionComponent } from 'react';
import type { ViewProps } from 'react-native';
import { Svg, GProps, Path } from 'react-native-svg';
import { getIconColor } from './helper';
interface Props extends Omit<GProps, 'color'>, ViewProps {
size?: number;
color?: string | string[];
}
const IconGouwu: FunctionComponent<Props> = ({
size = 18,
color,
...rest
}) => {
return (
<Svg viewBox="0 0 1024 1024" width={size} height={size} {...rest}>
<Path
d="M704 318.805333v-58.197333C704 152.149333 618.389333 64 512.469333 64s-191.530667 88.149333-191.530666 196.608v58.197333h42.666666v-58.197333c0-85.162667 66.773333-153.941333 148.864-153.941333C594.538667 106.666667 661.333333 175.445333 661.333333 260.608v58.197333h42.666667z"
fill={getIconColor(color, 0, '#3D3D3D')}
/>
<Path
d="M146.24 363.989333A25.045333 25.045333 0 0 1 170.666667 341.333333h682.666666c12.309333 0 23.552 10.474667 24.426667 22.656L914.346667 876.373333c0.810667 11.136-7.104 19.626667-18.282667 19.626667H127.936a17.856 17.856 0 0 1-18.282667-19.626667l36.586667-512.384zM103.68 360.96L67.093333 873.344A60.522667 60.522667 0 0 0 127.936 938.666667h768.128a60.373333 60.373333 0 0 0 60.842667-65.322667L920.32 360.96C917.845333 326.464 888.042667 298.666667 853.333333 298.666667H170.666667c-34.837333 0-64.512 27.626667-66.986667 62.293333z"
fill={getIconColor(color, 1, '#3D3D3D')}
/>
<Path
d="M661.333333 469.333333m-42.666666 0a42.666667 42.666667 0 1 0 85.333333 0 42.666667 42.666667 0 1 0-85.333333 0Z"
fill={getIconColor(color, 2, '#3D3D3D')}
/>
<Path
d="M362.666667 469.333333m-42.666667 0a42.666667 42.666667 0 1 0 85.333333 0 42.666667 42.666667 0 1 0-85.333333 0Z"
fill={getIconColor(color, 3, '#3D3D3D')}
/>
</Svg>
);
};
export default React.memo(IconGouwu);
@@ -0,0 +1,32 @@
/* eslint-disable */
/* tslint:disable */
import React from 'react';
import type { FunctionComponent } from 'react';
import type { ViewProps } from 'react-native';
import { Svg, GProps, Path } from 'react-native-svg';
import { getIconColor } from './helper';
interface Props extends Omit<GProps, 'color'>, ViewProps {
size?: number;
color?: string | string[];
}
const IconJianzhi: FunctionComponent<Props> = ({
size = 18,
color,
...rest
}) => {
return (
<Svg viewBox="0 0 1024 1024" width={size} height={size} {...rest}>
<Path
d="M551.76926 159.239747l0-16.324804c0-24.566512-20.09978-44.666292-44.665269-44.666292l-5.573949 0c-24.584931 0-44.665269 20.100804-44.665269 44.666292l0 18.10331c-186.217169 26.523073-329.86173 186.947809-329.86173 380.358821 0 211.888851 172.382069 384.27092 384.291386 384.27092 28.340465 0 56.644091-3.101641 84.075861-9.230222 13.696953-3.062755 22.332634-16.621563 19.269879-30.317493-3.062755-13.716396-16.700357-22.293749-30.336936-19.269879-23.816428 5.296633-48.381917 8.004301-73.008804 8.004301-183.884031 0-333.497537-149.594063-333.497537-333.457628s149.613506-333.478094 333.497537-333.478094c183.864588 0 333.458651 149.614529 333.458651 333.478094 0 24.527626-2.688225 48.994877-7.946996 72.711022-3.042289 13.696953 5.573949 27.255761 19.291368 30.29805 13.676487 3.102664 27.254737-5.572926 30.317493-19.268856 6.068206-27.314089 9.150404-55.496965 9.150404-83.740216C895.565351 343.163687 744.706481 179.538049 551.76926 159.239747zM511.985162 322.885851c-14.031575 0-25.39539 11.383258-25.39539 25.39539l0 191.551664c0 14.033621 11.363815 25.416879 25.39539 25.416879l179.25971 0c14.052041 0 25.396413-11.383258 25.396413-25.416879 0-14.031575-11.344373-25.39539-25.396413-25.39539L537.402041 514.437515 537.402041 348.282265C537.402041 334.26911 526.038226 322.885851 511.985162 322.885851zM751.26792 650.987494c-73.936943 0-133.88222 59.924811-133.88222 133.86073 0 73.9175 59.945277 133.841288 133.88222 133.841288 73.9175 0 133.841288-59.923788 133.841288-133.841288C885.109208 710.912305 825.186444 650.987494 751.26792 650.987494zM796.01403 801.944602c7.925507 0 14.347776 6.423293 14.347776 14.329357 0 7.925507-6.42227 14.329357-14.347776 14.329357l-29.764907 0 0 27.392884c0 7.925507-6.443759 14.3488-14.3488 14.3488-7.924483 0-14.347776-6.423293-14.347776-14.3488l0-27.392884-32.333406 0c-7.925507 0-14.3488-6.40385-14.3488-14.329357 0-7.906064 6.423293-14.329357 14.3488-14.329357L737.551524 801.944602l0-15.632025-31.068599 0c-7.907087 0-14.328333-6.423293-14.328333-14.329357 0-7.924483 6.421246-14.347776 14.328333-14.347776L726.602148 757.635443l-21.957081-21.978571c-5.594415-5.593392-5.594415-14.665001 0-20.258393 5.593392-5.611811 14.685467-5.611811 20.258393 0l27.155477 27.137057 27.155477-27.137057c5.611811-5.611811 14.685467-5.611811 20.277836 0 5.612834 5.593392 5.612834 14.665001 0 20.258393l-21.977547 21.978571 19.783579 0c7.924483 0 14.329357 6.423293 14.329357 14.347776 0 7.906064-6.404873 14.329357-14.329357 14.329357l-31.05018 0 0 15.632025L796.01403 801.944602z"
fill={getIconColor(color, 0, '#272636')}
/>
</Svg>
);
};
export default React.memo(IconJianzhi);
@@ -1,123 +1,32 @@
/* tslint:disable */
/* eslint-disable */
/* tslint:disable */
import React, { FunctionComponent } from 'react';
import { ViewProps } from 'react-native';
import React from 'react';
import type { FunctionComponent } from 'react';
import type { ViewProps } from 'react-native';
import { Svg, GProps, Path } from 'react-native-svg';
import { getIconColor } from './helper';
interface Props extends GProps, ViewProps {
interface Props extends Omit<GProps, 'color'>, ViewProps {
size?: number;
color?: string | string[];
}
let IconJiaotong: FunctionComponent<Props> = ({ size, color, ...rest }) => {
const IconJiaotong: FunctionComponent<Props> = ({
size = 18,
color,
...rest
}) => {
return (
<Svg viewBox="0 0 1024 1024" width={size} height={size} {...rest}>
<Path
d="M32.698182 259.258182h953.832727v194.909091H32.698182z"
fill={getIconColor(color, 0, '#FFFFFF')}
/>
<Path
d="M46.778182 468.363636h937.076363V705.163636H46.778182z"
fill={getIconColor(color, 1, '#F9B332')}
/>
<Path
d="M46.545455 439.854545h953.94909v28.625455H46.545455zM40.96 688.407273h959.534545v28.625454H40.96z"
fill={getIconColor(color, 2, '#1D1D1B')}
/>
<Path
d="M112.407273 331.869091h228.887272v171.636364H112.407273z"
fill={getIconColor(color, 3, '#87CCEC')}
/>
<Path
d="M355.607273 517.934545H98.094545V317.672727h257.512728v200.261818z m-228.887273-28.625454H326.981818v-143.127273H126.72v143.127273z"
fill={getIconColor(color, 4, '#1D1C1A')}
/>
<Path
d="M467.665455 331.869091h228.887272v171.636364H467.665455z"
fill={getIconColor(color, 5, '#87CCEC')}
/>
<Path
d="M710.865455 517.934545H453.352727V317.672727h257.512728v200.261818z m-228.887273-28.625454h200.261818v-143.127273H481.978182v143.127273z"
fill={getIconColor(color, 6, '#1D1C1A')}
/>
<Path
d="M822.923636 331.869091h171.636364v171.636364H822.923636z"
fill={getIconColor(color, 7, '#87CCEC')}
/>
<Path
d="M1008.872727 517.934545H808.610909V317.672727H1008.872727v200.261818z m-171.636363-28.625454h143.010909v-143.127273H837.236364v143.127273z"
fill={getIconColor(color, 8, '#1D1C1A')}
/>
<Path
d="M908.683636 554.356364h85.876364v65.28h-85.876364z"
fill={getIconColor(color, 9, '#E31E26')}
/>
<Path
d="M1008.872727 633.949091h-114.501818v-93.905455H1008.872727v93.905455z m-85.876363-28.625455h57.250909v-36.654545h-57.250909v36.654545z"
fill={getIconColor(color, 10, '#1D1C1A')}
/>
<Path
d="M862.254545 175.010909h28.625455v84.247273H862.254545zM498.618182 184.087273H98.094545v28.625454h71.447273v46.545455h28.625455v-46.545455h200.378182v46.545455H427.054545v-46.545455h71.563637zM862.254545 126.370909h28.625455v28.625455H862.254545zM819.432727 541.090909H862.254545v28.625455h-42.821818z"
fill={getIconColor(color, 11, '#1D1D1B')}
/>
<Path
d="M126.254545 541.090909h28.625455v28.625455h-28.625455zM170.24 541.090909h28.625455v28.625455h-28.625455z"
fill={getIconColor(color, 12, '#FDFEFF')}
/>
<Path
d="M32.698182 717.032727h953.832727v28.625455H32.698182z"
fill={getIconColor(color, 13, '#CBBBA1')}
/>
<Path
d="M214.341818 541.090909h28.625455v28.625455h-28.625455zM202.518109 450.661236l80.963491-80.964654 15.140073 15.138909-80.964655 80.965818zM192.197818 400.646982l29.128146-29.126982 15.138909 15.138909-29.126982 29.128146zM555.630545 450.661236l80.963491-80.964654 15.140073 15.138909-80.964654 80.965818zM550.355782 400.646982l29.126982-29.126982 15.138909 15.138909-29.125818 29.128146zM875.322182 450.661236l80.964654-80.964654 15.138909 15.138909-80.96349 80.965818zM868.724364 400.646982l29.128145-29.128146 15.138909 15.140073-29.125818 29.126982z"
fill={getIconColor(color, 14, '#FDFEFF')}
/>
<Path
d="M1008.872727 774.167273H18.385455v-532.945455H1008.872727v532.945455zM46.894545 745.541818h933.352728V269.963636H46.894545v475.578182z"
fill={getIconColor(color, 15, '#1D1C1A')}
/>
<Path
d="M291.258182 764.392727m-96 0a96 96 0 1 0 192 0 96 96 0 1 0-192 0Z"
fill={getIconColor(color, 16, '#373736')}
/>
<Path
d="M291.258182 874.589091c-60.741818 0-110.196364-49.454545-110.196364-110.312727 0-60.741818 49.454545-110.196364 110.196364-110.196364s110.196364 49.454545 110.196363 110.196364c0 60.858182-49.454545 110.312727-110.196363 110.312727z m0-191.883636c-45.032727 0-81.687273 36.654545-81.687273 81.687272s36.654545 81.687273 81.687273 81.687273 81.687273-36.654545 81.687273-81.687273-36.770909-81.687273-81.687273-81.687272z"
fill={getIconColor(color, 17, '#1D1C1A')}
/>
<Path
d="M291.258182 764.392727m-40.494546 0a40.494545 40.494545 0 1 0 80.989091 0 40.494545 40.494545 0 1 0-80.989091 0Z"
fill={getIconColor(color, 18, '#FFFFFF')}
/>
<Path
d="M291.258182 819.2c-30.254545 0-54.807273-24.552727-54.807273-54.807273s24.552727-54.807273 54.807273-54.807272 54.807273 24.552727 54.807273 54.807272-24.552727 54.807273-54.807273 54.807273z m0-81.105455c-14.429091 0-26.181818 11.752727-26.181818 26.181819s11.752727 26.181818 26.181818 26.181818 26.181818-11.752727 26.181818-26.181818-11.752727-26.181818-26.181818-26.181819z"
fill={getIconColor(color, 19, '#1D1C1A')}
/>
<Path
d="M750.778182 764.392727m-96 0a96 96 0 1 0 192 0 96 96 0 1 0-192 0Z"
fill={getIconColor(color, 20, '#373736')}
/>
<Path
d="M750.778182 874.589091c-60.741818 0-110.196364-49.454545-110.196364-110.312727 0-60.741818 49.454545-110.196364 110.196364-110.196364s110.312727 49.454545 110.312727 110.196364c0 60.858182-49.454545 110.312727-110.312727 110.312727z m0-191.883636c-45.032727 0-81.687273 36.654545-81.687273 81.687272s36.654545 81.687273 81.687273 81.687273 81.687273-36.654545 81.687273-81.687273-36.654545-81.687273-81.687273-81.687272z"
fill={getIconColor(color, 21, '#1D1C1A')}
/>
<Path
d="M750.778182 764.392727m-40.494546 0a40.494545 40.494545 0 1 0 80.989091 0 40.494545 40.494545 0 1 0-80.989091 0Z"
fill={getIconColor(color, 22, '#FFFFFF')}
/>
<Path
d="M750.778182 819.2c-30.254545 0-54.807273-24.552727-54.807273-54.807273s24.552727-54.807273 54.807273-54.807272 54.807273 24.552727 54.807273 54.807272-24.552727 54.807273-54.807273 54.807273z m0-81.105455c-14.429091 0-26.181818 11.752727-26.181818 26.181819s11.752727 26.181818 26.181818 26.181818 26.181818-11.752727 26.181818-26.181818-11.752727-26.181818-26.181818-26.181819z"
fill={getIconColor(color, 23, '#1D1C1A')}
d="M959.839213 521.54847c0-40.799218-33.000602-73.963549-73.704652-74.360592L886.134561 241.672178c0-58.004065-47.197952-105.211227-105.21839-105.211227L242.156714 136.460951c-58.020438 0-105.21839 47.208185-105.21839 105.211227l0 205.722408C97.278045 448.983781 65.444013 481.509569 65.444013 521.54847c0 40.030715 31.834033 72.538083 71.494311 74.128301l0 184.752818c0 12.540617 10.156314 22.697955 22.687722 22.697955l18.024515 0 0 28.29237c0 28.467355 14.552437 41.491996 26.756387 47.363727 13.290701 6.391571 28.716019 6.90834 44.668339 6.90834l26.115797 0c21.366633 0 71.424726 0 71.424726-54.272068l0-28.29237 329.839217 0 0 28.29237c0 28.467355 14.553461 41.491996 26.764574 47.363727 13.283538 6.391571 28.708855 6.90834 44.668339 6.90834l26.107611 0c21.375843 0 71.433936 0 71.433936-54.272068l0-28.29237 18.016329 0c12.530384 0 22.686698-10.157337 22.686698-22.697955L886.132514 595.918271C926.837588 595.504856 959.839213 562.338479 959.839213 521.54847zM110.82048 521.54847c0-15.027252 11.485589-27.275203 26.116821-28.776394l0 57.545624C122.306068 548.797068 110.82048 536.567535 110.82048 521.54847zM301.248553 831.419913c0 4.112668-0.647753 6.080485-0.630357 6.218632-2.333138 1.796926-10.899234 2.695389-25.427112 2.695389l-26.115797 0c-14.526855 0-23.085788-0.898463-25.167193-2.384303-0.243547-0.448208-0.889253-2.417049-0.889253-6.529717l0-28.29237 78.229712 0L301.248553 831.419913zM800.063253 831.419913c0 4.112668-0.657986 6.080485-0.639566 6.218632-2.331092 1.796926-10.891048 2.695389-25.427112 2.695389l-26.107611 0c-14.535041 0-23.094998-0.898463-25.168216-2.384303-0.240477-0.448208-0.898463-2.417049-0.898463-6.529717l0-28.29237 78.239945 0L800.06223 831.419913zM840.758094 631.189589 720.692554 631.189589c-12.532431 0-22.688745 10.157337-22.688745 22.697955 0 12.539594 10.156314 22.696931 22.688745 22.696931l120.06554 0 0 81.183997L182.305581 757.768473l0-81.183997 120.073726 0c12.532431 0 22.688745-10.157337 22.688745-22.696931 0-12.540617-10.156314-22.697955-22.688745-22.697955L182.305581 631.189589l0-93.446275 658.453537 0L840.759117 631.189589zM840.758094 492.372987 182.305581 492.372987 182.305581 241.672178c0-32.992415 26.850531-59.83476 59.851133-59.83476l538.758434 0c33.001625 0 59.842946 26.842345 59.842946 59.83476L840.758094 492.372987zM886.133537 550.524408l0-57.977459c15.684214 0.414439 28.337395 13.231349 28.337395 29.001521C914.471956 537.327852 901.817752 550.143739 886.133537 550.524408z"
fill={getIconColor(color, 0, '#272636')}
/>
</Svg>
);
};
IconJiaotong.defaultProps = {
size: 18,
};
IconJiaotong = React.memo ? React.memo(IconJiaotong) : IconJiaotong;
export default IconJiaotong;
export default React.memo(IconJiaotong);
@@ -0,0 +1,32 @@
/* eslint-disable */
/* tslint:disable */
import React from 'react';
import type { FunctionComponent } from 'react';
import type { ViewProps } from 'react-native';
import { Svg, GProps, Path } from 'react-native-svg';
import { getIconColor } from './helper';
interface Props extends Omit<GProps, 'color'>, ViewProps {
size?: number;
color?: string | string[];
}
const IconKuaidi: FunctionComponent<Props> = ({
size = 18,
color,
...rest
}) => {
return (
<Svg viewBox="0 0 1024 1024" width={size} height={size} {...rest}>
<Path
d="M528 57.621333l369.493333 213.333334A32 32 0 0 1 913.493333 298.666667v426.666666a32 32 0 0 1-16 27.712l-369.493333 213.333334a32 32 0 0 1-32 0l-369.493333-213.333334A32 32 0 0 1 110.506667 725.333333V298.666667a32 32 0 0 1 16-27.712l144.768-83.626667 0.96-1.578667 0.874666 0.533334L496 57.621333a32 32 0 0 1 32 0z m-6.122667 838.357334h-19.797333l9.92 5.738666 9.877333-5.738666zM174.506667 350.592v356.266667l305.493333 176.362666 0.021333-352.917333-305.493333-179.712z m675.029333-0.021333l-70.869333 41.664L778.666667 490.666667a32 32 0 0 1-11.690667 24.746666l-2.56 1.877334-128 85.333333c-20.48 13.653333-47.658667 0.021333-49.642667-23.829333L586.666667 576v-70.826667l-42.666667 25.109334v352.938666l305.493333-176.362666V350.570667zM392.32 191.36l-55.808 32.234667 298.368 175.488a32 32 0 0 1 15.616 24.533333L650.666667 426.666667v89.536l64-42.666667v-92.586667L392.341333 191.36z m-119.509333 69.013333L209.493333 296.938667 512 474.858667l62.741333-36.906667-301.909333-177.578667zM512 122.282667l-55.957333 32.298666 300.202666 176.597334 58.24-34.261334L512 122.282667z"
fill={getIconColor(color, 0, '#4E4E4E')}
/>
</Svg>
);
};
export default React.memo(IconKuaidi);
@@ -0,0 +1,36 @@
/* eslint-disable */
/* tslint:disable */
import React from 'react';
import type { FunctionComponent } from 'react';
import type { ViewProps } from 'react-native';
import { Svg, GProps, Path } from 'react-native-svg';
import { getIconColor } from './helper';
interface Props extends Omit<GProps, 'color'>, ViewProps {
size?: number;
color?: string | string[];
}
const IconLijin: FunctionComponent<Props> = ({
size = 18,
color,
...rest
}) => {
return (
<Svg viewBox="0 0 1024 1024" width={size} height={size} {...rest}>
<Path
d="M596.24 572.84a26.64 26.64 0 1 0 0-53.1h-17.1l20.16-31.68a25.92 25.92 0 0 0-8.28-36h-1.44a29.16 29.16 0 0 0-38.52 9l-37.26 58.68h-3.78l-37.26-59.04a28.98 28.98 0 0 0-38.34-9 25.56 25.56 0 0 0-10.62 34.74 7.38 7.38 0 0 0 0 1.62l20.16 31.68h-17.1a26.64 26.64 0 1 0 0 53.1h56.16v33.12h-55.26a26.64 26.64 0 1 0 0 54h56.16v115.02a28.08 28.08 0 0 0 56.16 0v-115.92h56.16a26.64 26.64 0 1 0 0-54h-56.16v-32.22z"
fill={getIconColor(color, 0, '#333333')}
/>
<Path
d="M762.02 62H262.16a104.22 104.22 0 0 0-104.04 104.22v691.56A104.22 104.22 0 0 0 262.16 962h499.68a104.4 104.4 0 0 0 104.04-104.22V166.22A104.04 104.04 0 0 0 762.02 62z m50.22 795.78A50.22 50.22 0 0 1 762.02 908H262.16a50.4 50.4 0 0 1-50.4-50.4V283.22c66.24 70.38 177.66 115.2 300.24 115.2s234-45 300.6-115.92z m0-674.1a13.68 13.68 0 0 0-1.62 3.24C775.7 279.8 652.76 344.6 512 344.6S249.02 280.34 213.38 188a16.02 16.02 0 0 0-1.44-3.06V166.04A50.22 50.22 0 0 1 262.16 116h499.68a50.4 50.4 0 0 1 50.4 50.4z"
fill={getIconColor(color, 1, '#333333')}
/>
</Svg>
);
};
export default React.memo(IconLijin);
@@ -1,75 +1,32 @@
/* tslint:disable */
/* eslint-disable */
/* tslint:disable */
import React, { FunctionComponent } from 'react';
import { ViewProps } from 'react-native';
import React from 'react';
import type { FunctionComponent } from 'react';
import type { ViewProps } from 'react-native';
import { Svg, GProps, Path } from 'react-native-svg';
import { getIconColor } from './helper';
interface Props extends GProps, ViewProps {
interface Props extends Omit<GProps, 'color'>, ViewProps {
size?: number;
color?: string | string[];
}
let IconLingshi: FunctionComponent<Props> = ({ size, color, ...rest }) => {
const IconLingshi: FunctionComponent<Props> = ({
size = 18,
color,
...rest
}) => {
return (
<Svg viewBox="0 0 1024 1024" width={size} height={size} {...rest}>
<Path
d="M676.73 604.6925c0 21.9-17.925 39.825-39.8325 39.825H501.4625c-21.9075 0-39.8325-17.925-39.8325-39.825V86.855c0-21.9075 17.925-39.825 39.8325-39.825h135.435c21.9075 0 39.825 17.925 39.825 39.825v517.83z"
fill={getIconColor(color, 0, '#FFD553')}
/>
<Path
d="M852.29 625.055c-3.0375 21.6975-23.265 36.9675-44.9625 33.9375l-134.13-18.75c-21.6975-3.0375-36.975-23.2725-33.9375-44.97l71.7-512.8425c3.0375-21.6975 23.265-36.9675 44.9625-33.93l134.13 18.75c21.6975 3.03 36.9675 23.265 33.9375 44.9625l-71.7 512.8425z"
fill={getIconColor(color, 1, '#FFD553')}
/>
<Path
d="M538.145 654.08c1.785 21.825-14.625 41.1525-36.4575 42.9375L366.7025 708.05c-21.8325 1.785-41.16-14.625-42.945-36.45l-42.18-516.12c-1.785-21.8325 14.625-41.16 36.4575-42.9375l134.985-11.025c21.8325-1.7925 41.16 14.61 42.945 36.45l42.18 516.105zM792.2375 706.805c-1.335 21.87-20.325 38.6625-42.1875 37.3275l-135.18-8.2725c-21.8625-1.335-38.6625-20.325-37.3275-42.195l31.62-516.8625c1.335-21.8625 20.325-38.6625 42.195-37.3275l135.18 8.2725c21.87 1.335 38.6625 20.325 37.3275 42.1875l-31.6275 516.87z"
fill={getIconColor(color, 2, '#FDBA55')}
/>
<Path
d="M414.0725 592.685c4.5225 21.4425-9.315 42.675-30.75 47.1975l-132.525 27.9525c-21.435 4.515-42.675-9.3225-47.1975-30.765L96.74 130.4c-4.5225-21.4425 9.3225-42.675 30.7575-47.1975l132.5175-27.9525c21.435-4.5225 42.675 9.315 47.1975 30.7575l106.86 506.685z"
fill={getIconColor(color, 3, '#FFD553')}
/>
<Path
d="M703.025 361.535c-21.915 0-43.575 17.5275-48.15 38.955l-19.6725 92.22c-4.5675 21.42-26.235 38.955-48.1425 38.955H454.1975c-21.915 0-43.575-17.535-48.15-38.955l-19.665-92.2125c-4.575-21.4275-26.235-38.9625-48.15-38.9625H154.19c-21.9075 0-37.0125 17.7-33.57 39.3375l85.4775 536.7675c3.45 21.6375 24.195 39.3375 46.095 39.3375h536.88c21.915 0 42.6525-17.7 46.1025-39.3375l85.4775-536.7675c3.45-21.63-11.6625-39.3375-33.57-39.3375H703.025z"
fill={getIconColor(color, 4, '#FF6376')}
/>
<Path
d="M190.3025 838.5125L200.75 904.1h639.7575l10.4475-65.5725z"
fill={getIconColor(color, 5, '#FFD553')}
/>
<Path
d="M310.6925 646.8725m-27.2025 0a27.2025 27.2025 0 1 0 54.405 0 27.2025 27.2025 0 1 0-54.405 0Z"
fill={getIconColor(color, 6, '#3F4963')}
/>
<Path
d="M730.5575 646.8725m-27.2025 0a27.2025 27.2025 0 1 0 54.405 0 27.2025 27.2025 0 1 0-54.405 0Z"
fill={getIconColor(color, 7, '#3F4963')}
/>
<Path
d="M339.8 741.9425h-58.2a15.0225 15.0225 0 0 1 0-30.0525h58.2a15.0225 15.0225 0 0 1 0 30.0525zM759.6575 741.9425h-58.2a15.0225 15.0225 0 1 1 0-30.0525h58.2a15.0225 15.0225 0 0 1 0 30.0525z"
fill={getIconColor(color, 8, '#FF9596')}
/>
<Path
d="M486.5675 723.14a49.14 49.14 0 0 1-49.08-49.08 15.0225 15.0225 0 0 1 30.045 0 19.05 19.05 0 0 0 19.035 19.035c10.5 0 19.0425-8.5425 19.0425-19.035a15.0225 15.0225 0 1 1 30.045 0 49.14 49.14 0 0 1-49.0875 49.08z"
fill={getIconColor(color, 9, '#3F4963')}
/>
<Path
d="M554.69 723.14a49.14 49.14 0 0 1-49.08-49.08 15.0225 15.0225 0 1 1 30.045 0 19.05 19.05 0 0 0 19.035 19.035c10.5 0 19.035-8.5425 19.035-19.035a15.0225 15.0225 0 1 1 30.0525 0 49.14 49.14 0 0 1-49.0875 49.08z"
fill={getIconColor(color, 10, '#3F4963')}
/>
<Path
d="M892.13 52.3625L758.0075 33.6125c-29.9475-4.1925-57.735 16.7775-61.9275 46.74l-4.3275 30.945V86.855C691.7525 56.6075 667.145 32 636.8975 32H501.4625c-30.2475 0-54.855 24.6075-54.855 54.855v0.105L324.8675 96.905l-2.955-14.01a54.465 54.465 0 0 0-23.7525-34.5975 54.4575 54.4575 0 0 0-41.2425-7.755L124.3925 68.4875a54.4875 54.4875 0 0 0-34.5975 23.76 54.465 54.465 0 0 0-7.755 41.2425l46.3725 219.8775c-4.5 2.6325-8.55 5.985-11.955 9.975-9.12 10.6875-13.02 25.23-10.6875 39.9l85.4775 536.76c4.65 29.16 31.4175 51.9975 60.9375 51.9975h536.88c29.52 0 56.2875-22.845 60.9375-51.9975l85.47-536.7675c2.34-14.655-1.5525-29.1975-10.68-39.8925a47.3775 47.3775 0 0 0-18.8925-13.3275l32.9625-235.725c4.1925-29.955-16.7775-57.735-46.725-61.9275zM785.6225 162.7475c6.57 0.3975 12.6225 3.3675 17.025 8.355 4.4175 4.9875 6.6225 11.3475 6.225 17.925l-9.6375 157.485H703.0175c-29.1525 0-56.7525 22.335-62.8275 50.85L620.51 489.575c-1.89 8.8575-8.5275 17.0325-16.7775 22.035l20.4225-333.885a24.615 24.615 0 0 1 8.355-17.025 24.645 24.645 0 0 1 17.925-6.225l135.18 8.2725zM476.6525 86.855a24.84 24.84 0 0 1 24.8175-24.81h135.4275a24.84 24.84 0 0 1 24.81 24.81v38.205l-9.4275-0.5775a54.435 54.435 0 0 0-39.675 13.7025 54.4725 54.4725 0 0 0-18.435 37.7025l-20.8425 340.7475h-31.335l-31.05-379.89A54.4725 54.4725 0 0 0 491.75 99.425a55.2 55.2 0 0 0-15.0825-9.12v-3.45z m-22.4025 29.625a24.63 24.63 0 0 1 18.045 5.85 24.63 24.63 0 0 1 8.7 16.86l30.8475 377.445h-57.6525c-14.7375 0-30.3675-12.645-33.45-27.06l-19.6575-92.2125c-2.7825-13.0425-10.0725-24.78-19.95-33.69l-50.0175-237.1275L454.25 116.48zM111.4475 127.2875a24.615 24.615 0 0 1 3.525-18.6375 24.6225 24.6225 0 0 1 15.63-10.755l132.5175-27.9525a24.6225 24.6225 0 0 1 18.6375 3.525 24.615 24.615 0 0 1 10.755 15.63l54.435 258.075a58.4025 58.4025 0 0 0-8.7-0.66H157.6775l-46.2375-219.225z m794.3625 271.2225L820.325 935.285c-2.31 14.46-16.62 26.67-31.2675 26.67H252.2c-14.6475 0-28.9575-12.21-31.26-26.67L135.455 398.51c-0.9675-6.045 0.405-11.61 3.87-15.6675 3.45-4.05 8.7375-6.285 14.8575-6.285h184.0575c14.7375 0 30.375 12.6525 33.45 27.075l19.665 92.205c6.0825 28.515 33.6825 50.85 62.835 50.85h132.87c29.16 0 56.76-22.335 62.835-50.85L669.575 403.625c3.075-14.415 18.705-27.0675 33.45-27.0675h184.05c6.1275 0 11.4075 2.235 14.865 6.285 3.465 4.05 4.8375 9.6225 3.8775 15.675z m3.3-288.375l-33.0525 236.3775h-46.7175l9.525-155.655a54.4875 54.4875 0 0 0-13.7025-39.6675 54.48 54.48 0 0 0-37.7025-18.435l-67.785-4.1475 6.165-44.1a24.825 24.825 0 0 1 28.005-21.135l134.1225 18.75a24.84 24.84 0 0 1 21.1425 28.005zM310.7 619.655a27.2025 27.2025 0 1 0 0 54.405 27.2025 27.2025 0 0 0 0-54.405z m419.8575 0a27.2025 27.2025 0 1 0 0 54.405 27.2025 27.2025 0 0 0 0-54.405z m-141.81 39.375a15.0225 15.0225 0 0 0-15.0225 15.0225c0 10.5-8.5425 19.035-19.035 19.035a19.0575 19.0575 0 0 1-19.035-19.035 15.0225 15.0225 0 1 0-30.0525 0c0 10.5-8.5425 19.035-19.035 19.035a19.0575 19.0575 0 0 1-19.035-19.035 15.0225 15.0225 0 1 0-30.0525 0 49.14 49.14 0 0 0 49.08 49.08 48.9 48.9 0 0 0 34.065-13.785 48.9 48.9 0 0 0 34.0575 13.7925 49.14 49.14 0 0 0 49.08-49.0875 15.0075 15.0075 0 0 0-15.015-15.0225z"
fill={getIconColor(color, 11, '#000000')}
d="M500.341379 180.961211l0.434623-111.562643 0 0c0.033867-11.305842-9.031127-20.444214-20.342614-20.472436l-0.067733 0-111.02642 0c-11.27762 0-20.410347 9.132727-20.410347 20.404703 0 0.57009 0 1.24178 0.033867 1.81187l-0.197556 149.228088-17.362342 0-0.169334-78.378895c0.1016-0.603957 0.129822-1.202269 0.129822-1.766714 0-11.305842-9.132727-20.444214-20.404703-20.444214L199.977378 119.780969l-0.067733 0c-11.27762 0.033867-20.370836 9.098861-20.472436 20.274881l20.472436 0.169334-20.370836-0.107245-2.139248 353.421873c-0.033867 0.67169-0.033867 1.332091-0.033867 2.003781 0 1.766714 0.2032 3.550362 0.705557 5.254987l86.777843 472.581952 19.97008-3.646318-20.07168 3.646318c1.806225 9.900373 10.40273 16.758385 20.07168 16.758385l0.033867 0 480.168099 0c10.673663 0 19.507235-8.201392 20.370836-18.671855l68.845411-473.078664 0.073378 0c1.603025-11.07442-6.124233-21.482794-17.328475-23.085819-0.903113-0.129822-1.907826-0.163689-2.912539-0.163689l-0.135467 0-10.464819 0-0.46849-270.160525c0.062089-0.57009 0.095956-1.14018 0.095956-1.738492 0-11.305842-9.166594-20.43857-20.43857-20.43857l-59.244194 0-0.265289-136.821577c0.1016-0.603957 0.1016-1.270002 0.1016-1.840092 0-11.271976-9.098861-20.404703-20.404703-20.404703l-111.12802 0 0 0c-11.271976 0.033867-20.404703 9.200461-20.370836 20.43857l0.095956 0 0.338667 108.621882L532.193036 152.795383l0 0c-11.27762 0-20.410347 9.200461-20.410347 20.43857l0.1016 0 0 7.727258L500.341379 180.961211 500.341379 180.961211zM218.203322 475.13889l1.879603-314.514649 70.51617 0 0.135467 76.437203c-0.169334 1.168402-0.338667 2.472271-0.338667 3.747918l0.169334 0 0.57009 234.329528L218.203322 475.13889 218.203322 475.13889zM331.814902 478.316718 331.442368 261.180198l69.979947 0 0.869246 282.504947c-21.945639-16.097984-44.054967-36.807488-66.333629-61.755977l0.1016-0.033867C334.755662 480.489833 333.350193 479.248053 331.814902 478.316718L331.814902 478.316718zM412.265311 598.041242c0.536223 0.338667 1.202269 0.666046 1.902181 1.004713 26.297513 13.91358 52.922405 21.945639 79.648897 23.351108 52.087026 2.777072 103.468495-19.168567 154.014585-70.787104 7.659525-1.975559 13.546691-8.291704 14.95216-16.120562 5.418676-6.225833 10.837353-12.711312 16.160073-19.569324l131.56659 0-63.093712 433.375571L301.803337 949.295645 222.188306 515.914429l89.718604 0C345.056792 551.942982 378.471962 579.809654 412.265311 598.041242L412.265311 598.041242zM443.038877 567.995811l-0.77329-325.487468c0-0.57009 0.033867-1.174047 0.033867-1.738492 0-1.337736-0.129822-2.579516-0.299156-3.815651l-0.033867-15.15536 70.04768 0 0.801513 359.61384c-5.621877 0.530579-11.27762 0.632179-16.859986 0.299156C478.49734 580.7805 460.835842 576.095603 443.038877 567.995811L443.038877 567.995811zM553.46134 570.705149l-0.57009-367.499143c0.033867-0.637823 0.1016-1.202269 0.1016-1.840092 0-1.337736-0.135467-2.607738-0.400756-3.911607l0-3.815651 70.346836 0-0.530579 325.696313C599.260444 543.848834 576.28187 560.70882 553.46134 570.705149L553.46134 570.705149zM663.189536 475.906536l0.434623-300.838135c0.033867-0.57009 0.033867-1.236136 0.033867-1.873959 0-11.27762-9.127083-20.404703-20.404703-20.404703l-10.837353 0-0.304801-88.251046 70.352481 0 0.265289 118.256966-11.108286 0-0.033867 0c-11.271976 0.033867-20.500659 9.234328-20.370836 20.472436l0.033867 0 0.936979 271.86515-3.245561 0C666.937453 475.13889 665.05785 475.370313 663.189536 475.906536L663.189536 475.906536zM712.860735 475.13889l-0.835379-251.48867 70.346836 0 0.400756 251.48867L712.860735 475.13889 712.860735 475.13889zM401.224758 220.365148l-11.774332 0 0.169334-130.595744L459.966596 89.769404 459.695662 180.961211l-38.235535 0-0.033867 0c-11.27762 0.067733-20.410347 9.200461-20.370836 20.500659l0.095956 0L401.224758 220.365148z"
fill={getIconColor(color, 0, '#2C2D2D')}
/>
</Svg>
);
};
IconLingshi.defaultProps = {
size: 18,
};
IconLingshi = React.memo ? React.memo(IconLingshi) : IconLingshi;
export default IconLingshi;
export default React.memo(IconLingshi);
@@ -0,0 +1,32 @@
/* eslint-disable */
/* tslint:disable */
import React from 'react';
import type { FunctionComponent } from 'react';
import type { ViewProps } from 'react-native';
import { Svg, GProps, Path } from 'react-native-svg';
import { getIconColor } from './helper';
interface Props extends Omit<GProps, 'color'>, ViewProps {
size?: number;
color?: string | string[];
}
const IconQita: FunctionComponent<Props> = ({
size = 18,
color,
...rest
}) => {
return (
<Svg viewBox="0 0 1024 1024" width={size} height={size} {...rest}>
<Path
d="M512 64c249.6 0 448 198.4 448 448s-198.4 448-448 448-448-198.4-448-448 198.4-448 448-448z m0 64C300.8 128 128 300.8 128 512s172.8 384 384 384 384-172.8 384-384-172.8-384-384-384zM377.6 256L512 390.4 646.4 256l44.8 44.8L544 448h128v64h-128v64h128v64h-128v128h-64v-128h-128V576h128V512h-128V448h128L332.8 300.8l44.8-44.8z"
fill={getIconColor(color, 0, '#333333')}
/>
</Svg>
);
};
export default React.memo(IconQita);
@@ -1,18 +1,24 @@
/* tslint:disable */
/* eslint-disable */
/* tslint:disable */
import React, { FunctionComponent } from 'react';
import { ViewProps } from 'react-native';
import React from 'react';
import type { FunctionComponent } from 'react';
import type { ViewProps } from 'react-native';
import { Svg, GProps, Path } from 'react-native-svg';
import { getIconColor } from './helper';
interface Props extends GProps, ViewProps {
interface Props extends Omit<GProps, 'color'>, ViewProps {
size?: number;
color?: string | string[];
}
let IconQq: FunctionComponent<Props> = ({ size, color, ...rest }) => {
const IconQq: FunctionComponent<Props> = ({
size = 18,
color,
...rest
}) => {
return (
<Svg viewBox="0 0 1024 1024" width={size} height={size} {...rest}>
<Path
d="M511.09761 957.257c-80.159 0-153.737-25.019-201.11-62.386-24.057 6.702-54.831 17.489-74.252 30.864-16.617 11.439-14.546 23.106-11.55 27.816 13.15 20.689 225.583 13.211 286.912 6.767v-3.061z"
@@ -55,13 +61,8 @@ let IconQq: FunctionComponent<Props> = ({ size, color, ...rest }) => {
fill={getIconColor(color, 9, '#EB1C26')}
/>
</Svg>
);
};
IconQq.defaultProps = {
size: 18,
};
IconQq = React.memo ? React.memo(IconQq) : IconQq;
export default IconQq;
export default React.memo(IconQq);
@@ -1,59 +1,36 @@
/* tslint:disable */
/* eslint-disable */
/* tslint:disable */
import React, { FunctionComponent } from 'react';
import { ViewProps } from 'react-native';
import React from 'react';
import type { FunctionComponent } from 'react';
import type { ViewProps } from 'react-native';
import { Svg, GProps, Path } from 'react-native-svg';
import { getIconColor } from './helper';
interface Props extends GProps, ViewProps {
interface Props extends Omit<GProps, 'color'>, ViewProps {
size?: number;
color?: string | string[];
}
let IconRiyongpin: FunctionComponent<Props> = ({ size, color, ...rest }) => {
const IconRiyongpin: FunctionComponent<Props> = ({
size = 18,
color,
...rest
}) => {
return (
<Svg viewBox="0 0 1024 1024" width={size} height={size} {...rest}>
<Path
d="M133.12 1024c-16.896 0-30.72-13.824-30.72-30.72V30.72C102.4 13.824 116.224 0 133.12 0c16.896 0 30.72 13.824 30.72 30.72v962.56c0 16.896-13.824 30.72-30.72 30.72z"
fill={getIconColor(color, 0, '#474A54')}
d="M581.632 355.84V269.312c0-1.024 0-2.048-0.512-3.072-1.536-19.456-82.432-67.584-225.792-67.584S131.072 246.784 129.536 266.24c0 1.024 0 2.048-0.512 3.072v5.12c0.512 1.024 0.512 2.048 1.024 3.072 7.68 37.888 101.376 78.336 229.376 78.336h222.208z m-308.224 466.944c23.552 3.584 49.664 5.632 78.336 5.632v1.536h8.192l513.536-0.512c11.776 0 21.504-9.728 21.504-21.504V422.4c0-5.632-2.048-11.264-6.144-14.848-4.096-4.096-9.216-6.144-14.848-6.144H359.936c-86.528 0-177.664-18.944-230.4-55.808v399.872c0 26.112 54.784 62.464 143.872 77.312z m-6.144 45.056c-106.496-15.36-183.296-57.344-183.296-107.008V263.168h0.512C88.576 202.24 207.872 153.6 355.328 153.6c147.456 0 266.752 48.64 270.848 109.568h0.512v92.672h246.784c17.92 0 34.304 7.168 47.104 19.456 12.8 12.8 19.456 29.184 19.456 47.104v386.048c0 36.864-29.696 66.56-66.56 66.56l-513.536 0.512c-32.768 0-64-3.072-92.672-7.68z m92.16-532.992c-62.464 0-125.952-18.432-125.952-59.392s62.976-59.392 125.952-59.392 125.952 18.432 125.952 59.392c-0.512 40.96-63.488 59.392-125.952 59.392z m-76.8-59.392c11.264 6.144 37.888 14.336 76.288 14.336S424.448 281.6 435.2 275.456c-11.264-6.144-37.888-14.336-76.288-14.336s-65.024 8.192-76.288 14.336z m158.72 5.12h0.512-0.512z"
fill={getIconColor(color, 0, '#7D7D7D')}
/>
<Path
d="M338.432 464.896H141.824c-2.56 0-4.096-2.048-4.096-4.096V59.392c0-2.56 2.048-4.096 4.096-4.096h196.096c2.56 0 4.096 2.048 4.096 4.096v400.896c0.512 2.56-1.536 4.608-3.584 4.608z"
fill={getIconColor(color, 1, '#F9D582')}
/>
<Path
d="M338.432 490.496H141.824c-16.384 0-29.696-13.312-29.696-29.696V59.392c0-16.384 13.312-29.696 29.696-29.696h196.096c16.384 0 29.696 13.312 29.696 29.696v400.896c0.512 16.384-12.8 30.208-29.184 30.208z m-175.104-51.2h153.6v-358.4h-153.6v358.4z"
fill={getIconColor(color, 2, '#474A54')}
/>
<Path
d="M205.824 126.976h111.104v51.2H205.824v-51.2z m0 112.64h111.104v51.2H205.824v-51.2z m0 100.352h111.104v51.2H205.824v-51.2z"
fill={getIconColor(color, 3, '#474A54')}
/>
<Path
d="M487.424 881.664l43.008-600.576c0-2.56 2.56-4.608 5.12-4.608h323.072c2.56 0 5.12 2.048 5.12 4.608l43.008 600.576H487.424z"
fill={getIconColor(color, 4, '#92CA9C')}
/>
<Path
d="M460.288 907.264l45.056-627.712c1.024-15.872 14.848-28.672 30.72-28.672h323.072c15.872 0 29.696 12.288 30.72 28.672l45.056 627.712H460.288z m94.208-605.184l-39.424 553.984h364.032L839.68 302.08H554.496z"
fill={getIconColor(color, 5, '#474A54')}
/>
<Path
d="M539.136 302.08c-10.752 0-20.48-5.632-26.112-14.336-5.632-9.216-6.144-19.968-1.536-29.696l54.784-111.616c5.12-10.752 15.872-17.408 27.648-17.408h206.336c11.776 0 22.528 6.656 27.648 17.408l54.784 111.616c4.608 9.728 4.096 20.48-1.536 29.696-5.632 9.216-15.36 14.336-26.112 14.336H539.136z m67.584-121.856L571.904 250.88h250.368l-34.816-70.656H606.72zM909.312 1018.88H484.864c-8.704 0-16.896-3.584-22.528-9.728a32 32 0 0 1-8.192-23.04l9.216-130.048h466.944l9.216 130.048c0.512 8.704-2.56 16.896-8.192 23.04s-13.824 9.728-22.016 9.728z m-402.432-51.2h380.416l-4.096-60.416H511.488l-4.608 60.416z"
fill={getIconColor(color, 6, '#474A54')}
/>
<Path
d="M742.4 179.712h-92.16c-16.896 0-30.72-13.824-30.72-30.72v-117.76c0-16.896 13.824-30.72 30.72-30.72H742.4c16.896 0 30.72 13.824 30.72 30.72v117.76c0 16.896-13.824 30.72-30.72 30.72z m-71.68-51.2h51.2v-76.8h-51.2v76.8z m-95.5392 319.0272l83.3024-83.2512 36.1984 36.1984-83.2768 83.2768-36.224-36.224z m17.2544 113.3824l136.8576-136.8576 36.1984 36.224-136.832 136.832-36.224-36.1984z"
fill={getIconColor(color, 7, '#474A54')}
d="M550.912 573.44c-12.288 0-22.528-10.24-22.528-22.528V459.776c0-12.288 10.24-22.528 22.528-22.528 12.288 0 22.528 10.24 22.528 22.528v91.648c0 12.288-10.24 22.016-22.528 22.016z m0 217.088c-12.288 0-22.528-10.24-22.528-22.528v-91.136c0-12.288 10.24-22.528 22.528-22.528 12.288 0 22.528 10.24 22.528 22.528V768c0 12.288-10.24 22.528-22.528 22.528z"
fill={getIconColor(color, 1, '#FF4A3B')}
/>
</Svg>
);
};
IconRiyongpin.defaultProps = {
size: 18,
};
IconRiyongpin = React.memo ? React.memo(IconRiyongpin) : IconRiyongpin;
export default IconRiyongpin;
export default React.memo(IconRiyongpin);
@@ -0,0 +1,32 @@
/* eslint-disable */
/* tslint:disable */
import React from 'react';
import type { FunctionComponent } from 'react';
import type { ViewProps } from 'react-native';
import { Svg, GProps, Path } from 'react-native-svg';
import { getIconColor } from './helper';
interface Props extends Omit<GProps, 'color'>, ViewProps {
size?: number;
color?: string | string[];
}
const IconRuanjian: FunctionComponent<Props> = ({
size = 18,
color,
...rest
}) => {
return (
<Svg viewBox="0 0 1024 1024" width={size} height={size} {...rest}>
<Path
d="M876.35250854 738.06155396H602.76657104v146.8125h107.80966187c13.20501709 0 24.30065917 10.65234375 24.30065918 24.27923583 0 13.64749146-10.65234375 24.72171021-24.30065918 24.72171021H313.42376709a24.29983521 24.29983521 0 0 1-24.30065918-24.29983521c0-13.62689209 10.65234375-24.70111084 24.30065918-24.70111083h107.38861084V738.06155396H147.64749146A57.54391479 57.54391479 0 0 1 90.125 680.5390625V147.64749146A57.81829834 57.81829834 0 0 1 147.64749146 90.125H876.35333252A57.54391479 57.54391479 0 0 1 933.875 147.64749146v532.89157104a57.54391479 57.54391479 0 0 1-57.52249146 57.52249146zM470.234375 884.87405396h83.109375V738.06155396H470.234375v146.8125zM884.87487792 139.12677002H139.12512208v549.93466186H884.87322998V139.12677002zM234.59494018 390.75213623L323.2109375 301.6953125c4.70407104-4.68264771 10.67376709-7.23449707 17.48638916-7.23449707 6.39157104 0 12.78314209 2.55184937 17.4657898 7.23449707 9.80859375 9.38671875 9.36611938 25.14358521 0 34.50970459l-75.85263062 75.87405395 75.85263062 75.83203125a24.84860229 24.84860229 0 0 1-0.421875 34.95217896 23.203125 23.203125 0 0 1-17.0439148 7.23449707c-6.39074708 0-12.36044312-2.55184937-17.04309082-7.23449707l-88.21472168-88.21472168-0.84375-0.84292603a49.04296875 49.04296875 0 0 1-4.70324707-3.83972167 24.13092041 24.13092041 0 0 1-7.23532105-17.46496583v-0.86517333c0-6.81344604 2.55184937-12.78231812 7.23449708-17.4657898a19.23733521 19.23733521 0 0 1 4.70489501-3.4170227zM557.16204834 297.85723877a25.48141479 25.48141479 0 0 1 21.32528687-12.76171875c4.26077271 0 8.52236938 1.265625 12.33984375 3.39559936 5.96969604 3.39642334 9.80859375 8.52236938 11.51751708 14.91394044 1.70809937 6.39074708 0.84375 13.20419312-2.55267333 18.75201416L467.25982666 551.42388916a24.82717896 24.82717896 0 0 1-33.24325562 8.94424438 24.08889771 24.08889771 0 0 1-9.36611938-33.24407958L557.16204834 297.85723877z m101.43951416 34.53030396c0-6.83404541 2.55267334-12.78314209 7.23449707-17.48638916 4.68347168-4.68347168 11.07421875-7.23532104 17.46661377-7.23532105 6.39074708 0 12.36044312 2.55184937 17.04309082 7.23449707l88.21472168 88.21472168 0.86517334 0.421875c1.68667602 0.86517334 3.39477539 2.12997437 4.68182373 3.41702271 4.68347168 4.68264771 7.23532104 11.07421875 7.23532105 17.46578979v2.57327271c-0.421875 5.96969604-2.97454834 11.49609375-7.23449708 15.75686644-1.28704834 1.265625-2.55267334 2.13079834-4.26159667 4.68264771L700.76763916 536.49017334a24.78515625 24.78515625 0 0 1-17.46496582 7.25592041c-6.81427002 0-12.78314209-2.55267334-17.4657898-7.25592041a24.84860229 24.84860229 0 0 1-7.23532104-17.4657898c0-6.81344604 2.55267334-12.78314209 7.23449707-17.46578979l75.85345459-75.85345459-75.85263062-75.85263062a24.84860229 24.84860229 0 0 1-7.23532104-17.46578979z"
fill={getIconColor(color, 0, '#333333')}
/>
</Svg>
);
};
export default React.memo(IconRuanjian);
@@ -0,0 +1,36 @@
/* eslint-disable */
/* tslint:disable */
import React from 'react';
import type { FunctionComponent } from 'react';
import type { ViewProps } from 'react-native';
import { Svg, GProps, Path } from 'react-native-svg';
import { getIconColor } from './helper';
interface Props extends Omit<GProps, 'color'>, ViewProps {
size?: number;
color?: string | string[];
}
const IconShezhi: FunctionComponent<Props> = ({
size = 18,
color,
...rest
}) => {
return (
<Svg viewBox="0 0 1024 1024" width={size} height={size} {...rest}>
<Path
d="M512 697.6c102.4 0 182.4-83.2 182.4-185.6 0-102.4-83.2-185.6-182.4-185.6-102.4 0-182.4 83.2-182.4 185.6C329.6 614.4 412.8 697.6 512 697.6L512 697.6zM512 646.4c-73.6 0-134.4-60.8-134.4-134.4 0-73.6 60.8-134.4 134.4-134.4 73.6 0 134.4 60.8 134.4 134.4C646.4 585.6 585.6 646.4 512 646.4L512 646.4z"
fill={getIconColor(color, 0, '#333333')}
/>
<Path
d="M249.015232 843.178592c35.2 28.8 73.6 51.2 112 67.2 41.6-38.4 96-60.8 150.4-60.8 57.6 0 108.8 22.4 150.4 60.8 41.6-16 80-38.4 112-67.2-12.8-54.4-3.2-112 22.4-163.2 28.8-48 73.6-86.4 128-102.4 3.2-22.4 6.4-44.8 6.4-67.2 0-22.4-3.2-44.8-6.4-67.2-54.4-16-99.2-54.4-128-102.4-28.8-48-35.2-108.8-22.4-163.2-35.2-28.8-73.6-51.2-112-67.2-41.6 38.4-92.8 60.8-150.4 60.8-54.4 0-108.8-22.4-150.4-60.8-41.6 16-80 38.4-112 67.2 12.8 54.4 3.2 112-22.4 163.2-28.8 48-73.6 86.4-128 102.4-3.2 22.4-6.4 44.8-6.4 67.2 0 22.4 3.2 44.8 6.4 67.2 54.4 16 99.2 54.4 128 102.4C252.215232 731.178592 261.815232 788.778592 249.015232 843.178592M361.015232 958.378592c-54.4-19.2-105.6-48-150.4-89.6-6.4-6.4-9.6-16-6.4-22.4 16-48 9.6-99.2-16-140.8-25.6-44.8-64-73.6-112-83.2-9.6-3.2-16-9.6-16-19.2-6.4-28.8-9.6-60.8-9.6-89.6 0-28.8 3.2-57.6 9.6-89.6 3.2-9.6 9.6-16 16-19.2 48-12.8 89.6-41.6 112-83.2 25.6-44.8 28.8-92.8 16-140.8-3.2-9.6 0-19.2 6.4-22.4 44.8-38.4 96-67.2 150.4-89.6 9.6-3.2 16 0 22.4 6.4 35.2 35.2 80 57.6 128 57.6 48 0 96-19.2 128-57.6 6.4-6.4 16-9.6 22.4-6.4 54.4 19.2 105.6 48 150.4 89.6 6.4 6.4 9.6 16 6.4 22.4-16 48-9.6 99.2 16 140.8 25.6 44.8 64 73.6 112 83.2 9.6 3.2 16 9.6 16 19.2 6.4 28.8 9.6 60.8 9.6 89.6 0 28.8-3.2 57.6-9.6 89.6-3.2 9.6-9.6 16-16 19.2-48 12.8-89.6 41.6-112 83.2-25.6 44.8-28.8 92.8-16 140.8 3.2 9.6 0 19.2-6.4 22.4-44.8 38.4-96 67.2-150.4 89.6-9.6 3.2-16 0-22.4-6.4-35.2-35.2-80-57.6-128-57.6-48 0-96 19.2-128 57.6-3.2 3.2-9.6 6.4-16 6.4C364.215232 958.378592 361.015232 958.378592 361.015232 958.378592z"
fill={getIconColor(color, 1, '#333333')}
/>
</Svg>
);
};
export default React.memo(IconShezhi);
@@ -0,0 +1,32 @@
/* eslint-disable */
/* tslint:disable */
import React from 'react';
import type { FunctionComponent } from 'react';
import type { ViewProps } from 'react-native';
import { Svg, GProps, Path } from 'react-native-svg';
import { getIconColor } from './helper';
interface Props extends Omit<GProps, 'color'>, ViewProps {
size?: number;
color?: string | string[];
}
const IconShipin: FunctionComponent<Props> = ({
size = 18,
color,
...rest
}) => {
return (
<Svg viewBox="0 0 1024 1024" width={size} height={size} {...rest}>
<Path
d="M58.915831 640.777969c0 177.848571 155.798369 241.323231 211.926714 258.417561l0 63.800072 472.758254 0 0.004093 0 0-63.649646c56.428174-16.851806 211.927737-80.347956 211.927737-268.225951L955.532629 486.666008 58.915831 486.666008 58.915831 640.777969zM913.503397 640.773875c0 186.342012-190.892655 213.295897-198.674898 214.750015l-11.469216 9.404184 0 56.037271L311.088154 920.965345l0-56.037271-11.126408-9.337669c-7.850805-1.571798-199.016683-40.388872-199.016683-214.81653l0-28.021194 812.559357 0 0 14.010085L913.50442 640.773875zM100.94404 584.733535l0-56.037271 812.559357 0 0 56.037271L100.94404 584.733535zM437.174827 192.46343l504.34874 0 0 42.030255L437.174827 234.493685 437.174827 192.46343 437.174827 192.46343zM72.924893 192.46343l42.029232 0 0 42.030255L72.924893 234.493685 72.924893 192.46343 72.924893 192.46343zM72.924893 290.530956l42.029232 0 0 42.030255-39.73805-0.140193L72.924893 290.530956 72.924893 290.530956zM437.174827 290.530956l504.34874 0 0 42.030255L437.174827 332.561211 437.174827 290.530956 437.174827 290.530956zM133.278469 460.483696c51.325969-11.116175 63.076594-49.13507 65.732074-71.885214L199.010543 192.46343c0-31.122835 40.301891-34.218336 44.839231-34.274618l-0.008186-49.782823c-29.424146 0-87.120197 27.088962-87.120197 89.712231l0 182.140317c-0.953721 4.821819-6.631024 25.688055-33.618679 31.527041L133.278469 460.483696 133.278469 460.483696zM231.088122 460.483696c51.328016-11.116175 63.332421-49.13507 65.989947-71.885214L297.078069 192.46343c0-31.122835 40.048111-34.218336 44.585451-34.274618l-0.008186-49.782823c-29.43131 0-87.122243 27.088962-87.122243 89.712231l0 182.140317c-0.956791 4.821819-6.628978 25.688055-33.617655 31.527041L231.088122 460.483696 231.088122 460.483696zM328.900845 460.483696c51.330062-11.116175 63.585177-49.13507 66.24475-71.885214L395.145595 192.46343c0-31.122835 39.790238-34.218336 44.326555-34.274618l-0.00307-49.782823c-29.43131 0-87.126336 27.088962-87.126336 89.712231l0 182.140317c-0.953721 4.821819-6.631024 25.688055-33.614585 31.527041L328.900845 460.483696 328.900845 460.483696zM328.900845 460.483696"
fill={getIconColor(color, 0, '#2A2B2B')}
/>
</Svg>
);
};
export default React.memo(IconShipin);
@@ -1,51 +0,0 @@
/* tslint:disable */
/* eslint-disable */
import React, { FunctionComponent } from 'react';
import { ViewProps } from 'react-native';
import { Svg, GProps, Path } from 'react-native-svg';
import { getIconColor } from './helper';
interface Props extends GProps, ViewProps {
size?: number;
color?: string | string[];
}
let IconShouru: FunctionComponent<Props> = ({ size, color, ...rest }) => {
return (
<Svg viewBox="0 0 1024 1024" width={size} height={size} {...rest}>
<Path
d="M58.666667 149.333333m40.32 0l604.8 0q40.32 0 40.32 40.32l0 544.32q0 40.32-40.32 40.32l-604.8 0q-40.32 0-40.32-40.32l0-544.32q0-40.32 40.32-40.32Z"
fill={getIconColor(color, 0, '#C1D4FA')}
/>
<Path
d="M631.381333 546.133333v29.845334h-89.536v59.733333h89.6v29.866667h-89.6v59.754666h-59.733333v-59.733333h-89.6v-29.866667h89.642667v-59.754666h-89.642667v-29.866667l92.416 0.362667L362.666667 426.666667h59.733333l89.6 89.6 89.6-89.6h59.733333l-111.914666 119.808z"
fill={getIconColor(color, 1, '#6C89DD')}
/>
<Path
d="M159.466667 229.973333h685.44v100.8H159.466667z"
fill={getIconColor(color, 2, '#FF9579')}
/>
<Path
d="M832 554.666667a170.666667 170.666667 0 0 0-170.666667 170.666666 170.666667 170.666667 0 1 0 170.666667-170.666666z"
fill={getIconColor(color, 3, '#FAAD14')}
/>
<Path
d="M938.666667 726.144c0-11.477333-10.282667-22.144-23.381334-22.144h-166.506666c-13.098667 0-24.32 10.666667-23.381334 22.144 0 11.498667 11.221333 20.522667 23.381334 20.522667h164.629333c13.098667 0 25.258667-9.024 25.258667-20.522667z"
fill={getIconColor(color, 4, '#FFFFFF')}
/>
<Path
d="M831.189333 832c11.477333 0 22.144-10.282667 22.144-23.381333v-166.506667c0-13.098667-10.666667-24.32-22.144-23.381333-11.498667 0-20.522667 11.221333-20.522666 23.381333v164.629333c0 13.098667 9.024 25.258667 20.522666 25.258667z"
fill={getIconColor(color, 5, '#FFFFFF')}
/>
</Svg>
);
};
IconShouru.defaultProps = {
size: 18,
};
IconShouru = React.memo ? React.memo(IconShouru) : IconShouru;
export default IconShouru;
@@ -1,47 +0,0 @@
/* tslint:disable */
/* eslint-disable */
import React, { FunctionComponent } from 'react';
import { ViewProps } from 'react-native';
import { Svg, GProps, Path } from 'react-native-svg';
import { getIconColor } from './helper';
interface Props extends GProps, ViewProps {
size?: number;
color?: string | string[];
}
let IconShucai: FunctionComponent<Props> = ({ size, color, ...rest }) => {
return (
<Svg viewBox="0 0 1024 1024" width={size} height={size} {...rest}>
<Path
d="M988.86528 307.2s185.6 651.2-299.2 688S96.06528 859.2 25.66528 696l963.2-388.8z"
fill={getIconColor(color, 0, '#036029')}
/>
<Path
d="M432.06528 70.4s54.4-72 211.2-36.8 376 227.2 366.4 363.2-27.2 153.6 0 200-27.2 81.6-73.6 99.2c-46.4 17.6-17.6 126.4-73.6 126.4-54.4 0-73.6-9.6-118.4 0-46.4 9.6-118.4-108.8-118.4-108.8l-164.8-336L432.06528 80"
fill={getIconColor(color, 1, '#3B8234')}
/>
<Path
d="M48.06528 760s-147.2-336 73.6-571.2c17.6-27.2 46.4-54.4 147.2-54.4S368.06528 16 432.06528 33.6s54.4 81.6 128 81.6 83.2-44.8 118.4 0c36.8 44.8 36.8 108.8 91.2 145.6 54.4 36.8 91.2 27.2 100.8 72 9.6 44.8-46.4 118.4-27.2 145.6S928.06528 560 864.06528 624s-100.8 64-100.8 108.8 27.2 91.2-36.8 118.4-128 27.2-137.6 64-36.8 54.4-73.6 64c-36.8 9.6-110.4-54.4-147.2-44.8-36.8 6.4-182.4 60.8-320-174.4z"
fill={getIconColor(color, 2, '#86C958')}
/>
<Path
d="M65.66528 777.6S212.86528 352 670.46528 360c0 0-366.4 0-550.4 489.6 1.6 0-44.8-35.2-54.4-72z"
fill={getIconColor(color, 3, '#FFFFFF')}
/>
<Path
d="M139.26528 668.8s-110.4-153.6 9.6-344c0 0-73.6 244.8 9.6 308.8l-19.2 35.2zM350.46528 451.2s-17.6-180.8 137.6-254.4c0 0-128 99.2-100.8 235.2l-36.8 19.2zM276.86528 550.4s137.6 153.6 393.6 81.6c0 0-192 118.4-412.8-44.8l19.2-36.8zM148.86528 750.4c73.6 91.2 284.8 91.2 284.8 91.2-201.6-9.6-265.6-126.4-265.6-126.4l-19.2 35.2z"
fill={getIconColor(color, 4, '#FFFFFF')}
/>
</Svg>
);
};
IconShucai.defaultProps = {
size: 18,
};
IconShucai = React.memo ? React.memo(IconShucai) : IconShucai;
export default IconShucai;
@@ -0,0 +1,32 @@
/* eslint-disable */
/* tslint:disable */
import React from 'react';
import type { FunctionComponent } from 'react';
import type { ViewProps } from 'react-native';
import { Svg, GProps, Path } from 'react-native-svg';
import { getIconColor } from './helper';
interface Props extends Omit<GProps, 'color'>, ViewProps {
size?: number;
color?: string | string[];
}
const IconTongxun: FunctionComponent<Props> = ({
size = 18,
color,
...rest
}) => {
return (
<Svg viewBox="0 0 1024 1024" width={size} height={size} {...rest}>
<Path
d="M388.25414 960.869171l0.011256 0c-33.577746 0-64.377216-7.863085-91.566462-23.397896-29.04143-16.58984-51.697429-42.157145-70.88442-71.577199-2.558265-4.604878-2.814092-5.116531-5.395894-9.841136-28.962635-53.004191 3.577478-136.894833 82.809007-199.290929 43.186591-33.998325 90.929965-53.493332 131.004683-53.493332 29.78435 0 53.893444 10.921747 68.489884 30.894637 3.125177 2.045589 8.338922 4.716418 12.615319 4.716418 1.226944 0 3.780093 0 7.604188-4.328585 0.249687-0.258896 0.496304-0.517793 0.74599-0.799202 22.309098-28.933983 42.927695-60.08854 61.328787-92.621491 16.901948-29.903054 31.862685-60.822251 44.478004-91.973738 1.74576-9.847276 0.431835-14.758122-0.689708-16.137539-0.807389-0.991584-3.209088-1.638313-3.230578-1.638313-21.836331-0.515746-41.34464-10.340509-56.867172-28.395724-29.215392-33.997302-41.636283-93.764524-33.212426-159.886477 12.904914-101.369735 68.502164-177.810708 129.324414-177.810708 0.193405 0 1.528819 0.021489 1.732457 0.021489 2.88777 0.065492 5.709025 0.344854 8.478092 0.775666 37.33635-1.658779 71.680553 6.118348 101.531418 23.160489 138.167826 78.94091 141.076062 327.054801 6.635117 564.845579C679.434895 837.589426 520.724197 960.869171 388.25414 960.869171zM434.23231 653.638881c-28.559453 0-65.875337 15.963577-99.840916 42.700521-59.226916 46.623877-85.359087 107.910709-71.993684 132.970454 2.046612 3.837398 3.481288 6.242168 4.604878 8.18645 13.302981 23.024389 33.208333 43.957141 54.68753 56.238862 19.476587 11.139711 41.872666 16.761756 66.562998 16.761756 113.099894 0 257.461793-115.629507 351.0851-281.204543 116.591415-206.206432 122.194016-433.485809 12.226462-496.309646-22.062482-12.58155-48.088228-18.141172-76.538187-16.439414-2.088568 0.107447-4.179183-0.020466-6.224772-0.409322-1.14201-0.236384-2.305509-0.429789-3.491521-0.473791-29.91431 0-70.095451 57.224306-79.844489 133.816728-6.453992 50.631144 1.960655 98.007151 21.437242 120.673383 9.134031 10.621918 16.880459 10.793834 19.421328 10.859325 2.187829 0 25.778106 0.732687 41.635259 20.316721 12.097526 14.932084 15.621792 35.161824 10.471492 60.08854-0.302899 1.464351-0.733711 2.90926-1.292436 4.310166-13.639648 33.932834-29.882588 67.650773-48.28368 100.205213-20.079314 35.504632-42.668799 69.482491-67.155493 101.001345-1.086751 1.401929-2.304486 2.671852-3.620457 3.793396-11.914354 12.130272-26.618241 18.526959-42.744523 18.526959-25.573445 0-45.415352-16.545838-47.593971-18.443048-1.88493-1.636267-3.533476-3.552919-4.857635-5.687536C456.949708 655.620002 444.024328 653.638881 434.23231 653.638881zM354.773607 483.993133c-12.033058 0-22.720468-8.596795-24.970718-20.853957-4.254907-23.204491 0.786922-46.688345 14.187117-66.122977 13.412474-19.413142 33.57877-32.467459 56.792471-36.712133 13.833053-2.521426 27.050076 6.613628 29.580712 20.425192 2.533706 13.809517-6.613628 27.059286-20.423145 29.578666-9.856485 1.810229-18.421558 7.347339-24.109094 15.59928-5.698792 8.229428-7.831362 18.204617-6.033413 28.073382 2.542916 13.809517-6.603395 27.037796-20.413935 29.580712C357.843526 483.84066 356.291171 483.993133 354.773607 483.993133zM268.883425 482.160391c-12.033058 0-22.718421-8.574283-24.959461-20.832468-15.44783-84.199681 40.48404-165.249625 124.680651-180.676989 13.766538-2.51938 27.050076 6.614651 29.581736 20.423145 2.530636 13.789051-6.614651 27.04189-20.413935 29.561269-56.620555 10.384511-94.237291 64.895009-83.85278 121.513518 2.53166 13.811564-6.614651 27.060309-20.425192 29.581736C271.954367 482.010989 270.404058 482.160391 268.883425 482.160391zM170.498674 509.910409c-12.032034 0-22.719444-8.572236-24.969695-20.832468-12.841469-70.042239 2.358721-140.883681 42.808992-199.484334 40.440038-58.602699 101.283778-97.943706 171.326017-110.785176 13.777795-2.520403 27.03882 6.613628 29.580712 20.424168 2.53166 13.81054-6.613628 27.03882-20.424168 29.581736-56.673767 10.382465-105.914238 42.22673-138.652873 89.647763-32.726356 47.441499-45.029566 104.773252-34.645055 161.458275 2.53166 13.789051-6.602372 27.03882-20.412912 29.582759C173.558359 509.783519 172.018284 509.910409 170.498674 509.910409z"
fill={getIconColor(color, 0, '#272636')}
/>
</Svg>
);
};
export default React.memo(IconTongxun);
@@ -1,18 +1,24 @@
/* tslint:disable */
/* eslint-disable */
/* tslint:disable */
import React, { FunctionComponent } from 'react';
import { ViewProps } from 'react-native';
import React from 'react';
import type { FunctionComponent } from 'react';
import type { ViewProps } from 'react-native';
import { Svg, GProps, Path } from 'react-native-svg';
import { getIconColor } from './helper';
interface Props extends GProps, ViewProps {
interface Props extends Omit<GProps, 'color'>, ViewProps {
size?: number;
color?: string | string[];
}
let IconWeixin: FunctionComponent<Props> = ({ size, color, ...rest }) => {
const IconWeixin: FunctionComponent<Props> = ({
size = 18,
color,
...rest
}) => {
return (
<Svg viewBox="0 0 1024 1024" width={size} height={size} {...rest}>
<Path
d="M1024 619.52c0-143.36-138.24-256-307.2-256s-307.2 112.64-307.2 256 138.24 256 307.2 256c30.72 0 61.44-5.12 92.16-10.24l97.28 51.2-25.6-76.8c87.04-51.2 143.36-128 143.36-220.16z m-414.72-40.96c-30.72 0-51.2-20.48-51.2-51.2s20.48-51.2 51.2-51.2 51.2 20.48 51.2 51.2c0 25.6-25.6 51.2-51.2 51.2z m209.92 0c-30.72 0-51.2-20.48-51.2-51.2s20.48-51.2 51.2-51.2 51.2 20.48 51.2 51.2c0 25.6-25.6 51.2-51.2 51.2z"
@@ -23,13 +29,8 @@ let IconWeixin: FunctionComponent<Props> = ({ size, color, ...rest }) => {
fill={getIconColor(color, 1, '#4CBF00')}
/>
</Svg>
);
};
IconWeixin.defaultProps = {
size: 18,
};
IconWeixin = React.memo ? React.memo(IconWeixin) : IconWeixin;
export default IconWeixin;
export default React.memo(IconWeixin);
@@ -0,0 +1,32 @@
/* eslint-disable */
/* tslint:disable */
import React from 'react';
import type { FunctionComponent } from 'react';
import type { ViewProps } from 'react-native';
import { Svg, GProps, Path } from 'react-native-svg';
import { getIconColor } from './helper';
interface Props extends Omit<GProps, 'color'>, ViewProps {
size?: number;
color?: string | string[];
}
const IconWeixiu: FunctionComponent<Props> = ({
size = 18,
color,
...rest
}) => {
return (
<Svg viewBox="0 0 1027 1024" width={size} height={size} {...rest}>
<Path
d="M796.50846406 757.29333008c7.86224531 7.85350987 7.86224531 20.24965019-0.23586768 28.58363086-7.61764219 7.39051084-20.0137834 7.39051084-28.12063183-0.48047081l-123.42852158-123.17518212c-7.61764219-7.85350987-7.61764219-20.24965019 0.4804708-28.34776406 7.62637852-7.62637852 20.4942542-7.62637852 28.59236631 0L796.50846406 757.29333008zM741.94447871 62c12.86787568 0 25.9803545 0.95220528 38.83949385 4.04468877 13.58421328 2.38488135 25.97161816 6.43830557 37.88728858 11.44393506 16.67669677 7.14590771 24.78354521 26.92382344 17.39303437 44.08099101a34.83848408 34.83848408 0 0 1-6.91004004 10.48299434c-25.49988369 25.49114737-50.99103105 50.75516425-76.25504795 76.24631162l4.2892919 15.25275615 3.81755742 15.48862471 15.7244915 4.28929102 15.25275616 4.0534251c25.25528057-25.49114737 50.75516425-50.51929658 76.24631162-76.25504796 12.87661113-13.10374248 34.31433428-13.10374248 47.65394531 0 3.81755742 4.05342422 6.67417324 9.05905459 8.10684844 14.30055176a171.87742705 171.87742705 0 0 1 10.24712666 33.83386348v0.4804708h0.23586767c2.37614502 12.15153721 3.81755742 25.25528057 3.81755742 39.07536152 0 53.61178008-22.16279707 102.93426738-57.6652043 138.68127773-35.26653955 35.50240722-84.83363086 57.42933662-138.6812786 57.42933663-3.81755742 0-7.62637852-0.23586768-11.44393507-0.2358668l-37.17095097 36.6904793L897.78292403 695.81930381l1.65980742 1.90441142a137.73780878 137.73780878 0 0 1 38.83949384 96.02422735c0 35.26653955-13.33961016 70.76894678-40.50803672 97.69277021l-0.48047079 0.4804708c-27.15969112 26.69669209-61.95449619 40.03630224-97.22103575 40.03630225s-71.24068213-13.33961016-97.69277021-40.51677305l-204.9250667-204.68046269-208.95228281 209.45022539c-43.60925566 43.60052021-96.26883047 47.41807763-139.39761622 28.83696943-16.67669677-6.91004004-31.68484981-17.39303437-44.08099013-29.78917471h-0.23586768c-12.38740488-12.62327256-22.63453154-27.40429424-29.54457246-43.84512334-18.58110732-43.12878575-14.77228623-96.02422734 29.07283799-139.38888075v-0.48047081L337.35331602 478.5068331l-85.30536621-85.30536532-75.77457627-22.63453155a33.16994122 33.16994122 0 0 1-21.44645948-18.82571045L82.15355674 181.37509737c-6.67417324-12.38740488-4.52515957-28.59236719 5.95783477-39.07536153L118.60816924 112.03882578 148.63321162 82.01378339c9.29492138-9.28618594 23.83133994-12.86787568 36.69921562-7.14590771l172.51514209 73.6255626a33.02143154 33.02143154 0 0 1 19.06157813 21.44645948l22.39866475 75.77457626 85.30536532 85.30536621 61.23815773-60.76642324c-0.23586768-4.2892919-0.4804708-8.34271612-0.48046993-11.43519961h0.2358668c0-54.56398536 21.9269294-103.88647266 57.4293375-139.15301308v-0.24460313c35.49367178-35.25780411 84.82489541-57.42060117 138.90840908-57.42060117z m-96.26883046 477.02865322l-100.54938604 100.55812237 204.43585956 204.43585957c13.58421328 13.82008096 32.40118828 20.96598867 50.51056026 20.96598867s36.46334795-7.14590771 50.04756211-20.730121l0.47173448-0.23586767c13.82008096-13.33961016 20.25838653-32.1653206 20.25838651-50.27469258 0-17.6376375-6.43830557-35.50240722-19.30618125-48.85075371l-1.42393974-1.42393975-204.44459589-204.4445959zM384.52678965 431.32462315l52.6595748-52.41497081-91.26320097-91.49906865a33.86007158 33.86007158 0 0 1-9.05031827-16.67669678l-19.77791572-66.96012568L179.84632695 145.87269013l-14.05594775 13.82008008-14.05594863 14.29181632 58.38154277 137.24860165 69.10040303 20.25838653c5.72196797 1.66854287 10.48299433 4.52515957 14.30055176 8.81445146L384.52678965 431.32462315zM737.18345234 129.19599336a128.53898086 128.53898086 0 0 0-86.7380414 38.12315537 127.93620938 127.93620938 0 0 0-38.12315625 91.49906866h0.4804708v9.29492138l0.95220527 7.86224531c2.37614502 10.48299433-0.95220528 21.91819394-9.05905371 30.26091006L151.73443057 758.96187295h-0.2358668c-20.96598867 21.68232627-23.35087002 46.23000469-14.77228623 66.47965488 3.5729543 7.85350987 9.05905459 15.72449151 15.48862383 22.3899293 6.91004004 6.67417324 14.53641856 11.91567041 22.87913467 15.48862383 20.24965019 8.81445058 44.56146182 6.42957011 65.99918495-14.53641856l232.08475694-232.07602148 0.95220527-0.95220527 147.73159688-147.96746367 0.95220528-1.18807296 71.00481445-70.53307998h0.2358668c6.91004004-7.62637852 17.6376375-11.43519961 28.35649951-9.76665586 3.33708662 0.47173448 6.42957011 0.95220528 10.01125986 0.95220528 2.37614502 0.23586768 5.71323164 0.4804708 9.53078906 0.48047079 35.74701036 0 68.14819864-14.53641856 91.49906777-37.40681777v-0.4804708c22.16279707-21.91819394 36.21874482-52.6595748 37.41555411-86.7380414-14.53641856 14.77228623-29.07283711 29.07283711-43.60925655 44.08099013-8.33398067 9.28618594-20.96598867 13.10374248-33.83386347 10.24712754l-33.83386436-9.29492226-34.31433428-9.28618506c-11.44393506-3.10121894-20.73012099-11.44393506-23.83134082-23.83134082l-9.05031826-34.31433428-9.29492139-34.31433427c-2.62074815-10.48299433-0.23586768-23.35087002 8.82318692-31.69358614 14.99068213-15.2440207 30.00757148-30.25217461 45.26032763-45.50493076z"
fill={getIconColor(color, 0, '#717071')}
/>
</Svg>
);
};
export default React.memo(IconWeixiu);
@@ -1,71 +1,32 @@
/* tslint:disable */
/* eslint-disable */
/* tslint:disable */
import React, { FunctionComponent } from 'react';
import { ViewProps } from 'react-native';
import React from 'react';
import type { FunctionComponent } from 'react';
import type { ViewProps } from 'react-native';
import { Svg, GProps, Path } from 'react-native-svg';
import { getIconColor } from './helper';
interface Props extends GProps, ViewProps {
interface Props extends Omit<GProps, 'color'>, ViewProps {
size?: number;
color?: string | string[];
}
let IconYule: FunctionComponent<Props> = ({ size, color, ...rest }) => {
const IconYule: FunctionComponent<Props> = ({
size = 18,
color,
...rest
}) => {
return (
<Svg viewBox="0 0 1024 1024" width={size} height={size} {...rest}>
<Path
d="M455.7312 262.0928V147.3536c0-31.1296 25.1904-56.32 56.32-56.32s56.32 25.1904 56.32 56.32v114.7392c0 31.1296-25.1904 56.32-56.32 56.32s-56.32-25.1904-56.32-56.32z"
fill={getIconColor(color, 0, '#F7BC00')}
/>
<Path
d="M478.7712 262.0928V147.3536a33.28 33.28 0 1 1 66.56 0v114.7392a33.28 33.28 0 1 1-66.56 0z"
fill={getIconColor(color, 1, '#FFD029')}
/>
<Path
d="M496.6912 262.0928V147.3536c0-8.4992 6.8608-15.36 15.36-15.36s15.36 6.8608 15.36 15.36v114.7392c0 8.4992-6.8608 15.36-15.36 15.36s-15.36-6.8608-15.36-15.36z"
fill={getIconColor(color, 2, '#FFE576')}
/>
<Path
d="M44.8512 788.1728L117.7088 295.936c8.0896-54.6816 53.76-95.1296 107.52-95.1296h580.4544c54.272 0 100.2496 41.2672 107.7248 96.6656l66.1504 492.2368c9.0624 67.328-41.728 127.3344-107.7248 127.3344h-86.8352c-26.3168 0-51.712-9.8304-71.5264-27.648l-43.1616-38.8096c-19.8144-17.8176-45.2096-27.648-71.5264-27.648H449.9968c-27.0848 0-53.1456 10.3936-73.1648 29.1328l-38.1952 35.7888c-20.0192 18.7392-46.1312 29.1328-73.1648 29.1328h-113.152c-66.56 0.0512-117.504-61.0304-107.4688-128.8192z"
fill={getIconColor(color, 3, '#025FFC')}
/>
<Path
d="M78.848 751.104l67.5328-439.296c7.5264-48.8448 49.8688-84.8896 99.6864-84.8896h538.1632c50.3296 0 92.9792 36.8128 99.8912 86.272l61.3376 439.296c8.3968 60.1088-38.7072 113.664-99.8912 113.664h-80.5376c-24.3712 0-47.9744-8.7552-66.304-24.6784l-40.0384-34.6624a101.25824 101.25824 0 0 0-66.304-24.6784H454.5536c-25.088 0-49.3056 9.2672-67.84 26.0096l-35.4304 31.9488a101.33504 101.33504 0 0 1-67.84 26.0096H178.5344c-61.7472 0.0512-109.0048-54.4768-99.6864-114.9952z"
fill={getIconColor(color, 4, '#0C7AF2')}
/>
<Path
d="M116.0704 711.0144l61.7472-382.72c6.8608-42.5472 45.568-73.984 91.136-73.984h491.9808c46.0288 0 84.992 32.0512 91.2896 75.1616l56.064 382.72c7.68 52.3264-35.3792 99.0208-91.2896 99.0208h-73.6256c-22.272 0-43.8272-7.6288-60.6208-21.504l-36.5568-30.208c-16.7936-13.8752-38.3488-21.504-60.6208-21.504H459.4688c-22.9376 0-45.056 8.0896-62.0032 22.6816l-32.3584 27.8528c-16.9472 14.592-39.0656 22.6816-62.0032 22.6816H207.1552c-56.4224 0.0512-99.584-47.4624-91.0848-100.1984z"
fill={getIconColor(color, 5, '#3489FA')}
/>
<Path
d="M166.0928 659.712l53.9648-307.9168c5.9904-34.2016 39.8336-59.4944 79.616-59.4944h429.824c40.192 0 74.24 25.8048 79.7696 60.4672l48.9984 307.9168c6.7072 42.1376-30.9248 79.6672-79.7696 79.6672h-64.3072c-19.456 0-38.2976-6.144-52.992-17.3056l-31.9488-24.2688c-14.6944-11.1616-33.4848-17.3056-52.992-17.3056H466.1248c-20.0192 0-39.3728 6.5024-54.1696 18.2272l-28.3136 22.3744c-14.848 11.7248-34.1504 18.2272-54.1696 18.2272H245.6576c-49.3056 0.0512-86.9888-38.1952-79.5648-80.5888z"
fill={getIconColor(color, 6, '#3F91FC')}
/>
<Path
d="M691.5072 341.9648c-93.8496 0-171.3664 71.0144-181.8112 162.1504-9.4208-40.3968-45.312-70.656-88.3712-71.2704-0.6656-50.2272-41.7792-90.88-92.16-90.88s-91.4432 40.6528-92.16 90.88c-50.2272 0.7168-90.88 41.7792-90.88 92.16s40.6528 91.4432 90.88 92.16c0.7168 50.2272 41.7792 90.88 92.16 90.88s91.4432-40.6528 92.16-90.88c43.0592-0.6144 79.0016-30.8736 88.3712-71.2704 10.3936 91.0848 87.9616 162.1504 181.8112 162.1504 100.9152 0 183.04-82.1248 183.04-182.9888 0-101.0176-82.1248-183.0912-183.04-183.0912z m0 181.7088c0.768 0 1.28 0.5632 1.28 1.3312 0 1.4848-2.6112 1.4848-2.6112 0 0.0512-0.768 0.6144-1.3312 1.3312-1.3312z"
fill={getIconColor(color, 7, '#025FFC')}
/>
<Path
d="M420.0448 468.6336H385.536v-34.56c0-31.1296-25.1904-56.32-56.32-56.32s-56.32 25.1904-56.32 56.32v34.56h-34.56c-31.1296 0-56.32 25.1904-56.32 56.32s25.1904 56.32 56.32 56.32h34.56v34.5088c0 31.1296 25.1904 56.32 56.32 56.32s56.32-25.1904 56.32-56.32v-34.5088h34.5088c31.1296 0 56.32-25.1904 56.32-56.32s-25.1904-56.32-56.32-56.32zM691.5072 672.1536c-81.152 0-147.2-65.9968-147.2-147.1488 0-81.152 65.9968-147.2 147.2-147.2s147.2 65.9968 147.2 147.2c0 81.1008-66.048 147.1488-147.2 147.1488z m0-181.7088c-19.0464 0-34.56 15.5136-34.56 34.56s15.5136 34.5088 34.56 34.5088 34.56-15.5136 34.56-34.5088c0-19.0976-15.5136-34.56-34.56-34.56z"
fill={getIconColor(color, 8, '#F7BC00')}
/>
<Path
d="M420.0448 491.6736H362.496V434.1248a33.28 33.28 0 1 0-66.56 0v57.6H238.336a33.28 33.28 0 1 0 0 66.56H295.936v57.5488a33.28 33.28 0 1 0 66.56 0v-57.5488h57.5488c18.3808 0 33.28-14.8992 33.28-33.28s-14.8992-33.3312-33.28-33.3312zM691.5072 649.1136c-68.4544 0-124.16-55.7056-124.16-124.1088 0-68.4544 55.7056-124.16 124.16-124.16s124.16 55.7056 124.16 124.16c0 68.4032-55.7056 124.1088-124.16 124.1088z m0-181.7088c-31.744 0-57.6 25.8048-57.6 57.6s25.8048 57.5488 57.6 57.5488 57.6-25.8048 57.6-57.5488-25.856-57.6-57.6-57.6z"
fill={getIconColor(color, 9, '#FFD029')}
/>
<Path
d="M420.0448 509.5936H344.576V434.1248c0-8.4992-6.8608-15.36-15.36-15.36s-15.36 6.8608-15.36 15.36v75.52H238.336c-8.4992 0-15.36 6.8608-15.36 15.36s6.8608 15.36 15.36 15.36H313.856v75.4688c0 8.4992 6.8608 15.36 15.36 15.36s15.36-6.8608 15.36-15.36v-75.4688h75.4688c8.4992 0 15.36-6.8608 15.36-15.36s-6.8608-15.4112-15.36-15.4112zM691.5072 631.1936c-58.5728 0-106.24-47.6672-106.24-106.1888s47.6672-106.24 106.24-106.24 106.24 47.6672 106.24 106.24-47.6672 106.1888-106.24 106.1888z m0-181.7088c-41.6256 0-75.52 33.8432-75.52 75.52 0 41.6256 33.8432 75.4688 75.52 75.4688s75.52-33.8432 75.52-75.4688c0-41.6768-33.8944-75.52-75.52-75.52z"
fill={getIconColor(color, 10, '#FFE576')}
d="M903.966695 700.247408 602.093413 325.978283c0.403183-5.686513 0.868787-11.330046 0.868787-17.141402 0-135.12656-109.933785-245.060345-245.071601-245.060345-135.147026 0-245.081835 109.934808-245.081835 245.060345 0 135.136793 109.934808 245.070578 245.081835 245.070578 5.78168 0 11.455913-0.466628 17.132192-0.847298l374.235356 301.883515c5.028527 4.02978 11.085476 6.024204 17.119913 6.024204 7.011694 0 14.002922-2.671852 19.285229-7.976672l21.341051-21.340027c0.040932 8.228405-1.01819 16.927531-4.158716 25.454742-7.021927 18.96698-23.557532 34.07098-49.143257 44.804439-30.124088 12.68695-76.985372-9.289574-131.244136-34.70543-99.908454-46.840818-236.712213-110.995977-383.123794 3.734044-11.860119 9.29162-13.928221 26.476001-4.647857 38.311561 9.29162 11.837606 26.435069 13.916964 38.293141 4.626367 119.989815-94.065376 229.604328-42.642193 326.332347 2.714831 47.416939 22.234397 92.857874 43.532469 134.733611 43.532469 14.023388 0 27.665083-2.376117 40.828894-7.933693 40.030715-16.844643 66.655096-42.472324 79.118965-76.203566 13.035898-35.217083 6.576789-70.261227 0.044002-91.3925l47.985898-47.987944C911.876851 726.764342 912.726196 711.064778 903.966695 700.247408zM167.350984 308.836881c0-105.054661 85.473697-190.517101 190.539614-190.517101 105.055684 0 190.529381 85.46244 190.529381 190.517101s-85.473697 190.548824-190.529381 190.548824C252.824681 499.385704 167.350984 413.891542 167.350984 308.836881zM764.427638 797.111526 443.481975 538.209942c66.295915-24.865317 118.916367-77.476559 143.749962-143.752008l258.902608 320.93543-38.642089 38.651298c-3.53143 2.249227-6.417153 5.133927-8.528234 8.529257L764.427638 797.111526zM600.172667 515.89061c-10.660804-10.649548-27.918863-10.649548-38.568411 0-10.648524 10.648524-10.648524 27.918863 0 38.568411l59.093886 59.104119c5.325285 5.303796 12.304234 7.977695 19.284205 7.977695 6.970762 0 13.948687-2.673899 19.273972-7.977695 10.660804-10.649548 10.660804-27.91784 0-38.567387L600.172667 515.89061z"
fill={getIconColor(color, 0, '#272636')}
/>
</Svg>
);
};
IconYule.defaultProps = {
size: 18,
};
IconYule = React.memo ? React.memo(IconYule) : IconYule;
export default IconYule;
export default React.memo(IconYule);
@@ -1,51 +0,0 @@
/* tslint:disable */
/* eslint-disable */
import React, { FunctionComponent } from 'react';
import { ViewProps } from 'react-native';
import { Svg, GProps, Path } from 'react-native-svg';
import { getIconColor } from './helper';
interface Props extends GProps, ViewProps {
size?: number;
color?: string | string[];
}
let IconZhichu: FunctionComponent<Props> = ({ size, color, ...rest }) => {
return (
<Svg viewBox="0 0 1024 1024" width={size} height={size} {...rest}>
<Path
d="M149.333333 320m42.666667 0l661.333333 0q42.666667 0 42.666667 42.666667l0 448q0 42.666667-42.666667 42.666666l-661.333333 0q-42.666667 0-42.666667-42.666666l0-448q0-42.666667 42.666667-42.666667Z"
fill={getIconColor(color, 0, '#D6D7BD')}
/>
<Path
d="M64 234.666667h682.666667v469.333333a42.666667 42.666667 0 0 1-42.666667 42.666667H106.666667a42.666667 42.666667 0 0 1-42.666667-42.666667V234.666667z"
fill={getIconColor(color, 1, '#FAF2DD')}
/>
<Path
d="M524.714667 460.8v29.845333H435.2v59.733334h89.6v29.866666h-89.6V640h-59.733333v-59.733333h-89.6v-29.866667h89.642666v-59.754667h-89.642666v-29.866666l92.416 0.362666L256 341.333333h59.733333l89.6 89.6L494.933333 341.333333H554.666667l-111.914667 119.808z"
fill={getIconColor(color, 2, '#FF856A')}
/>
<Path
d="M21.333333 170.666667m42.666667 0l682.666667 0q42.666667 0 42.666666 42.666666l0 0q0 42.666667-42.666666 42.666667l-682.666667 0q-42.666667 0-42.666667-42.666667l0 0q0-42.666667 42.666667-42.666666Z"
fill={getIconColor(color, 3, '#497D51')}
/>
<Path
d="M810.666667 533.333333a170.666667 170.666667 0 0 0-170.666667 170.666667 170.666667 170.666667 0 1 0 170.666667-170.666667z"
fill={getIconColor(color, 4, '#FAAD14')}
/>
<Path
d="M917.333333 704.810667C917.333333 693.333333 907.050667 682.666667 893.952 682.666667h-166.506667c-13.098667 0-24.32 10.666667-23.381333 22.144 0 11.498667 11.221333 20.522667 23.381333 20.522666h164.629334c13.098667 0 25.258667-9.024 25.258666-20.522666z"
fill={getIconColor(color, 5, '#FFFFFF')}
/>
</Svg>
);
};
IconZhichu.defaultProps = {
size: 18,
};
IconZhichu = React.memo ? React.memo(IconZhichu) : IconZhichu;
export default IconZhichu;
@@ -1,18 +1,24 @@
/* tslint:disable */
/* eslint-disable */
/* tslint:disable */
import React, { FunctionComponent } from 'react';
import { ViewProps } from 'react-native';
import React from 'react';
import type { FunctionComponent } from 'react';
import type { ViewProps } from 'react-native';
import { Svg, GProps, Path } from 'react-native-svg';
import { getIconColor } from './helper';
interface Props extends GProps, ViewProps {
interface Props extends Omit<GProps, 'color'>, ViewProps {
size?: number;
color?: string | string[];
}
let IconZhiwen: FunctionComponent<Props> = ({ size, color, ...rest }) => {
const IconZhiwen: FunctionComponent<Props> = ({
size = 18,
color,
...rest
}) => {
return (
<Svg viewBox="0 0 1024 1024" width={size} height={size} {...rest}>
<Path
d="M671.232 309.248c-3.584-1.536-7.168-2.048-10.752-2.048-11.776 0-22.528 7.168-27.136 18.432-5.632 14.848 1.536 31.744 16.384 37.888 68.096 26.624 126.464 72.704 167.424 133.632 41.472 60.416 62.976 131.584 62.976 204.8 0 10.24 5.632 19.968 14.336 25.088 9.216 5.12 19.968 5.12 29.184 0 9.216-5.12 14.336-14.848 14.336-25.088 1.024-175.104-103.936-329.216-266.752-392.704zM523.776 309.76c0-15.872-13.312-29.184-29.184-29.184-232.448 0-421.376 188.928-421.376 421.376 0 10.752 5.12 20.992 14.336 26.112 9.216 5.12 20.48 5.12 29.696 0 9.216-5.12 14.848-15.36 14.336-25.6 0-200.704 162.816-363.52 363.008-363.52 15.872-0.512 29.184-13.312 29.184-29.184z"
@@ -31,13 +37,8 @@ let IconZhiwen: FunctionComponent<Props> = ({ size, color, ...rest }) => {
fill={getIconColor(color, 3, '#FFBB12')}
/>
</Svg>
);
};
IconZhiwen.defaultProps = {
size: 18,
};
IconZhiwen = React.memo ? React.memo(IconZhiwen) : IconZhiwen;
export default IconZhiwen;
export default React.memo(IconZhiwen);
@@ -0,0 +1,36 @@
/* eslint-disable */
/* tslint:disable */
import React from 'react';
import type { FunctionComponent } from 'react';
import type { ViewProps } from 'react-native';
import { Svg, GProps, Path } from 'react-native-svg';
import { getIconColor } from './helper';
interface Props extends Omit<GProps, 'color'>, ViewProps {
size?: number;
color?: string | string[];
}
const IconZhufang: FunctionComponent<Props> = ({
size = 18,
color,
...rest
}) => {
return (
<Svg viewBox="0 0 1024 1024" width={size} height={size} {...rest}>
<Path
d="M640 896h192V469.376h42.666667V896.213333c0 23.466667-19.029333 42.474667-42.666667 42.474667H597.333333V725.333333h-170.666666v213.333334H192c-23.573333 0-42.666667-18.986667-42.666667-42.453334V469.354667h42.666667V896h192V682.666667h256v213.333333z"
fill={getIconColor(color, 0, '#3D3D3D')}
/>
<Path
d="M100.032 506.133333a21.333333 21.333333 0 1 1-29.397333-30.933333L466.282667 99.349333a66.688 66.688 0 0 1 91.434666 0L953.386667 475.2a21.333333 21.333333 0 1 1-29.397334 30.933333L528.341333 130.282667a24.021333 24.021333 0 0 0-32.682666 0L100.053333 506.133333zM832 192h-128a21.333333 21.333333 0 0 1 0-42.666667h149.333333a21.333333 21.333333 0 0 1 21.333334 21.333334v149.333333a21.333333 21.333333 0 0 1-42.666667 0V192z"
fill={getIconColor(color, 1, '#3D3D3D')}
/>
</Svg>
);
};
export default React.memo(IconZhufang);
@@ -4,30 +4,50 @@
import React, { FunctionComponent } from 'react';
import { ViewProps } from 'react-native';
import { GProps } from 'react-native-svg';
import IconZhichu from './IconZhichu';
import IconShouru from './IconShouru';
import IconGongzi from './IconGongzi';
import IconJiaotong from './IconJiaotong';
import IconShucai from './IconShucai';
import IconRiyongpin from './IconRiyongpin';
import IconYule from './IconYule';
import IconLijin from './IconLijin';
import IconLingshi from './IconLingshi';
import IconShipin from './IconShipin';
import IconShezhi from './IconShezhi';
import IconJianzhi from './IconJianzhi';
import IconJiaotong from './IconJiaotong';
import IconTongxun from './IconTongxun';
import IconGouwu from './IconGouwu';
import IconCanyin from './IconCanyin';
import IconZhufang from './IconZhufang';
import IconWeixiu from './IconWeixiu';
import IconFushi from './IconFushi';
import IconRiyongpin from './IconRiyongpin';
import IconKuaidi from './IconKuaidi';
import IconQita from './IconQita';
import IconRuanjian from './IconRuanjian';
import IconYule from './IconYule';
import IconWeixin from './IconWeixin';
import IconZhiwen from './IconZhiwen';
import IconQq from './IconQq';
export { default as IconZhichu } from './IconZhichu';
export { default as IconShouru } from './IconShouru';
export { default as IconGongzi } from './IconGongzi';
export { default as IconJiaotong } from './IconJiaotong';
export { default as IconShucai } from './IconShucai';
export { default as IconRiyongpin } from './IconRiyongpin';
export { default as IconYule } from './IconYule';
export { default as IconLijin } from './IconLijin';
export { default as IconLingshi } from './IconLingshi';
export { default as IconShipin } from './IconShipin';
export { default as IconShezhi } from './IconShezhi';
export { default as IconJianzhi } from './IconJianzhi';
export { default as IconJiaotong } from './IconJiaotong';
export { default as IconTongxun } from './IconTongxun';
export { default as IconGouwu } from './IconGouwu';
export { default as IconCanyin } from './IconCanyin';
export { default as IconZhufang } from './IconZhufang';
export { default as IconWeixiu } from './IconWeixiu';
export { default as IconFushi } from './IconFushi';
export { default as IconRiyongpin } from './IconRiyongpin';
export { default as IconKuaidi } from './IconKuaidi';
export { default as IconQita } from './IconQita';
export { default as IconRuanjian } from './IconRuanjian';
export { default as IconYule } from './IconYule';
export { default as IconWeixin } from './IconWeixin';
export { default as IconZhiwen } from './IconZhiwen';
export { default as IconQq } from './IconQq';
export type IconNames = 'zhichu' | 'shouru' | 'gongzi' | 'jiaotong' | 'shucai' | 'riyongpin' | 'yule' | 'lingshi' | 'weixin' | 'zhiwen' | 'QQ';
export type IconNames = 'gongzi' | 'lijin' | 'lingshi' | 'shipin' | 'shezhi' | 'jianzhi' | 'jiaotong' | 'tongxun' | 'gouwu' | 'canyin' | 'zhufang' | 'weixiu' | 'fushi' | 'riyongpin' | 'kuaidi' | 'qita' | 'ruanjian' | 'yule' | 'weixin' | 'zhiwen' | 'QQ';
interface Props extends GProps, ViewProps {
name: IconNames;
@@ -37,28 +57,48 @@ interface Props extends GProps, ViewProps {
let IconFont: FunctionComponent<Props> = ({ name, ...rest }) => {
switch (name) {
case 'zhichu':
return <IconZhichu key="1" {...rest} />;
case 'shouru':
return <IconShouru key="2" {...rest} />;
case 'gongzi':
return <IconGongzi key="3" {...rest} />;
case 'jiaotong':
return <IconJiaotong key="4" {...rest} />;
case 'shucai':
return <IconShucai key="5" {...rest} />;
case 'riyongpin':
return <IconRiyongpin key="6" {...rest} />;
case 'yule':
return <IconYule key="7" {...rest} />;
return <IconGongzi key="1" {...rest} />;
case 'lijin':
return <IconLijin key="2" {...rest} />;
case 'lingshi':
return <IconLingshi key="8" {...rest} />;
return <IconLingshi key="3" {...rest} />;
case 'shipin':
return <IconShipin key="4" {...rest} />;
case 'shezhi':
return <IconShezhi key="5" {...rest} />;
case 'jianzhi':
return <IconJianzhi key="6" {...rest} />;
case 'jiaotong':
return <IconJiaotong key="7" {...rest} />;
case 'tongxun':
return <IconTongxun key="8" {...rest} />;
case 'gouwu':
return <IconGouwu key="9" {...rest} />;
case 'canyin':
return <IconCanyin key="10" {...rest} />;
case 'zhufang':
return <IconZhufang key="11" {...rest} />;
case 'weixiu':
return <IconWeixiu key="12" {...rest} />;
case 'fushi':
return <IconFushi key="13" {...rest} />;
case 'riyongpin':
return <IconRiyongpin key="14" {...rest} />;
case 'kuaidi':
return <IconKuaidi key="15" {...rest} />;
case 'qita':
return <IconQita key="16" {...rest} />;
case 'ruanjian':
return <IconRuanjian key="17" {...rest} />;
case 'yule':
return <IconYule key="18" {...rest} />;
case 'weixin':
return <IconWeixin key="9" {...rest} />;
return <IconWeixin key="19" {...rest} />;
case 'zhiwen':
return <IconZhiwen key="10" {...rest} />;
return <IconZhiwen key="20" {...rest} />;
case 'QQ':
return <IconQq key="11" {...rest} />;
return <IconQq key="21" {...rest} />;
}
return null;
@@ -1,55 +0,0 @@
import type { MoneyCategory, MoneyRecord } from '@/types/money'
import alovaInstance from '../index'
const API_PREFIX = '/money'
export interface QueryMoneyRecordsParams {
record_time: string
}
export interface QueryMoneyRecordsResult {
[key: string]: MoneyRecord[]
}
export function queryMoneyRecordsApi(params: QueryMoneyRecordsParams) {
return alovaInstance.Post<ResponseData<QueryMoneyRecordsResult>>(`${API_PREFIX}/query`, params)
}
export interface MoneyCategoryResult {
income: MoneyCategory[]
expense: MoneyCategory[]
}
export function getMoneyCategoryApi() {
return alovaInstance.Get<ResponseData<MoneyCategoryResult>>(`${API_PREFIX}/category`)
}
interface InsertMoneyRecordParams {
category_id: number
amount: string
record_time: string
remark: string
}
export function insertMoneyRecordApi(params: InsertMoneyRecordParams) {
return alovaInstance.Post<ResponseData<MoneyCategory>>(`${API_PREFIX}/insert`, params)
}
interface UpdateMoneyRecordParams {
id: number
category_id: number
amount: string
record_time: string
remark: string
}
export function updateMoneyRecordApi(params: UpdateMoneyRecordParams) {
return alovaInstance.Post<ResponseData<any>>(`${API_PREFIX}/update`, params)
}
interface DeleteMoneyRecordParams {
id: number
}
export function deleteMoneyRecordApi(params: DeleteMoneyRecordParams) {
return alovaInstance.Post<ResponseData<any>>(`${API_PREFIX}/delete`, params)
}
@@ -0,0 +1,8 @@
import type { QueryMoneyCategoryResult } from '@/types/money/category'
import alovaInstance from '../../index'
const API_PREFIX = '/money'
export function queryMoneyCategoryApi() {
return alovaInstance.Get<ResponseData<QueryMoneyCategoryResult>>(`${API_PREFIX}/category`)
}
@@ -0,0 +1,12 @@
import type { InsertMoneyRecordParams, InsertMoneyRecordResult, QueryMoneyRecordsParams, QueryMoneyRecordsResult } from '@/types/money/record'
import alovaInstance from '../../index'
const API_PREFIX = '/money'
export function queryMoneyRecordsApi(params: QueryMoneyRecordsParams) {
return alovaInstance.Post<ResponseData<QueryMoneyRecordsResult>>(`${API_PREFIX}/query`, params)
}
export function insertMoneyRecordApi(params: InsertMoneyRecordParams) {
return alovaInstance.Post<ResponseData<InsertMoneyRecordResult>>(`${API_PREFIX}/insert`, params)
}
@@ -30,8 +30,8 @@ function isWhiteListed(url: string) {
}
const alovaInstance = createAlova({
// baseURL: 'http://192.168.5.6:8085/app',
baseURL: 'http://192.168.1.136:8085/app',
baseURL: 'http://192.168.5.6:8085/app',
// baseURL: 'http://192.168.1.136:8085/app',
requestAdapter: axiosRequestAdapter(),
timeout: 5000,
cacheFor: null,
@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="862.70323" height="644.78592" viewBox="0 0 862.70323 644.78592" xmlns:xlink="http://www.w3.org/1999/xlink" role="img" artist="Katerina Limpitsouni" source="https://undraw.co/"><polygon points="629.943 612.644 612.777 612.644 604.608 546.435 629.943 546.435 629.943 612.644" fill="#9e616a"/><path d="M807.65107,769.99215H795.34112l-2.19727-11.62205-5.62754,11.62205H754.86738A7.33919,7.33919,0,0,1,750.697,756.6135l26.07247-18.00658v-11.7495l27.42368,1.63683Z" transform="translate(-168.64838 -127.60704)" fill="#2f2e41"/><polygon points="731.923 590.981 718.148 601.224 672.085 552.969 692.415 537.851 731.923 590.981" fill="#9e616a"/><path d="M925.58816,737.04791,915.71,744.39344l-8.69827-8.015,2.41922,12.68419-26.19923,19.48211a7.33918,7.33918,0,0,1-11.32976-8.24721l10.17712-30.00728-7.0111-9.42842,22.98294-15.05066Z" transform="translate(-168.64838 -127.60704)" fill="#2f2e41"/><path d="M818.57583,398.64705s32.56879,28.13791,17.542,108.35207l-18.3454,78.59653,59.8294,99.2561-19.07664,23.20771-77.77961-107.4334-28.18529-66.11365L744.6516,416.843Z" transform="translate(-168.64838 -127.60704)" fill="#2f2e41"/><polygon points="599.447 425.746 597.488 456.084 603.483 585.365 631.692 580.452 637.083 488.406 599.447 425.746" fill="#2f2e41"/><polygon points="237.445 628.211 252.796 628.21 260.098 569.001 237.443 569.002 237.445 628.211" fill="#ffb6b6"/><path d="M402.178,750.80612l4.32074-.00018,16.86888-6.86018,9.0412,6.85913H432.41A19.26648,19.26648,0,0,1,451.67546,770.07v.62605l-49.49658.00183Z" transform="translate(-168.64838 -127.60704)" fill="#2f2e41"/><polygon points="296.932 618.538 311.905 621.918 332.071 565.772 309.972 560.782 296.932 618.538" fill="#ffb6b6"/><path d="M462.86463,740.39329l4.21465.9516,17.96568-2.97583,7.3082,8.68223.0012.00027a19.26648,19.26648,0,0,1,14.54854,23.03569l-.1379.61067L458.48379,759.7967Z" transform="translate(-168.64838 -127.60704)" fill="#2f2e41"/><path d="M386.6516,393.843c-7.19708,21.70636-6.43618,45.268,1.72992,70.55606l3.49087,142.37821S386.67128,700.146,403.4543,733.00177h24.34l12.05112-134.75129,1.5133-90.44591,52.18244,76.30583L460.30462,730.79868l29.9568,2.678,53.93408-159.1909L477.6516,419.843Z" transform="translate(-168.64838 -127.60704)" fill="#2f2e41"/><path d="M667.346,332.01487c18.61732-16.77656,46.30893-25.21208,69.53714-15.805a115.466,115.466,0,0,0-51.888,59.93484c-3.6979,9.83846-6.78644,21.16623-15.88188,26.43349-5.65933,3.27753-12.70027,3.4377-19.04568,1.85557-6.34568-1.58237-12.16226-4.75415-17.89913-7.89422l-1.63218-.03691C637.86406,372.53682,648.72872,348.79142,667.346,332.01487Z" transform="translate(-168.64838 -127.60704)" fill="#e6e6e6"/><path d="M736.75328,316.71942A98.69239,98.69239,0,0,0,681.847,342.64994a42.50049,42.50049,0,0,0-8.34534,10.37667,24.37584,24.37584,0,0,0-2.81751,12.51568c.10054,4.05833.67335,8.19792-.21438,12.21a14.92537,14.92537,0,0,1-7.42454,9.68865c-4.54586,2.613-9.7595,3.43673-14.886,4.0651-5.692.69769-11.61526,1.33219-16.54238,4.5248-.597.38683-1.16231-.56211-.56622-.94836,8.57235-5.5546,19.41969-3.5335,28.63724-7.24065,4.30108-1.72983,8.10691-4.76631,9.454-9.35719,1.17794-4.01452.5909-8.2838.45359-12.39207a26.01068,26.01068,0,0,1,2.299-12.34028,39.29038,39.29038,0,0,1,7.9156-10.65924,95.74917,95.74917,0,0,1,24.3333-17.41978A100.44256,100.44256,0,0,1,736.743,315.61475c.70319-.09065.70886,1.01461.01026,1.10467Z" transform="translate(-168.64838 -127.60704)" fill="#fff"/><path d="M686.44718,337.79134a14.807,14.807,0,0,1,1.63241-19.1039c.50628-.49873,1.30506.26457.79811.764a13.71094,13.71094,0,0,0-1.48216,17.77371c.41512.5769-.53561,1.13983-.94836.56623Z" transform="translate(-168.64838 -127.60704)" fill="#fff"/><path d="M670.36216,363.49127a28.53932,28.53932,0,0,0,20.3938-4.08346c.59834-.38471,1.16384.56412.56622.94836a29.68517,29.68517,0,0,1-21.23023,4.20607c-.70085-.12626-.42683-1.19655.27021-1.071Z" transform="translate(-168.64838 -127.60704)" fill="#fff"/><path d="M714.44656,321.9478a8.38148,8.38148,0,0,0,6.2686,4.89443c.7021.11732.42732,1.18753-.27021,1.071a9.39213,9.39213,0,0,1-6.94675-5.39917.57084.57084,0,0,1,.19107-.7573.55506.55506,0,0,1,.75729.19107Z" transform="translate(-168.64838 -127.60704)" fill="#fff"/><path d="M762.46124,397.11454c-.44048-.06079-.881-.12157-1.32791-.1756a110.37862,110.37862,0,0,0-17.88208-.90839c-.46221.00673-.93053.02051-1.39159.0405a116.3646,116.3646,0,0,0-41.75015,9.61014,113.00482,113.00482,0,0,0-15.16291,8.0555c-6.68773,4.23438-13.602,9.35764-21.078,11.08459a19.38584,19.38584,0,0,1-2.36217.42086l-30.88864-26.74546c-.03969-.096-.0858-.18531-.12584-.28162l-1.28212-1.01147c.23872-.17556.49008-.35251.72879-.52808.138-.10241.283-.19887.421-.30128.09422-.06639.18881-.13253.27-.19782.03128-.02222.0629-.04413.08811-.05934.08122-.06529.1636-.11732.23871-.17556q2.10345-1.4895,4.23516-2.95463c.00611-.007.00611-.007.0191-.00815a166.15689,166.15689,0,0,1,34.601-18.59939c.36686-.13859.73948-.28453,1.12045-.4109a107.831,107.831,0,0,1,16.93919-4.76651,95.32878,95.328Line truncated

After

Width:  |  Height:  |  Size: 21 KiB

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="1119.60911" height="699" viewBox="0 0 1119.60911 699" xmlns:xlink="http://www.w3.org/1999/xlink" role="img" artist="Katerina Limpitsouni" source="https://undraw.co/"><title>server down</title><circle cx="292.60911" cy="213" r="213" fill="#f2f2f2"/><path d="M31.39089,151.64237c0,77.49789,48.6181,140.20819,108.70073,140.20819" transform="translate(-31.39089 -100.5)" fill="#2f2e41"/><path d="M140.09162,291.85056c0-78.36865,54.255-141.78356,121.30372-141.78356" transform="translate(-31.39089 -100.5)" fill="#6c63ff"/><path d="M70.77521,158.66768c0,73.61476,31.00285,133.18288,69.31641,133.18288" transform="translate(-31.39089 -100.5)" fill="#6c63ff"/><path d="M140.09162,291.85056c0-100.13772,62.7103-181.16788,140.20819-181.16788" transform="translate(-31.39089 -100.5)" fill="#2f2e41"/><path d="M117.22379,292.83905s15.41555-.47479,20.06141-3.783,23.713-7.2585,24.86553-1.95278,23.16671,26.38821,5.76263,26.5286-40.43935-2.711-45.07627-5.53549S117.22379,292.83905,117.22379,292.83905Z" transform="translate(-31.39089 -100.5)" fill="#a8a8a8"/><path d="M168.224,311.78489c-17.40408.14042-40.43933-2.71094-45.07626-5.53548-3.53126-2.151-4.93843-9.86945-5.40926-13.43043-.32607.014-.51463.02-.51463.02s.97638,12.43276,5.61331,15.2573,27.67217,5.67589,45.07626,5.53547c5.02386-.04052,6.7592-1.82793,6.66391-4.47526C173.87935,310.756,171.96329,311.75474,168.224,311.78489Z" transform="translate(-31.39089 -100.5)" opacity="0.2"/><ellipse cx="198.60911" cy="424.5" rx="187" ry="25.43993" fill="#3f3d56"/><ellipse cx="198.60911" cy="424.5" rx="157" ry="21.35866" opacity="0.1"/><ellipse cx="836.60911" cy="660.5" rx="283" ry="38.5" fill="#3f3d56"/><ellipse cx="310.60911" cy="645.5" rx="170" ry="23.12721" fill="#3f3d56"/><path d="M494,726.5c90,23,263-30,282-90" transform="translate(-31.39089 -100.5)" fill="none" stroke="#2f2e41" stroke-miterlimit="10" stroke-width="2"/><path d="M341,359.5s130-36,138,80-107,149-17,172" transform="translate(-31.39089 -100.5)" fill="none" stroke="#2f2e41" stroke-miterlimit="10" stroke-width="2"/><path d="M215.40233,637.78332s39.0723-10.82,41.47675,24.04449-32.15951,44.78287-5.10946,51.69566" transform="translate(-31.39089 -100.5)" fill="none" stroke="#2f2e41" stroke-miterlimit="10" stroke-width="2"/><path d="M810.09554,663.73988,802.218,714.03505s-38.78182,20.60284-11.51335,21.20881,155.73324,0,155.73324,0,24.84461,0-14.54318-21.81478l-7.87756-52.719Z" transform="translate(-31.39089 -100.5)" fill="#2f2e41"/><path d="M785.21906,734.69812c6.193-5.51039,16.9989-11.252,16.9989-11.252l7.87756-50.2952,113.9216.10717,7.87756,49.582c9.185,5.08711,14.8749,8.987,18.20362,11.97818,5.05882-1.15422,10.58716-5.44353-18.20362-21.38921l-7.87756-52.719-113.9216,3.02983L802.218,714.03506S769.62985,731.34968,785.21906,734.69812Z" transform="translate(-31.39089 -100.5)" opacity="0.1"/><rect x="578.43291" y="212.68859" width="513.25314" height="357.51989" rx="18.04568" fill="#2f2e41"/><rect x="595.70294" y="231.77652" width="478.71308" height="267.83694" fill="#3f3d56"/><circle cx="835.05948" cy="223.29299" r="3.02983" fill="#f2f2f2"/><path d="M1123.07694,621.32226V652.6628a18.04341,18.04341,0,0,1-18.04568,18.04568H627.86949A18.04341,18.04341,0,0,1,609.8238,652.6628V621.32226Z" transform="translate(-31.39089 -100.5)" fill="#2f2e41"/><polygon points="968.978 667.466 968.978 673.526 642.968 673.526 642.968 668.678 643.417 667.466 651.452 645.651 962.312 645.651 968.978 667.466" fill="#2f2e41"/><path d="M1125.828,762.03359c-.59383,2.539-2.83591,5.21743-7.90178,7.75032-18.179,9.08949-55.1429-2.42386-55.1429-2.42386s-28.4804-4.84773-28.4804-17.573a22.72457,22.72457,0,0,1,2.49658-1.48459c7.64294-4.04351,32.98449-14.02122,77.9177.42248a18.73921,18.73921,0,0,1,8.54106,5.59715C1125.07908,756.45353,1126.50669,759.15715,1125.828,762.03359Z" transform="translate(-31.39089 -100.5)" fill="#2f2e41"/><path d="M1125.828,762.03359c-22.251,8.526-42.0843,9.1622-62.43871-4.975-10.26507-7.12617-19.59089-8.88955-26.58979-8.75618,7.64294-4.04351,32.98449-14.02122,77.9177.42248a18.73921,18.73921,0,0,1,8.54106,5.59715C1125.07908,756.45353,1126.50669,759.15715,1125.828,762.03359Z" transform="translate(-31.39089 -100.5)" opacity="0.1"/><ellipse cx="1066.53846" cy="654.13477" rx="7.87756" ry="2.42386" fill="#f2f2f2"/><circle cx="835.05948" cy="545.66686" r="11.51335" fill="#f2f2f2"/><polygon points="968.978 667.466 968.978 673.526 642.968 673.526 642.968 668.678 643.417 667.466 968.978 667.466" opacity="0.1"/><rect x="108.60911" y="159" width="208" height="242" fill="#2f2e41"/><rect x="87.60911" y="135" width="250" height="86" fill="#3f3d56"/><rect x="87.60911" y="237" width="250" height="86" fill="#3f3d56"/><rect x="87.60911" y="339" width="250" height="86" fill="#3f3d56"/><rect x="271.60911" y="150" width="16" height="16" fill="#6c63ff" opacity="0.4"/><rect x="294.60911" y="150" width="16" height="16" fill="#6c63ff" opacity="0.8"/><rect x="317.60911" y="150" width="16" height="16" fill="#6c63ff"/><rect x="271Line truncated

After

Width:  |  Height:  |  Size: 6.4 KiB

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="860.13137" height="571.14799" viewBox="0 0 860.13137 571.14799" xmlns:xlink="http://www.w3.org/1999/xlink" role="img" artist="Katerina Limpitsouni" source="https://undraw.co/"><path d="M605.66974,324.95306c-7.66934-12.68446-16.7572-26.22768-30.98954-30.36953-16.482-4.7965-33.4132,4.73193-47.77473,14.13453a1392.15692,1392.15692,0,0,0-123.89338,91.28311l.04331.49238q46.22556-3.1878,92.451-6.37554c22.26532-1.53546,45.29557-3.2827,64.97195-13.8156,7.46652-3.99683,14.74475-9.33579,23.20555-9.70782,10.51175-.46217,19.67733,6.87923,26.8802,14.54931,42.60731,45.371,54.937,114.75409,102.73817,154.61591A1516.99453,1516.99453,0,0,0,605.66974,324.95306Z" transform="translate(-169.93432 -164.42601)" fill="#f2f2f2"/><path d="M867.57068,709.78146c-4.71167-5.94958-6.6369-7.343-11.28457-13.34761q-56.7644-73.41638-106.70791-151.79237-33.92354-53.23-64.48275-108.50439-14.54864-26.2781-28.29961-52.96872-10.67044-20.6952-20.8646-41.63793c-1.94358-3.98782-3.8321-7.99393-5.71122-12.00922-4.42788-9.44232-8.77341-18.93047-13.43943-28.24449-5.31686-10.61572-11.789-21.74485-21.55259-28.877a29.40493,29.40493,0,0,0-15.31855-5.89458c-7.948-.51336-15.28184,2.76855-22.17568,6.35295-50.43859,26.301-97.65922,59.27589-140.3696,96.79771A730.77816,730.77816,0,0,0,303.32241,496.24719c-1.008,1.43927-3.39164.06417-2.37419-1.38422q6.00933-8.49818,12.25681-16.81288A734.817,734.817,0,0,1,500.80465,303.06436q18.24824-11.82581,37.18269-22.54245c6.36206-3.60275,12.75188-7.15967,19.25136-10.49653,6.37146-3.27274,13.13683-6.21547,20.41563-6.32547,24.7701-.385,37.59539,27.66695,46.40506,46.54248q4.15283,8.9106,8.40636,17.76626,16.0748,33.62106,33.38729,66.628,10.68453,20.379,21.83683,40.51955,34.7071,62.71816,73.77854,122.897c34.5059,53.1429,68.73651,100.08874,108.04585,149.78472C870.59617,709.21309,868.662,711.17491,867.57068,709.78146Z" transform="translate(-169.93432 -164.42601)" fill="#e4e4e4"/><path d="M414.91613,355.804c-1.43911-1.60428-2.86927-3.20856-4.31777-4.81284-11.42244-12.63259-23.6788-25.11847-39.3644-32.36067a57.11025,57.11025,0,0,0-23.92679-5.54622c-8.56213.02753-16.93178,2.27348-24.84306,5.41792-3.74034,1.49427-7.39831,3.1902-11.00078,4.99614-4.11634,2.07182-8.15927,4.28118-12.1834,6.50883q-11.33112,6.27044-22.36816,13.09089-21.9606,13.57221-42.54566,29.21623-10.67111,8.11311-20.90174,16.75788-9.51557,8.03054-18.64618,16.492c-1.30169,1.20091-3.24527-.74255-1.94358-1.94347,1.60428-1.49428,3.22691-2.97938,4.84955-4.44613q6.87547-6.21546,13.9712-12.19257,12.93921-10.91827,26.54851-20.99312,21.16293-15.67614,43.78288-29.22541,11.30361-6.76545,22.91829-12.96259c2.33794-1.24675,4.70318-2.466,7.09572-3.6211a113.11578,113.11578,0,0,1,16.86777-6.86632,60.0063,60.0063,0,0,1,25.476-2.50265,66.32706,66.32706,0,0,1,23.50512,8.1314c15.40091,8.60812,27.34573,21.919,38.97,34.90915C418.03337,355.17141,416.09875,357.12405,414.91613,355.804Z" transform="translate(-169.93432 -164.42601)" fill="#e4e4e4"/><path d="M730.47659,486.71092l36.90462-13.498,18.32327-6.70183c5.96758-2.18267,11.92082-4.66747,18.08988-6.23036a28.53871,28.53871,0,0,1,16.37356.20862,37.73753,37.73753,0,0,1,12.771,7.91666,103.63965,103.63965,0,0,1,10.47487,11.18643c3.98932,4.79426,7.91971,9.63877,11.86772,14.46706q24.44136,29.89094,48.56307,60.04134,24.12117,30.14991,47.91981,60.556,23.85681,30.48041,47.38548,61.21573,2.88229,3.76518,5.75966,7.53415c1.0598,1.38809,3.44949.01962,2.37472-1.38808Q983.582,650.9742,959.54931,620.184q-24.09177-30.86383-48.51647-61.46586-24.42421-30.60141-49.17853-60.93743-6.16706-7.55761-12.35445-15.09858c-3.47953-4.24073-6.91983-8.52718-10.73628-12.47427-7.00539-7.24516-15.75772-13.64794-26.23437-13.82166-6.15972-.10214-12.121,1.85248-17.844,3.92287-6.16968,2.232-12.32455,4.50571-18.48633,6.75941l-37.16269,13.59243-9.29067,3.3981c-1.64875.603-.93651,3.2619.73111,2.652Z" transform="translate(-169.93432 -164.42601)" fill="#e4e4e4"/><path d="M366.37741,334.52609c-18.75411-9.63866-42.77137-7.75087-60.00508,4.29119a855.84708,855.84708,0,0,1,97.37056,22.72581C390.4603,353.75916,380.07013,341.5635,366.37741,334.52609Z" transform="translate(-169.93432 -164.42601)" fill="#f2f2f2"/><path d="M306.18775,338.7841l-3.61042,2.93462c1.22123-1.02713,2.4908-1.99013,3.795-2.90144C306.31073,338.80665,306.24935,338.79473,306.18775,338.7841Z" transform="translate(-169.93432 -164.42601)" fill="#f2f2f2"/><path d="M831.54929,486.84576c-3.6328-4.42207-7.56046-9.05222-12.99421-10.84836l-5.07308.20008A575.436,575.436,0,0,0,966.74929,651.418Q899.14929,569.13192,831.54929,486.84576Z" transform="translate(-169.93432 -164.42601)" fill="#f2f2f2"/><path d="M516.08388,450.36652A37.4811,37.4811,0,0,0,531.015,471.32518c2.82017,1.92011,6.15681,3.76209,7.12158,7.03463a8.37858,8.37858,0,0,1-.87362,6.1499,24.88351,24.88351,0,0,1-3.86126,5.04137l-.13667.512c-6.99843-4.14731-13.65641-9.3934-17.52227-16.55115s-4.40553-16.53895.34116-23.14544" transform="translate(-169.93432 -164.42601)" fill="#f2f2f2"/><path d="M749.08388,653.36652A37.4811,37.4811,0,0,0,76Line truncated

After

Width:  |  Height:  |  Size: 23 KiB

@@ -0,0 +1,7 @@
declare module '*.svg' {
import type React from 'react'
import type { SvgProps } from 'react-native-svg'
const content: React.FC<SvgProps>
export default content
}
@@ -1,18 +0,0 @@
export interface MoneyCategory {
id: number
user_id: number
name: string
icon: string
sort_number: number
type: number
}
export interface MoneyRecord {
id: number
category_id: number
user_id: number
amount: string
remark: string
record_time: string
create_time: string
}
@@ -0,0 +1,18 @@
export interface MoneyCategoryBase {
id: number
user_id: number
name: string
icon: string
sort_number: number
type: number
}
// 查询
export interface MoneyCategoryItem extends MoneyCategoryBase {
}
export interface QueryMoneyCategoryResult {
income: MoneyCategoryItem[]
expense: MoneyCategoryItem[]
}
@@ -0,0 +1,45 @@
// types/money/record.ts
// 基础记录
export interface MoneyRecordBase {
id: number
category_id: number
user_id: number
amount: string
remark: string
record_time: string
create_time: string
}
// 查询条件(请求参数)
export interface QueryMoneyRecordsParams {
record_time: string
}
// 查询结果的记录
export interface MoneyRecordItem extends MoneyRecordBase {
category_name: string
category_icon: string
category_type: number
}
// 分组 & 查询结果
export interface MoneyRecordGroup {
record_time: string
expense: string
income: string
records: MoneyRecordItem[]
}
export interface QueryMoneyRecordsResult {
records: MoneyRecordGroup[]
total_income: string
total_expense: string
}
// 新增请求参数
export type InsertMoneyRecordParams = Omit<MoneyRecordBase, 'id' | 'create_time'>
// 新增返回结果
export interface InsertMoneyRecordResult extends MoneyRecordBase {}
@@ -27,3 +27,38 @@ export function getCurrentTime(format = 'HH:mm:ss'): string {
export function getCurrentYearMonth(format = 'YYYY-MM'): string {
return dayjs().format(format)
}
/** 字符串 / 数字 / Date → Date(无效返回 null) */
export function toDate(input: string | number | Date | undefined | null): Date {
if (!input)
return new Date()
if (input instanceof Date)
return input
const d = dayjs(input)
return d.isValid() ? d.toDate() : new Date()
}
/** Date → YYYY-MM-DD */
export function toDateString(date: string | number | Date): string {
const d = dayjs(toDate(date))
return d.isValid() ? d.format('YYYY-MM-DD') : ''
}
/** Date → YYYY-MM */
export function toYearMonthString(date: string | number | Date): string {
const d = dayjs(toDate(date))
return d.isValid() ? d.format('YYYY-MM') : ''
}
/** Date → HH:mm:ss */
export function toTimeString(date: string | number | Date): string {
const d = dayjs(toDate(date))
return d.isValid() ? d.format('HH:mm:ss') : ''
}
/** Date → YYYY-MM-DD HH:mm:ss */
export function toDateTimeString(date: string | number | Date): string {
const d = dayjs(toDate(date))
return d.isValid() ? d.format('YYYY-MM-DD HH:mm:ss') : ''
}
@@ -7,8 +7,10 @@ import (
"base-go-v2/internal/utils/idgen"
"base-go-v2/internal/utils/mapx"
"fmt"
"github.com/shopspring/decimal"
"sort"
"time"
"github.com/shopspring/decimal"
)
func InitMoneyRouter(r *router.Router) {
@@ -54,7 +56,6 @@ func InitDefaultCategories(userID int64) error {
return nil
}
// 根据
func queryMoneyRecords(c *router.Context) error {
bodyData, err := c.GetBodyWithRequired("record_time") // "YYYY-MM"
if err != nil {
@@ -72,38 +73,37 @@ func queryMoneyRecords(c *router.Context) error {
// 获取当月最后一天
endTime := startTime.AddDate(0, 1, 0).Add(-time.Nanosecond)
// SQL: money_record LEFT JOIN money_user_category
// 查询 SQL
sqlStr := fmt.Sprintf(`
SELECT
mr.*,
muc.name AS category_name,
muc.icon AS category_icon,
muc.type AS category_type
FROM money_record mr
LEFT JOIN money_user_category muc ON mr.category_id = muc.id
WHERE mr.create_time BETWEEN '%s' AND '%s'
ORDER BY mr.create_time DESC
`, startTime.Format("2006-01-02 15:04:05"), endTime.Format("2006-01-02 15:04:05"))
SELECT
mr.*,
muc.name AS category_name,
muc.icon AS category_icon,
muc.type AS category_type
FROM money_record mr
LEFT JOIN money_user_category muc ON mr.category_id = muc.id
WHERE mr.create_time BETWEEN '%s' AND '%s'
ORDER BY mr.record_time DESC, mr.create_time DESC
`, startTime.Format("2006-01-02 15:04:05"), endTime.Format("2006-01-02 15:04:05"))
// 查询
list, err := db.SelectBySql(sqlStr)
if err != nil {
return c.AddError(err)
}
// 分组数据
grouped := mapx.New() // mapx.M
grouped := mapx.New()
totalIncome := decimal.NewFromInt(0)
totalExpense := decimal.NewFromInt(0)
for _, r := range list {
row := mapx.M(r)
createTime, ok := row["create_time"].(time.Time)
recordTime, ok := row["record_time"].(time.Time)
if !ok {
continue
}
day := createTime.Format("2006-01-02")
day := recordTime.Format("2006-01-02")
// 获取当天数据
dayDataI := grouped.Get(day)
@@ -129,15 +129,8 @@ func queryMoneyRecords(c *router.Context) error {
continue
}
dayIncome, err := decimal.NewFromString(dayData.GetString("income"))
if err != nil {
dayIncome = decimal.NewFromInt(0)
}
dayExpense, err := decimal.NewFromString(dayData.GetString("expense"))
if err != nil {
dayExpense = decimal.NewFromInt(0)
}
dayIncome, _ := decimal.NewFromString(dayData.GetString("income"))
dayExpense, _ := decimal.NewFromString(dayData.GetString("expense"))
if categoryType == 0 {
dayIncome = dayIncome.Add(amount)
@@ -153,8 +146,28 @@ func queryMoneyRecords(c *router.Context) error {
grouped.Set(day, dayData)
}
// 对日期排序,最新在前
dates := make([]string, 0, len(grouped))
for k := range grouped {
dates = append(dates, k)
}
sort.Slice(dates, func(i, j int) bool {
return dates[i] > dates[j] // 倒序
})
// 构建最终 records 数组
recordsArr := make([]mapx.M, 0, len(dates))
for _, date := range dates {
dayData := grouped.Get(date).(mapx.M)
recordsArr = append(recordsArr, mapx.New().
Set("record_time", date).
Set("income", dayData.GetString("income")).
Set("expense", dayData.GetString("expense")).
Set("records", dayData.GetArray("records")))
}
result := mapx.New().
Set("records", grouped).
Set("records", recordsArr).
Set("total_income", totalIncome.String()).
Set("total_expense", totalExpense.String())
@@ -164,26 +177,27 @@ func queryMoneyRecords(c *router.Context) error {
func getUserCategory(c *router.Context) error {
userId := c.GetUserID()
// 查询当前用户的分类
userCategories, err := db.SelectList("money_user_category",
// 查询当前用户的分类,已经按 sort_number 升序
userCategories, err := db.SelectList(
"money_user_category",
db.BuildWhereString(mapx.New().Set("user_id", userId)),
"sort_number ASC")
"sort_number ASC",
)
if err != nil {
return c.AddError(err)
}
// 按 type 分组
// 按 type 分组并保持顺序
result := map[string][]mapx.M{
"income": {},
"expense": {},
}
for _, cat := range userCategories {
switch cat.GetInt("type") {
case 0:
t := cat.GetInt("type")
if t == 0 {
result["income"] = append(result["income"], cat)
case 1:
} else if t == 1 {
result["expense"] = append(result["expense"], cat)
}
}