diff --git a/.npmrc b/.npmrc index 9291011..12f6b11 100644 --- a/.npmrc +++ b/.npmrc @@ -1,3 +1,3 @@ -registry=https://registry.npmmirror.com +# registry=https://registry.npmmirror.com electron_mirror=https://npmmirror.com/mirrors/electron/ electron_builder_binaries_mirror=https://npmmirror.com/mirrors/electron-builder-binaries/ diff --git a/package-lock.json b/package-lock.json index cfcaa24..551a349 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,6 +14,7 @@ "bytenode": "^1.5.7", "crypto": "^1.0.1", "electron-squirrel-startup": "^1.0.1", + "element-plus": "^2.12.0", "lodash-es": "^4.17.21", "log4js": "^6.9.1", "pinia": "^2.3.1", @@ -43,6 +44,7 @@ "eslint-plugin-import": "^2.32.0", "eslint-plugin-vue": "^10.6.0", "postcss": "^8.5.6", + "sass-embedded": "^1.89.1", "tailwindcss": "^3.4.18", "typescript": "~4.5.4", "vite": "^7.1.9", @@ -108,6 +110,22 @@ "node": ">=6.9.0" } }, + "node_modules/@bufbuild/protobuf": { + "version": "2.10.1", + "resolved": "https://registry.npmjs.org/@bufbuild/protobuf/-/protobuf-2.10.1.tgz", + "integrity": "sha512-ckS3+vyJb5qGpEYv/s1OebUHDi/xSNtfgw1wqKZo7MR9F2z+qXr0q5XagafAG/9O0QPVIUfST0smluYSTpYFkg==", + "dev": true, + "license": "(Apache-2.0 AND BSD-3-Clause)" + }, + "node_modules/@ctrl/tinycolor": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@ctrl/tinycolor/-/tinycolor-3.6.1.tgz", + "integrity": "sha512-SITSV6aIXsuVNV3f3O0f2n/cgyEDWoSqtZMYiAmcsYHydcKrOz3gUxB/iXd/Qf08+IZX4KpgNbvUdMBmWz+kcA==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, "node_modules/@electron-forge/cli": { "version": "7.10.2", "resolved": "https://registry.npmjs.org/@electron-forge/cli/-/cli-7.10.2.tgz", @@ -935,6 +953,15 @@ "node": ">=14.14" } }, + "node_modules/@element-plus/icons-vue": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@element-plus/icons-vue/-/icons-vue-2.3.2.tgz", + "integrity": "sha512-OzIuTaIfC8QXEPmJvB4Y4kw34rSXdCJzxcD1kFStBvr8bK6X1zQAYDo0CNMjojnfTqRQCJ0I7prlErcoRiET2A==", + "license": "MIT", + "peerDependencies": { + "vue": "^3.2.0" + } + }, "node_modules/@esbuild/aix-ppc64": { "version": "0.25.12", "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.12.tgz", @@ -1440,6 +1467,31 @@ "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, + "node_modules/@floating-ui/core": { + "version": "1.7.3", + "resolved": "https://registry.npmmirror.com/@floating-ui/core/-/core-1.7.3.tgz", + "integrity": "sha512-sGnvb5dmrJaKEZ+LDIpguvdX3bDlEllmv4/ClQ9awcmCZrlx5jQyyMWFM5kBI+EyNOCDDiKk8il0zeuX3Zlg/w==", + "license": "MIT", + "dependencies": { + "@floating-ui/utils": "^0.2.10" + } + }, + "node_modules/@floating-ui/dom": { + "version": "1.7.4", + "resolved": "https://registry.npmmirror.com/@floating-ui/dom/-/dom-1.7.4.tgz", + "integrity": "sha512-OOchDgh4F2CchOX94cRVqhvy7b3AFb+/rQXyswmzmGakRfkMgoWVjfnLWkRirfLEfuD4ysVW16eXzwt3jHIzKA==", + "license": "MIT", + "dependencies": { + "@floating-ui/core": "^1.7.3", + "@floating-ui/utils": "^0.2.10" + } + }, + "node_modules/@floating-ui/utils": { + "version": "0.2.10", + "resolved": "https://registry.npmmirror.com/@floating-ui/utils/-/utils-0.2.10.tgz", + "integrity": "sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==", + "license": "MIT" + }, "node_modules/@gar/promisify": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", @@ -1885,6 +1937,17 @@ "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, + "node_modules/@popperjs/core": { + "name": "@sxzz/popperjs-es", + "version": "2.11.7", + "resolved": "https://registry.npmjs.org/@sxzz/popperjs-es/-/popperjs-es-2.11.7.tgz", + "integrity": "sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/popperjs" + } + }, "node_modules/@remixicon/vue": { "version": "4.7.0", "resolved": "https://registry.npmjs.org/@remixicon/vue/-/vue-4.7.0.tgz", @@ -2647,14 +2710,12 @@ "version": "4.17.21", "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-FOvQ0YPD5NOfPgMzJihoT+Za5pdkDJWcbpuj1DjaKZIr/gxodQjY/uWEFlTNqW2ugXHUiL8lRQgw63dzKHZdeQ==", - "dev": true, "license": "MIT" }, "node_modules/@types/lodash-es": { "version": "4.17.12", "resolved": "https://registry.npmjs.org/@types/lodash-es/-/lodash-es-4.17.12.tgz", "integrity": "sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==", - "dev": true, "license": "MIT", "dependencies": { "@types/lodash": "*" @@ -3604,6 +3665,12 @@ "node": ">= 0.4" } }, + "node_modules/async-validator": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/async-validator/-/async-validator-4.2.5.tgz", + "integrity": "sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg==", + "license": "MIT" + }, "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", @@ -3864,6 +3931,13 @@ "ieee754": "^1.1.13" } }, + "node_modules/buffer-builder": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/buffer-builder/-/buffer-builder-0.2.0.tgz", + "integrity": "sha512-7VPMEPuYznPSoR21NE1zvd2Xna6c/CloiZCfcMXR1Jny6PjX0N4Nsa38zcBFo/FMK+BlA+FLKbJCQ0i2yxp+Xg==", + "dev": true, + "license": "MIT/X11" + }, "node_modules/buffer-crc32": { "version": "0.2.13", "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", @@ -4346,6 +4420,13 @@ "dev": true, "license": "MIT" }, + "node_modules/colorjs.io": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/colorjs.io/-/colorjs.io-0.5.2.tgz", + "integrity": "sha512-twmVoizEW7ylZSN32OgKdXRmo1qg+wT5/6C3xu5b9QsWzSFAhHLn2xd8ro0diCsKfCj1RdaTP/nrcW+vAoQPIw==", + "dev": true, + "license": "MIT" + }, "node_modules/combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", @@ -4520,6 +4601,12 @@ "node": ">=4.0" } }, + "node_modules/dayjs": { + "version": "1.11.19", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.19.tgz", + "integrity": "sha512-t5EcLVS6QPBNqM2z8fakk/NKel+Xzshgt8FFKAn+qwlD1pzZWxh0nVCrvFK7ZDb6XucZeF9z8C7CBWTRIVApAw==", + "license": "MIT" + }, "node_modules/debug": { "version": "4.4.3", "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", @@ -5310,6 +5397,73 @@ "node": ">= 4.0.0" } }, + "node_modules/element-plus": { + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/element-plus/-/element-plus-2.12.0.tgz", + "integrity": "sha512-M9YLSn2np9OnqrSKWsiXvGe3qnF8pd94+TScsHj1aTMCD+nSEvucXermf807qNt6hOP040le0e5Aft7E9ZfHmA==", + "license": "MIT", + "dependencies": { + "@ctrl/tinycolor": "^3.4.1", + "@element-plus/icons-vue": "^2.3.2", + "@floating-ui/dom": "^1.0.1", + "@popperjs/core": "npm:@sxzz/popperjs-es@^2.11.7", + "@types/lodash": "^4.17.20", + "@types/lodash-es": "^4.17.12", + "@vueuse/core": "^9.1.0", + "async-validator": "^4.2.5", + "dayjs": "^1.11.19", + "lodash": "^4.17.21", + "lodash-es": "^4.17.21", + "lodash-unified": "^1.0.3", + "memoize-one": "^6.0.0", + "normalize-wheel-es": "^1.2.0" + }, + "peerDependencies": { + "vue": "^3.2.0" + } + }, + "node_modules/element-plus/node_modules/@types/web-bluetooth": { + "version": "0.0.16", + "resolved": "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.16.tgz", + "integrity": "sha512-oh8q2Zc32S6gd/j50GowEjKLoOVOwHP/bWVjKJInBwQqdOYMdPrf1oVlelTlyfFK3CKxL1uahMDAr+vy8T7yMQ==", + "license": "MIT" + }, + "node_modules/element-plus/node_modules/@vueuse/core": { + "version": "9.13.0", + "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-9.13.0.tgz", + "integrity": "sha512-pujnclbeHWxxPRqXWmdkKV5OX4Wk4YeK7wusHqRwU0Q7EFusHoqNA/aPhB6KCh9hEqJkLAJo7bb0Lh9b+OIVzw==", + "license": "MIT", + "dependencies": { + "@types/web-bluetooth": "^0.0.16", + "@vueuse/metadata": "9.13.0", + "@vueuse/shared": "9.13.0", + "vue-demi": "*" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/element-plus/node_modules/@vueuse/metadata": { + "version": "9.13.0", + "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-9.13.0.tgz", + "integrity": "sha512-gdU7TKNAUVlXXLbaF+ZCfte8BjRJQWPCa2J55+7/h+yDtzw3vOoGQDRXzI6pyKyo6bXFT5/QoPE4hAknExjRLQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/element-plus/node_modules/@vueuse/shared": { + "version": "9.13.0", + "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-9.13.0.tgz", + "integrity": "sha512-UrnhU+Cnufu4S6JLCPZnkWh0WwZGUp72ktOF2DFptMlOs3TOdVv8xJN53zhHGARmVOsz5KqOls09+J1NR6sBKw==", + "license": "MIT", + "dependencies": { + "vue-demi": "*" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, "node_modules/emoji-regex": { "version": "9.2.2", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", @@ -7080,6 +7234,13 @@ "node": ">= 4" } }, + "node_modules/immutable": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.1.4.tgz", + "integrity": "sha512-p6u1bG3YSnINT5RQmx/yRZBpenIl30kVxkTLDyHLIMk0gict704Q9n+thfDI7lTRm9vXdDYutVzXhzcThxTnXA==", + "dev": true, + "license": "MIT" + }, "node_modules/import-fresh": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", @@ -8249,7 +8410,6 @@ "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true, "license": "MIT" }, "node_modules/lodash-es": { @@ -8258,6 +8418,17 @@ "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==", "license": "MIT" }, + "node_modules/lodash-unified": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/lodash-unified/-/lodash-unified-1.0.3.tgz", + "integrity": "sha512-WK9qSozxXOD7ZJQlpSqOT+om2ZfcT4yO+03FuzAHD0wF6S0l0090LRPDx3vhTTLZ8cFKpBn+IOcVXK6qOcIlfQ==", + "license": "MIT", + "peerDependencies": { + "@types/lodash-es": "*", + "lodash": "*", + "lodash-es": "*" + } + }, "node_modules/lodash.get": { "version": "4.4.2", "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", @@ -8523,6 +8694,12 @@ "node": ">=6" } }, + "node_modules/memoize-one": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-6.0.0.tgz", + "integrity": "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==", + "license": "MIT" + }, "node_modules/merge-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", @@ -8935,6 +9112,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/normalize-wheel-es": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/normalize-wheel-es/-/normalize-wheel-es-1.2.0.tgz", + "integrity": "sha512-Wj7+EJQ8mSuXr2iWfnujrimU35R2W4FAErEyTmJoJ7ucwTn2hOUSsRehMb5RSYkxXGTM7Y9QpvPmp++w5ftoJw==", + "license": "BSD-3-Clause" + }, "node_modules/npm-run-path": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", @@ -10305,6 +10488,23 @@ "queue-microtask": "^1.2.2" } }, + "node_modules/rxjs": { + "version": "7.8.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", + "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/rxjs/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true, + "license": "0BSD" + }, "node_modules/safe-array-concat": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz", @@ -10388,6 +10588,335 @@ "dev": true, "license": "MIT" }, + "node_modules/sass-embedded": { + "version": "1.89.1", + "resolved": "https://registry.npmjs.org/sass-embedded/-/sass-embedded-1.89.1.tgz", + "integrity": "sha512-alvGGlyYdkSXYKOfS/TTxUD0993EYOe3adIPtwCWEg037qe183p2dkYnbaRsCLJFKt+QoyRzhsrbCsK7sbR6MA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@bufbuild/protobuf": "^2.0.0", + "buffer-builder": "^0.2.0", + "colorjs.io": "^0.5.0", + "immutable": "^5.0.2", + "rxjs": "^7.4.0", + "supports-color": "^8.1.1", + "sync-child-process": "^1.0.2", + "varint": "^6.0.0" + }, + "bin": { + "sass": "dist/bin/sass.js" + }, + "engines": { + "node": ">=16.0.0" + }, + "optionalDependencies": { + "sass-embedded-android-arm": "1.89.1", + "sass-embedded-android-arm64": "1.89.1", + "sass-embedded-android-riscv64": "1.89.1", + "sass-embedded-android-x64": "1.89.1", + "sass-embedded-darwin-arm64": "1.89.1", + "sass-embedded-darwin-x64": "1.89.1", + "sass-embedded-linux-arm": "1.89.1", + "sass-embedded-linux-arm64": "1.89.1", + "sass-embedded-linux-musl-arm": "1.89.1", + "sass-embedded-linux-musl-arm64": "1.89.1", + "sass-embedded-linux-musl-riscv64": "1.89.1", + "sass-embedded-linux-musl-x64": "1.89.1", + "sass-embedded-linux-riscv64": "1.89.1", + "sass-embedded-linux-x64": "1.89.1", + "sass-embedded-win32-arm64": "1.89.1", + "sass-embedded-win32-x64": "1.89.1" + } + }, + "node_modules/sass-embedded-android-arm": { + "version": "1.89.1", + "resolved": "https://registry.npmjs.org/sass-embedded-android-arm/-/sass-embedded-android-arm-1.89.1.tgz", + "integrity": "sha512-wVchZSz8zbJBwwOs9/iwco/M5G3L5BaeqwUF1EC3Gtzn1BsXYUEkJfftW2HxGl4hQz2YlpR7BY1GRN817uxADA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-android-arm64": { + "version": "1.89.1", + "resolved": "https://registry.npmjs.org/sass-embedded-android-arm64/-/sass-embedded-android-arm64-1.89.1.tgz", + "integrity": "sha512-Je6x7uuJRGQdr5ziSJdaPA4NhBSO26BU/E55qiuMUZpjq2EWBEJPbNeugu/cWlCEmfqoVuxj37r8aEU+KG0H1g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-android-riscv64": { + "version": "1.89.1", + "resolved": "https://registry.npmjs.org/sass-embedded-android-riscv64/-/sass-embedded-android-riscv64-1.89.1.tgz", + "integrity": "sha512-DhWe+A4RVtpHMVaQgdzRpiczAXKPl7XhyY9USkY9Xkhv94+csTfjyuFmsUuCpKSiQDQkD+rGByfg+9yQIk/RgQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-android-x64": { + "version": "1.89.1", + "resolved": "https://registry.npmjs.org/sass-embedded-android-x64/-/sass-embedded-android-x64-1.89.1.tgz", + "integrity": "sha512-LTEzxTXrv3evPiHBmDMtJtO5tEprg7bvNOwYTjDEhE9ZCYdb70l+haIY0dVyhGxyeaBJlyvatjWOKEduPP3Lyw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-darwin-arm64": { + "version": "1.89.1", + "resolved": "https://registry.npmjs.org/sass-embedded-darwin-arm64/-/sass-embedded-darwin-arm64-1.89.1.tgz", + "integrity": "sha512-7qMO4BLdIOFMMc1M+hg5iWEjPxbPlH1XTPUCwyuXYqubz6kXkdrrtJXolNAAey/0ZOE6uXk0APugm93a/veQdQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-darwin-x64": { + "version": "1.89.1", + "resolved": "https://registry.npmjs.org/sass-embedded-darwin-x64/-/sass-embedded-darwin-x64-1.89.1.tgz", + "integrity": "sha512-Jzuws3NNx4YtDdL2/skP8BvGqMBKn26XINehwLnD2kgbh0+k+vKNWt5JDomvIuZVLsK8zWrMoRkXpk4wuHdqrw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-arm": { + "version": "1.89.1", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm/-/sass-embedded-linux-arm-1.89.1.tgz", + "integrity": "sha512-8TvFr/lh7FARtNr9mM57m7NNvtSZwnlkXtfY1D48B81Ve6GgtLqQhELNzvTcfQ0WZa0aNnVjq9XUuWLlrMDaZQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-arm64": { + "version": "1.89.1", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm64/-/sass-embedded-linux-arm64-1.89.1.tgz", + "integrity": "sha512-h967EV2armjV+Re+hHv7LaIzCOvV6DoFod9GJhXTdnPvilqs7DAPTUfN07wOqbzjlaGEnITZXzLsWAoZ1Z7tWQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-musl-arm": { + "version": "1.89.1", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-arm/-/sass-embedded-linux-musl-arm-1.89.1.tgz", + "integrity": "sha512-Tl8wDL+3qFa/AhvZZBb1OvhN1SvIsRSLaPdGP8cv3VmKKVBdlLp2zedPTlcLJpR9dG/bjtGJYGX15kWHAvZ6mQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-musl-arm64": { + "version": "1.89.1", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-arm64/-/sass-embedded-linux-musl-arm64-1.89.1.tgz", + "integrity": "sha512-l4TrsUmE3AEPy2gDThb+OQV5xSyrb807DJbkQiFtTwvtOZAAkoVl1v2QeocW0npgKjc/W7nHMiSempJe0UcV7w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-musl-riscv64": { + "version": "1.89.1", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-riscv64/-/sass-embedded-linux-musl-riscv64-1.89.1.tgz", + "integrity": "sha512-YJVZmz032U7dv4RW3u+SJGp+DQWmYWc5fX/aXzLuoL6PPUPon1/Sseaf/5YGtcuQf8RnxZBbM2nFHFVHDJfsQw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-musl-x64": { + "version": "1.89.1", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-x64/-/sass-embedded-linux-musl-x64-1.89.1.tgz", + "integrity": "sha512-67ijpk87V0VlpdVTtgnfIzRkVUMtEH79nvGctvNpk0XT6v+oxoFRljFRiYItZOxb5gRZMnvtkgaz1VHVcMrhtg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-riscv64": { + "version": "1.89.1", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-riscv64/-/sass-embedded-linux-riscv64-1.89.1.tgz", + "integrity": "sha512-SQNWy5kUvlQJUKRXFy8jS05DBik+2ERIWDxOBk+QuJYEIktlA9fKKBU8c7RkgpZFNXSXZa0W1Gy27oOFCzhhuA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-x64": { + "version": "1.89.1", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-x64/-/sass-embedded-linux-x64-1.89.1.tgz", + "integrity": "sha512-KUqGzBvTDZG6D3Pq41sCzqO1wkxM0WmxxlI7PTuVkvgciTywHf8F7mkg2alMLVZQ6APJEYtlnCGQgn4cCgYsqw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-win32-arm64": { + "version": "1.89.1", + "resolved": "https://registry.npmjs.org/sass-embedded-win32-arm64/-/sass-embedded-win32-arm64-1.89.1.tgz", + "integrity": "sha512-Lk6dYA18RasZxQhShT91G7Z2o7+F9necTNJ951a5AICsSJpTbg3tTnAGB7Rvd6xB5reQSZoXfB/zXKEKwtzaow==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-win32-x64": { + "version": "1.89.1", + "resolved": "https://registry.npmjs.org/sass-embedded-win32-x64/-/sass-embedded-win32-x64-1.89.1.tgz", + "integrity": "sha512-YlvzrzFPHd4GKa04jMfP0t2DGJHPTm7zN4GEYtaOFqeS6BoEAUY5kBNYFy7zhwKesN3kGyU/D9rz1MfLRgGv0g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, "node_modules/schema-utils": { "version": "4.3.3", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.3.tgz", @@ -11140,6 +11669,29 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/sync-child-process": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/sync-child-process/-/sync-child-process-1.0.2.tgz", + "integrity": "sha512-8lD+t2KrrScJ/7KXCSyfhT3/hRq78rC0wBFqNJXv3mZyn6hW2ypM05JmlSvtqRbeq6jqA94oHbxAr2vYsJ8vDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "sync-message-port": "^1.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/sync-message-port": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/sync-message-port/-/sync-message-port-1.1.3.tgz", + "integrity": "sha512-GTt8rSKje5FilG+wEdfCkOcLL7LWqpMlr2c3LRuKt/YXxcJ52aGSbGBAdI4L3aaqfrBt6y711El53ItyH1NWzg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16.0.0" + } + }, "node_modules/tailwindcss": { "version": "3.4.18", "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.18.tgz", @@ -11791,6 +12343,13 @@ "spdx-expression-parse": "^3.0.0" } }, + "node_modules/varint": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/varint/-/varint-6.0.0.tgz", + "integrity": "sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg==", + "dev": true, + "license": "MIT" + }, "node_modules/vite": { "version": "7.2.4", "resolved": "https://registry.npmjs.org/vite/-/vite-7.2.4.tgz", diff --git a/package.json b/package.json index fc50814..1abb5fe 100644 --- a/package.json +++ b/package.json @@ -43,6 +43,7 @@ "eslint-plugin-import": "^2.32.0", "eslint-plugin-vue": "^10.6.0", "postcss": "^8.5.6", + "sass-embedded": "^1.89.1", "tailwindcss": "^3.4.18", "typescript": "~4.5.4", "vite": "^7.1.9", @@ -54,6 +55,7 @@ "bytenode": "^1.5.7", "crypto": "^1.0.1", "electron-squirrel-startup": "^1.0.1", + "element-plus": "^2.12.0", "lodash-es": "^4.17.21", "log4js": "^6.9.1", "pinia": "^2.3.1", diff --git a/src/assets/images/channel/dy.png b/src/assets/images/channel/dy.png new file mode 100644 index 0000000..a2f1f30 Binary files /dev/null and b/src/assets/images/channel/dy.png differ diff --git a/src/assets/images/channel/fz.png b/src/assets/images/channel/fz.png new file mode 100644 index 0000000..3e994f9 Binary files /dev/null and b/src/assets/images/channel/fz.png differ diff --git a/src/assets/images/channel/mt.png b/src/assets/images/channel/mt.png new file mode 100644 index 0000000..5bfd454 Binary files /dev/null and b/src/assets/images/channel/mt.png differ diff --git a/src/assets/images/channel/pms.png b/src/assets/images/channel/pms.png new file mode 100644 index 0000000..87d2a19 Binary files /dev/null and b/src/assets/images/channel/pms.png differ diff --git a/src/assets/images/channel/qne.png b/src/assets/images/channel/qne.png new file mode 100644 index 0000000..94defab Binary files /dev/null and b/src/assets/images/channel/qne.png differ diff --git a/src/assets/images/channel/xc.png b/src/assets/images/channel/xc.png new file mode 100644 index 0000000..d36453b Binary files /dev/null and b/src/assets/images/channel/xc.png differ diff --git a/src/assets/images/rate/dy.png b/src/assets/images/rate/dy.png new file mode 100644 index 0000000..690bb4d Binary files /dev/null and b/src/assets/images/rate/dy.png differ diff --git a/src/assets/images/rate/fz.png b/src/assets/images/rate/fz.png new file mode 100644 index 0000000..6354894 Binary files /dev/null and b/src/assets/images/rate/fz.png differ diff --git a/src/assets/images/rate/mt.png b/src/assets/images/rate/mt.png new file mode 100644 index 0000000..4964150 Binary files /dev/null and b/src/assets/images/rate/mt.png differ diff --git a/src/assets/images/rate/qne.png b/src/assets/images/rate/qne.png new file mode 100644 index 0000000..6a9326f Binary files /dev/null and b/src/assets/images/rate/qne.png differ diff --git a/src/assets/images/rate/xc.png b/src/assets/images/rate/xc.png new file mode 100644 index 0000000..ac77021 Binary files /dev/null and b/src/assets/images/rate/xc.png differ diff --git a/src/electron/main/main.ts b/src/electron/main/main.ts index 7063da4..5fb1cf2 100644 --- a/src/electron/main/main.ts +++ b/src/electron/main/main.ts @@ -1,7 +1,6 @@ -import { app, BrowserWindow, ipcMain, shell } from "electron"; +import { app, BrowserWindow, ipcMain } from "electron"; import path from "node:path"; import started from "electron-squirrel-startup"; -import { TabManager } from '@modules/tab-manager' import { logger } from '@modules/logger' import "@modules/window-size"; @@ -11,14 +10,12 @@ if (started) { class AppMain { private mainWindow: BrowserWindow | null = null - private tabs: TabManager | null = null private readonly isDev = !!MAIN_WINDOW_VITE_DEV_SERVER_URL init() { this.registerLifecycle() - this.registerCommonIPC() this.registerAppIPC() - this.registerLogIPC() + // this.registerLogIPC() } private createWindow(options?: { frameless?: boolean; route?: string }): BrowserWindow { @@ -45,7 +42,6 @@ class AppMain { this.loadEntry(win, options?.route) if (this.isDev) win.webContents.openDevTools() this.mainWindow = win - this.initTabsIfNeeded(options) return win } @@ -65,17 +61,6 @@ class AppMain { }); } - private initTabsIfNeeded(options?: { frameless?: boolean; route?: string }) { - if (!this.mainWindow) return - const route = options?.route || '' - const shouldInit = !!options?.frameless || route.startsWith('/browser') - if (!shouldInit) return - this.tabs = new TabManager(this.mainWindow) - this.registerTabIPC() - this.tabs.enable?.() - this.tabs.create('about:blank') - } - private registerLifecycle() { app.on("ready", () => { this.createWindow({ frameless: false, route: '/login' }) @@ -88,23 +73,6 @@ class AppMain { }) } - private registerCommonIPC() { - ipcMain.handle('open-baidu', () => { - this.mainWindow?.loadURL("https://www.baidu.com") - }) - ipcMain.handle("external-open", (_event, url: string) => { - try { - const allowed = /^https:\/\/(www\.)?(baidu\.com|\w+[\.-]?\w+\.[a-z]{2,})(\/.*)?$/i; - if (typeof url === "string" && allowed.test(url)) { - return shell.openExternal(url); - } - throw new Error("URL not allowed"); - } catch (e) { - return Promise.reject(e); - } - }) - } - private registerAppIPC() { ipcMain.handle('app:set-frameless', async (event, route?: string) => { const old = BrowserWindow.fromWebContents(event.sender) @@ -114,19 +82,6 @@ class AppMain { }) } - private registerTabIPC() { - if (!this.tabs) return - const tabs = this.tabs - ipcMain.handle('tab:create', (_e, url?: string) => tabs.create(url)) - ipcMain.handle('tab:list', () => tabs.list()) - ipcMain.handle('tab:navigate', (_e, payload: { tabId: string; url: string }) => tabs.navigate(payload.tabId, payload.url)) - ipcMain.handle('tab:reload', (_e, tabId: string) => tabs.reload(tabId)) - ipcMain.handle('tab:back', (_e, tabId: string) => tabs.goBack(tabId)) - ipcMain.handle('tab:forward', (_e, tabId: string) => tabs.goForward(tabId)) - ipcMain.handle('tab:switch', (_e, tabId: string) => tabs.switch(tabId)) - ipcMain.handle('tab:close', (_e, tabId: string) => tabs.close(tabId)) - } - private registerLogIPC() { ipcMain.handle('log-to-main', (_e, logLevel: string, message: string) => { switch(logLevel) { diff --git a/src/electron/preload/preload.ts b/src/electron/preload/preload.ts index bcdf4b6..1c58a1c 100644 --- a/src/electron/preload/preload.ts +++ b/src/electron/preload/preload.ts @@ -2,8 +2,6 @@ import { contextBridge, ipcRenderer } from 'electron' import { IPCChannel, IPCAPI } from '@/shared/types/ipc.types' const api: IPCAPI = { - openBaidu: () => ipcRenderer.invoke('open-baidu'), - versions: process.versions, external: { @@ -66,6 +64,9 @@ const api: IPCAPI = { // 发送日志 logToMain: (logLevel: string, message: string) => ipcRenderer.send('log-to-main', logLevel, message), + + // 打开新窗口 + openNewTab: (url: string) => ipcRenderer.invoke('open-new-tab', url) } contextBridge.exposeInMainWorld('ipcAPI', api) \ No newline at end of file diff --git a/src/renderer/App.vue b/src/renderer/App.vue index 19901e1..6dd241c 100644 --- a/src/renderer/App.vue +++ b/src/renderer/App.vue @@ -1,18 +1,5 @@ - - - + diff --git a/src/renderer/views/browser/BrowserLayout.vue b/src/renderer/browser/BrowserLayout.vue similarity index 62% rename from src/renderer/views/browser/BrowserLayout.vue rename to src/renderer/browser/BrowserLayout.vue index 1548817..106a7f2 100644 --- a/src/renderer/views/browser/BrowserLayout.vue +++ b/src/renderer/browser/BrowserLayout.vue @@ -2,21 +2,39 @@
- - - + + +
-
+
{{ t.title || t.url || '新标签页' }} - +
- +
- - - - + + + +
@@ -24,6 +42,7 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/src/renderer/views/browser/README.md b/src/renderer/browser/README.md similarity index 100% rename from src/renderer/views/browser/README.md rename to src/renderer/browser/README.md diff --git a/src/renderer/components/Menus/index.vue b/src/renderer/components/Menus/index.vue index 83857b1..dc7bfba 100644 --- a/src/renderer/components/Menus/index.vue +++ b/src/renderer/components/Menus/index.vue @@ -1,12 +1,15 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/src/renderer/components/TitleSection/index.vue b/src/renderer/components/TitleSection/index.vue new file mode 100644 index 0000000..1e8daad --- /dev/null +++ b/src/renderer/components/TitleSection/index.vue @@ -0,0 +1,25 @@ + + + \ No newline at end of file diff --git a/src/renderer/constant/channel.ts b/src/renderer/constant/channel.ts new file mode 100644 index 0000000..adc5aca --- /dev/null +++ b/src/renderer/constant/channel.ts @@ -0,0 +1,46 @@ +import pms from '@assets/images/channel/pms.png' +import xc from '@assets/images/channel/xc.png' +import qne from '@assets/images/channel/qne.png' +import fz from '@assets/images/channel/fz.png' +import mt from '@assets/images/channel/mt.png' +import dy from '@assets/images/channel/dy.png' + +// 菜单列表申明 +interface Item { + id: number + name: string + icon: any +} + +export const channel: Item[] = [ + { + id: 1, + name: 'PMS', + icon: pms, + }, + { + id: 2, + name: '携程', + icon: xc, + }, + { + id: 3, + name: '去哪儿', + icon: qne, + }, + { + id: 4, + name: '飞猪', + icon: fz, + }, + { + id: 5, + name: '美团', + icon: mt, + }, + { + id: 6, + name: '抖音', + icon: dy, + } +] \ No newline at end of file diff --git a/src/renderer/constant/menus.ts b/src/renderer/constant/menus.ts index 84b63f6..144e74d 100644 --- a/src/renderer/constant/menus.ts +++ b/src/renderer/constant/menus.ts @@ -7,6 +7,7 @@ export interface MenuItem { icon: any color: string activeColor: string + url: string } export const menus: MenuItem[] = [ @@ -16,6 +17,7 @@ export const menus: MenuItem[] = [ icon: RiHomeLine, color: '#525866', activeColor: '#2B7FFF', + url: '/home', }, { id: 2, @@ -23,6 +25,7 @@ export const menus: MenuItem[] = [ icon: RiFileListLine, color: '#525866', activeColor: '#2B7FFF', + url: '/order', }, { id: 3, @@ -30,6 +33,7 @@ export const menus: MenuItem[] = [ icon: RiHotelLine, color: '#525866', activeColor: '#2B7FFF', + url: '/stock', }, { id: 4, @@ -37,6 +41,7 @@ export const menus: MenuItem[] = [ icon: RiChatQuoteLine, color: '#525866', activeColor: '#2B7FFF', + url: '/rate', }, { id: 5, @@ -44,6 +49,7 @@ export const menus: MenuItem[] = [ icon: RiBarChartBoxAiLine, color: '#525866', activeColor: '#2B7FFF', + url: '/dashboard', }, { id: 6, @@ -51,6 +57,7 @@ export const menus: MenuItem[] = [ icon: RiMoreLine, color: '#525866', activeColor: '#2B7FFF', + url: '/more', }, { id: 7, @@ -58,5 +65,6 @@ export const menus: MenuItem[] = [ icon: RiSettingsLine, color: '#525866', activeColor: '#2B7FFF', + url: '/setting', }, ] \ No newline at end of file diff --git a/src/renderer/constant/rate.ts b/src/renderer/constant/rate.ts new file mode 100644 index 0000000..736a65a --- /dev/null +++ b/src/renderer/constant/rate.ts @@ -0,0 +1,100 @@ +import xc from '@assets/images/rate/xc.png' +import qne from '@assets/images/rate/qne.png' +import fz from '@assets/images/rate/fz.png' +import mt from '@assets/images/rate/mt.png' +import dy from '@assets/images/rate/dy.png' + +// 菜单列表申明 +interface Item { + id: number + name: string + icon: any + total: number, + score: number +} + +export const channels: Item[] = [ + { + id: 1, + name: '携程', + icon: xc, + total: 110, + score: 4.5 + }, + { + id: 2, + name: '去哪儿', + icon: qne, + total: 100, + score: 4.5 + }, + { + id: 3, + name: '飞猪', + icon: fz, + total: 90, + score: 4.5 + }, + { + id: 4, + name: '美团', + icon: mt, + total: 80, + score: 4.5 + }, + { + id: 5, + name: '抖音', + icon: dy, + total: 70, + score: 4.5 + } +] + +interface ListItem { + id: number + userName: string + content: string + createTime: string + channelName: string + channelIcon: any + imageList: any[] + score: number +} + +export const commentList: ListItem[] = [ + { + id: 1, + userName: '用户98882', + content: '环境不错,温泉也很好', + createTime: '2022-11-09 16:24:30', + channelName: '携程', + channelIcon: xc, + imageList: [ + xc, + xc, + xc, + xc, + xc, + xc, + ], + score: 5, + }, + { + id: 2, + userName: '用户98882', + content: '环境不错,温泉也很好', + createTime: '2022-11-09 16:24:30', + channelName: '抖音', + channelIcon: dy, + imageList: [ + dy, + dy, + dy, + dy, + dy, + dy, + ], + score: 5, + }, +] \ No newline at end of file diff --git a/src/renderer/constant/system-config.ts b/src/renderer/constant/system-config.ts new file mode 100644 index 0000000..279d388 --- /dev/null +++ b/src/renderer/constant/system-config.ts @@ -0,0 +1,46 @@ +import { RiUserLine, RiHotelLine, RiHotelBedLine, RiSettingsLine } from '@remixicon/vue' + +// 菜单列表申明 +export interface MenuItem { + id: number + name: string + icon: any + color: string + activeColor: string + componentName: string +} + +export const systemMenus: MenuItem[] = [ + { + id: 1, + name: '账号', + icon: RiUserLine, + color: '#525866', + activeColor: '#2B7FFF', + componentName: 'AccountSetting', + }, + { + id: 2, + name: '渠道管理', + icon: RiHotelLine, + color: '#525866', + activeColor: '#2B7FFF', + componentName: 'ChannelSetting', + }, + { + id: 3, + name: '房型管理', + icon: RiHotelBedLine, + color: '#525866', + activeColor: '#2B7FFF', + componentName: 'RoomTypeSetting', + }, + { + id: 4, + name: '通用设置', + icon: RiSettingsLine, + color: '#525866', + activeColor: '#2B7FFF', + componentName: 'Version', + }, +] \ No newline at end of file diff --git a/src/renderer/env.d.ts b/src/renderer/env.d.ts index 815034a..5eea330 100644 --- a/src/renderer/env.d.ts +++ b/src/renderer/env.d.ts @@ -1,3 +1,7 @@ declare module "@store/counter"; declare module "@utils/request"; -declare module "@constant/menus"; \ No newline at end of file +declare module "@assets/images/*"; +declare module "@constant/rate"; +declare module "@constant/menus"; +declare module "@remixicon/vue"; +declare module "vue-router"; \ No newline at end of file diff --git a/src/renderer/layout/index.vue b/src/renderer/layout/index.vue index c061889..0d29669 100644 --- a/src/renderer/layout/index.vue +++ b/src/renderer/layout/index.vue @@ -1,19 +1,24 @@ - - + \ No newline at end of file diff --git a/src/renderer/main.ts b/src/renderer/main.ts index 99a7653..a7e7fab 100644 --- a/src/renderer/main.ts +++ b/src/renderer/main.ts @@ -3,7 +3,9 @@ import { createApp } from "vue"; import { createPinia } from "pinia"; import router from "./router"; import App from "./App.vue"; -import Layout from "./layout/index.vue"; +import ElementPlus from 'element-plus' +import 'element-plus/dist/index.css' +import locale from 'element-plus/es/locale/lang/zh-cn' // 创建 Vue 应用实例 const app = createApp(App); @@ -11,11 +13,12 @@ const app = createApp(App); // 使用 Pinia 状态管理 app.use(createPinia()); -// 注册 Layout 组件 -app.component('Layout', Layout); // 使用 Vue Router app.use(router); +app.use(ElementPlus, { + locale, +}) // 挂载应用到 DOM app.mount("#app"); diff --git a/src/renderer/router/index.ts b/src/renderer/router/index.ts index 80963bf..b51229c 100644 --- a/src/renderer/router/index.ts +++ b/src/renderer/router/index.ts @@ -1,4 +1,5 @@ import { createRouter, createWebHistory } from "vue-router"; +import Layout from '@/layout/index.vue' const routes = [ { @@ -9,20 +10,56 @@ const routes = [ { path: "/browser", name: "Browser", - component: () => import("@/views/browser/BrowserLayout.vue"), + component: () => import("@/browser/BrowserLayout.vue"), meta: { requiresAuth: true }, }, { - path: "/home", - name: "Home", - component: () => import("@/views/home/index.vue"), - meta: { requiresAuth: true }, - }, - { - path: "/rate", - name: "Rate", - component: () => import("@/views/rate/index.vue"), - meta: { requiresAuth: true }, + path: "/", + component: Layout, + children: [ + { + path: "home", + component: () => import("@/views/home/index.vue"), + name: "Home", + meta: { requiresAuth: true }, + }, + { + path: "stock", + name: "Stock", + component: () => import("@/views/stock/index.vue"), + meta: { requiresAuth: true }, + }, + { + path: "rate", + name: "Rate", + component: () => import("@/views/rate/index.vue"), + meta: { requiresAuth: true }, + }, + { + path: "order", + name: "Order", + component: () => import("@/views/order/index.vue"), + meta: { requiresAuth: true }, + }, + { + path: "more", + name: "More", + component: () => import("@/views/more/index.vue"), + meta: { requiresAuth: true }, + }, + { + path: "setting", + name: "Setting", + component: () => import("@/views/setting/index.vue"), + meta: { requiresAuth: true }, + }, + { + path: "/dashboard", + name: "Dashboard", + component: () => import("@/views/dashboard/index.vue"), + meta: { requiresAuth: true }, + }, + ] }, { path: "/about", @@ -34,16 +71,28 @@ const routes = [ const router = createRouter({ history: createWebHistory(), routes, + scrollBehavior(to: any, from: any, savedPosition: any) { + if (savedPosition) { + return savedPosition + } + + return { top: 0 } + }, }); -router.beforeEach((to, _from, next) => { +router.beforeEach((to: any, from: any, next: any) => { const token = localStorage.getItem("token"); if (to.meta && (to.meta as any).requiresAuth && !token) { next({ path: "/login" }); return; } - if (token && to.path !== "/home") { + if (token && to.path === "/login") { + next({ path: "/home" }); + return; + } + + if (token && to.path === "/") { next({ path: "/home" }); return; } diff --git a/src/renderer/types/PaginationProps.ts b/src/renderer/types/PaginationProps.ts new file mode 100644 index 0000000..c0e8047 --- /dev/null +++ b/src/renderer/types/PaginationProps.ts @@ -0,0 +1,12 @@ +export interface PaginationProps { + currentPage?: number + total: number + pageSize: number + pageSizes?: number[] +} + +export interface EmitsProps { + (e: 'update:currentPage', value: number): void + (e: 'update:pageSize', value: string): void + (e: 'currentChange', value: number): void +} \ No newline at end of file diff --git a/src/renderer/types/index.ts b/src/renderer/types/index.ts new file mode 100644 index 0000000..3814cd6 --- /dev/null +++ b/src/renderer/types/index.ts @@ -0,0 +1,3 @@ +import { PaginationProps, EmitsProps } from './PaginationProps' + +export { PaginationProps, EmitsProps } \ No newline at end of file diff --git a/src/renderer/views/dashboard/index.vue b/src/renderer/views/dashboard/index.vue new file mode 100644 index 0000000..d440836 --- /dev/null +++ b/src/renderer/views/dashboard/index.vue @@ -0,0 +1,7 @@ + + + diff --git a/src/renderer/views/home/index.vue b/src/renderer/views/home/index.vue index 5251661..8075179 100644 --- a/src/renderer/views/home/index.vue +++ b/src/renderer/views/home/index.vue @@ -1,15 +1,9 @@ - diff --git a/src/renderer/views/login/index.vue b/src/renderer/views/login/index.vue index d2a784c..a77cf23 100644 --- a/src/renderer/views/login/index.vue +++ b/src/renderer/views/login/index.vue @@ -1,13 +1,12 @@