feat(custom): 新增动态页面

This commit is contained in:
nongyehong 2024-03-04 05:48:50 +08:00
parent b11593d0e1
commit 196d2d12a8
15 changed files with 309 additions and 149 deletions

View File

@ -7,7 +7,7 @@
<title>Tauri + Vue + TS</title>
<!--引入iconpark图标库-->
<script defer src="https://lf1-cdn-tos.bytegoofy.com/obj/iconpark/svg_30895_60.ef088f300e3d0423bcf60157db474d1d.js"></script>
<script defer src="https://lf1-cdn-tos.bytegoofy.com/obj/iconpark/svg_30895_61.f6c25d2ccb13bf96747417c789d6c0f4.js"></script>
</head>
<body>

View File

@ -38,7 +38,7 @@
"dayjs": "^1.11.10",
"lodash-es": "^4.17.21",
"mitt": "^3.0.1",
"naive-ui": "^2.38.0",
"naive-ui": "^2.38.1",
"pinia": "^2.1.7",
"pinia-plugin-persistedstate": "^3.2.1",
"vue": "^3.4.19",

View File

@ -21,8 +21,8 @@ dependencies:
specifier: ^3.0.1
version: 3.0.1
naive-ui:
specifier: ^2.38.0
version: 2.38.0(vue@3.4.19)
specifier: ^2.38.1
version: 2.38.1(vue@3.4.19)
pinia:
specifier: ^2.1.7
version: 2.1.7(typescript@5.3.3)(vue@3.4.19)
@ -42,7 +42,7 @@ dependencies:
devDependencies:
'@babel/eslint-parser':
specifier: ^7.23.3
version: 7.23.9(@babel/core@7.23.9)(eslint@8.56.0)
version: 7.23.9(@babel/core@7.24.0)(eslint@8.56.0)
'@tauri-apps/cli':
specifier: ^1.5.7
version: 1.5.9
@ -198,14 +198,37 @@ packages:
- supports-color
dev: true
/@babel/eslint-parser@7.23.9(@babel/core@7.23.9)(eslint@8.56.0):
/@babel/core@7.24.0:
resolution: {integrity: sha512-fQfkg0Gjkza3nf0c7/w6Xf34BW4YvzNfACRLmmb7XRLa6XHdR+K9AlJlxneFfWYf6uhOzuzZVTjF/8KfndZANw==}
engines: {node: '>=6.9.0'}
dependencies:
'@ampproject/remapping': 2.2.1
'@babel/code-frame': 7.23.5
'@babel/generator': 7.23.6
'@babel/helper-compilation-targets': 7.23.6
'@babel/helper-module-transforms': 7.23.3(@babel/core@7.24.0)
'@babel/helpers': 7.24.0
'@babel/parser': 7.24.0
'@babel/template': 7.24.0
'@babel/traverse': 7.24.0
'@babel/types': 7.24.0
convert-source-map: 2.0.0
debug: 4.3.4
gensync: 1.0.0-beta.2
json5: 2.2.3
semver: 6.3.1
transitivePeerDependencies:
- supports-color
dev: true
/@babel/eslint-parser@7.23.9(@babel/core@7.24.0)(eslint@8.56.0):
resolution: {integrity: sha512-xPndlO7qxiJbn0ATvfXQBjCS7qApc9xmKHArgI/FTEFxXas5dnjC/VqM37lfZun9dclRYcn+YQAr6uDFy0bB2g==}
engines: {node: ^10.13.0 || ^12.13.0 || >=14.0.0}
peerDependencies:
'@babel/core': ^7.11.0
eslint: ^7.5.0 || ^8.0.0
dependencies:
'@babel/core': 7.23.9
'@babel/core': 7.24.0
'@nicolo-ribaudo/eslint-scope-5-internals': 5.1.1-v1
eslint: 8.56.0
eslint-visitor-keys: 2.1.0
@ -306,6 +329,20 @@ packages:
'@babel/helper-validator-identifier': 7.22.20
dev: true
/@babel/helper-module-transforms@7.23.3(@babel/core@7.24.0):
resolution: {integrity: sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0
dependencies:
'@babel/core': 7.24.0
'@babel/helper-environment-visitor': 7.22.20
'@babel/helper-module-imports': 7.22.15
'@babel/helper-simple-access': 7.22.5
'@babel/helper-split-export-declaration': 7.22.6
'@babel/helper-validator-identifier': 7.22.20
dev: true
/@babel/helper-optimise-call-expression@7.22.5:
resolution: {integrity: sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==}
engines: {node: '>=6.9.0'}
@ -375,6 +412,17 @@ packages:
- supports-color
dev: true
/@babel/helpers@7.24.0:
resolution: {integrity: sha512-ulDZdc0Aj5uLc5nETsa7EPx2L7rM0YJM8r7ck7U73AXi7qOV44IHHRAYZHY6iU1rr3C5N4NtTmMRUJP6kwCWeA==}
engines: {node: '>=6.9.0'}
dependencies:
'@babel/template': 7.24.0
'@babel/traverse': 7.24.0
'@babel/types': 7.24.0
transitivePeerDependencies:
- supports-color
dev: true
/@babel/highlight@7.23.4:
resolution: {integrity: sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==}
engines: {node: '>=6.9.0'}
@ -391,6 +439,14 @@ packages:
dependencies:
'@babel/types': 7.23.9
/@babel/parser@7.24.0:
resolution: {integrity: sha512-QuP/FxEAzMSjXygs8v4N9dvdXzEHN4W1oF3PxuWAtPo08UdM17u89RDMgjLn/mlc56iM0HlLmVkO/wgR+rDgHg==}
engines: {node: '>=6.0.0'}
hasBin: true
dependencies:
'@babel/types': 7.24.0
dev: true
/@babel/plugin-syntax-jsx@7.23.3(@babel/core@7.23.9):
resolution: {integrity: sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg==}
engines: {node: '>=6.9.0'}
@ -440,6 +496,15 @@ packages:
'@babel/types': 7.23.9
dev: true
/@babel/template@7.24.0:
resolution: {integrity: sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==}
engines: {node: '>=6.9.0'}
dependencies:
'@babel/code-frame': 7.23.5
'@babel/parser': 7.24.0
'@babel/types': 7.24.0
dev: true
/@babel/traverse@7.23.9:
resolution: {integrity: sha512-I/4UJ9vs90OkBtY6iiiTORVMyIhJ4kAVmsKo9KFc8UOxMeUfi2hvtIBsET5u9GizXE6/GFSuKCTNfgCswuEjRg==}
engines: {node: '>=6.9.0'}
@ -458,6 +523,24 @@ packages:
- supports-color
dev: true
/@babel/traverse@7.24.0:
resolution: {integrity: sha512-HfuJlI8qq3dEDmNU5ChzzpZRWq+oxCZQyMzIMEqLho+AQnhMnKQUzH6ydo3RBl/YjPCuk68Y6s0Gx0AeyULiWw==}
engines: {node: '>=6.9.0'}
dependencies:
'@babel/code-frame': 7.23.5
'@babel/generator': 7.23.6
'@babel/helper-environment-visitor': 7.22.20
'@babel/helper-function-name': 7.23.0
'@babel/helper-hoist-variables': 7.22.5
'@babel/helper-split-export-declaration': 7.22.6
'@babel/parser': 7.24.0
'@babel/types': 7.24.0
debug: 4.3.4
globals: 11.12.0
transitivePeerDependencies:
- supports-color
dev: true
/@babel/types@7.23.9:
resolution: {integrity: sha512-dQjSq/7HaSjRM43FFGnv5keM2HsxpmyV1PfaSVm0nzzjwwTmjOe6J4bC8e3+pTEIgHaHj+1ZlLThRJ2auc/w1Q==}
engines: {node: '>=6.9.0'}
@ -466,65 +549,74 @@ packages:
'@babel/helper-validator-identifier': 7.22.20
to-fast-properties: 2.0.0
/@commitlint/config-validator@18.6.1:
resolution: {integrity: sha512-05uiToBVfPhepcQWE1ZQBR/Io3+tb3gEotZjnI4tTzzPk16NffN6YABgwFQCLmzZefbDcmwWqJWc2XT47q7Znw==}
/@babel/types@7.24.0:
resolution: {integrity: sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==}
engines: {node: '>=6.9.0'}
dependencies:
'@babel/helper-string-parser': 7.23.4
'@babel/helper-validator-identifier': 7.22.20
to-fast-properties: 2.0.0
dev: true
/@commitlint/config-validator@19.0.3:
resolution: {integrity: sha512-2D3r4PKjoo59zBc2auodrSCaUnCSALCx54yveOFwwP/i2kfEAQrygwOleFWswLqK0UL/F9r07MFi5ev2ohyM4Q==}
engines: {node: '>=v18'}
requiresBuild: true
dependencies:
'@commitlint/types': 18.6.1
'@commitlint/types': 19.0.3
ajv: 8.12.0
dev: true
optional: true
/@commitlint/execute-rule@18.6.1:
resolution: {integrity: sha512-7s37a+iWyJiGUeMFF6qBlyZciUkF8odSAnHijbD36YDctLhGKoYltdvuJ/AFfRm6cBLRtRk9cCVPdsEFtt/2rg==}
/@commitlint/execute-rule@19.0.0:
resolution: {integrity: sha512-mtsdpY1qyWgAO/iOK0L6gSGeR7GFcdW7tIjcNFxcWkfLDF5qVbPHKuGATFqRMsxcO8OUKNj0+3WOHB7EHm4Jdw==}
engines: {node: '>=v18'}
requiresBuild: true
dev: true
optional: true
/@commitlint/load@18.6.1(@types/node@20.11.7)(typescript@5.3.3):
resolution: {integrity: sha512-p26x8734tSXUHoAw0ERIiHyW4RaI4Bj99D8YgUlVV9SedLf8hlWAfyIFhHRIhfPngLlCe0QYOdRKYFt8gy56TA==}
/@commitlint/load@19.0.3(@types/node@20.11.7)(typescript@5.3.3):
resolution: {integrity: sha512-18Tk/ZcDFRKIoKfEcl7kC+bYkEQ055iyKmGsYDoYWpKf6FUvBrP9bIWapuy/MB+kYiltmP9ITiUx6UXtqC9IRw==}
engines: {node: '>=v18'}
requiresBuild: true
dependencies:
'@commitlint/config-validator': 18.6.1
'@commitlint/execute-rule': 18.6.1
'@commitlint/resolve-extends': 18.6.1
'@commitlint/types': 18.6.1
chalk: 4.1.2
'@commitlint/config-validator': 19.0.3
'@commitlint/execute-rule': 19.0.0
'@commitlint/resolve-extends': 19.0.3
'@commitlint/types': 19.0.3
chalk: 5.3.0
cosmiconfig: 8.3.6(typescript@5.3.3)
cosmiconfig-typescript-loader: 5.0.0(@types/node@20.11.7)(cosmiconfig@8.3.6)(typescript@5.3.3)
lodash.isplainobject: 4.0.6
lodash.merge: 4.6.2
lodash.uniq: 4.5.0
resolve-from: 5.0.0
transitivePeerDependencies:
- '@types/node'
- typescript
dev: true
optional: true
/@commitlint/resolve-extends@18.6.1:
resolution: {integrity: sha512-ifRAQtHwK+Gj3Bxj/5chhc4L2LIc3s30lpsyW67yyjsETR6ctHAHRu1FSpt0KqahK5xESqoJ92v6XxoDRtjwEQ==}
/@commitlint/resolve-extends@19.0.3:
resolution: {integrity: sha512-18BKmta8OC8+Ub+Q3QGM9l27VjQaXobloVXOrMvu8CpEwJYv62vC/t7Ka5kJnsW0tU9q1eMqJFZ/nN9T/cOaIA==}
engines: {node: '>=v18'}
requiresBuild: true
dependencies:
'@commitlint/config-validator': 18.6.1
'@commitlint/types': 18.6.1
import-fresh: 3.3.0
'@commitlint/config-validator': 19.0.3
'@commitlint/types': 19.0.3
global-directory: 4.0.1
import-meta-resolve: 4.0.0
lodash.mergewith: 4.6.2
resolve-from: 5.0.0
resolve-global: 1.0.0
dev: true
optional: true
/@commitlint/types@18.6.1:
resolution: {integrity: sha512-gwRLBLra/Dozj2OywopeuHj2ac26gjGkz2cZ+86cTJOdtWfiRRr4+e77ZDAGc6MDWxaWheI+mAV5TLWWRwqrFg==}
/@commitlint/types@19.0.3:
resolution: {integrity: sha512-tpyc+7i6bPG9mvaBbtKUeghfyZSDgWquIDfMgqYtTbmZ9Y9VzEm2je9EYcQ0aoz5o7NvGS+rcDec93yO08MHYA==}
engines: {node: '>=v18'}
requiresBuild: true
dependencies:
chalk: 4.1.2
'@types/conventional-commits-parser': 5.0.0
chalk: 5.3.0
dev: true
optional: true
@ -830,7 +922,7 @@ packages:
resolution: {integrity: sha512-Oud2QPM5dHviZNn4y/WhhYKSXksv+1xLEIsNrAbGcFzUN3ubqWRFT5gwPchNc5NuzILOU4tPBDTZ4VwhL8Y7cw==}
engines: {node: '>=6.0.0'}
dependencies:
'@jridgewell/set-array': 1.1.2
'@jridgewell/set-array': 1.2.1
'@jridgewell/sourcemap-codec': 1.4.15
'@jridgewell/trace-mapping': 0.3.23
dev: true
@ -850,6 +942,11 @@ packages:
engines: {node: '>=6.0.0'}
dev: true
/@jridgewell/set-array@1.2.1:
resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==}
engines: {node: '>=6.0.0'}
dev: true
/@jridgewell/source-map@0.3.5:
resolution: {integrity: sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==}
dependencies:
@ -1221,15 +1318,23 @@ packages:
'@tauri-apps/cli-win32-x64-msvc': 1.5.9
dev: true
/@types/conventional-commits-parser@5.0.0:
resolution: {integrity: sha512-loB369iXNmAZglwWATL+WRe+CRMmmBPtpolYzIebFaX4YA3x+BEfLqhUAV9WanycKI3TG1IMr5bMJDajDKLlUQ==}
requiresBuild: true
dependencies:
'@types/node': 20.11.7
dev: true
optional: true
/@types/eslint-scope@3.7.7:
resolution: {integrity: sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==}
dependencies:
'@types/eslint': 8.56.3
'@types/eslint': 8.56.5
'@types/estree': 1.0.5
dev: true
/@types/eslint@8.56.3:
resolution: {integrity: sha512-PvSf1wfv2wJpVIFUMSb+i4PvqNYkB9Rkp9ZDO3oaWzq4SKhsQk4mrMBr3ZH06I0hKrVGLBacmgl8JM4WVjb9dg==}
/@types/eslint@8.56.5:
resolution: {integrity: sha512-u5/YPJHo1tvkSF2CE0USEkxon82Z5DBy2xR+qfyYNszpX9qcs4sT6uq2kBbj4BXY1+DBGDPnrhMZV3pKWGNukw==}
dependencies:
'@types/estree': 1.0.5
'@types/json-schema': 7.0.15
@ -1259,8 +1364,8 @@ packages:
/@types/lodash@4.14.202:
resolution: {integrity: sha512-OvlIYQK9tNneDlS0VN54LLd5uiPCBOp7gS5Z0f1mjoJYBrtStzgmJBxONW3U6OZqdtNzZPmn9BS/7WI7BFFcFQ==}
/@types/node@20.11.20:
resolution: {integrity: sha512-7/rR21OS+fq8IyHTgtLkDK949uzsa6n8BkziAKtPVpugIkO6D+/ooXMvzXxDnZrmtXVfjb1bKQafYpb8s89LOg==}
/@types/node@20.11.22:
resolution: {integrity: sha512-/G+IxWxma6V3E+pqK1tSl2Fo1kl41pK1yeCyDsgkF9WlVAme4j5ISYM2zR11bgLFJGLN5sVK40T4RJNuiZbEjA==}
dependencies:
undici-types: 5.26.5
dev: true
@ -2167,8 +2272,8 @@ packages:
engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
hasBin: true
dependencies:
caniuse-lite: 1.0.30001589
electron-to-chromium: 1.4.681
caniuse-lite: 1.0.30001591
electron-to-chromium: 1.4.687
node-releases: 2.0.14
update-browserslist-db: 1.0.13(browserslist@4.23.0)
dev: true
@ -2212,8 +2317,8 @@ packages:
resolution: {integrity: sha512-mtj5ur2FFPZcCEpXFy8ADXbDACuNFXg6mxVDqp7tqooX6l3zwm+d8EPoeOSIFRDvHs8qu7/SLFOGniULkcH2iA==}
dev: true
/caniuse-lite@1.0.30001589:
resolution: {integrity: sha512-vNQWS6kI+q6sBlHbh71IIeC+sRwK2N3EDySc/updIGhIee2x5z00J4c1242/5/d6EpEMdOnk/m+6tuk4/tcsqg==}
/caniuse-lite@1.0.30001591:
resolution: {integrity: sha512-PCzRMei/vXjJyL5mJtzNiUCKP59dm8Apqc3PH8gJkMnMXZGox93RbE76jHsmLwmIo6/3nsYIpJtx0O7u5PqFuQ==}
dev: true
/chalk@2.4.2:
@ -2609,7 +2714,7 @@ packages:
longest: 2.0.1
word-wrap: 1.2.5
optionalDependencies:
'@commitlint/load': 18.6.1(@types/node@20.11.7)(typescript@5.3.3)
'@commitlint/load': 19.0.3(@types/node@20.11.7)(typescript@5.3.3)
transitivePeerDependencies:
- '@types/node'
- typescript
@ -2769,8 +2874,8 @@ packages:
resolution: {integrity: sha512-EmFMarXeqJp9cUKu/QEciEApn0S/xRcpZWuAm32U7NgoZCimjsilKXHRO9saeEW55eHZagIDg6XTUOv32w9pjg==}
dev: true
/electron-to-chromium@1.4.681:
resolution: {integrity: sha512-1PpuqJUFWoXZ1E54m8bsLPVYwIVCRzvaL+n5cjigGga4z854abDnFRc+cTa2th4S79kyGqya/1xoR7h+Y5G5lg==}
/electron-to-chromium@1.4.687:
resolution: {integrity: sha512-Ic85cOuXSP6h7KM0AIJ2hpJ98Bo4hyTUjc4yjMbkvD+8yTxEhfK9+8exT2KKYsSjnCn2tGsKVSZwE7ZgTORQCw==}
dev: true
/emoji-regex@10.3.0:
@ -2781,8 +2886,8 @@ packages:
resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
dev: true
/enhanced-resolve@5.15.0:
resolution: {integrity: sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==}
/enhanced-resolve@5.15.1:
resolution: {integrity: sha512-3d3JRbwsCLJsYgvb6NuWEG44jjPSOMuS73L/6+7BZuoKm3W+qXnSoIYVHi8dG7Qcg4inAY4jbzkZ7MnskePeDg==}
engines: {node: '>=10.13.0'}
dependencies:
graceful-fs: 4.2.11
@ -3472,12 +3577,12 @@ packages:
path-is-absolute: 1.0.1
dev: true
/global-dirs@0.1.1:
resolution: {integrity: sha512-NknMLn7F2J7aflwFOlGdNIuCDpN3VGoSoB+aap3KABFWbHVn1TCgFC+np23J8W2BiZbjfEw3BFBycSMv1AFblg==}
engines: {node: '>=4'}
/global-directory@4.0.1:
resolution: {integrity: sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q==}
engines: {node: '>=18'}
requiresBuild: true
dependencies:
ini: 1.3.8
ini: 4.1.1
dev: true
optional: true
@ -3672,6 +3777,12 @@ packages:
resolve-from: 4.0.0
dev: true
/import-meta-resolve@4.0.0:
resolution: {integrity: sha512-okYUR7ZQPH+efeuMJGlq4f8ubUgO50kByRPyt/Cy1Io4PSRsPjxME+YlVaCOx+NIToW7hCsZNFJyTPFFKepRSA==}
requiresBuild: true
dev: true
optional: true
/imurmurhash@0.1.4:
resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==}
engines: {node: '>=0.8.19'}
@ -3692,6 +3803,13 @@ packages:
resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==}
dev: true
/ini@4.1.1:
resolution: {integrity: sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==}
engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
requiresBuild: true
dev: true
optional: true
/inquirer@6.5.2:
resolution: {integrity: sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ==}
engines: {node: '>=6.0.0'}
@ -3938,7 +4056,7 @@ packages:
resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==}
engines: {node: '>= 10.13.0'}
dependencies:
'@types/node': 20.11.20
'@types/node': 20.11.22
merge-stream: 2.0.0
supports-color: 8.1.1
dev: true
@ -4328,8 +4446,8 @@ packages:
resolution: {integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==}
dev: true
/naive-ui@2.38.0(vue@3.4.19):
resolution: {integrity: sha512-Sa1hPUSTaOBvFy5hBcdQ6ajGVqt59QHN4p6wcsC5stVo6JjQPnbRTUvWtNG3gAsLhCvHQBm9NXeJG5Ne1OFQ4Q==}
/naive-ui@2.38.1(vue@3.4.19):
resolution: {integrity: sha512-AnU1FQ7K/CbhguAX++V4kCFjk7h7RvWt4nvZPRjORMpq+fUIlzD+EcQ5Cv1VqDloNF8+eMv4Akc2Ogacc9S+5A==}
peerDependencies:
vue: ^3.0.0
dependencies:
@ -4816,15 +4934,6 @@ packages:
dev: true
optional: true
/resolve-global@1.0.0:
resolution: {integrity: sha512-zFa12V4OLtT5XUX/Q4VLvTfBf+Ok0SPc1FNGM/z9ctUdiU618qwKpWnd0CHs3+RqROfyEg/DhuHbMWYqcgljEw==}
engines: {node: '>=8'}
requiresBuild: true
dependencies:
global-dirs: 0.1.1
dev: true
optional: true
/resolve@1.22.8:
resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==}
hasBin: true
@ -5877,7 +5986,7 @@ packages:
acorn-import-assertions: 1.9.0(acorn@8.11.3)
browserslist: 4.23.0
chrome-trace-event: 1.0.3
enhanced-resolve: 5.15.0
enhanced-resolve: 5.15.1
es-module-lexer: 1.4.1
eslint-scope: 5.1.1
events: 3.3.0

View File

@ -1,5 +1,5 @@
// 跨标签页处理
const channel = new BroadcastChannel('cross-tab-msg')
/**
*
* @param type

View File

@ -4,17 +4,15 @@
class="wh-full relative z-10 bg-[--right-bg-color] color-[--icon-color]"
style="box-shadow: 0 -4px 4px var(--box-shadow-color)">
<!-- 输入框顶部选项栏 -->
<nav class="flex-between-center p-[10px_22px] select-none">
<nav class="flex-between-center p-[10px_22px_5px] select-none">
<nav class="input-options flex-y-center">
<n-popover
trigger="hover"
:show-arrow="false"
placement="bottom"
style="padding: 5px; border: 1px solid rgba(90, 90, 90, 0.3); margin-right: 16px">
style="padding: 5px; border: 1px solid rgba(90, 90, 90, 0.3)">
<template #trigger>
<div class="flex-center">
<svg class="mr-18px"><use href="#smiling-face"></use></svg>
</div>
<svg class="mr-18px"><use href="#smiling-face"></use></svg>
</template>
<span>表情</span>
</n-popover>
@ -22,7 +20,7 @@
trigger="hover"
:show-arrow="false"
placement="bottom"
style="padding: 5px; border: 1px solid rgba(90, 90, 90, 0.3); margin-right: 16px">
style="padding: 5px; border: 1px solid rgba(90, 90, 90, 0.3)">
<template #trigger>
<div class="flex-center gap-2px mr-12px">
<svg><use href="#screenshot"></use></svg>
@ -35,7 +33,7 @@
trigger="hover"
:show-arrow="false"
placement="bottom"
style="padding: 5px; border: 1px solid rgba(90, 90, 90, 0.3); margin-right: 16px">
style="padding: 5px; border: 1px solid rgba(90, 90, 90, 0.3)">
<template #trigger>
<div class="flex-center gap-2px mr-12px">
<svg><use href="#file2"></use></svg>
@ -48,11 +46,9 @@
trigger="hover"
:show-arrow="false"
placement="bottom"
style="padding: 5px; border: 1px solid rgba(90, 90, 90, 0.3); margin-right: 16px">
style="padding: 5px; border: 1px solid rgba(90, 90, 90, 0.3)">
<template #trigger>
<div class="flex-center">
<svg class="mr-18px"><use href="#photo"></use></svg>
</div>
<svg class="mr-18px"><use href="#photo"></use></svg>
</template>
<span>图片</span>
</n-popover>
@ -60,11 +56,9 @@
trigger="hover"
:show-arrow="false"
placement="bottom"
style="padding: 5px; border: 1px solid rgba(90, 90, 90, 0.3); margin-right: 16px">
style="padding: 5px; border: 1px solid rgba(90, 90, 90, 0.3)">
<template #trigger>
<div class="flex-center">
<svg class="mr-18px"><use href="#shake"></use></svg>
</div>
<svg class="mr-18px"><use href="#shake"></use></svg>
</template>
<span>窗口抖动</span>
</n-popover>
@ -72,11 +66,9 @@
trigger="hover"
:show-arrow="false"
placement="bottom"
style="padding: 5px; border: 1px solid rgba(90, 90, 90, 0.3); margin-right: 16px">
style="padding: 5px; border: 1px solid rgba(90, 90, 90, 0.3)">
<template #trigger>
<div class="flex-center">
<svg class="mr-18px"><use href="#red-packet"></use></svg>
</div>
<svg class="mr-18px"><use href="#red-packet"></use></svg>
</template>
<span>红包</span>
</n-popover>
@ -84,11 +76,9 @@
trigger="hover"
:show-arrow="false"
placement="bottom"
style="padding: 5px; border: 1px solid rgba(90, 90, 90, 0.3); margin-right: 16px">
style="padding: 5px; border: 1px solid rgba(90, 90, 90, 0.3)">
<template #trigger>
<div class="flex-center">
<svg class="mr-18px"><use href="#voice"></use></svg>
</div>
<svg class="mr-18px"><use href="#voice"></use></svg>
</template>
<span>语音信息</span>
</n-popover>
@ -100,9 +90,7 @@
placement="bottom"
style="padding: 5px; border: 1px solid rgba(90, 90, 90, 0.3)">
<template #trigger>
<div>
<svg class="w-22px h-22px cursor-pointer"><use href="#history"></use></svg>
</div>
<svg class="w-22px h-22px cursor-pointer outline-none"><use href="#history"></use></svg>
</template>
<span>聊天记录</span>
</n-popover>
@ -123,6 +111,7 @@
width: 22px;
height: 22px;
cursor: pointer;
outline: none;
&:hover {
color: #059669;
}

View File

@ -13,9 +13,7 @@
placement="bottom"
style="padding: 5px; border: 1px solid rgba(90, 90, 90, 0.3)">
<template #trigger>
<div>
<svg @click="handleClick"><use href="#phone-telephone"></use></svg>
</div>
<svg @click="handleClick"><use href="#phone-telephone"></use></svg>
</template>
<span>语言通话</span>
</n-popover>
@ -28,9 +26,7 @@
placement="bottom"
style="padding: 5px; border: 1px solid rgba(90, 90, 90, 0.3)">
<template #trigger>
<div>
<svg><use href="#video-one"></use></svg>
</div>
<svg><use href="#video-one"></use></svg>
</template>
<span>视频通话</span>
</n-popover>
@ -43,9 +39,7 @@
placement="bottom"
style="padding: 5px; border: 1px solid rgba(90, 90, 90, 0.3)">
<template #trigger>
<div>
<svg><use href="#screen-sharing"></use></svg>
</div>
<svg><use href="#screen-sharing"></use></svg>
</template>
<span>屏幕共享</span>
</n-popover>
@ -58,9 +52,7 @@
placement="bottom"
style="padding: 5px; border: 1px solid rgba(90, 90, 90, 0.3)">
<template #trigger>
<div>
<svg><use href="#remote-control"></use></svg>
</div>
<svg><use href="#remote-control"></use></svg>
</template>
<span>远程协助</span>
</n-popover>
@ -73,9 +65,7 @@
placement="bottom"
style="padding: 5px; border: 1px solid rgba(90, 90, 90, 0.3)">
<template #trigger>
<div>
<svg><use href="#launch"></use></svg>
</div>
<svg><use href="#launch"></use></svg>
</template>
<span>发起群聊</span>
</n-popover>
@ -198,6 +188,7 @@ onUnmounted(() => {
svg {
width: 22px;
height: 22px;
outline: none;
}
&:hover svg {
color: #059669;

View File

@ -42,21 +42,22 @@ export const useWindow = () => {
fileDropEnabled: isDrag
})
await webview.once('tauri://created', async () => {
console.log('创建成功')
await invoke('reset_set_window', { label }).catch((error) => {
console.error('设置窗口阴影失败:', error)
// 首先检查是否已经存在同名窗口
const isExistsWinds = WebviewWindow.getByLabel(label)
if (isExistsWinds) {
// 如果窗口已存在,则给它焦点,使其置顶
await webview.setFocus()
} else {
await webview.once('tauri://created', async () => {
await invoke('reset_set_window', { label }).catch((error) => {
console.error('设置窗口阴影失败:', error)
})
if (wantCloseWindow) {
await autoCloseWindow(wantCloseWindow)
}
})
if (wantCloseWindow) {
await autoCloseWindow(wantCloseWindow)
}
})
await webview.once('tauri://error', (e) => {
console.error(e)
})
return webview
return webview
}
}
/**

View File

@ -1,6 +0,0 @@
<template>
<main class="flex-1 bg-[--right-bg-color] h-full w-100vw">
<ActionBar />
<RouterView />
</main>
</template>

View File

@ -1,9 +1,8 @@
<template>
<div class="flex wh-full min-h-540px min-w-310px">
<Left />
<Combine v-if="isCombine" />
<Center v-else />
<Right v-if="!shrinkStatus && !isCombine" />
<Center />
<Right v-if="!shrinkStatus" />
</div>
</template>
@ -11,16 +10,10 @@
import Center from './center/index.vue'
import Left from './left/index.vue'
import Right from './right/index.vue'
import Combine from './combine/index.vue'
import Mitt from '@/utils/Bus'
import router from '@/router'
/* todo home窗口创建的时候已经设置了resizable: true,可以调整大小了,但是还是不可以调整大小 */
const shrinkStatus = ref(false)
//
const isCombine = computed(() => {
return router.currentRoute.value.path.includes('/space')
})
/**
* event默认如果没有传递值就为true所以shrinkStatus的值为false就会发生值的变化
* 因为shrinkStatus的值为false所以v-if="!shrinkStatus" 否则right组件刚开始渲染的时候不会显示

View File

@ -24,7 +24,7 @@
<div
v-for="(item, index) in itemsBottom"
:key="index"
@click="openContent(item.label, item.title)"
@click="openContent(item.title, item.label)"
class="bottom-action">
<svg class="w-22px h-22px">
<use :href="`#${item.icon}`"></use>
@ -89,7 +89,7 @@ const itemsTop = ref<TopActive>([
iconAction: 'avatar-action'
},
{
url: 'space',
url: 'dynamic',
icon: 'fire',
iconAction: 'fire-action'
}
@ -174,15 +174,22 @@ watchEffect(() => {
* */
const pageJumps = (url: string) => {
activeItem.value = url
router.push(`/${url}`)
//
if (url === 'dynamic') {
delay(async () => {
await createWebviewWindow('动态', 'dynamic', 840, 800)
}, 300)
} else {
router.push(`/${url}`)
}
}
/**
* 打开内容对应窗口
* @param label 窗口的标识
* @param title 窗口的标题
* @param label 窗口的标识
* */
const openContent = (label: string, title: string) => {
const openContent = (title: string, label: string) => {
delay(async () => {
await createWebviewWindow(title, label, 840, 600)
}, 300)

View File

@ -30,3 +30,19 @@ export const MockList = ref<MockItem[]>(
}
})
)
/* 模拟照片墙 */
const imgList = Array.from({ length: 10 }, (_, i) => {
return {
url: `${avatars}?${i}`
}
})
/* 模拟动态内容 */
export const dynamicList = Array.from({ length: 10 }, (_, i) => {
return {
id: i,
avatar: `${avatars}?${i}`,
user: `泰勒斯威夫特 ${i}`,
img: imgList
}
})

View File

@ -28,11 +28,6 @@ const routes: Array<RouteRecordRaw> = [
name: 'friendsList',
component: () => import('@/views/home-window/FriendsList.vue')
},
{
path: '/space',
name: 'space',
component: () => import('@/views/home-window/Space.vue')
},
{
path: '/searchDetails',
name: 'searchDetails',
@ -45,6 +40,11 @@ const routes: Array<RouteRecordRaw> = [
name: 'mail',
component: () => import('@/views/home-window/Mail.vue')
},
{
path: '/dynamic',
name: 'dynamic',
component: () => import('@/views/home-window/Dynamic.vue')
},
{
path: '/about',
name: 'about',

View File

@ -0,0 +1,66 @@
<template>
<!-- TODO 项目初次启动然后初次打开窗口时候这个页面的样式没有渲染出来 (nyh -> 2024-03-04 05:30:15) -->
<!-- TODO 我需要点击最左边侧边栏时候的选中样式如果是淡出弹出窗口就把图标点亮但是不用设置背景颜色然后如果关闭了对应窗口就把图标恢复原来的样式 (nyh -> 2024-03-04 05:32:03) -->
<main class="wh-full bg-[--right-bg-color]">
<ActionBar :shrink="false" :max-w="false" />
<article class="flex flex-col items-center text-color-[--text-color] wh-full bg-[--right-bg-color]">
<n-scrollbar
style="max-height: 100vh"
class="w-650px bg-[--center-bg-color] h-full p-[10px_0] box-border rounded-4px">
<n-flex justify="center">
<!-- 动态内容框 -->
<n-space
vertical
v-for="item in dynamicList"
:key="item.id"
class="w-450px h-fit rounded-8px bg-[--right-bg-color] p-10px box-border">
<n-flex>
<!-- 用户的头像和用户名以及个签 -->
<img class="w-45px h-45px bg-#ccc rounded-50% select-none" :src="item.avatar" alt="" />
<n-space vertical style="flex: 1">
<n-flex justify="space-between" align="center">
<label class="text-14px flex items-center gap-5px">
<span>泰勒斯威夫特</span>
<n-popover trigger="hover">
<template #trigger>
<svg class="w-20px h-20px color-#059669 select-none outline-none"><use href="#auth"></use></svg>
</template>
<span>著名歌手</span>
</n-popover>
</label>
<span class="text-12px color-#707070">发布于2021-01-01</span>
</n-flex>
<span class="text-12px color-#707070">个性签名</span>
</n-space>
<!-- 个签照片墙 -->
<n-space vertical>
<n-scrollbar style="max-height: 240px; user-select: none">
<n-image-group>
<n-flex>
<n-image
v-for="i in item.img"
:key="i.url"
:src="i.url"
alt=""
width="134px"
height="120px"
class="rounded-6px" />
</n-flex>
</n-image-group>
</n-scrollbar>
<n-input />
</n-space>
</n-flex>
</n-space>
</n-flex>
</n-scrollbar>
</article>
</main>
</template>
<script setup lang="ts">
import { dynamicList } from '@/mock/index.ts'
</script>

View File

@ -1,6 +0,0 @@
<template>
<div>空间</div>
</template>
<script setup lang="ts"></script>
<style scoped></style>

View File

@ -41,7 +41,7 @@
<n-scrollbar style="max-height: 120px" trigger="none">
<n-flex
vertical
v-for="item in accountOption"
v-for="(item, index) in accountOption"
:key="item.account"
@click="giveAccount(item.account, item.password)"
class="p-8px cursor-pointer hover:bg-#f3f3f3 hover: rounded-6px">